cars 1.0.0rc1__cp313-cp313-musllinux_1_2_i686.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 (202) hide show
  1. cars/__init__.py +74 -0
  2. cars/applications/__init__.py +37 -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 +104 -0
  8. cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
  9. cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +630 -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 +655 -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 +1460 -0
  28. cars/applications/dense_matching/cpp/__init__.py +0 -0
  29. cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-313-i386-linux-musl.so +0 -0
  30. cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
  31. cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
  32. cars/applications/dense_matching/cpp/meson.build +9 -0
  33. cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
  34. cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
  35. cars/applications/dense_matching/dense_matching_algo.py +401 -0
  36. cars/applications/dense_matching/dense_matching_constants.py +89 -0
  37. cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
  38. cars/applications/dense_matching/disparity_grid_algo.py +588 -0
  39. cars/applications/dense_matching/loaders/__init__.py +23 -0
  40. cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
  41. cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
  42. cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
  43. cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
  44. cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
  45. cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
  46. cars/applications/dense_matching/loaders/config_mapping.json +13 -0
  47. cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
  48. cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
  49. cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
  50. cars/applications/dsm_filling/__init__.py +32 -0
  51. cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
  52. cars/applications/dsm_filling/border_interpolation_app.py +270 -0
  53. cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
  54. cars/applications/dsm_filling/bulldozer_filling_app.py +279 -0
  55. cars/applications/dsm_filling/exogenous_filling_app.py +333 -0
  56. cars/applications/grid_generation/__init__.py +30 -0
  57. cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
  58. cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
  59. cars/applications/grid_generation/grid_correction_app.py +496 -0
  60. cars/applications/grid_generation/grid_generation_algo.py +388 -0
  61. cars/applications/grid_generation/grid_generation_constants.py +46 -0
  62. cars/applications/grid_generation/transform_grid.py +88 -0
  63. cars/applications/ground_truth_reprojection/__init__.py +30 -0
  64. cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
  65. cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
  66. cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
  67. cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
  68. cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
  69. cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
  70. cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
  71. cars/applications/point_cloud_outlier_removal/small_components_app.py +527 -0
  72. cars/applications/point_cloud_outlier_removal/statistical_app.py +531 -0
  73. cars/applications/rasterization/__init__.py +30 -0
  74. cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
  75. cars/applications/rasterization/rasterization_algo.py +534 -0
  76. cars/applications/rasterization/rasterization_constants.py +38 -0
  77. cars/applications/rasterization/rasterization_wrappers.py +634 -0
  78. cars/applications/rasterization/simple_gaussian_app.py +1152 -0
  79. cars/applications/resampling/__init__.py +28 -0
  80. cars/applications/resampling/abstract_resampling_app.py +187 -0
  81. cars/applications/resampling/bicubic_resampling_app.py +762 -0
  82. cars/applications/resampling/resampling_algo.py +614 -0
  83. cars/applications/resampling/resampling_constants.py +36 -0
  84. cars/applications/resampling/resampling_wrappers.py +309 -0
  85. cars/applications/sparse_matching/__init__.py +30 -0
  86. cars/applications/sparse_matching/abstract_sparse_matching_app.py +498 -0
  87. cars/applications/sparse_matching/sift_app.py +735 -0
  88. cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
  89. cars/applications/sparse_matching/sparse_matching_constants.py +68 -0
  90. cars/applications/sparse_matching/sparse_matching_wrappers.py +238 -0
  91. cars/applications/triangulation/__init__.py +32 -0
  92. cars/applications/triangulation/abstract_triangulation_app.py +227 -0
  93. cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
  94. cars/applications/triangulation/pc_transform.py +552 -0
  95. cars/applications/triangulation/triangulation_algo.py +371 -0
  96. cars/applications/triangulation/triangulation_constants.py +38 -0
  97. cars/applications/triangulation/triangulation_wrappers.py +259 -0
  98. cars/bundleadjustment.py +757 -0
  99. cars/cars.py +177 -0
  100. cars/conf/__init__.py +23 -0
  101. cars/conf/geoid/egm96.grd +0 -0
  102. cars/conf/geoid/egm96.grd.hdr +15 -0
  103. cars/conf/input_parameters.py +156 -0
  104. cars/conf/mask_cst.py +35 -0
  105. cars/core/__init__.py +23 -0
  106. cars/core/cars_logging.py +402 -0
  107. cars/core/constants.py +191 -0
  108. cars/core/constants_disparity.py +50 -0
  109. cars/core/datasets.py +140 -0
  110. cars/core/geometry/__init__.py +27 -0
  111. cars/core/geometry/abstract_geometry.py +1119 -0
  112. cars/core/geometry/shareloc_geometry.py +598 -0
  113. cars/core/inputs.py +568 -0
  114. cars/core/outputs.py +176 -0
  115. cars/core/preprocessing.py +722 -0
  116. cars/core/projection.py +843 -0
  117. cars/core/roi_tools.py +215 -0
  118. cars/core/tiling.py +774 -0
  119. cars/core/utils.py +164 -0
  120. cars/data_structures/__init__.py +23 -0
  121. cars/data_structures/cars_dataset.py +1541 -0
  122. cars/data_structures/cars_dict.py +74 -0
  123. cars/data_structures/corresponding_tiles_tools.py +186 -0
  124. cars/data_structures/dataframe_converter.py +185 -0
  125. cars/data_structures/format_transformation.py +297 -0
  126. cars/devibrate.py +689 -0
  127. cars/extractroi.py +264 -0
  128. cars/orchestrator/__init__.py +23 -0
  129. cars/orchestrator/achievement_tracker.py +125 -0
  130. cars/orchestrator/cluster/__init__.py +37 -0
  131. cars/orchestrator/cluster/abstract_cluster.py +244 -0
  132. cars/orchestrator/cluster/abstract_dask_cluster.py +375 -0
  133. cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
  134. cars/orchestrator/cluster/dask_config/README.md +94 -0
  135. cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
  136. cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
  137. cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
  138. cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
  139. cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
  140. cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
  141. cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
  142. cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
  143. cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
  144. cars/orchestrator/cluster/local_dask_cluster.py +116 -0
  145. cars/orchestrator/cluster/log_wrapper.py +1075 -0
  146. cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
  147. cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
  148. cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
  149. cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
  150. cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
  151. cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +873 -0
  152. cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
  153. cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
  154. cars/orchestrator/cluster/sequential_cluster.py +139 -0
  155. cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
  156. cars/orchestrator/orchestrator.py +905 -0
  157. cars/orchestrator/orchestrator_constants.py +29 -0
  158. cars/orchestrator/registry/__init__.py +23 -0
  159. cars/orchestrator/registry/abstract_registry.py +143 -0
  160. cars/orchestrator/registry/compute_registry.py +106 -0
  161. cars/orchestrator/registry/id_generator.py +116 -0
  162. cars/orchestrator/registry/replacer_registry.py +213 -0
  163. cars/orchestrator/registry/saver_registry.py +363 -0
  164. cars/orchestrator/registry/unseen_registry.py +118 -0
  165. cars/orchestrator/tiles_profiler.py +279 -0
  166. cars/pipelines/__init__.py +26 -0
  167. cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
  168. cars/pipelines/conf_resolution/conf_first_resolution.yaml +2 -0
  169. cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
  170. cars/pipelines/default/__init__.py +26 -0
  171. cars/pipelines/default/default_pipeline.py +786 -0
  172. cars/pipelines/parameters/__init__.py +0 -0
  173. cars/pipelines/parameters/advanced_parameters.py +417 -0
  174. cars/pipelines/parameters/advanced_parameters_constants.py +69 -0
  175. cars/pipelines/parameters/application_parameters.py +71 -0
  176. cars/pipelines/parameters/depth_map_inputs.py +0 -0
  177. cars/pipelines/parameters/dsm_inputs.py +918 -0
  178. cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
  179. cars/pipelines/parameters/output_constants.py +52 -0
  180. cars/pipelines/parameters/output_parameters.py +454 -0
  181. cars/pipelines/parameters/sensor_inputs.py +842 -0
  182. cars/pipelines/parameters/sensor_inputs_constants.py +49 -0
  183. cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
  184. cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
  185. cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
  186. cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
  187. cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
  188. cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
  189. cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
  190. cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
  191. cars/pipelines/pipeline.py +119 -0
  192. cars/pipelines/pipeline_constants.py +31 -0
  193. cars/pipelines/pipeline_template.py +139 -0
  194. cars/pipelines/unit/__init__.py +26 -0
  195. cars/pipelines/unit/unit_pipeline.py +2850 -0
  196. cars/starter.py +167 -0
  197. cars-1.0.0rc1.dist-info/METADATA +292 -0
  198. cars-1.0.0rc1.dist-info/RECORD +202 -0
  199. cars-1.0.0rc1.dist-info/WHEEL +5 -0
  200. cars-1.0.0rc1.dist-info/entry_points.txt +8 -0
  201. cars.libs/libgcc_s-1257a076.so.1 +0 -0
  202. cars.libs/libstdc++-0530927c.so.6.0.32 +0 -0
@@ -0,0 +1,86 @@
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 ClassifSensorLoader class.
23
+ """
24
+
25
+ from json_checker import Checker
26
+
27
+ from cars.core import inputs
28
+ from cars.core.utils import make_relative_path_absolute
29
+ from cars.pipelines.parameters import sensor_inputs_constants as sens_cst
30
+ from cars.pipelines.parameters.sensor_loaders.pivot_classif_loader import (
31
+ PivotClassifSensorLoader,
32
+ )
33
+ from cars.pipelines.parameters.sensor_loaders.sensor_loader import SensorLoader
34
+ from cars.pipelines.parameters.sensor_loaders.sensor_loader_template import (
35
+ SensorLoaderTemplate,
36
+ )
37
+
38
+
39
+ @SensorLoader.register("slurp_classification")
40
+ class SlurpClassifSensorLoader(SensorLoaderTemplate):
41
+ """
42
+ SLURP sensor loader
43
+ """
44
+
45
+ def check_conf(self, conf):
46
+ """
47
+ Check configuration
48
+
49
+ :param conf: configuration to check
50
+
51
+ :return: overloaded configuration
52
+ :rtype: dict
53
+ """
54
+ if isinstance(conf, str):
55
+ overloaded_conf = {}
56
+ image_path = make_relative_path_absolute(conf, self.config_dir)
57
+ overloaded_conf[sens_cst.INPUT_PATH] = image_path
58
+ else:
59
+ raise TypeError(f"Input {conf} is not a string")
60
+
61
+ sensor_schema = {
62
+ sens_cst.INPUT_PATH: str,
63
+ }
64
+
65
+ # Check conf
66
+ checker = Checker(sensor_schema)
67
+ checker.validate(overloaded_conf)
68
+
69
+ return overloaded_conf
70
+
71
+ def set_pivot_format(self):
72
+ """
73
+ Transform input configuration to pivot format and store it
74
+ """
75
+ pivot_config = {
76
+ sens_cst.INPUT_PATH: self.used_config[sens_cst.INPUT_PATH],
77
+ }
78
+ pivot_config["values"] = inputs.rasterio_get_classif_values(
79
+ self.used_config[sens_cst.INPUT_PATH]
80
+ )
81
+ # Remove value 0 because it corresponds to unclassified data
82
+ pivot_config["values"].remove(0)
83
+ pivot_sensor_loader = PivotClassifSensorLoader(
84
+ pivot_config, self.config_dir
85
+ )
86
+ self.pivot_format = pivot_sensor_loader.get_pivot_format()
@@ -0,0 +1,119 @@
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 pipeline factory.
24
+ """
25
+
26
+ import logging
27
+ from typing import Dict, Union
28
+
29
+
30
+ class Pipeline:
31
+ """
32
+ Pipeline factory:
33
+ A class designed for registered all available Cars Pipeline and
34
+ instantiate when needed.
35
+
36
+ """
37
+
38
+ # Dict (pipeline_name:str, class: object) containing registered
39
+ # pipelines
40
+ available_pipeline = {}
41
+
42
+ def __new__(
43
+ cls,
44
+ pipeline_name: str,
45
+ cfg: Dict[str, Union[str, int]],
46
+ config_dir,
47
+ ):
48
+ """
49
+ Return the instance of pipeline associated with the pipeline
50
+ name given as parameter
51
+
52
+ :param pipeline_name: name of the pipeline.
53
+ :type pipeline_name: str
54
+ :param cfg: configuration {'matching_cost_method': value}
55
+ :type cfg: dictionary
56
+ :param config_dir: path to dir containing json or yaml file
57
+ :type config_dir: str
58
+ """
59
+
60
+ return cls.create_pipeline(pipeline_name, cfg, config_dir)
61
+
62
+ @classmethod
63
+ def create_pipeline(
64
+ cls, name: str, cfg: Dict[str, Union[str, int]], config_dir
65
+ ):
66
+ """Factory command to create the pipeline
67
+ Return the instance of pipeline associated with the pipeline
68
+ name given as parameter
69
+
70
+ :param pipeline_name: name of the pipeline.
71
+ :type pipeline_name: str
72
+ :param cfg: cars input configuration
73
+ :type cfg: dictionary
74
+ :param config_dir: path to dir containing json
75
+ :type config_dir: str
76
+ """
77
+
78
+ pipeline = None
79
+ try:
80
+ pipeline_class = cls.available_pipeline[name]
81
+
82
+ except KeyError as kerr:
83
+ logging.error("No pipeline named {0} supported".format(name))
84
+ raise NameError(
85
+ "No pipeline named {0} supported".format(name)
86
+ ) from kerr
87
+
88
+ pipeline = pipeline_class(cfg, config_dir)
89
+
90
+ return pipeline
91
+
92
+ @classmethod
93
+ def print_available_pipelines(cls):
94
+ """
95
+ Print all registered pipelines
96
+ """
97
+
98
+ for pipeline_name in cls.available_pipeline:
99
+ print(pipeline_name)
100
+
101
+ @classmethod
102
+ def register(cls, *pipeline_names: str):
103
+ """
104
+ Allows to register the pipeline with its name
105
+ :param pipeline_name: the pipelines to be registered
106
+ :type pipeline_name: string
107
+ """
108
+
109
+ def decorator(app):
110
+ """
111
+ Registers the class in the available methods
112
+ :param app: the app class to be registered
113
+ :type app: object
114
+ """
115
+ for pipeline_name in pipeline_names:
116
+ cls.available_pipeline[pipeline_name] = app
117
+ return app
118
+
119
+ return decorator
@@ -0,0 +1,31 @@
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
+ this module contains the constants used for all pipelines
23
+ """
24
+
25
+ # Sensor input
26
+
27
+ INPUT = "input"
28
+ OUTPUT = "output"
29
+ APPLICATIONS = "applications"
30
+ ADVANCED = "advanced"
31
+ ORCHESTRATOR = "orchestrator"
@@ -0,0 +1,139 @@
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
+ This module contains class pipeline template for
23
+ templating the pipeline concept.
24
+ """
25
+
26
+ from abc import ABCMeta, abstractmethod
27
+
28
+ from json_checker import Checker, OptionalKey
29
+
30
+ # CARS imports
31
+ from cars.orchestrator import orchestrator
32
+ from cars.pipelines import pipeline_constants
33
+
34
+ # Disable pylint error: too few public method
35
+
36
+
37
+ class PipelineTemplate(metaclass=ABCMeta): # pylint: disable=R0903
38
+ """
39
+ Class for general specification of an pipeline
40
+ """
41
+
42
+ def check_orchestrator(self, conf):
43
+ """
44
+ Check the configuration of orchestrator
45
+
46
+ :param conf: configuration of orchestrator
47
+ :type conf: dict
48
+ :return: overloaded orchestrator conf
49
+ :rtype: dict
50
+ """
51
+
52
+ with orchestrator.Orchestrator(
53
+ orchestrator_conf=conf, out_dir=None, launch_worker=False
54
+ ) as orchestrator_obj:
55
+ conf = orchestrator_obj.get_conf()
56
+ return conf
57
+
58
+ def check_global_schema(self, conf):
59
+ """
60
+ Check the given global configuration
61
+
62
+ :param conf: configuration
63
+ :type conf: dict
64
+ """
65
+
66
+ # Validate inputs
67
+ global_schema = {
68
+ pipeline_constants.INPUT: dict,
69
+ pipeline_constants.OUTPUT: dict,
70
+ OptionalKey(pipeline_constants.APPLICATIONS): dict,
71
+ OptionalKey(pipeline_constants.ORCHESTRATOR): dict,
72
+ OptionalKey(pipeline_constants.ADVANCED): dict,
73
+ }
74
+
75
+ checker_inputs = Checker(global_schema)
76
+ checker_inputs.validate(conf)
77
+
78
+ @abstractmethod
79
+ def check_inputs(self, conf, config_json_dir=None):
80
+ """
81
+ Check the inputs given
82
+
83
+ :param conf: configuration of inputs
84
+ :type conf: dict
85
+ :param config_json_dir: directory of used json, if
86
+ user filled paths with relative paths
87
+ :type config_json_dir: str
88
+
89
+ :return: overloader inputs
90
+ :rtype: dict
91
+ """
92
+
93
+ @abstractmethod
94
+ def check_output(self, conf):
95
+ """
96
+ Check the output given
97
+
98
+ :param conf: configuration of output
99
+ :type conf: dict
100
+
101
+ :return overloader output
102
+ :rtype : dict
103
+ """
104
+
105
+ @abstractmethod
106
+ def check_applications(self, conf, key=None, res=None, last_res=False):
107
+ """
108
+ Check the given configuration for applications
109
+
110
+ :param conf: configuration of applications
111
+ :type conf: dict
112
+ """
113
+
114
+ @abstractmethod
115
+ def run(self):
116
+ """
117
+ Run pipeline
118
+ """
119
+
120
+
121
+ def _merge_resolution_conf_rec(conf1, conf2):
122
+ """
123
+ Merge secondary configuration on primary one
124
+
125
+ :param conf1: configuration
126
+ :type conf1: dict
127
+ :param conf2: configuration
128
+ :type conf2: dict
129
+
130
+ :return: merged conf
131
+ :rtype: dict
132
+
133
+ """
134
+ for key in conf2.keys():
135
+ if key in conf1:
136
+ if isinstance(conf1[key], dict) and isinstance(conf2[key], dict):
137
+ _merge_resolution_conf_rec(conf1[key], conf2[key])
138
+ else:
139
+ conf1[key] = conf2[key]
@@ -0,0 +1,26 @@
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 unit pipeline module init file
23
+ """
24
+
25
+ # Cars imports
26
+ from cars.pipelines.unit import unit_pipeline # noqa: F401