terrakit 0.1.3__py3-none-any.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.
Files changed (49) hide show
  1. terrakit/__init__.py +42 -0
  2. terrakit/__main__.py +109 -0
  3. terrakit/_version.py +11 -0
  4. terrakit/chip/__init__.py +5 -0
  5. terrakit/chip/tiling.py +539 -0
  6. terrakit/download/__init__.py +4 -0
  7. terrakit/download/collections.json +1070 -0
  8. terrakit/download/connector.py +98 -0
  9. terrakit/download/connector_template.py +120 -0
  10. terrakit/download/data_connectors/__init__.py +4 -0
  11. terrakit/download/data_connectors/connector_template.py +120 -0
  12. terrakit/download/data_connectors/ibmresearch_stac.py +435 -0
  13. terrakit/download/data_connectors/nasa_earthdata.py +440 -0
  14. terrakit/download/data_connectors/sentinel_aws.py +491 -0
  15. terrakit/download/data_connectors/sentinelhub.py +457 -0
  16. terrakit/download/data_connectors/theweathercompany.py +391 -0
  17. terrakit/download/download_data.py +592 -0
  18. terrakit/download/geodata_utils.py +420 -0
  19. terrakit/download/raster_file_reader.py +466 -0
  20. terrakit/download/transformations/__init__.py +4 -0
  21. terrakit/download/transformations/download_transformation_template.py +23 -0
  22. terrakit/download/transformations/impute_nans_xarray.py +50 -0
  23. terrakit/download/transformations/scale_data_xarray.py +37 -0
  24. terrakit/general_utils/__init__.py +4 -0
  25. terrakit/general_utils/curation_metadata.py +99 -0
  26. terrakit/general_utils/defaults.py +86 -0
  27. terrakit/general_utils/exceptions.py +35 -0
  28. terrakit/general_utils/geospatial_util.py +822 -0
  29. terrakit/general_utils/labels_downloader.py +269 -0
  30. terrakit/general_utils/plotting.py +268 -0
  31. terrakit/general_utils/rest.py +69 -0
  32. terrakit/general_utils/statistics.py +81 -0
  33. terrakit/store/__init__.py +4 -0
  34. terrakit/store/taco.py +258 -0
  35. terrakit/terrakit.py +110 -0
  36. terrakit/transform/__init__.py +4 -0
  37. terrakit/transform/labels.py +589 -0
  38. terrakit/upload/__init__.py +4 -0
  39. terrakit/validate/__init__.py +4 -0
  40. terrakit/validate/data_connector.py +31 -0
  41. terrakit/validate/download_model.py +122 -0
  42. terrakit/validate/helpers.py +147 -0
  43. terrakit/validate/labels_model.py +92 -0
  44. terrakit/validate/pipeline_model.py +105 -0
  45. terrakit/validate/tiling_model.py +39 -0
  46. terrakit-0.1.3.dist-info/METADATA +295 -0
  47. terrakit-0.1.3.dist-info/RECORD +49 -0
  48. terrakit-0.1.3.dist-info/WHEEL +4 -0
  49. terrakit-0.1.3.dist-info/entry_points.txt +3 -0
terrakit/__init__.py ADDED
@@ -0,0 +1,42 @@
1
+ # © Copyright IBM Corporation 2025
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+
5
+ # Copyright 2018-2025 IBM
6
+
7
+ # Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ # See the License for the specific language governing permissions and
17
+ # limitations under the License.
18
+
19
+
20
+ import logging
21
+ import os
22
+
23
+ from .download.data_connectors.sentinelhub import SentinelHub # noqa
24
+ from .download.data_connectors.nasa_earthdata import NASA_EarthData # noqa
25
+ from .download.data_connectors.sentinel_aws import Sentinel_AWS # noqa
26
+ from .terrakit import DataConnector # noqa
27
+ from .download.download_data import download_data # noqa
28
+ from .chip import tiling # noqa
29
+ from .chip.tiling import chip_and_label_data # noqa
30
+ from .transform import labels # noqa
31
+ from .transform.labels import process_labels # noqa
32
+ from .store.taco import taco_store_data, load_tortilla # noqa
33
+ from .download.geodata_utils import * # noqa
34
+
35
+ # Set up logging
36
+ LOGLEVEL = os.environ.get("LOGLEVEL", "INFO").upper()
37
+ logging.basicConfig(
38
+ format="%(asctime)s [%(levelname)-8s] %(message)s (%(filename)s:%(lineno)s)",
39
+ datefmt="%Y-%m-%d %H:%M:%S",
40
+ level=LOGLEVEL,
41
+ )
42
+ logger = logging.getLogger(__name__)
terrakit/__main__.py ADDED
@@ -0,0 +1,109 @@
1
+ # © Copyright IBM Corporation 2025
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+
5
+ import logging
6
+ import sys
7
+
8
+ from jsonargparse import ArgumentParser
9
+
10
+ from terrakit.download.download_data import DownloadCls, download_data
11
+ from terrakit.chip.tiling import ChipAndLabelCls, chip_and_label_data
12
+ from terrakit.store.taco import TacoCls, taco_store_data
13
+ from terrakit.transform.labels import LabelsCls, process_labels
14
+ from terrakit.validate.pipeline_model import PipelineModel
15
+ from terrakit._version import VERSION, PACKAGE_NAME
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+
20
+ def main() -> None:
21
+ if len(sys.argv) == 1:
22
+ print(
23
+ "usage: terrakit [-h] [--dataset_name DATASET_NAME] [--working_dir WORKING_DIR] [--config CONFIG] [--print_config[=flags]] {labels,download,chip,store,upload}...\n"
24
+ )
25
+ exit(0)
26
+
27
+ # Create labels parser
28
+ parser_labels = ArgumentParser()
29
+ parser_labels.add_class_arguments(LabelsCls)
30
+
31
+ # Create download parser
32
+ parser_download = ArgumentParser()
33
+ parser_download.add_class_arguments(DownloadCls)
34
+
35
+ parser_chip = ArgumentParser()
36
+ parser_chip.add_class_arguments(ChipAndLabelCls)
37
+
38
+ parser_store = ArgumentParser()
39
+ parser_store.add_class_arguments(TacoCls)
40
+
41
+ parser_upload = ArgumentParser()
42
+ parser_upload.add_argument("--op5")
43
+
44
+ parser = ArgumentParser(prog=PACKAGE_NAME, version=VERSION)
45
+ parser.add_class_arguments(PipelineModel)
46
+
47
+ subcommands = parser.add_subcommands()
48
+ subcommands.add_subcommand("labels", parser_labels)
49
+ subcommands.add_subcommand("download", parser_download)
50
+ subcommands.add_subcommand("chip", parser_chip)
51
+ subcommands.add_subcommand("store", parser_store)
52
+ subcommands.add_subcommand("upload", parser_upload)
53
+
54
+ parser.add_argument("--config", action="config")
55
+
56
+ cfg = parser.parse_args()
57
+ if cfg.subcommand == "labels":
58
+ process_labels(
59
+ dataset_name=cfg.dataset_name,
60
+ working_dir=cfg.working_dir,
61
+ active=cfg.labels.active,
62
+ labels_folder=cfg.labels.labels_folder,
63
+ label_type=cfg.labels.label_type,
64
+ datetime_info=cfg.labels.datetime_info,
65
+ )
66
+ elif cfg.subcommand == "download":
67
+ download_data(
68
+ dataset_name=cfg.dataset_name,
69
+ working_dir=cfg.working_dir,
70
+ date_allowance=cfg.download.date_allowance,
71
+ transform=cfg.download.transform,
72
+ data_sources=cfg.download.data_sources,
73
+ active=cfg.download.active,
74
+ max_cloud_cover=cfg.download.max_cloud_cover,
75
+ datetime_bbox_shp_file=cfg.download.datetime_bbox_shp_file,
76
+ labels_shp_file=cfg.download.labels_shp_file,
77
+ keep_files=cfg.download.keep_files,
78
+ )
79
+ elif cfg.subcommand == "chip":
80
+ chip_and_label_data(
81
+ dataset_name=cfg.dataset_name,
82
+ working_dir=cfg.working_dir,
83
+ active=cfg.chip.active,
84
+ data_suffix=cfg.chip.data_suffix,
85
+ label_suffix=cfg.chip.label_suffix,
86
+ chip_suffix=cfg.chip.chip_suffix,
87
+ chip_label_suffix=cfg.chip.chip_label_suffix,
88
+ sample_dim=cfg.chip.sample_dim,
89
+ )
90
+ elif cfg.subcommand == "store":
91
+ taco_store_data(
92
+ cfg.dataset_name,
93
+ cfg.working_dir,
94
+ active=cfg.store.active,
95
+ format=cfg.store.format,
96
+ dataset_save_dir=cfg.store.dataset_save_dir,
97
+ save_dir=cfg.store.save_dir,
98
+ tortilla_name=cfg.store.tortilla_name,
99
+ )
100
+ elif cfg.subcommand == "upload":
101
+ print("TODO: Upload labels..")
102
+ else:
103
+ print(
104
+ "Error: Missing subcommand. - Please specify one of {labels,download,chip,store,upload}."
105
+ )
106
+
107
+
108
+ if __name__ == "__main__":
109
+ main()
terrakit/_version.py ADDED
@@ -0,0 +1,11 @@
1
+ # © Copyright IBM Corporation 2025
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+
5
+ import importlib.metadata
6
+
7
+ PACKAGE_NAME = "terrakit"
8
+ try:
9
+ VERSION = importlib.metadata.version(PACKAGE_NAME)
10
+ except importlib.metadata.PackageNotFoundError:
11
+ VERSION = "unknown (not installed)"
@@ -0,0 +1,5 @@
1
+ # © Copyright IBM Corporation 2025
2
+ # SPDX-License-Identifier: Apache-2.0
3
+
4
+
5
+ from terrakit.chip import tiling