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
@@ -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
+ this module contains the orchestrator constants
23
+ """
24
+
25
+
26
+ CARS_DATASET_KEY = "cars_ds_key"
27
+ SAVING_INFO = "saving_info"
28
+ CARS_DS_ROW = "cars_ds_row"
29
+ CARS_DS_COL = "cars_ds_col"
@@ -0,0 +1,23 @@
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 registry module init file
23
+ """
@@ -0,0 +1,143 @@
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 abstract registry class
23
+ """
24
+
25
+ import logging
26
+ from abc import abstractmethod
27
+
28
+ # CARS imports
29
+ from cars.orchestrator.orchestrator_constants import (
30
+ CARS_DATASET_KEY,
31
+ CARS_DS_COL,
32
+ CARS_DS_ROW,
33
+ SAVING_INFO,
34
+ )
35
+
36
+
37
+ class AbstractCarsDatasetRegistry:
38
+ """
39
+ AbstractCarsDatasetRegistry
40
+ This is the abstract class of registries, managing delayed CarsDatasets
41
+
42
+ """
43
+
44
+ def __init__(self, id_generator):
45
+ """
46
+ Init function of AbstractCarsDatasetRegistry
47
+
48
+ :param id_generator: id generator
49
+ :type id_generator: IdGenerator
50
+
51
+ """
52
+
53
+ self.id_generator = id_generator
54
+ self.id_generator.add_registry(self)
55
+
56
+ @abstractmethod
57
+ def cars_dataset_in_registry(self, cars_ds):
58
+ """
59
+ Check if a CarsDataset is already registered, return id if exists
60
+
61
+ :param cars_ds: cars dataset
62
+ :type cars_ds: CarsDataset
63
+
64
+ :return : True if in registry, if of cars dataset
65
+ :rtype : Tuple(bool, int)
66
+ """
67
+
68
+ @abstractmethod
69
+ def get_cars_datasets_list(self):
70
+ """
71
+ Get a list of registered CarsDataset
72
+
73
+ :return list of CarsDataset
74
+ :rtype: list(CarsDataset)
75
+ """
76
+
77
+ @abstractmethod
78
+ def get_cars_ds(self, future_result):
79
+ """
80
+ Get a list of registered CarsDataset
81
+
82
+ :param future_result: object to get cars dataset from
83
+
84
+ :return corresponding CarsDataset
85
+ :rtype: CarsDataset
86
+ """
87
+
88
+ @staticmethod
89
+ def get_future_cars_dataset_id(future_result):
90
+ """
91
+ Get cars dataset id for current future result
92
+
93
+ :param future_result: future result:
94
+ :type future_result: xr.Dataset or pd.DataFrame
95
+
96
+ :return cars dataset id
97
+ :rtype : int
98
+ """
99
+
100
+ cars_ds_id = None
101
+
102
+ if isinstance(future_result, dict):
103
+ attributes_info_dict = future_result
104
+ else:
105
+ attributes_info_dict = future_result.attrs
106
+
107
+ if SAVING_INFO in attributes_info_dict:
108
+ if CARS_DATASET_KEY in attributes_info_dict[SAVING_INFO]:
109
+ cars_ds_id = attributes_info_dict[SAVING_INFO][CARS_DATASET_KEY]
110
+
111
+ return cars_ds_id
112
+
113
+ @staticmethod
114
+ def get_future_cars_dataset_position(future_result):
115
+ """
116
+ Get cars dataset positions for current future result
117
+
118
+ :param future_result: future result:
119
+ :type future_result: xr.Dataset or pd.DataFrame
120
+
121
+ :return cars dataset id
122
+ :rtype : tuple(int)
123
+ """
124
+
125
+ cars_ds_row = None
126
+ cars_ds_col = None
127
+
128
+ if isinstance(future_result, dict):
129
+ attributes_info_dict = future_result
130
+ else:
131
+ attributes_info_dict = future_result.attrs
132
+
133
+ if SAVING_INFO in attributes_info_dict:
134
+ if CARS_DS_ROW in attributes_info_dict[SAVING_INFO]:
135
+ cars_ds_row = attributes_info_dict[SAVING_INFO][CARS_DS_ROW]
136
+ else:
137
+ logging.debug("No row given in object")
138
+ if CARS_DS_COL in attributes_info_dict[SAVING_INFO]:
139
+ cars_ds_col = attributes_info_dict[SAVING_INFO][CARS_DS_COL]
140
+ else:
141
+ logging.debug("No col given in object")
142
+
143
+ return cars_ds_row, cars_ds_col
@@ -0,0 +1,106 @@
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 replacer registry class
23
+ """
24
+
25
+ # CARS imports
26
+ from cars.orchestrator.registry.abstract_registry import (
27
+ AbstractCarsDatasetRegistry,
28
+ )
29
+
30
+
31
+ class CarsDatasetRegistryCompute(AbstractCarsDatasetRegistry):
32
+ """
33
+ CarsDatasetRegistryCompute
34
+ This registry manages the computation of arriving future results
35
+ into corresponding CarsDataset
36
+ """
37
+
38
+ def __init__(self, id_generator):
39
+ """
40
+ Init function of CarsDatasetRegistryCompute
41
+
42
+ :param id_generator: id generator
43
+ :type id_generator: IdGenerator
44
+
45
+ """
46
+ super().__init__(id_generator)
47
+ self.registered_cars_datasets = []
48
+ self.cars_ds_ids = []
49
+
50
+ def cars_dataset_in_registry(self, cars_ds):
51
+ """
52
+ Check if a CarsDataset is already registered, return id if exists
53
+
54
+ :param cars_ds: cars dataset
55
+ :type cars_ds: CarsDataset
56
+
57
+ :return : True if in registry, if of cars dataset
58
+ :rtype : Tuple(bool, int)
59
+ """
60
+ cars_ds_id = None
61
+ in_registry = False
62
+
63
+ if cars_ds in self.registered_cars_datasets:
64
+ in_registry = True
65
+ cars_ds_id = self.cars_ds_ids[
66
+ self.registered_cars_datasets.index(cars_ds)
67
+ ]
68
+
69
+ return in_registry, cars_ds_id
70
+
71
+ def get_cars_datasets_list(self):
72
+ """
73
+ Get a list of registered CarsDataset
74
+
75
+ :return list of CarsDataset
76
+ :rtype: list(CarsDataset)
77
+ """
78
+
79
+ return self.registered_cars_datasets
80
+
81
+ def add_cars_ds_to_compute(self, cars_ds):
82
+ """
83
+ Add cars dataset to registry
84
+
85
+ :param cars_ds: cars dataset
86
+ :type cars_ds: CarsDataset
87
+
88
+ """
89
+
90
+ # Generate_id
91
+ new_id = self.id_generator.get_new_id(cars_ds)
92
+ self.cars_ds_ids.append(new_id)
93
+ self.registered_cars_datasets.append(cars_ds)
94
+
95
+ def get_cars_ds(self, future_result):
96
+ """
97
+ Get a list of registered CarsDataset
98
+
99
+ :param future_result: object to get cars dataset from
100
+
101
+ :return corresponding CarsDataset
102
+ :rtype: CarsDataset
103
+ """
104
+ raise RuntimeError(
105
+ "get_cars_ds shoud not be used in CarsDatasetRegistryCompute"
106
+ )
@@ -0,0 +1,116 @@
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 abstract id generator class
23
+ """
24
+
25
+ from cars.orchestrator.orchestrator_constants import CARS_DATASET_KEY
26
+
27
+ # CARS imports
28
+ from cars.orchestrator.registry.unseen_registry import CarsDatasetRegistryUnseen
29
+
30
+
31
+ class IdGenerator:
32
+ """
33
+ IdGenerator
34
+ Creates
35
+ """
36
+
37
+ def __init__(self):
38
+ """
39
+ Init function of IdGenerator
40
+
41
+ """
42
+ self.current_id = 0
43
+ self.registries = []
44
+
45
+ # Create this registry if user gets saving infos
46
+ # before telling orchestrator
47
+ # he wants to save it or replace it
48
+ self.unseen_registry = CarsDatasetRegistryUnseen(self)
49
+ # self.unseen_registry is now in self.registries, seen Abstract init
50
+
51
+ def add_registry(self, registry):
52
+ """
53
+ Add registry to self
54
+
55
+ :param registry: registry
56
+ :type registry: AbstractCarsDatasetRegistry
57
+ """
58
+
59
+ self.registries.append(registry)
60
+
61
+ def get_new_id(self, cars_ds):
62
+ """
63
+ Generate new id
64
+
65
+ :param cars_ds: cars dataset
66
+ :type cars_ds: CarsDataset
67
+
68
+ :return id
69
+ :rtype: int
70
+ """
71
+
72
+ # Check if dataset already registered
73
+ registered = False
74
+ allready_registered_id = None
75
+ returned_id = None
76
+ for registry in self.registries:
77
+ (
78
+ is_registered,
79
+ allready_registered_id,
80
+ ) = registry.cars_dataset_in_registry(cars_ds)
81
+ if is_registered:
82
+ registered = True
83
+ returned_id = allready_registered_id
84
+
85
+ if not registered:
86
+ returned_id = self.current_id
87
+ self.current_id += 1
88
+
89
+ return returned_id
90
+
91
+ def get_saving_infos(self, cars_ds):
92
+ """
93
+ Get saving infos
94
+
95
+ :param cars_ds: cars dataset
96
+ :type cars_ds: CarsDataset
97
+
98
+ :return saving infos
99
+ :rtype: dict
100
+ """
101
+
102
+ obj_id = None
103
+ for registry in self.registries:
104
+ (
105
+ is_registered,
106
+ allready_registered_id,
107
+ ) = registry.cars_dataset_in_registry(cars_ds)
108
+ if is_registered:
109
+ obj_id = allready_registered_id
110
+
111
+ # add cars_ds to other register to create id
112
+ obj_id = self.unseen_registry.add_cars_ds_to_unseen(cars_ds)
113
+
114
+ infos = {CARS_DATASET_KEY: obj_id}
115
+
116
+ return infos
@@ -0,0 +1,213 @@
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 replacer registry class
23
+ """
24
+
25
+ # CARS imports
26
+ from cars.orchestrator.registry.abstract_registry import (
27
+ AbstractCarsDatasetRegistry,
28
+ )
29
+
30
+
31
+ class CarsDatasetRegistryReplacer(AbstractCarsDatasetRegistry):
32
+ """
33
+ CarsDatasetRegistryReplacer
34
+ This registry manages the replacement of arriving future results
35
+ into corresponding CarsDataset
36
+ """
37
+
38
+ def __init__(self, id_generator):
39
+ """
40
+ Init function of CarsDatasetRegistryReplacer
41
+
42
+ :param id_generator: id generator
43
+ :type id_generator: IdGenerator
44
+
45
+ """
46
+ super().__init__(id_generator)
47
+ self.registered_cars_datasets_replacers = []
48
+
49
+ def cars_dataset_in_registry(self, cars_ds):
50
+ """
51
+ Check if a CarsDataset is already registered, return id if exists
52
+
53
+ :param cars_ds: cars dataset
54
+ :type cars_ds: CarsDataset
55
+
56
+ :return : True if in registry, if of cars dataset
57
+ :rtype : Tuple(bool, int)
58
+ """
59
+
60
+ in_registry = False
61
+ registered_id = None
62
+ for obj in self.registered_cars_datasets_replacers:
63
+ if cars_ds == obj.cars_ds:
64
+ in_registry = True
65
+ registered_id = obj.obj_id
66
+ break
67
+
68
+ return in_registry, registered_id
69
+
70
+ def get_cars_datasets_list(self):
71
+ """
72
+ Get a list of registered CarsDataset
73
+
74
+ :return list of CarsDataset
75
+ :rtype: list(CarsDataset)
76
+ """
77
+
78
+ cars_ds_list = []
79
+
80
+ for cars_ds_replacer in self.registered_cars_datasets_replacers:
81
+ cars_ds_list.append(cars_ds_replacer.cars_ds)
82
+
83
+ return cars_ds_list
84
+
85
+ def get_cars_ds_replacer_corresponding_id(self, obj_id):
86
+ """
87
+ Get the SingleCarsDatasetReplacer corresponding to given id
88
+
89
+ :param obj_id: cars dataset id
90
+ :type obj_id: int
91
+
92
+ :return : single cars dataset replacer
93
+ :rtype : SingleCarsDatasetReplacer
94
+ """
95
+
96
+ cars_ds_replacer = None
97
+ for obj in self.registered_cars_datasets_replacers:
98
+ if obj_id == obj.obj_id:
99
+ cars_ds_replacer = obj
100
+ break
101
+
102
+ return cars_ds_replacer
103
+
104
+ def replace_lasting_jobs(self, delayed_type):
105
+ """
106
+ Replace last jobs by Nones
107
+ """
108
+ for cars_ds in self.get_cars_datasets_list():
109
+ for row in range(cars_ds.shape[0]):
110
+ for col in range(cars_ds.shape[1]):
111
+ if isinstance(cars_ds[row, col], delayed_type):
112
+ cars_ds[row, col] = None
113
+
114
+ def get_cars_ds(self, future_result):
115
+ """
116
+ Get a list of registered CarsDataset
117
+
118
+ :param future_result: object to get cars dataset from
119
+
120
+ :return corresponding CarsDataset
121
+ :rtype: CarsDataset
122
+ """
123
+
124
+ obj_id = self.get_future_cars_dataset_id(future_result)
125
+ cars_ds_replacer = self.get_cars_ds_replacer_corresponding_id(obj_id)
126
+
127
+ if cars_ds_replacer is None:
128
+ return None
129
+ return cars_ds_replacer.cars_ds
130
+
131
+ def add_cars_ds_to_replace(self, cars_ds):
132
+ """
133
+ Add cars dataset to registry
134
+
135
+ :param cars_ds: cars dataset
136
+ :type cars_ds: CarsDataset
137
+
138
+ """
139
+
140
+ # Generate_id
141
+ new_id = self.id_generator.get_new_id(cars_ds)
142
+ # create CarsDataset replacer
143
+ replacer = SingleCarsDatasetReplacer(cars_ds, new_id)
144
+ self.registered_cars_datasets_replacers.append(replacer)
145
+
146
+ def get_corresponding_replacer(self, future_result):
147
+ """
148
+ Get replacer corresponding to future result
149
+
150
+ :param future_result: future result
151
+ :type future_result: xr.Dataset or pandas.DataFrame
152
+
153
+ :return replacer
154
+ :rtype: SingleCarsDatasetReplacer
155
+ """
156
+
157
+ cars_ds_id = self.get_future_cars_dataset_id(future_result)
158
+
159
+ replacer = None
160
+
161
+ for cars_ds_replacer in self.registered_cars_datasets_replacers:
162
+ if cars_ds_replacer.obj_id == cars_ds_id:
163
+ replacer = cars_ds_replacer
164
+ break
165
+
166
+ return replacer
167
+
168
+ def replace(self, future_result):
169
+ """
170
+ Replace future result
171
+
172
+ :param future_result: xr.Dataset or pandas.DataFrame or Dict
173
+
174
+ """
175
+
176
+ replacer = self.get_corresponding_replacer(future_result)
177
+
178
+ if replacer is not None:
179
+ if not replacer.as_been_seen:
180
+ # reset all tiles to None
181
+ # for row in range(replacer.cars_ds.shape[0]):
182
+ # for col in range(replacer.cars_ds.shape[1]):
183
+ # replacer.cars_ds[row, col] = None
184
+
185
+ replacer.as_been_seen = True
186
+
187
+ # replace tile
188
+ row, col = self.get_future_cars_dataset_position(future_result)
189
+
190
+ replacer.cars_ds[row, col] = future_result
191
+
192
+
193
+ class SingleCarsDatasetReplacer: # pylint: disable=R0903
194
+ """
195
+ SingleCarsDatasetReplacer
196
+
197
+ Manages the replacement of a CarsDataset
198
+ """
199
+
200
+ def __init__(self, cars_ds, obj_id):
201
+ """
202
+ Init function of CarsDatasetRegistryReplacer
203
+
204
+ :param cars_ds: cars dataset
205
+ :type cars_ds: CarsDataset
206
+ :param obj_id: object id
207
+ :type obj_id: int
208
+ """
209
+
210
+ self.cars_ds = cars_ds
211
+ self.obj_id = obj_id
212
+
213
+ self.as_been_seen = False