cars 1.0.0a3__cp313-cp313-win_amd64.whl → 1.0.0a4__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of cars might be problematic. Click here for more details.
- cars/__init__.py +3 -3
- cars/applications/__init__.py +0 -3
- cars/applications/application_template.py +20 -0
- cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +12 -2
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +2 -2
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +80 -36
- cars/applications/dem_generation/dem_generation_algo.py +1 -1
- cars/applications/dem_generation/dem_generation_wrappers.py +23 -57
- cars/applications/dem_generation/dichotomic_generation_app.py +3 -3
- cars/applications/dem_generation/rasterization_app.py +100 -41
- cars/applications/dense_match_filling/__init__.py +1 -1
- cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +2 -15
- cars/applications/dense_match_filling/fill_disp_algo.py +32 -373
- cars/applications/dense_match_filling/fill_disp_wrappers.py +0 -343
- cars/applications/dense_match_filling/zero_padding_app.py +10 -5
- cars/applications/dense_matching/abstract_dense_matching_app.py +2 -1
- cars/applications/dense_matching/census_mccnn_sgm_app.py +38 -39
- cars/applications/dense_matching/cpp/dense_matching_cpp.cp313-win_amd64.dll.a +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cp313-win_amd64.pyd +0 -0
- cars/applications/dense_matching/dense_matching_algo.py +48 -14
- cars/applications/dense_matching/dense_matching_wrappers.py +11 -3
- cars/applications/dense_matching/disparity_grid_algo.py +84 -62
- cars/applications/dense_matching/loaders/pandora_loader.py +91 -33
- cars/applications/dsm_filling/border_interpolation_app.py +1 -7
- cars/applications/dsm_filling/bulldozer_filling_app.py +2 -8
- cars/applications/dsm_filling/exogenous_filling_app.py +4 -9
- cars/applications/grid_generation/abstract_grid_generation_app.py +1 -1
- cars/applications/grid_generation/epipolar_grid_generation_app.py +4 -2
- cars/applications/grid_generation/grid_correction_app.py +4 -1
- cars/applications/grid_generation/grid_generation_algo.py +7 -2
- cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +1 -1
- cars/applications/ground_truth_reprojection/direct_localization_app.py +2 -2
- cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +2 -1
- cars/applications/point_cloud_fusion/abstract_pc_fusion_app.py +0 -155
- cars/applications/point_cloud_fusion/mapping_to_terrain_tiles_app.py +0 -658
- cars/applications/point_cloud_fusion/pc_fusion_algo.py +0 -1339
- cars/applications/point_cloud_fusion/pc_fusion_wrappers.py +0 -869
- cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +2 -1
- cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +9 -8
- cars/applications/point_cloud_outlier_removal/small_components_app.py +96 -267
- cars/applications/point_cloud_outlier_removal/statistical_app.py +116 -275
- cars/applications/rasterization/abstract_pc_rasterization_app.py +1 -1
- cars/applications/rasterization/rasterization_algo.py +18 -6
- cars/applications/rasterization/rasterization_wrappers.py +2 -1
- cars/applications/rasterization/simple_gaussian_app.py +60 -113
- cars/applications/resampling/abstract_resampling_app.py +1 -1
- cars/applications/resampling/bicubic_resampling_app.py +3 -1
- cars/applications/resampling/resampling_algo.py +16 -4
- cars/applications/resampling/resampling_wrappers.py +3 -1
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +1 -1
- cars/applications/sparse_matching/sift_app.py +3 -3
- cars/applications/sparse_matching/sparse_matching_algo.py +3 -2
- cars/applications/sparse_matching/sparse_matching_wrappers.py +1 -1
- cars/applications/triangulation/abstract_triangulation_app.py +1 -1
- cars/applications/triangulation/line_of_sight_intersection_app.py +13 -11
- cars/applications/triangulation/pc_transform.py +552 -0
- cars/applications/triangulation/triangulation_algo.py +6 -4
- cars/applications/triangulation/triangulation_wrappers.py +1 -0
- cars/bundleadjustment.py +6 -6
- cars/cars.py +11 -9
- cars/core/cars_logging.py +80 -49
- cars/core/constants.py +0 -1
- cars/core/datasets.py +5 -2
- cars/core/geometry/abstract_geometry.py +256 -25
- cars/core/geometry/shareloc_geometry.py +110 -82
- cars/core/inputs.py +57 -19
- cars/core/outputs.py +1 -1
- cars/core/preprocessing.py +17 -3
- cars/core/projection.py +9 -6
- cars/core/tiling.py +10 -3
- cars/data_structures/cars_dataset.py +5 -5
- cars/data_structures/corresponding_tiles_tools.py +0 -103
- cars/data_structures/format_transformation.py +4 -1
- cars/devibrate.py +6 -3
- cars/extractroi.py +20 -21
- cars/orchestrator/cluster/abstract_cluster.py +15 -5
- cars/orchestrator/cluster/abstract_dask_cluster.py +6 -2
- cars/orchestrator/cluster/dask_jobqueue_utils.py +1 -1
- cars/orchestrator/cluster/log_wrapper.py +148 -21
- cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +11 -3
- cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +2 -2
- cars/orchestrator/cluster/pbs_dask_cluster.py +1 -1
- cars/orchestrator/cluster/sequential_cluster.py +5 -4
- cars/orchestrator/cluster/slurm_dask_cluster.py +1 -1
- cars/orchestrator/orchestrator.py +14 -3
- cars/orchestrator/registry/id_generator.py +1 -0
- cars/orchestrator/registry/saver_registry.py +2 -2
- cars/pipelines/conf_resolution/conf_final_resolution.json +5 -3
- cars/pipelines/default/default_pipeline.py +462 -1073
- cars/pipelines/parameters/advanced_parameters.py +74 -64
- cars/pipelines/parameters/advanced_parameters_constants.py +2 -5
- cars/pipelines/parameters/application_parameters.py +71 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -314
- cars/pipelines/parameters/dsm_inputs.py +40 -4
- cars/pipelines/parameters/output_parameters.py +2 -2
- cars/pipelines/parameters/sensor_inputs.py +30 -75
- cars/pipelines/parameters/sensor_inputs_constants.py +0 -2
- cars/pipelines/parameters/sensor_loaders/__init__.py +4 -3
- cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +106 -0
- cars/pipelines/parameters/sensor_loaders/{basic_sensor_loader.py → basic_image_loader.py} +16 -22
- cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +121 -0
- cars/pipelines/parameters/sensor_loaders/{pivot_sensor_loader.py → pivot_image_loader.py} +10 -21
- cars/pipelines/parameters/sensor_loaders/sensor_loader.py +4 -6
- cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +1 -3
- cars/pipelines/pipeline_template.py +1 -3
- cars/pipelines/unit/unit_pipeline.py +527 -1016
- cars/starter.py +4 -3
- cars-1.0.0a4.dist-info/DELVEWHEEL +2 -0
- {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/METADATA +135 -53
- {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/RECORD +115 -131
- cars.libs/libgcc_s_seh-1-b2494fcbd4d80cf2c98fdd5261f6d850.dll +0 -0
- cars.libs/libstdc++-6-e9b0d12ae0e9555bbae55e8dfd08c3f7.dll +0 -0
- cars.libs/libwinpthread-1-7882d1b093714ccdfaf4e0789a817792.dll +0 -0
- cars/applications/dense_match_filling/cpp/__init__.py +0 -0
- cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.cp313-win_amd64.dll.a +0 -0
- cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.cp313-win_amd64.pyd +0 -0
- cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.py +0 -72
- cars/applications/dense_match_filling/cpp/includes/dense_match_filling.hpp +0 -46
- cars/applications/dense_match_filling/cpp/meson.build +0 -9
- cars/applications/dense_match_filling/cpp/src/bindings.cpp +0 -11
- cars/applications/dense_match_filling/cpp/src/dense_match_filling.cpp +0 -142
- cars/applications/dense_match_filling/plane_app.py +0 -556
- cars/applications/hole_detection/__init__.py +0 -30
- cars/applications/hole_detection/abstract_hole_detection_app.py +0 -125
- cars/applications/hole_detection/cloud_to_bbox_app.py +0 -346
- cars/applications/hole_detection/hole_detection_algo.py +0 -144
- cars/applications/hole_detection/hole_detection_wrappers.py +0 -53
- cars/applications/point_cloud_denoising/__init__.py +0 -29
- cars/applications/point_cloud_denoising/abstract_pc_denoising_app.py +0 -273
- cars/applications/point_cloud_fusion/__init__.py +0 -30
- cars/applications/point_cloud_fusion/cloud_fusion_constants.py +0 -39
- cars/applications/sparse_matching/pandora_sparse_matching_app.py +0 -0
- cars/pipelines/parameters/depth_map_inputs_constants.py +0 -25
- cars-1.0.0a3.dist-info/DELVEWHEEL +0 -2
- cars.libs/libgcc_s_seh-1-ca70890bbc5723b6d0ea31e9c9cded2b.dll +0 -0
- cars.libs/libstdc++-6-00ee19f73d5122a1277c137b1c218401.dll +0 -0
- cars.libs/libwinpthread-1-f5042e8e3d21edce20c1bc99445f551b.dll +0 -0
- {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/WHEEL +0 -0
- {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/entry_points.txt +0 -0
cars/core/cars_logging.py
CHANGED
|
@@ -74,7 +74,7 @@ class ProfilingFilter(logging.Filter): # pylint: disable=R0903
|
|
|
74
74
|
"""
|
|
75
75
|
|
|
76
76
|
def filter(self, record):
|
|
77
|
-
"""
|
|
77
|
+
"""
|
|
78
78
|
Filter message
|
|
79
79
|
"""
|
|
80
80
|
return "PROFILING_LOG" not in record.msg
|
|
@@ -85,12 +85,12 @@ class ProfilinglHandler(logging.FileHandler): # pylint: disable=R0903
|
|
|
85
85
|
Profiling
|
|
86
86
|
"""
|
|
87
87
|
|
|
88
|
-
def __init__(self,
|
|
88
|
+
def __init__(self, filename, mode="a", encoding=None, delay=False):
|
|
89
89
|
"""
|
|
90
90
|
Init
|
|
91
91
|
"""
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
super().__init__(filename, mode, encoding, delay)
|
|
93
|
+
self.sender = LogSender(filename)
|
|
94
94
|
|
|
95
95
|
def emit(self, record):
|
|
96
96
|
"""
|
|
@@ -100,6 +100,26 @@ class ProfilinglHandler(logging.FileHandler): # pylint: disable=R0903
|
|
|
100
100
|
self.sender.write_log(self.format(record) + "\n")
|
|
101
101
|
|
|
102
102
|
|
|
103
|
+
class WorkerHandler(logging.FileHandler): # pylint: disable=R0903
|
|
104
|
+
"""
|
|
105
|
+
Profiling
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
def __init__(self, filename, mode="a", encoding=None, delay=False):
|
|
109
|
+
"""
|
|
110
|
+
Init
|
|
111
|
+
"""
|
|
112
|
+
super().__init__(filename, mode, encoding, delay)
|
|
113
|
+
self.sender = LogSender(filename)
|
|
114
|
+
|
|
115
|
+
def emit(self, record):
|
|
116
|
+
"""
|
|
117
|
+
Emit
|
|
118
|
+
"""
|
|
119
|
+
if "PROFILING" not in record.levelname:
|
|
120
|
+
self.sender.write_log(self.format(record) + "\n")
|
|
121
|
+
|
|
122
|
+
|
|
103
123
|
class LogSender: # pylint: disable=R0903
|
|
104
124
|
"""
|
|
105
125
|
LogSender
|
|
@@ -121,12 +141,13 @@ class LogSender: # pylint: disable=R0903
|
|
|
121
141
|
unlock(file)
|
|
122
142
|
|
|
123
143
|
|
|
124
|
-
def setup_logging(
|
|
144
|
+
def setup_logging( # pylint: disable=too-many-positional-arguments
|
|
125
145
|
loglevel="PROGRESS",
|
|
126
146
|
out_dir=None,
|
|
127
147
|
log_dir=None,
|
|
128
148
|
pipeline="",
|
|
129
149
|
in_worker=False,
|
|
150
|
+
global_log_file=None,
|
|
130
151
|
):
|
|
131
152
|
"""
|
|
132
153
|
Setup the CARS logging configuration
|
|
@@ -145,25 +166,16 @@ def setup_logging(
|
|
|
145
166
|
if not isinstance(numeric_level, int):
|
|
146
167
|
raise ValueError("Invalid log level: %s" % loglevel)
|
|
147
168
|
|
|
148
|
-
def add_handler_name(config, handler_name):
|
|
169
|
+
def add_handler_name(config, handler_name, filtered_logger=None):
|
|
149
170
|
"""
|
|
150
171
|
add handler name in known handlers of loggers
|
|
151
172
|
"""
|
|
152
173
|
for key in config["loggers"].keys():
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
"""
|
|
159
|
-
Add handler to logging
|
|
160
|
-
"""
|
|
161
|
-
formatter_log = logging.Formatter(formatter)
|
|
162
|
-
h_log_file = ProfilinglHandler(log_file_name)
|
|
163
|
-
h_log_file.setFormatter(formatter_log)
|
|
164
|
-
h_log_file.setLevel(log_level)
|
|
165
|
-
h_log_file.set_name(handler_name)
|
|
166
|
-
logging.getLogger().addHandler(h_log_file)
|
|
174
|
+
if filtered_logger is not None:
|
|
175
|
+
if key in filtered_logger:
|
|
176
|
+
config["loggers"][key]["handlers"].append(handler_name)
|
|
177
|
+
else:
|
|
178
|
+
config["loggers"][key]["handlers"].append(handler_name)
|
|
167
179
|
|
|
168
180
|
logging_config = {
|
|
169
181
|
"version": 1,
|
|
@@ -208,23 +220,38 @@ def setup_logging(
|
|
|
208
220
|
},
|
|
209
221
|
}
|
|
210
222
|
|
|
223
|
+
# add global log file
|
|
224
|
+
if global_log_file is not None:
|
|
225
|
+
os.makedirs(os.path.dirname(global_log_file), exist_ok=True)
|
|
226
|
+
|
|
227
|
+
handler_global_main = "file_global_main"
|
|
228
|
+
logging_config["handlers"][handler_global_main] = {
|
|
229
|
+
"class": "logging.FileHandler",
|
|
230
|
+
"filename": global_log_file,
|
|
231
|
+
"level": min(numeric_level, logging.INFO),
|
|
232
|
+
"mode": "a",
|
|
233
|
+
"formatter": "standard",
|
|
234
|
+
"filters": ["no_profiling"],
|
|
235
|
+
}
|
|
236
|
+
add_handler_name(logging_config, handler_global_main)
|
|
237
|
+
|
|
211
238
|
# add file formaters:
|
|
212
239
|
if out_dir is not None:
|
|
213
|
-
if not os.path.exists(out_dir):
|
|
214
|
-
os.makedirs(out_dir)
|
|
215
240
|
log_file = os.path.join(
|
|
216
241
|
out_dir,
|
|
217
242
|
"{}_{}.log".format(
|
|
218
243
|
datetime.now().strftime("%y-%m-%d_%Hh%Mm"), pipeline
|
|
219
244
|
),
|
|
220
245
|
)
|
|
246
|
+
os.makedirs(os.path.dirname(log_file), exist_ok=True)
|
|
221
247
|
handler_main = "file_main"
|
|
222
248
|
logging_config["handlers"][handler_main] = {
|
|
223
249
|
"class": "logging.FileHandler",
|
|
224
250
|
"filename": log_file,
|
|
225
251
|
"level": min(numeric_level, logging.INFO),
|
|
226
|
-
"mode": "
|
|
252
|
+
"mode": "a",
|
|
227
253
|
"formatter": "standard",
|
|
254
|
+
"filters": ["no_profiling"],
|
|
228
255
|
}
|
|
229
256
|
add_handler_name(logging_config, handler_main)
|
|
230
257
|
|
|
@@ -238,56 +265,60 @@ def setup_logging(
|
|
|
238
265
|
logging_config["handlers"][handler_main_profiling] = {
|
|
239
266
|
"class": "logging.FileHandler",
|
|
240
267
|
"filename": profiling_file,
|
|
241
|
-
"level":
|
|
242
|
-
"mode": "
|
|
268
|
+
"level": PROFILING_LOG,
|
|
269
|
+
"mode": "a",
|
|
243
270
|
"formatter": "standard",
|
|
244
271
|
}
|
|
245
272
|
add_handler_name(logging_config, handler_main_profiling)
|
|
246
273
|
|
|
247
274
|
if not in_worker:
|
|
248
275
|
add_handler_name(logging_config, "stdout")
|
|
249
|
-
logging.config.dictConfig(logging_config)
|
|
250
276
|
else:
|
|
251
277
|
# remove stdout as handler
|
|
252
278
|
del logging_config["handlers"]["stdout"]
|
|
253
|
-
logging.config.dictConfig(logging_config)
|
|
254
279
|
|
|
255
280
|
# add file handlers
|
|
256
|
-
if log_dir is not None:
|
|
257
|
-
if not os.path.exists(log_dir):
|
|
258
|
-
os.makedirs(log_dir)
|
|
259
281
|
|
|
260
282
|
# change level of root logger in workerss
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
283
|
+
handler_workers = "file_workers"
|
|
284
|
+
handler_workers_profiling = "file_workers_profiling"
|
|
285
|
+
logging_config["loggers"]["profiling_logger"] = {
|
|
286
|
+
"handlers": [],
|
|
287
|
+
"level": PROFILING_LOG,
|
|
288
|
+
"propagate": False,
|
|
289
|
+
}
|
|
290
|
+
|
|
266
291
|
# sett handlers
|
|
267
292
|
log_file_workers = os.path.join(
|
|
268
293
|
log_dir,
|
|
269
294
|
"workers.log",
|
|
270
295
|
)
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
296
|
+
os.makedirs(os.path.dirname(log_file_workers), exist_ok=True)
|
|
297
|
+
|
|
298
|
+
logging_config["handlers"][handler_workers] = {
|
|
299
|
+
"class": "cars.core.cars_logging.WorkerHandler",
|
|
300
|
+
"filename": log_file_workers,
|
|
301
|
+
"level": min(numeric_level, logging.INFO),
|
|
302
|
+
"formatter": "workers",
|
|
303
|
+
}
|
|
304
|
+
add_handler_name(logging_config, handler_workers)
|
|
278
305
|
|
|
279
306
|
# profiling
|
|
280
307
|
log_file_workers_profiling = os.path.join(
|
|
281
308
|
log_dir,
|
|
282
309
|
"profiling.log",
|
|
283
310
|
)
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
311
|
+
|
|
312
|
+
logging_config["handlers"][handler_workers_profiling] = {
|
|
313
|
+
"class": "cars.core.cars_logging.ProfilinglHandler",
|
|
314
|
+
"filename": log_file_workers_profiling,
|
|
315
|
+
"level": PROFILING_LOG,
|
|
316
|
+
"formatter": "workers",
|
|
317
|
+
}
|
|
318
|
+
add_handler_name(logging_config, handler_workers_profiling)
|
|
319
|
+
|
|
320
|
+
# Create config
|
|
321
|
+
logging.config.dictConfig(logging_config)
|
|
291
322
|
|
|
292
323
|
|
|
293
324
|
def add_progress_message(message):
|
cars/core/constants.py
CHANGED
|
@@ -111,7 +111,6 @@ POINT_CLOUD_SOURCE_KEY_ROOT = "source_pc"
|
|
|
111
111
|
POINT_CLOUD_COORD_EPI_GEOM_I = "coord_epi_geom_i"
|
|
112
112
|
POINT_CLOUD_COORD_EPI_GEOM_J = "coord_epi_geom_j"
|
|
113
113
|
POINT_CLOUD_ID_IM_EPI = "id_im_epi"
|
|
114
|
-
POINT_CLOUD_GLOBAL_ID = "global_id"
|
|
115
114
|
POINT_CLOUD_MATCHES = "point_cloud_matches"
|
|
116
115
|
|
|
117
116
|
# raster fields (xarray Dataset)
|
cars/core/datasets.py
CHANGED
|
@@ -32,11 +32,12 @@ import xarray as xr
|
|
|
32
32
|
|
|
33
33
|
# CARS imports
|
|
34
34
|
from cars.core import constants as cst
|
|
35
|
+
from cars.core import inputs
|
|
35
36
|
|
|
36
37
|
# TODO: refacto constants: define constants here as only concerning datasets
|
|
37
38
|
|
|
38
39
|
|
|
39
|
-
def create_im_dataset(
|
|
40
|
+
def create_im_dataset( # pylint: disable=too-many-positional-arguments
|
|
40
41
|
img: np.ndarray,
|
|
41
42
|
region: List[int],
|
|
42
43
|
largest_size: List[int],
|
|
@@ -64,7 +65,9 @@ def create_im_dataset(
|
|
|
64
65
|
if img_path is not None:
|
|
65
66
|
with rio.open(img_path) as img_srs:
|
|
66
67
|
img_crs = img_srs.profile["crs"]
|
|
67
|
-
img_transform =
|
|
68
|
+
img_transform = inputs.rasterio_get_transform(
|
|
69
|
+
img_path, convention="north"
|
|
70
|
+
)
|
|
68
71
|
|
|
69
72
|
if img_crs is None:
|
|
70
73
|
img_crs = "None"
|