cars 1.0.0rc1__cp312-cp312-manylinux_2_17_i686.manylinux2014_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.
- cars/__init__.py +74 -0
- cars/applications/__init__.py +37 -0
- cars/applications/application.py +117 -0
- cars/applications/application_constants.py +29 -0
- cars/applications/application_template.py +146 -0
- cars/applications/auxiliary_filling/__init__.py +29 -0
- cars/applications/auxiliary_filling/abstract_auxiliary_filling_app.py +104 -0
- cars/applications/auxiliary_filling/auxiliary_filling_algo.py +475 -0
- cars/applications/auxiliary_filling/auxiliary_filling_from_sensors_app.py +630 -0
- cars/applications/auxiliary_filling/auxiliary_filling_wrappers.py +90 -0
- cars/applications/dem_generation/__init__.py +30 -0
- cars/applications/dem_generation/abstract_dem_generation_app.py +116 -0
- cars/applications/dem_generation/bulldozer_config/base_config.yaml +42 -0
- cars/applications/dem_generation/bulldozer_dem_app.py +655 -0
- cars/applications/dem_generation/bulldozer_memory.py +55 -0
- cars/applications/dem_generation/dem_generation_algo.py +107 -0
- cars/applications/dem_generation/dem_generation_constants.py +32 -0
- cars/applications/dem_generation/dem_generation_wrappers.py +323 -0
- cars/applications/dense_match_filling/__init__.py +30 -0
- cars/applications/dense_match_filling/abstract_dense_match_filling_app.py +242 -0
- cars/applications/dense_match_filling/fill_disp_algo.py +113 -0
- cars/applications/dense_match_filling/fill_disp_constants.py +39 -0
- cars/applications/dense_match_filling/fill_disp_wrappers.py +83 -0
- cars/applications/dense_match_filling/zero_padding_app.py +302 -0
- cars/applications/dense_matching/__init__.py +30 -0
- cars/applications/dense_matching/abstract_dense_matching_app.py +261 -0
- cars/applications/dense_matching/census_mccnn_sgm_app.py +1460 -0
- cars/applications/dense_matching/cpp/__init__.py +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.cpython-312-i386-linux-gnu.so +0 -0
- cars/applications/dense_matching/cpp/dense_matching_cpp.py +94 -0
- cars/applications/dense_matching/cpp/includes/dense_matching.hpp +58 -0
- cars/applications/dense_matching/cpp/meson.build +9 -0
- cars/applications/dense_matching/cpp/src/bindings.cpp +13 -0
- cars/applications/dense_matching/cpp/src/dense_matching.cpp +207 -0
- cars/applications/dense_matching/dense_matching_algo.py +401 -0
- cars/applications/dense_matching/dense_matching_constants.py +89 -0
- cars/applications/dense_matching/dense_matching_wrappers.py +951 -0
- cars/applications/dense_matching/disparity_grid_algo.py +588 -0
- cars/applications/dense_matching/loaders/__init__.py +23 -0
- cars/applications/dense_matching/loaders/config_census_sgm_default.json +31 -0
- cars/applications/dense_matching/loaders/config_census_sgm_homogeneous.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_mountain_and_vegetation.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_shadow.json +30 -0
- cars/applications/dense_matching/loaders/config_census_sgm_sparse.json +36 -0
- cars/applications/dense_matching/loaders/config_census_sgm_urban.json +30 -0
- cars/applications/dense_matching/loaders/config_mapping.json +13 -0
- cars/applications/dense_matching/loaders/config_mccnn.json +28 -0
- cars/applications/dense_matching/loaders/global_land_cover_map.tif +0 -0
- cars/applications/dense_matching/loaders/pandora_loader.py +593 -0
- cars/applications/dsm_filling/__init__.py +32 -0
- cars/applications/dsm_filling/abstract_dsm_filling_app.py +101 -0
- cars/applications/dsm_filling/border_interpolation_app.py +270 -0
- cars/applications/dsm_filling/bulldozer_config/base_config.yaml +44 -0
- cars/applications/dsm_filling/bulldozer_filling_app.py +279 -0
- cars/applications/dsm_filling/exogenous_filling_app.py +333 -0
- cars/applications/grid_generation/__init__.py +30 -0
- cars/applications/grid_generation/abstract_grid_generation_app.py +142 -0
- cars/applications/grid_generation/epipolar_grid_generation_app.py +327 -0
- cars/applications/grid_generation/grid_correction_app.py +496 -0
- cars/applications/grid_generation/grid_generation_algo.py +388 -0
- cars/applications/grid_generation/grid_generation_constants.py +46 -0
- cars/applications/grid_generation/transform_grid.py +88 -0
- cars/applications/ground_truth_reprojection/__init__.py +30 -0
- cars/applications/ground_truth_reprojection/abstract_ground_truth_reprojection_app.py +137 -0
- cars/applications/ground_truth_reprojection/direct_localization_app.py +629 -0
- cars/applications/ground_truth_reprojection/ground_truth_reprojection_algo.py +275 -0
- cars/applications/point_cloud_outlier_removal/__init__.py +30 -0
- cars/applications/point_cloud_outlier_removal/abstract_outlier_removal_app.py +385 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_algo.py +392 -0
- cars/applications/point_cloud_outlier_removal/outlier_removal_constants.py +43 -0
- cars/applications/point_cloud_outlier_removal/small_components_app.py +527 -0
- cars/applications/point_cloud_outlier_removal/statistical_app.py +531 -0
- cars/applications/rasterization/__init__.py +30 -0
- cars/applications/rasterization/abstract_pc_rasterization_app.py +183 -0
- cars/applications/rasterization/rasterization_algo.py +534 -0
- cars/applications/rasterization/rasterization_constants.py +38 -0
- cars/applications/rasterization/rasterization_wrappers.py +634 -0
- cars/applications/rasterization/simple_gaussian_app.py +1152 -0
- cars/applications/resampling/__init__.py +28 -0
- cars/applications/resampling/abstract_resampling_app.py +187 -0
- cars/applications/resampling/bicubic_resampling_app.py +762 -0
- cars/applications/resampling/resampling_algo.py +614 -0
- cars/applications/resampling/resampling_constants.py +36 -0
- cars/applications/resampling/resampling_wrappers.py +309 -0
- cars/applications/sparse_matching/__init__.py +30 -0
- cars/applications/sparse_matching/abstract_sparse_matching_app.py +498 -0
- cars/applications/sparse_matching/sift_app.py +735 -0
- cars/applications/sparse_matching/sparse_matching_algo.py +360 -0
- cars/applications/sparse_matching/sparse_matching_constants.py +68 -0
- cars/applications/sparse_matching/sparse_matching_wrappers.py +238 -0
- cars/applications/triangulation/__init__.py +32 -0
- cars/applications/triangulation/abstract_triangulation_app.py +227 -0
- cars/applications/triangulation/line_of_sight_intersection_app.py +1243 -0
- cars/applications/triangulation/pc_transform.py +552 -0
- cars/applications/triangulation/triangulation_algo.py +371 -0
- cars/applications/triangulation/triangulation_constants.py +38 -0
- cars/applications/triangulation/triangulation_wrappers.py +259 -0
- cars/bundleadjustment.py +757 -0
- cars/cars.py +177 -0
- cars/conf/__init__.py +23 -0
- cars/conf/geoid/egm96.grd +0 -0
- cars/conf/geoid/egm96.grd.hdr +15 -0
- cars/conf/input_parameters.py +156 -0
- cars/conf/mask_cst.py +35 -0
- cars/core/__init__.py +23 -0
- cars/core/cars_logging.py +402 -0
- cars/core/constants.py +191 -0
- cars/core/constants_disparity.py +50 -0
- cars/core/datasets.py +140 -0
- cars/core/geometry/__init__.py +27 -0
- cars/core/geometry/abstract_geometry.py +1119 -0
- cars/core/geometry/shareloc_geometry.py +598 -0
- cars/core/inputs.py +568 -0
- cars/core/outputs.py +176 -0
- cars/core/preprocessing.py +722 -0
- cars/core/projection.py +843 -0
- cars/core/roi_tools.py +215 -0
- cars/core/tiling.py +774 -0
- cars/core/utils.py +164 -0
- cars/data_structures/__init__.py +23 -0
- cars/data_structures/cars_dataset.py +1541 -0
- cars/data_structures/cars_dict.py +74 -0
- cars/data_structures/corresponding_tiles_tools.py +186 -0
- cars/data_structures/dataframe_converter.py +185 -0
- cars/data_structures/format_transformation.py +297 -0
- cars/devibrate.py +689 -0
- cars/extractroi.py +264 -0
- cars/orchestrator/__init__.py +23 -0
- cars/orchestrator/achievement_tracker.py +125 -0
- cars/orchestrator/cluster/__init__.py +37 -0
- cars/orchestrator/cluster/abstract_cluster.py +244 -0
- cars/orchestrator/cluster/abstract_dask_cluster.py +375 -0
- cars/orchestrator/cluster/dask_cluster_tools.py +103 -0
- cars/orchestrator/cluster/dask_config/README.md +94 -0
- cars/orchestrator/cluster/dask_config/dask.yaml +21 -0
- cars/orchestrator/cluster/dask_config/distributed.yaml +70 -0
- cars/orchestrator/cluster/dask_config/jobqueue.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask-schema.yaml +137 -0
- cars/orchestrator/cluster/dask_config/reference_confs/dask.yaml +26 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed-schema.yaml +1009 -0
- cars/orchestrator/cluster/dask_config/reference_confs/distributed.yaml +273 -0
- cars/orchestrator/cluster/dask_config/reference_confs/jobqueue.yaml +212 -0
- cars/orchestrator/cluster/dask_jobqueue_utils.py +204 -0
- cars/orchestrator/cluster/local_dask_cluster.py +116 -0
- cars/orchestrator/cluster/log_wrapper.py +1075 -0
- cars/orchestrator/cluster/mp_cluster/__init__.py +27 -0
- cars/orchestrator/cluster/mp_cluster/mp_factorizer.py +212 -0
- cars/orchestrator/cluster/mp_cluster/mp_objects.py +535 -0
- cars/orchestrator/cluster/mp_cluster/mp_tools.py +93 -0
- cars/orchestrator/cluster/mp_cluster/mp_wrapper.py +505 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_cluster.py +873 -0
- cars/orchestrator/cluster/mp_cluster/multiprocessing_profiler.py +399 -0
- cars/orchestrator/cluster/pbs_dask_cluster.py +207 -0
- cars/orchestrator/cluster/sequential_cluster.py +139 -0
- cars/orchestrator/cluster/slurm_dask_cluster.py +234 -0
- cars/orchestrator/orchestrator.py +905 -0
- cars/orchestrator/orchestrator_constants.py +29 -0
- cars/orchestrator/registry/__init__.py +23 -0
- cars/orchestrator/registry/abstract_registry.py +143 -0
- cars/orchestrator/registry/compute_registry.py +106 -0
- cars/orchestrator/registry/id_generator.py +116 -0
- cars/orchestrator/registry/replacer_registry.py +213 -0
- cars/orchestrator/registry/saver_registry.py +363 -0
- cars/orchestrator/registry/unseen_registry.py +118 -0
- cars/orchestrator/tiles_profiler.py +279 -0
- cars/pipelines/__init__.py +26 -0
- cars/pipelines/conf_resolution/conf_final_resolution.yaml +5 -0
- cars/pipelines/conf_resolution/conf_first_resolution.yaml +2 -0
- cars/pipelines/conf_resolution/conf_intermediate_resolution.yaml +2 -0
- cars/pipelines/default/__init__.py +26 -0
- cars/pipelines/default/default_pipeline.py +786 -0
- cars/pipelines/parameters/__init__.py +0 -0
- cars/pipelines/parameters/advanced_parameters.py +417 -0
- cars/pipelines/parameters/advanced_parameters_constants.py +69 -0
- cars/pipelines/parameters/application_parameters.py +71 -0
- cars/pipelines/parameters/depth_map_inputs.py +0 -0
- cars/pipelines/parameters/dsm_inputs.py +918 -0
- cars/pipelines/parameters/dsm_inputs_constants.py +25 -0
- cars/pipelines/parameters/output_constants.py +52 -0
- cars/pipelines/parameters/output_parameters.py +454 -0
- cars/pipelines/parameters/sensor_inputs.py +842 -0
- cars/pipelines/parameters/sensor_inputs_constants.py +49 -0
- cars/pipelines/parameters/sensor_loaders/__init__.py +29 -0
- cars/pipelines/parameters/sensor_loaders/basic_classif_loader.py +86 -0
- cars/pipelines/parameters/sensor_loaders/basic_image_loader.py +98 -0
- cars/pipelines/parameters/sensor_loaders/pivot_classif_loader.py +90 -0
- cars/pipelines/parameters/sensor_loaders/pivot_image_loader.py +105 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader.py +93 -0
- cars/pipelines/parameters/sensor_loaders/sensor_loader_template.py +71 -0
- cars/pipelines/parameters/sensor_loaders/slurp_classif_loader.py +86 -0
- cars/pipelines/pipeline.py +119 -0
- cars/pipelines/pipeline_constants.py +31 -0
- cars/pipelines/pipeline_template.py +139 -0
- cars/pipelines/unit/__init__.py +26 -0
- cars/pipelines/unit/unit_pipeline.py +2850 -0
- cars/starter.py +167 -0
- cars-1.0.0rc1.dist-info/METADATA +292 -0
- cars-1.0.0rc1.dist-info/RECORD +200 -0
- cars-1.0.0rc1.dist-info/WHEEL +6 -0
- cars-1.0.0rc1.dist-info/entry_points.txt +8 -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
|