cars 1.0.0a3__cp311-cp311-win_amd64.whl → 1.0.0a4__cp311-cp311-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.

Files changed (139) hide show
  1. cars/__init__.py +3 -3
  2. cars/applications/__init__.py +0 -3
  3. cars/applications/application_template.py +20 -0
  4. cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +12 -2
  5. cars/applications/auxiliary_filling/auxiliary_filling_algo.py +2 -2
  6. cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +80 -36
  7. cars/applications/dem_generation/dem_generation_algo.py +1 -1
  8. cars/applications/dem_generation/dem_generation_wrappers.py +23 -57
  9. cars/applications/dem_generation/dichotomic_generation_app.py +3 -3
  10. cars/applications/dem_generation/rasterization_app.py +100 -41
  11. cars/applications/dense_match_filling/__init__.py +1 -1
  12. cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +2 -15
  13. cars/applications/dense_match_filling/fill_disp_algo.py +32 -373
  14. cars/applications/dense_match_filling/fill_disp_wrappers.py +0 -343
  15. cars/applications/dense_match_filling/zero_padding_app.py +10 -5
  16. cars/applications/dense_matching/abstract_dense_matching_app.py +2 -1
  17. cars/applications/dense_matching/census_mccnn_sgm_app.py +38 -39
  18. cars/applications/dense_matching/cpp/dense_matching_cpp.cp311-win_amd64.dll.a +0 -0
  19. cars/applications/dense_matching/cpp/dense_matching_cpp.cp311-win_amd64.pyd +0 -0
  20. cars/applications/dense_matching/dense_matching_algo.py +48 -14
  21. cars/applications/dense_matching/dense_matching_wrappers.py +11 -3
  22. cars/applications/dense_matching/disparity_grid_algo.py +84 -62
  23. cars/applications/dense_matching/loaders/pandora_loader.py +91 -33
  24. cars/applications/dsm_filling/border_interpolation_app.py +1 -7
  25. cars/applications/dsm_filling/bulldozer_filling_app.py +2 -8
  26. cars/applications/dsm_filling/exogenous_filling_app.py +4 -9
  27. cars/applications/grid_generation/abstract_grid_generation_app.py +1 -1
  28. cars/applications/grid_generation/epipolar_grid_generation_app.py +4 -2
  29. cars/applications/grid_generation/grid_correction_app.py +4 -1
  30. cars/applications/grid_generation/grid_generation_algo.py +7 -2
  31. cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +1 -1
  32. cars/applications/ground_truth_reprojection/direct_localization_app.py +2 -2
  33. cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +2 -1
  34. cars/applications/point_cloud_fusion/abstract_pc_fusion_app.py +0 -155
  35. cars/applications/point_cloud_fusion/mapping_to_terrain_tiles_app.py +0 -658
  36. cars/applications/point_cloud_fusion/pc_fusion_algo.py +0 -1339
  37. cars/applications/point_cloud_fusion/pc_fusion_wrappers.py +0 -869
  38. cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +2 -1
  39. cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +9 -8
  40. cars/applications/point_cloud_outlier_removal/small_components_app.py +96 -267
  41. cars/applications/point_cloud_outlier_removal/statistical_app.py +116 -275
  42. cars/applications/rasterization/abstract_pc_rasterization_app.py +1 -1
  43. cars/applications/rasterization/rasterization_algo.py +18 -6
  44. cars/applications/rasterization/rasterization_wrappers.py +2 -1
  45. cars/applications/rasterization/simple_gaussian_app.py +60 -113
  46. cars/applications/resampling/abstract_resampling_app.py +1 -1
  47. cars/applications/resampling/bicubic_resampling_app.py +3 -1
  48. cars/applications/resampling/resampling_algo.py +16 -4
  49. cars/applications/resampling/resampling_wrappers.py +3 -1
  50. cars/applications/sparse_matching/abstract_sparse_matching_app.py +1 -1
  51. cars/applications/sparse_matching/sift_app.py +3 -3
  52. cars/applications/sparse_matching/sparse_matching_algo.py +3 -2
  53. cars/applications/sparse_matching/sparse_matching_wrappers.py +1 -1
  54. cars/applications/triangulation/abstract_triangulation_app.py +1 -1
  55. cars/applications/triangulation/line_of_sight_intersection_app.py +13 -11
  56. cars/applications/triangulation/pc_transform.py +552 -0
  57. cars/applications/triangulation/triangulation_algo.py +6 -4
  58. cars/applications/triangulation/triangulation_wrappers.py +1 -0
  59. cars/bundleadjustment.py +6 -6
  60. cars/cars.py +11 -9
  61. cars/core/cars_logging.py +80 -49
  62. cars/core/constants.py +0 -1
  63. cars/core/datasets.py +5 -2
  64. cars/core/geometry/abstract_geometry.py +256 -25
  65. cars/core/geometry/shareloc_geometry.py +110 -82
  66. cars/core/inputs.py +57 -19
  67. cars/core/outputs.py +1 -1
  68. cars/core/preprocessing.py +17 -3
  69. cars/core/projection.py +9 -6
  70. cars/core/tiling.py +10 -3
  71. cars/data_structures/cars_dataset.py +5 -5
  72. cars/data_structures/corresponding_tiles_tools.py +0 -103
  73. cars/data_structures/format_transformation.py +4 -1
  74. cars/devibrate.py +6 -3
  75. cars/extractroi.py +20 -21
  76. cars/orchestrator/cluster/abstract_cluster.py +15 -5
  77. cars/orchestrator/cluster/abstract_dask_cluster.py +6 -2
  78. cars/orchestrator/cluster/dask_jobqueue_utils.py +1 -1
  79. cars/orchestrator/cluster/log_wrapper.py +148 -21
  80. cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +11 -3
  81. cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +2 -2
  82. cars/orchestrator/cluster/pbs_dask_cluster.py +1 -1
  83. cars/orchestrator/cluster/sequential_cluster.py +5 -4
  84. cars/orchestrator/cluster/slurm_dask_cluster.py +1 -1
  85. cars/orchestrator/orchestrator.py +14 -3
  86. cars/orchestrator/registry/id_generator.py +1 -0
  87. cars/orchestrator/registry/saver_registry.py +2 -2
  88. cars/pipelines/conf_resolution/conf_final_resolution.json +5 -3
  89. cars/pipelines/default/default_pipeline.py +462 -1073
  90. cars/pipelines/parameters/advanced_parameters.py +74 -64
  91. cars/pipelines/parameters/advanced_parameters_constants.py +2 -5
  92. cars/pipelines/parameters/application_parameters.py +71 -0
  93. cars/pipelines/parameters/depth_map_inputs.py +0 -314
  94. cars/pipelines/parameters/dsm_inputs.py +40 -4
  95. cars/pipelines/parameters/output_parameters.py +2 -2
  96. cars/pipelines/parameters/sensor_inputs.py +30 -75
  97. cars/pipelines/parameters/sensor_inputs_constants.py +0 -2
  98. cars/pipelines/parameters/sensor_loaders/__init__.py +4 -3
  99. cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +106 -0
  100. cars/pipelines/parameters/sensor_loaders/{basic_sensor_loader.py → basic_image_loader.py} +16 -22
  101. cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +121 -0
  102. cars/pipelines/parameters/sensor_loaders/{pivot_sensor_loader.py → pivot_image_loader.py} +10 -21
  103. cars/pipelines/parameters/sensor_loaders/sensor_loader.py +4 -6
  104. cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +1 -3
  105. cars/pipelines/pipeline_template.py +1 -3
  106. cars/pipelines/unit/unit_pipeline.py +527 -1016
  107. cars/starter.py +4 -3
  108. cars-1.0.0a4.dist-info/DELVEWHEEL +2 -0
  109. {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/METADATA +135 -53
  110. {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/RECORD +115 -131
  111. cars.libs/libgcc_s_seh-1-b2494fcbd4d80cf2c98fdd5261f6d850.dll +0 -0
  112. cars.libs/libstdc++-6-e9b0d12ae0e9555bbae55e8dfd08c3f7.dll +0 -0
  113. cars.libs/libwinpthread-1-7882d1b093714ccdfaf4e0789a817792.dll +0 -0
  114. cars/applications/dense_match_filling/cpp/__init__.py +0 -0
  115. cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.cp311-win_amd64.dll.a +0 -0
  116. cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.cp311-win_amd64.pyd +0 -0
  117. cars/applications/dense_match_filling/cpp/dense_match_filling_cpp.py +0 -72
  118. cars/applications/dense_match_filling/cpp/includes/dense_match_filling.hpp +0 -46
  119. cars/applications/dense_match_filling/cpp/meson.build +0 -9
  120. cars/applications/dense_match_filling/cpp/src/bindings.cpp +0 -11
  121. cars/applications/dense_match_filling/cpp/src/dense_match_filling.cpp +0 -142
  122. cars/applications/dense_match_filling/plane_app.py +0 -556
  123. cars/applications/hole_detection/__init__.py +0 -30
  124. cars/applications/hole_detection/abstract_hole_detection_app.py +0 -125
  125. cars/applications/hole_detection/cloud_to_bbox_app.py +0 -346
  126. cars/applications/hole_detection/hole_detection_algo.py +0 -144
  127. cars/applications/hole_detection/hole_detection_wrappers.py +0 -53
  128. cars/applications/point_cloud_denoising/__init__.py +0 -29
  129. cars/applications/point_cloud_denoising/abstract_pc_denoising_app.py +0 -273
  130. cars/applications/point_cloud_fusion/__init__.py +0 -30
  131. cars/applications/point_cloud_fusion/cloud_fusion_constants.py +0 -39
  132. cars/applications/sparse_matching/pandora_sparse_matching_app.py +0 -0
  133. cars/pipelines/parameters/depth_map_inputs_constants.py +0 -25
  134. cars-1.0.0a3.dist-info/DELVEWHEEL +0 -2
  135. cars.libs/libgcc_s_seh-1-ca70890bbc5723b6d0ea31e9c9cded2b.dll +0 -0
  136. cars.libs/libstdc++-6-00ee19f73d5122a1277c137b1c218401.dll +0 -0
  137. cars.libs/libwinpthread-1-f5042e8e3d21edce20c1bc99445f551b.dll +0 -0
  138. {cars-1.0.0a3.dist-info → cars-1.0.0a4.dist-info}/WHEEL +0 -0
  139. {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, log_file):
88
+ def __init__(self, filename, mode="a", encoding=None, delay=False):
89
89
  """
90
90
  Init
91
91
  """
92
- self.sender = LogSender(log_file)
93
- logging.FileHandler.__init__(self, log_file, "a")
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
- config["loggers"][key]["handlers"].append(handler_name)
154
-
155
- def add_handler_to_logging(
156
- log_file_name, formatter, log_level, handler_name
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": "w",
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": min(numeric_level, PROFILING_LOG),
242
- "mode": "w",
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
- logging.getLogger().setLevel(min(numeric_level, PROFILING_LOG))
262
- profiling_logger.setLevel(min(numeric_level, PROFILING_LOG))
263
- # Add filter to existing logger
264
- for handler in logging.root.handlers:
265
- handler.addFilter(ProfilingFilter())
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
- handler_workers = "file_workers"
272
- add_handler_to_logging(
273
- log_file_workers,
274
- logging_config["formatters"]["workers"]["format"],
275
- min(numeric_level, logging.INFO),
276
- handler_workers,
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
- handler_workers_profiling = "file_workers_profiling"
285
- add_handler_to_logging(
286
- log_file_workers_profiling,
287
- logging_config["formatters"]["workers"]["format"],
288
- min(numeric_level, PROFILING_LOG),
289
- handler_workers_profiling,
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 = img_srs.profile["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"