cars 1.0.0rc2__cp312-cp312-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 (225) hide show
  1. cars/__init__.py +86 -0
  2. cars/applications/__init__.py +40 -0
  3. cars/applications/application.py +117 -0
  4. cars/applications/application_constants.py +29 -0
  5. cars/applications/application_template.py +146 -0
  6. cars/applications/auxiliary_filling/__init__.py +29 -0
  7. cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +105 -0
  8. cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
  9. cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +632 -0
  10. cars/applications/auxiliary_filling/auxiliary_filling_wrappers.py +90 -0
  11. cars/applications/dem_generation/__init__.py +30 -0
  12. cars/applications/dem_generation/abstract_dem_generation_app.py +116 -0
  13. cars/applications/dem_generation/bulldozer_config/base_config.yaml +42 -0
  14. cars/applications/dem_generation/bulldozer_dem_app.py +641 -0
  15. cars/applications/dem_generation/bulldozer_memory.py +55 -0
  16. cars/applications/dem_generation/dem_generation_algo.py +107 -0
  17. cars/applications/dem_generation/dem_generation_constants.py +32 -0
  18. cars/applications/dem_generation/dem_generation_wrappers.py +323 -0
  19. cars/applications/dense_match_filling/__init__.py +30 -0
  20. cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +242 -0
  21. cars/applications/dense_match_filling/fill_disp_algo.py +113 -0
  22. cars/applications/dense_match_filling/fill_disp_constants.py +39 -0
  23. cars/applications/dense_match_filling/fill_disp_wrappers.py +83 -0
  24. cars/applications/dense_match_filling/zero_padding_app.py +302 -0
  25. cars/applications/dense_matching/__init__.py +30 -0
  26. cars/applications/dense_matching/abstract_dense_matching_app.py +261 -0
  27. cars/applications/dense_matching/census_mccnn_sgm_app.py +1461 -0
  28. cars/applications/dense_matching/cpp/__init__.py +0 -0
  29. cars/applications/dense_matching/cpp/dense_matching_cpp.cp312-win_amd64.dll.a +0 -0
  30. cars/applications/dense_matching/cpp/dense_matching_cpp.cp312-win_amd64.pyd +0 -0
  31. cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
  32. cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
  33. cars/applications/dense_matching/cpp/meson.build +9 -0
  34. cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
  35. cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
  36. cars/applications/dense_matching/dense_matching_algo.py +401 -0
  37. cars/applications/dense_matching/dense_matching_constants.py +89 -0
  38. cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
  39. cars/applications/dense_matching/disparity_grid_algo.py +597 -0
  40. cars/applications/dense_matching/loaders/__init__.py +23 -0
  41. cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
  42. cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
  43. cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
  44. cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
  45. cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
  46. cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
  47. cars/applications/dense_matching/loaders/config_mapping.json +13 -0
  48. cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
  49. cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
  50. cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
  51. cars/applications/dsm_filling/__init__.py +32 -0
  52. cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
  53. cars/applications/dsm_filling/border_interpolation_app.py +278 -0
  54. cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
  55. cars/applications/dsm_filling/bulldozer_filling_app.py +288 -0
  56. cars/applications/dsm_filling/exogenous_filling_app.py +341 -0
  57. cars/applications/dsm_merging/__init__.py +28 -0
  58. cars/applications/dsm_merging/abstract_dsm_merging_app.py +101 -0
  59. cars/applications/dsm_merging/weighted_fusion_app.py +639 -0
  60. cars/applications/grid_correction/__init__.py +30 -0
  61. cars/applications/grid_correction/abstract_grid_correction_app.py +103 -0
  62. cars/applications/grid_correction/grid_correction_app.py +557 -0
  63. cars/applications/grid_generation/__init__.py +30 -0
  64. cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
  65. cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
  66. cars/applications/grid_generation/grid_generation_algo.py +388 -0
  67. cars/applications/grid_generation/grid_generation_constants.py +46 -0
  68. cars/applications/grid_generation/transform_grid.py +88 -0
  69. cars/applications/ground_truth_reprojection/__init__.py +30 -0
  70. cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
  71. cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
  72. cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
  73. cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
  74. cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
  75. cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
  76. cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
  77. cars/applications/point_cloud_outlier_removal/small_components_app.py +522 -0
  78. cars/applications/point_cloud_outlier_removal/statistical_app.py +528 -0
  79. cars/applications/rasterization/__init__.py +30 -0
  80. cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
  81. cars/applications/rasterization/rasterization_algo.py +534 -0
  82. cars/applications/rasterization/rasterization_constants.py +38 -0
  83. cars/applications/rasterization/rasterization_wrappers.py +639 -0
  84. cars/applications/rasterization/simple_gaussian_app.py +1152 -0
  85. cars/applications/resampling/__init__.py +28 -0
  86. cars/applications/resampling/abstract_resampling_app.py +187 -0
  87. cars/applications/resampling/bicubic_resampling_app.py +760 -0
  88. cars/applications/resampling/resampling_algo.py +590 -0
  89. cars/applications/resampling/resampling_constants.py +36 -0
  90. cars/applications/resampling/resampling_wrappers.py +309 -0
  91. cars/applications/sensors_subsampling/__init__.py +32 -0
  92. cars/applications/sensors_subsampling/abstract_subsampling_app.py +109 -0
  93. cars/applications/sensors_subsampling/rasterio_subsampling_app.py +420 -0
  94. cars/applications/sensors_subsampling/subsampling_algo.py +108 -0
  95. cars/applications/sparse_matching/__init__.py +30 -0
  96. cars/applications/sparse_matching/abstract_sparse_matching_app.py +599 -0
  97. cars/applications/sparse_matching/sift_app.py +724 -0
  98. cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
  99. cars/applications/sparse_matching/sparse_matching_constants.py +66 -0
  100. cars/applications/sparse_matching/sparse_matching_wrappers.py +282 -0
  101. cars/applications/triangulation/__init__.py +32 -0
  102. cars/applications/triangulation/abstract_triangulation_app.py +227 -0
  103. cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
  104. cars/applications/triangulation/pc_transform.py +552 -0
  105. cars/applications/triangulation/triangulation_algo.py +371 -0
  106. cars/applications/triangulation/triangulation_constants.py +38 -0
  107. cars/applications/triangulation/triangulation_wrappers.py +259 -0
  108. cars/bundleadjustment.py +750 -0
  109. cars/cars.py +179 -0
  110. cars/conf/__init__.py +23 -0
  111. cars/conf/geoid/egm96.grd +0 -0
  112. cars/conf/geoid/egm96.grd.hdr +15 -0
  113. cars/conf/input_parameters.py +156 -0
  114. cars/conf/mask_cst.py +35 -0
  115. cars/core/__init__.py +23 -0
  116. cars/core/cars_logging.py +402 -0
  117. cars/core/constants.py +191 -0
  118. cars/core/constants_disparity.py +50 -0
  119. cars/core/datasets.py +140 -0
  120. cars/core/geometry/__init__.py +27 -0
  121. cars/core/geometry/abstract_geometry.py +1119 -0
  122. cars/core/geometry/shareloc_geometry.py +598 -0
  123. cars/core/inputs.py +568 -0
  124. cars/core/outputs.py +176 -0
  125. cars/core/preprocessing.py +722 -0
  126. cars/core/projection.py +843 -0
  127. cars/core/roi_tools.py +215 -0
  128. cars/core/tiling.py +774 -0
  129. cars/core/utils.py +164 -0
  130. cars/data_structures/__init__.py +23 -0
  131. cars/data_structures/cars_dataset.py +1544 -0
  132. cars/data_structures/cars_dict.py +74 -0
  133. cars/data_structures/corresponding_tiles_tools.py +186 -0
  134. cars/data_structures/dataframe_converter.py +185 -0
  135. cars/data_structures/format_transformation.py +297 -0
  136. cars/devibrate.py +689 -0
  137. cars/extractroi.py +264 -0
  138. cars/orchestrator/__init__.py +23 -0
  139. cars/orchestrator/achievement_tracker.py +125 -0
  140. cars/orchestrator/cluster/__init__.py +37 -0
  141. cars/orchestrator/cluster/abstract_cluster.py +250 -0
  142. cars/orchestrator/cluster/abstract_dask_cluster.py +381 -0
  143. cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
  144. cars/orchestrator/cluster/dask_config/README.md +94 -0
  145. cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
  146. cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
  147. cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
  148. cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
  149. cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
  150. cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
  151. cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
  152. cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
  153. cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
  154. cars/orchestrator/cluster/local_dask_cluster.py +116 -0
  155. cars/orchestrator/cluster/log_wrapper.py +728 -0
  156. cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
  157. cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
  158. cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
  159. cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
  160. cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
  161. cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +986 -0
  162. cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
  163. cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
  164. cars/orchestrator/cluster/sequential_cluster.py +139 -0
  165. cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
  166. cars/orchestrator/memory_tools.py +47 -0
  167. cars/orchestrator/orchestrator.py +755 -0
  168. cars/orchestrator/orchestrator_constants.py +29 -0
  169. cars/orchestrator/registry/__init__.py +23 -0
  170. cars/orchestrator/registry/abstract_registry.py +143 -0
  171. cars/orchestrator/registry/compute_registry.py +106 -0
  172. cars/orchestrator/registry/id_generator.py +116 -0
  173. cars/orchestrator/registry/replacer_registry.py +213 -0
  174. cars/orchestrator/registry/saver_registry.py +363 -0
  175. cars/orchestrator/registry/unseen_registry.py +118 -0
  176. cars/orchestrator/tiles_profiler.py +279 -0
  177. cars/pipelines/__init__.py +26 -0
  178. cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
  179. cars/pipelines/conf_resolution/conf_first_resolution.yaml +4 -0
  180. cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
  181. cars/pipelines/default/__init__.py +26 -0
  182. cars/pipelines/default/default_pipeline.py +1088 -0
  183. cars/pipelines/filling/__init__.py +26 -0
  184. cars/pipelines/filling/filling.py +981 -0
  185. cars/pipelines/formatting/__init__.py +26 -0
  186. cars/pipelines/formatting/formatting.py +186 -0
  187. cars/pipelines/merging/__init__.py +26 -0
  188. cars/pipelines/merging/merging.py +439 -0
  189. cars/pipelines/parameters/__init__.py +0 -0
  190. cars/pipelines/parameters/advanced_parameters.py +256 -0
  191. cars/pipelines/parameters/advanced_parameters_constants.py +68 -0
  192. cars/pipelines/parameters/application_parameters.py +72 -0
  193. cars/pipelines/parameters/depth_map_inputs.py +0 -0
  194. cars/pipelines/parameters/dsm_inputs.py +349 -0
  195. cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
  196. cars/pipelines/parameters/output_constants.py +52 -0
  197. cars/pipelines/parameters/output_parameters.py +438 -0
  198. cars/pipelines/parameters/sensor_inputs.py +859 -0
  199. cars/pipelines/parameters/sensor_inputs_constants.py +51 -0
  200. cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
  201. cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
  202. cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
  203. cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
  204. cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
  205. cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
  206. cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
  207. cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
  208. cars/pipelines/pipeline.py +119 -0
  209. cars/pipelines/pipeline_constants.py +38 -0
  210. cars/pipelines/pipeline_template.py +135 -0
  211. cars/pipelines/subsampling/__init__.py +26 -0
  212. cars/pipelines/subsampling/subsampling.py +358 -0
  213. cars/pipelines/surface_modeling/__init__.py +26 -0
  214. cars/pipelines/surface_modeling/surface_modeling.py +2098 -0
  215. cars/pipelines/tie_points/__init__.py +26 -0
  216. cars/pipelines/tie_points/tie_points.py +536 -0
  217. cars/starter.py +167 -0
  218. cars-1.0.0rc2.dist-info/DELVEWHEEL +2 -0
  219. cars-1.0.0rc2.dist-info/METADATA +289 -0
  220. cars-1.0.0rc2.dist-info/RECORD +225 -0
  221. cars-1.0.0rc2.dist-info/WHEEL +4 -0
  222. cars-1.0.0rc2.dist-info/entry_points.txt +8 -0
  223. cars.libs/libgcc_s_seh-1-b2494fcbd4d80cf2c98fdd5261f6d850.dll +0 -0
  224. cars.libs/libstdc++-6-e9b0d12ae0e9555bbae55e8dfd08c3f7.dll +0 -0
  225. cars.libs/libwinpthread-1-7882d1b093714ccdfaf4e0789a817792.dll +0 -0
cars/__init__.py ADDED
@@ -0,0 +1,86 @@
1
+ #!/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ """
22
+ Cars module init file
23
+ """
24
+
25
+
26
+ # start delvewheel patch
27
+ def _delvewheel_patch_1_11_2():
28
+ import os
29
+ if os.path.isdir(libs_dir := os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir, 'cars.libs'))):
30
+ os.add_dll_directory(libs_dir)
31
+
32
+
33
+ _delvewheel_patch_1_11_2()
34
+ del _delvewheel_patch_1_11_2
35
+ # end delvewheel patch
36
+
37
+ import os
38
+ import sys
39
+ from importlib.metadata import PackageNotFoundError, version
40
+
41
+ try:
42
+ __version__ = version("cars")
43
+ except PackageNotFoundError:
44
+ # package is not installed
45
+ __version__ = "unknown"
46
+
47
+ # Standard imports
48
+ if sys.version_info < (3, 10):
49
+ from importlib_metadata import entry_points
50
+ else:
51
+ from importlib.metadata import entry_points
52
+
53
+
54
+ __author__ = "CNES"
55
+ __email__ = "cars@cnes.fr"
56
+
57
+ # Force the use of CARS dask configuration
58
+ dask_config_path = os.path.join(
59
+ os.path.dirname(__file__), "orchestrator", "cluster", "dask_config"
60
+ )
61
+ if not os.path.isdir(dask_config_path):
62
+ raise NotADirectoryError("Wrong dask config path")
63
+ os.environ["DASK_CONFIG"] = str(dask_config_path)
64
+
65
+ # Force monothread for child workers
66
+ os.environ["PANDORA_NUMBA_PARALLEL"] = str(False)
67
+ os.environ["PANDORA_NUMBA_CACHE"] = str(False)
68
+ os.environ["SHARELOC_NUMBA_PARALLEL"] = str(False)
69
+ os.environ["OMP_NUM_THREADS"] = "1"
70
+ os.environ["MKL_NUM_THREADS"] = "1"
71
+ os.environ["GDAL_NUM_THREADS"] = "1"
72
+
73
+ # Limit GDAL cache per worker to 500MB
74
+ os.environ["GDAL_CACHEMAX"] = "500"
75
+
76
+
77
+ def import_plugins() -> None:
78
+ """
79
+ Load all the registered entry points
80
+ :return: None
81
+ """
82
+ for entry_point in entry_points(group="cars.plugins"):
83
+ entry_point.load()
84
+
85
+
86
+ import_plugins()
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ """
22
+ CARS application module init file
23
+ """
24
+
25
+ # Imports needed in order to register application for Application factory
26
+ from . import auxiliary_filling # noqa: F401
27
+ from . import dem_generation # noqa: F401
28
+ from . import dense_match_filling # noqa: F401
29
+ from . import dense_matching # noqa: F401
30
+ from . import dsm_filling # noqa: F401
31
+ from . import dsm_merging # noqa: F401
32
+ from . import grid_correction # noqa: F401
33
+ from . import grid_generation # noqa: F401
34
+ from . import ground_truth_reprojection # noqa: F401
35
+ from . import point_cloud_outlier_removal # noqa: F401
36
+ from . import rasterization # noqa: F401
37
+ from . import resampling # noqa: F401
38
+ from . import sensors_subsampling # noqa: F401
39
+ from . import sparse_matching # noqa: F401
40
+ from . import triangulation # noqa: F401
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+
22
+ """
23
+ This module contains class application factory.
24
+ """
25
+
26
+ # Standard imports
27
+ import logging
28
+
29
+ from cars.applications.application_template import ScalingApplicationTemplate
30
+
31
+ # CARS imports
32
+ from cars.conf.input_parameters import ConfigType
33
+
34
+
35
+ class Application:
36
+ """
37
+ Application factory:
38
+ A class designed for registered all available Cars application and
39
+ instantiate when needed.
40
+
41
+ """
42
+
43
+ # Dict (application_name:str, class: object) containing registered
44
+ # applications
45
+ available_applications = {}
46
+
47
+ def __new__(
48
+ cls,
49
+ app_name: str,
50
+ cfg: ConfigType = None,
51
+ scaling_coeff: float = 1,
52
+ ):
53
+ """
54
+ Return the instance of application associated with the application
55
+ name given as parameter
56
+
57
+ :param app_name: name of the application.
58
+ :type app_name: str
59
+ :param cfg: configuration {'matching_cost_method': value}
60
+ :type cfg: dictionary
61
+ :param scaling_coeff: scaling factor for resolution
62
+ :type scaling_coeff: float
63
+ """
64
+
65
+ return cls.create_app(app_name, cfg, scaling_coeff)
66
+
67
+ @classmethod
68
+ def create_app(cls, name: str, cfg: ConfigType, scaling_coeff: float = 1):
69
+ """Factory command to create the application
70
+ Return the instance of application associated with the application
71
+ name given as parameter
72
+
73
+ :param app_name: name of the application.
74
+ :type app_name: str
75
+ :param cfg: configuration {'matching_cost_method': value}
76
+ :type cfg: dictionary
77
+ :param scaling_coeff: scaling factor for resolution
78
+ :type scaling_coeff: float
79
+ """
80
+ try:
81
+ app_class = cls.available_applications[name]
82
+ except KeyError:
83
+ logging.error("No application named {0} supported".format(name))
84
+ return None
85
+
86
+ if issubclass(app_class, ScalingApplicationTemplate):
87
+ return app_class(scaling_coeff=scaling_coeff, conf=cfg)
88
+
89
+ return app_class(conf=cfg)
90
+
91
+ @classmethod
92
+ def print_applications(cls):
93
+ """
94
+ Print all registered applications
95
+ """
96
+
97
+ for app_name in cls.available_applications:
98
+ print(app_name)
99
+
100
+ @classmethod
101
+ def register(cls, app_name: str):
102
+ """
103
+ Allows to register the application with its name
104
+ :param app_name: the application to be registered
105
+ :type app_name: string
106
+ """
107
+
108
+ def decorator(app):
109
+ """
110
+ Registers the class in the available methods
111
+ :param app: the app class to be registered
112
+ :type app: object
113
+ """
114
+ cls.available_applications[app_name] = app
115
+ return app
116
+
117
+ return decorator
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ """
22
+ application_constants contains constants used in application module
23
+ """
24
+
25
+
26
+ APPLICATION_TAG = "applications"
27
+
28
+ # common parameters
29
+ SAVE_INTERMEDIATE_DATA = "save_intermediate_data"
@@ -0,0 +1,146 @@
1
+ #!/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2020 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+
22
+ """
23
+ This module contains class application template for
24
+ templating the application concept.
25
+ Useful for shared parameters and functions in all applications
26
+ Beware: argument-differ is activated in pylintrc for run parameters different
27
+ in sub application classes
28
+ """
29
+
30
+ # Standard imports
31
+ import logging
32
+ import os
33
+ import pprint
34
+ from abc import ABCMeta, abstractmethod
35
+
36
+ # CARS imports
37
+ from cars.conf.input_parameters import ConfigType
38
+
39
+
40
+ class ApplicationTemplate(metaclass=ABCMeta):
41
+ """
42
+ Class for general specification of an application
43
+ Empty for the moment because there is no any common method or function
44
+ """
45
+
46
+ # Define abstract attributes
47
+ used_config: ConfigType
48
+
49
+ @abstractmethod
50
+ def run(self, *args, **kwargs):
51
+ """
52
+ Generic run() function to be defined in subclasses
53
+ """
54
+
55
+ def __init__(self, conf=None): # pylint: disable=W0613
56
+ """
57
+ Init function of ApplicationTemplate
58
+
59
+ :param conf: configuration for application
60
+
61
+ """
62
+ # Check conf
63
+ try:
64
+ self.used_config = self.check_conf(conf)
65
+ except Exception:
66
+ logging.error(
67
+ "The {} application checking has been failed!".format(
68
+ self.__class__.__bases__[0].__name__
69
+ )
70
+ )
71
+ raise
72
+
73
+ @abstractmethod
74
+ def check_conf(self, conf):
75
+ """
76
+ Check configuration
77
+
78
+ :param conf: configuration to check
79
+ :type conf: dict
80
+
81
+ :return: overloaded configuration
82
+ :rtype: dict
83
+
84
+ """
85
+
86
+ def print_config(self):
87
+ """
88
+ Print used application configuration
89
+
90
+ """
91
+ pretty_printer = pprint.PrettyPrinter(indent=4)
92
+
93
+ try:
94
+ pretty_printer.pprint(self.used_config)
95
+ except Exception:
96
+ logging.error("self.used_config not filled by application")
97
+
98
+ def get_conf(self):
99
+ """
100
+ Get used conf
101
+
102
+ :return: used conf
103
+ """
104
+
105
+ return self.used_config
106
+
107
+ def generate_unknown_dump_dir(self, orchestrator):
108
+ """
109
+ Generate dump dir from orchestrator
110
+
111
+ :param orchestrator: orchestrator
112
+
113
+ :return: dump dir
114
+ """
115
+
116
+ dump_dir = None
117
+ if orchestrator is not None:
118
+ orch_out_dir = orchestrator.out_dir
119
+ dump_dir = os.path.join(
120
+ orch_out_dir,
121
+ "unknown_dump",
122
+ self.__class__.__bases__[0].__name__,
123
+ )
124
+ return dump_dir
125
+
126
+
127
+ class ScalingApplicationTemplate(ApplicationTemplate, metaclass=ABCMeta):
128
+ """
129
+ Template for applications requiring resolution scaling.
130
+
131
+ Inherits from ApplicationTemplate and adds the scaling coefficient
132
+ as a required argument.
133
+ """
134
+
135
+ def __init__(self, scaling_coeff, conf=None):
136
+ """
137
+ Init function of ScalingApplicationTemplate
138
+
139
+ :param scaling_coeff: scaling factor for resolution
140
+ :type scaling_coeff: float
141
+
142
+ :param conf: configuration for application
143
+ :type conf: dict
144
+ """
145
+ self.scaling_coeff = scaling_coeff
146
+ super().__init__(conf=conf)
@@ -0,0 +1,29 @@
1
+ # !/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2024 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ """
22
+ CARS auxiliary filling module init file
23
+ """
24
+ # flake8: noqa: F401
25
+
26
+ import cars.applications.auxiliary_filling.abstract_auxiliary_filling_app
27
+ from cars.applications.auxiliary_filling.auxiliary_filling_from_sensors_app import ( # pylint: disable=C0301
28
+ AuxiliaryFilling,
29
+ )
@@ -0,0 +1,105 @@
1
+ # !/usr/bin/env python
2
+ # coding: utf8
3
+ #
4
+ # Copyright (c) 2024 Centre National d'Etudes Spatiales (CNES).
5
+ #
6
+ # This file is part of CARS
7
+ # (see https://github.com/CNES/cars).
8
+ #
9
+ # Licensed under the Apache License, Version 2.0 (the "License");
10
+ # you may not use this file except in compliance with the License.
11
+ # You may obtain a copy of the License at
12
+ #
13
+ # http://www.apache.org/licenses/LICENSE-2.0
14
+ #
15
+ # Unless required by applicable law or agreed to in writing, software
16
+ # distributed under the License is distributed on an "AS IS" BASIS,
17
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18
+ # See the License for the specific language governing permissions and
19
+ # limitations under the License.
20
+ #
21
+ """
22
+ this module contains the abstract AuxiliaryFilling application class.
23
+ """
24
+
25
+ import logging
26
+ from abc import ABCMeta, abstractmethod
27
+ from typing import Dict
28
+
29
+ from cars.applications.application import Application
30
+ from cars.applications.application_template import ApplicationTemplate
31
+
32
+
33
+ @Application.register("auxiliary_filling")
34
+ class AuxiliaryFilling(ApplicationTemplate, metaclass=ABCMeta):
35
+ """
36
+ AuxiliaryFilling abstract class
37
+ """
38
+
39
+ available_applications: Dict = {}
40
+ default_application = "auxiliary_filling_from_sensors"
41
+
42
+ def __new__(cls, conf=None): # pylint: disable=W0613
43
+ """
44
+ Return the required application
45
+ :raises:
46
+ - KeyError when the required application is not registered
47
+
48
+ :param conf: configuration for auxiliary_filling
49
+ :return: an application_to_use object
50
+ """
51
+
52
+ auxiliary_filling_method = cls.default_application
53
+
54
+ if bool(conf) is False or "method" not in conf:
55
+ logging.info(
56
+ "Auxiliary filling method not specified, "
57
+ "default {} is used".format(auxiliary_filling_method)
58
+ )
59
+ else:
60
+ auxiliary_filling_method = conf["method"]
61
+
62
+ if auxiliary_filling_method not in cls.available_applications:
63
+ logging.error(
64
+ "No auxiliary_filling application named {} registered".format(
65
+ auxiliary_filling_method
66
+ )
67
+ )
68
+ raise KeyError(
69
+ "No auxiliary_filling application named {} registered".format(
70
+ auxiliary_filling_method
71
+ )
72
+ )
73
+
74
+ logging.info(
75
+ "The AuxiliaryFilling({}) application will be used".format(
76
+ auxiliary_filling_method
77
+ )
78
+ )
79
+
80
+ return super(AuxiliaryFilling, cls).__new__(
81
+ cls.available_applications[auxiliary_filling_method]
82
+ )
83
+
84
+ def __init_subclass__(cls, short_name, **kwargs): # pylint: disable=E0302
85
+ super().__init_subclass__(**kwargs)
86
+ cls.available_applications[short_name] = cls
87
+
88
+ @abstractmethod
89
+ def run( # pylint: disable=too-many-positional-arguments
90
+ self,
91
+ dsm_file,
92
+ color_file,
93
+ classif_file,
94
+ dump_dir,
95
+ sensor_inputs,
96
+ pairing,
97
+ geom_plugin,
98
+ texture_bands,
99
+ output_geoid,
100
+ orchestrator=None,
101
+ dsm_dir=None,
102
+ ):
103
+ """
104
+ Run Auxiliary filling
105
+ """