rslearn 0.0.25__py3-none-any.whl → 0.0.27__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 (72) hide show
  1. rslearn/config/dataset.py +30 -23
  2. rslearn/data_sources/__init__.py +2 -0
  3. rslearn/data_sources/aws_landsat.py +44 -161
  4. rslearn/data_sources/aws_open_data.py +2 -4
  5. rslearn/data_sources/aws_sentinel1.py +1 -3
  6. rslearn/data_sources/aws_sentinel2_element84.py +54 -165
  7. rslearn/data_sources/climate_data_store.py +1 -3
  8. rslearn/data_sources/copernicus.py +1 -2
  9. rslearn/data_sources/data_source.py +1 -1
  10. rslearn/data_sources/direct_materialize_data_source.py +336 -0
  11. rslearn/data_sources/earthdaily.py +52 -155
  12. rslearn/data_sources/earthdatahub.py +425 -0
  13. rslearn/data_sources/eurocrops.py +1 -2
  14. rslearn/data_sources/gcp_public_data.py +1 -2
  15. rslearn/data_sources/google_earth_engine.py +1 -2
  16. rslearn/data_sources/hf_srtm.py +595 -0
  17. rslearn/data_sources/local_files.py +3 -3
  18. rslearn/data_sources/openstreetmap.py +1 -1
  19. rslearn/data_sources/planet.py +1 -2
  20. rslearn/data_sources/planet_basemap.py +1 -2
  21. rslearn/data_sources/planetary_computer.py +183 -186
  22. rslearn/data_sources/soilgrids.py +3 -3
  23. rslearn/data_sources/stac.py +1 -2
  24. rslearn/data_sources/usda_cdl.py +1 -3
  25. rslearn/data_sources/usgs_landsat.py +7 -254
  26. rslearn/data_sources/utils.py +204 -64
  27. rslearn/data_sources/worldcereal.py +1 -1
  28. rslearn/data_sources/worldcover.py +1 -1
  29. rslearn/data_sources/worldpop.py +1 -1
  30. rslearn/data_sources/xyz_tiles.py +5 -9
  31. rslearn/dataset/materialize.py +5 -1
  32. rslearn/models/clay/clay.py +3 -3
  33. rslearn/models/concatenate_features.py +6 -1
  34. rslearn/models/detr/detr.py +4 -1
  35. rslearn/models/dinov3.py +0 -1
  36. rslearn/models/olmoearth_pretrain/model.py +3 -1
  37. rslearn/models/pooling_decoder.py +1 -1
  38. rslearn/models/prithvi.py +0 -1
  39. rslearn/models/simple_time_series.py +97 -35
  40. rslearn/train/{all_patches_dataset.py → all_crops_dataset.py} +120 -117
  41. rslearn/train/data_module.py +32 -27
  42. rslearn/train/dataset.py +260 -117
  43. rslearn/train/dataset_index.py +156 -0
  44. rslearn/train/lightning_module.py +1 -1
  45. rslearn/train/model_context.py +19 -3
  46. rslearn/train/prediction_writer.py +69 -41
  47. rslearn/train/tasks/classification.py +1 -1
  48. rslearn/train/tasks/detection.py +5 -5
  49. rslearn/train/tasks/per_pixel_regression.py +13 -13
  50. rslearn/train/tasks/regression.py +1 -1
  51. rslearn/train/tasks/segmentation.py +26 -13
  52. rslearn/train/transforms/concatenate.py +17 -27
  53. rslearn/train/transforms/crop.py +8 -19
  54. rslearn/train/transforms/flip.py +4 -10
  55. rslearn/train/transforms/mask.py +9 -15
  56. rslearn/train/transforms/normalize.py +31 -82
  57. rslearn/train/transforms/pad.py +7 -13
  58. rslearn/train/transforms/resize.py +5 -22
  59. rslearn/train/transforms/select_bands.py +16 -36
  60. rslearn/train/transforms/sentinel1.py +4 -16
  61. rslearn/utils/__init__.py +2 -0
  62. rslearn/utils/geometry.py +21 -0
  63. rslearn/utils/m2m_api.py +251 -0
  64. rslearn/utils/retry_session.py +43 -0
  65. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/METADATA +6 -3
  66. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/RECORD +71 -66
  67. rslearn/data_sources/earthdata_srtm.py +0 -282
  68. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/WHEEL +0 -0
  69. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/entry_points.txt +0 -0
  70. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/licenses/LICENSE +0 -0
  71. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/licenses/NOTICE +0 -0
  72. {rslearn-0.0.25.dist-info → rslearn-0.0.27.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,251 @@
1
+ """API client for the USGS M2M API."""
2
+
3
+ import json
4
+ import os
5
+ import time
6
+ import uuid
7
+ from datetime import datetime, timedelta
8
+ from typing import Any
9
+
10
+ import requests
11
+
12
+ from rslearn.log_utils import get_logger
13
+
14
+ logger = get_logger(__name__)
15
+
16
+
17
+ class APIException(Exception):
18
+ """Exception raised for M2M API errors."""
19
+
20
+ pass
21
+
22
+
23
+ class M2MAPIClient:
24
+ """An API client for interacting with the USGS M2M API."""
25
+
26
+ api_url = "https://m2m.cr.usgs.gov/api/api/json/stable/"
27
+ pagination_size = 1000
28
+
29
+ def __init__(
30
+ self,
31
+ username: str | None = None,
32
+ token: str | None = None,
33
+ timeout: timedelta = timedelta(seconds=120),
34
+ session: requests.Session | None = None,
35
+ ) -> None:
36
+ """Initialize a new M2MAPIClient.
37
+
38
+ Args:
39
+ username: the EROS username. If None, uses M2M_USERNAME environment variable.
40
+ token: the application token. If None, uses M2M_TOKEN environment variable.
41
+ timeout: timeout for requests.
42
+ session: optional requests session to use. If None, a default session is
43
+ created.
44
+ """
45
+ if username is None:
46
+ username = os.environ.get("M2M_USERNAME")
47
+ if username is None:
48
+ raise ValueError(
49
+ "username must be provided or M2M_USERNAME environment variable must be set"
50
+ )
51
+ if token is None:
52
+ token = os.environ.get("M2M_TOKEN")
53
+ if token is None:
54
+ raise ValueError(
55
+ "token must be provided or M2M_TOKEN environment variable must be set"
56
+ )
57
+
58
+ self.username = username
59
+ self.timeout = timeout
60
+ self.session = session if session is not None else requests.Session()
61
+
62
+ json_data = json.dumps({"username": username, "token": token})
63
+ response = self.session.post(
64
+ self.api_url + "login-token",
65
+ data=json_data,
66
+ timeout=self.timeout.total_seconds(),
67
+ )
68
+
69
+ response.raise_for_status()
70
+ self.auth_token = response.json()["data"]
71
+
72
+ def request(
73
+ self, endpoint: str, data: dict[str, Any] | None = None
74
+ ) -> dict[str, Any] | None:
75
+ """Make a request to the API.
76
+
77
+ Args:
78
+ endpoint: the endpoint to call
79
+ data: POST data to pass
80
+
81
+ Returns:
82
+ JSON response data if any
83
+ """
84
+ response = self.session.post(
85
+ self.api_url + endpoint,
86
+ headers={"X-Auth-Token": self.auth_token},
87
+ data=json.dumps(data),
88
+ timeout=self.timeout.total_seconds(),
89
+ )
90
+ response.raise_for_status()
91
+ if response.text:
92
+ response_dict = response.json()
93
+
94
+ if response_dict["errorMessage"]:
95
+ raise APIException(response_dict["errorMessage"])
96
+ return response_dict
97
+ return None
98
+
99
+ def get_filters(self, dataset_name: str) -> list[dict[str, Any]]:
100
+ """Returns filters available for the given dataset.
101
+
102
+ Args:
103
+ dataset_name: the dataset name e.g. landsat_ot_c2_l1
104
+
105
+ Returns:
106
+ list of filter objects
107
+ """
108
+ response_dict = self.request("dataset-filters", {"datasetName": dataset_name})
109
+ if response_dict is None:
110
+ raise APIException("No response from API")
111
+ return response_dict["data"]
112
+
113
+ def scene_search(
114
+ self,
115
+ dataset_name: str,
116
+ acquisition_time_range: tuple[datetime, datetime] | None = None,
117
+ cloud_cover_range: tuple[int, int] | None = None,
118
+ bbox: tuple[float, float, float, float] | None = None,
119
+ metadata_filter: dict[str, Any] | None = None,
120
+ ) -> list[dict[str, Any]]:
121
+ """Search for scenes matching the arguments.
122
+
123
+ Args:
124
+ dataset_name: the dataset name e.g. landsat_ot_c2_l1
125
+ acquisition_time_range: optional filter on the acquisition time
126
+ cloud_cover_range: optional filter on the cloud cover
127
+ bbox: optional spatial filter
128
+ metadata_filter: optional metadata filter dict
129
+ """
130
+ base_data: dict[str, Any] = {"datasetName": dataset_name, "sceneFilter": {}}
131
+ if acquisition_time_range:
132
+ base_data["sceneFilter"]["acquisitionFilter"] = {
133
+ "start": acquisition_time_range[0].isoformat(),
134
+ "end": acquisition_time_range[1].isoformat(),
135
+ }
136
+ if cloud_cover_range:
137
+ base_data["sceneFilter"]["cloudCoverFilter"] = {
138
+ "min": cloud_cover_range[0],
139
+ "max": cloud_cover_range[1],
140
+ "includeUnknown": False,
141
+ }
142
+ if bbox:
143
+ base_data["sceneFilter"]["spatialFilter"] = {
144
+ "filterType": "mbr",
145
+ "lowerLeft": {"longitude": bbox[0], "latitude": bbox[1]},
146
+ "upperRight": {"longitude": bbox[2], "latitude": bbox[3]},
147
+ }
148
+ if metadata_filter:
149
+ base_data["sceneFilter"]["metadataFilter"] = metadata_filter
150
+
151
+ starting_number = 1
152
+ results = []
153
+ while True:
154
+ cur_data = base_data.copy()
155
+ cur_data["startingNumber"] = starting_number
156
+ cur_data["maxResults"] = self.pagination_size
157
+ response_dict = self.request("scene-search", cur_data)
158
+ if response_dict is None:
159
+ raise APIException("No response from API")
160
+ data = response_dict["data"]
161
+ results.extend(data["results"])
162
+ if data["recordsReturned"] < self.pagination_size:
163
+ break
164
+ starting_number += self.pagination_size
165
+
166
+ return results
167
+
168
+ def get_scene_metadata(self, dataset_name: str, entity_id: str) -> dict[str, Any]:
169
+ """Get detailed metadata for a scene.
170
+
171
+ Args:
172
+ dataset_name: the dataset name in which to search
173
+ entity_id: the entity ID of the scene
174
+
175
+ Returns:
176
+ full scene metadata
177
+ """
178
+ response_dict = self.request(
179
+ "scene-metadata",
180
+ {
181
+ "datasetName": dataset_name,
182
+ "entityId": entity_id,
183
+ "metadataType": "full",
184
+ },
185
+ )
186
+ if response_dict is None:
187
+ raise APIException("No response from API")
188
+ return response_dict["data"]
189
+
190
+ def get_downloadable_products(
191
+ self, dataset_name: str, entity_id: str
192
+ ) -> list[dict[str, Any]]:
193
+ """Get the downloadable products for a given scene.
194
+
195
+ Args:
196
+ dataset_name: the dataset name
197
+ entity_id: the entity ID of the scene
198
+
199
+ Returns:
200
+ list of downloadable products
201
+ """
202
+ data = {"datasetName": dataset_name, "entityIds": [entity_id]}
203
+ response_dict = self.request("download-options", data)
204
+ if response_dict is None:
205
+ raise APIException("No response from API")
206
+ return response_dict["data"]
207
+
208
+ def get_download_url(self, entity_id: str, product_id: str) -> str:
209
+ """Get the download URL for a given product.
210
+
211
+ Args:
212
+ entity_id: the entity ID of the product
213
+ product_id: the product ID of the product
214
+
215
+ Returns:
216
+ the download URL
217
+ """
218
+ label = str(uuid.uuid4())
219
+ data = {
220
+ "downloads": [
221
+ {"label": label, "entityId": entity_id, "productId": product_id}
222
+ ]
223
+ }
224
+ response_dict = self.request("download-request", data)
225
+ if response_dict is None:
226
+ raise APIException("No response from API")
227
+ response = response_dict["data"]
228
+
229
+ # Check if URL is immediately available in the response
230
+ if response.get("availableDownloads"):
231
+ return response["availableDownloads"][0]["url"]
232
+
233
+ # Otherwise poll download-retrieve until the URL is ready
234
+ while True:
235
+ # We sleep first because we have observed that if we immediately call
236
+ # download-retrieve it sometimes has a response that includes neither
237
+ # available nor requested list.
238
+ time.sleep(10)
239
+ response_dict = self.request("download-retrieve", {"label": label})
240
+ if response_dict is None:
241
+ raise APIException("No response from API")
242
+ response = response_dict["data"]
243
+ if len(response["available"]) > 0:
244
+ return response["available"][0]["url"]
245
+ if len(response["requested"]) == 0:
246
+ logger.debug(
247
+ f"Response to download-retrieve did not include our requested download under label {label}: {response}"
248
+ )
249
+ raise APIException("Did not get download URL")
250
+ if response["requested"][0].get("url"):
251
+ return response["requested"][0]["url"]
@@ -0,0 +1,43 @@
1
+ """Utility for creating requests sessions with retry logic."""
2
+
3
+ from datetime import timedelta
4
+ from http import HTTPStatus
5
+
6
+ import requests
7
+ from requests.adapters import HTTPAdapter
8
+ from urllib3.util.retry import Retry
9
+
10
+
11
+ def create_retry_session(
12
+ total_retries: int = 5,
13
+ backoff_factor: float = 1.0,
14
+ backoff_max: timedelta = timedelta(seconds=60),
15
+ ) -> requests.Session:
16
+ """Create a requests session with retry logic.
17
+
18
+ Args:
19
+ total_retries: maximum number of retries
20
+ backoff_factor: factor for exponential backoff
21
+ backoff_max: maximum backoff time
22
+
23
+ Returns:
24
+ configured requests session
25
+ """
26
+ session = requests.Session()
27
+ retry = Retry(
28
+ total=total_retries,
29
+ backoff_factor=backoff_factor,
30
+ backoff_max=backoff_max.total_seconds(),
31
+ allowed_methods=["GET", "POST"],
32
+ status_forcelist=[
33
+ HTTPStatus.TOO_MANY_REQUESTS,
34
+ HTTPStatus.INTERNAL_SERVER_ERROR,
35
+ HTTPStatus.BAD_GATEWAY,
36
+ HTTPStatus.SERVICE_UNAVAILABLE,
37
+ HTTPStatus.GATEWAY_TIMEOUT,
38
+ ],
39
+ raise_on_status=False,
40
+ )
41
+ session.mount("http://", HTTPAdapter(max_retries=retry))
42
+ session.mount("https://", HTTPAdapter(max_retries=retry))
43
+ return session
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rslearn
3
- Version: 0.0.25
3
+ Version: 0.0.27
4
4
  Summary: A library for developing remote sensing datasets and models
5
5
  Author: OlmoEarth Team
6
6
  License: Apache License
@@ -248,6 +248,9 @@ Requires-Dist: pycocotools>=2.0; extra == "extra"
248
248
  Requires-Dist: pystac_client>=0.9; extra == "extra"
249
249
  Requires-Dist: rtree>=1.4; extra == "extra"
250
250
  Requires-Dist: termcolor>=3.0; extra == "extra"
251
+ Requires-Dist: xarray>=2024.1; extra == "extra"
252
+ Requires-Dist: zarr>=3.1.2; extra == "extra"
253
+ Requires-Dist: numcodecs>=0.16; extra == "extra"
251
254
  Requires-Dist: satlaspretrain_models>=0.3; extra == "extra"
252
255
  Requires-Dist: scipy>=1.16; extra == "extra"
253
256
  Requires-Dist: terratorch>=1.0.2; extra == "extra"
@@ -587,7 +590,7 @@ data:
587
590
  groups: ["default"]
588
591
  predict_config:
589
592
  groups: ["predict"]
590
- load_all_patches: true
593
+ load_all_crops: true
591
594
  skip_targets: true
592
595
  patch_size: 512
593
596
  trainer:
@@ -750,7 +753,7 @@ test_config:
750
753
  split: val
751
754
  predict_config:
752
755
  groups: ["predict"]
753
- load_all_patches: true
756
+ load_all_crops: true
754
757
  skip_targets: true
755
758
  patch_size: 512
756
759
  ```
@@ -7,41 +7,43 @@ rslearn/main.py,sha256=rrDEoa0xCkDflH-HN2SaHt0hb-rLfXWP-kJKISZAe9s,28714
7
7
  rslearn/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  rslearn/template_params.py,sha256=Vop0Ha-S44ctCa9lvSZRjrMETznJZlR5y_gJrVIwrPg,791
9
9
  rslearn/config/__init__.py,sha256=n1qpZ0ImshTtLYl5mC73BORYyUcjPJyHiyZkqUY1hiY,474
10
- rslearn/config/dataset.py,sha256=AJlS-41B70E2Y4ST545J2P3Kz83jrFCRdkZecKZ7sQY,23255
11
- rslearn/data_sources/__init__.py,sha256=zzuZUxrlEIw84YpD2I0HJvCoLDB29LbmnKTXiJykzGU,660
12
- rslearn/data_sources/aws_landsat.py,sha256=0ZQtmd2NCnvLy4vFSB1AlmoguJbiQB_e_T4eS1tnW9Q,20443
13
- rslearn/data_sources/aws_open_data.py,sha256=rDE9VZXXA669fD9jfOizxpN41lmvvJc-skZz3LettJU,29197
14
- rslearn/data_sources/aws_sentinel1.py,sha256=knBg2ZdwzGRIibUPAqnhYR-DbHqFL4tLsuRVrucTWU4,4745
15
- rslearn/data_sources/aws_sentinel2_element84.py,sha256=VkIAjCqzqi_m6StSQ-aY_AMtesFhkYYgwiUNkpBe7AA,13984
16
- rslearn/data_sources/climate_data_store.py,sha256=gwlbugwAT0YoOINOKNVlZuzpxUO5G0tfzwy4XVlURFg,18360
17
- rslearn/data_sources/copernicus.py,sha256=DLyXwnkFo2LzbxfLKHkOvHyZcNYFg5w-yXQPeBL67_w,35049
18
- rslearn/data_sources/data_source.py,sha256=lxdcxefETX5ui5uUdZn-ACSBhy6YVo4XDfk368EMD40,4862
19
- rslearn/data_sources/earthdaily.py,sha256=BNP7BK_vb9yQw6LaIaJ80vjCfBZ9TeALGkjHYIet_W0,18205
20
- rslearn/data_sources/earthdata_srtm.py,sha256=bwo8e_y9fFPliZ411tTWOiAUlEcb3AWBkeZxnkFY5SI,10633
21
- rslearn/data_sources/eurocrops.py,sha256=FQqdBcNl43fArq6rd_-iffVJyliIDbB0lIHvNdmtQBU,8663
22
- rslearn/data_sources/gcp_public_data.py,sha256=qXWFQ4y0cCVBla68H4bpolG0FKW9_vLyTlA-0mJc1Y0,37349
23
- rslearn/data_sources/google_earth_engine.py,sha256=xdoSDjSVp6lPVPMv4UJZ6BRUozUA2hFbSTl1707TBoM,23523
24
- rslearn/data_sources/local_files.py,sha256=mo5W_BxBl89EPTIHNDEpXM6qBjrP225KK0PcmNgvJZQ,19090
25
- rslearn/data_sources/openstreetmap.py,sha256=TzZfouc2Z4_xjx2v_uv7aPn4tVW3flRVQN4qBfl507E,18161
26
- rslearn/data_sources/planet.py,sha256=6FWQ0bl1k3jwvwp4EVGi2qs3OD1QhnKOKP36mN4HELI,9446
27
- rslearn/data_sources/planet_basemap.py,sha256=e9R6FlagJjg8Z6Rc1dC6zK3xMkCohz8eohXqXmd29xg,9670
28
- rslearn/data_sources/planetary_computer.py,sha256=k6CO5Yim2I-frlD8r2_uBo0CQFw89mN3_5mrv0Xk2WU,26449
29
- rslearn/data_sources/soilgrids.py,sha256=rwO4goFPQ7lx420FvYBHYFXdihnZqn_-IjdqtxQ9j2g,12455
30
- rslearn/data_sources/stac.py,sha256=Xty1JDueAAonNVLRo8vfNBhlHrVLjhmZ-uRBYbrGvtA,10753
31
- rslearn/data_sources/usda_cdl.py,sha256=_WvxZkm0fbXfniRs6NT8iVCbTTmVPflDhsFT2ci6_Dk,6879
32
- rslearn/data_sources/usgs_landsat.py,sha256=kPOb3hsZe5-guUcFZZkwzcRpYZ3Zo7Bk4E829q_xiyU,18516
33
- rslearn/data_sources/utils.py,sha256=v_90ALOuts7RHNcx-j8o-aQ_aFjh8ZhXrmsaa9uEGDA,11651
10
+ rslearn/config/dataset.py,sha256=abxIUFDAYmCd4pzGnkPnW_pYyws1yhXFWJ5HnVU4WHo,23942
11
+ rslearn/data_sources/__init__.py,sha256=FZQckYwsnnLokMeYmi0ktUyQd9bAHyLN1_-Xc3qYLag,767
12
+ rslearn/data_sources/aws_landsat.py,sha256=bJmwBbUV4vjKBNp1MHt4sHhnIjhMis_jOI3FpksQc6w,16435
13
+ rslearn/data_sources/aws_open_data.py,sha256=fum34DqqDiuiiYBfZtGFrNNOLylE9o3o7Cyb2e0Eo0g,29101
14
+ rslearn/data_sources/aws_sentinel1.py,sha256=LfJLDhsd_6h_JinD8PbiiAyxajkIdvAc--5BJryUKlo,4674
15
+ rslearn/data_sources/aws_sentinel2_element84.py,sha256=qeCuiSlvhWChSY3AwYsKT6nZUsjNNWoOBPEUxkV8kJI,10112
16
+ rslearn/data_sources/climate_data_store.py,sha256=mqLJfYubD6m9VwxpLunoIv_MNFN6Ue1hBBVj552e8uQ,18289
17
+ rslearn/data_sources/copernicus.py,sha256=ushAgYGxU2MzPcUNnEvEfPgO0RCC9Rbjzi189xq0jgc,35001
18
+ rslearn/data_sources/data_source.py,sha256=xojlCoAnGTCHKbEx98JkW0oYzAKBbgGMNc0kicEjHWk,4863
19
+ rslearn/data_sources/direct_materialize_data_source.py,sha256=PBmxsLBNakJeX1s92pc4FCuHANfhkYHS2vt60RGdkj0,11276
20
+ rslearn/data_sources/earthdaily.py,sha256=qUtHUG1oV5IlCWXVovUcYxQhqdNDKWaEe-BKnooWX88,14623
21
+ rslearn/data_sources/earthdatahub.py,sha256=KRf1VnxPI9jsT0utEkeYvsCwu7LXo9t-RvMi8gXehag,15889
22
+ rslearn/data_sources/eurocrops.py,sha256=dJ4d0xvt-rID_HuAchyucFJBuAQL-Kk1h_qm6GOH-mE,8641
23
+ rslearn/data_sources/gcp_public_data.py,sha256=9M_tqGUG9740TC3ZRJ8-sekWkKFRp7_XdYHQEAloJpw,37301
24
+ rslearn/data_sources/google_earth_engine.py,sha256=7fytWecT7oWCx9u4nXidb4ycdOoX2hV3qCeVvOPleC8,23475
25
+ rslearn/data_sources/hf_srtm.py,sha256=tIKPdPt2vpRscsAmbsKbn_UlEIgJYua6lXRU2wwyXq4,21250
26
+ rslearn/data_sources/local_files.py,sha256=1m2fz5d5ZLDtx-qMxqVNGzVeGSL8RVYmrNe4NiQS5_Y,19065
27
+ rslearn/data_sources/openstreetmap.py,sha256=KZe52ZYwzetjsyCaWN43-WUcH1Xd8j6AocaOPidG6Yo,18162
28
+ rslearn/data_sources/planet.py,sha256=K4Lpm9UyUJjIiSISe3jDlV_o0UipLRJ2Snw7rmJfz2g,9398
29
+ rslearn/data_sources/planet_basemap.py,sha256=oColM4udr23e8c9dK-gc08a2q4Iil23tun3P9zjPOqc,9622
30
+ rslearn/data_sources/planetary_computer.py,sha256=hiYdYgU5gP2mJuDvF4tS4Sk4vWOndUcwfFUpQ7x-lZY,27231
31
+ rslearn/data_sources/soilgrids.py,sha256=qbnnCIOa6tlN8wxmNCzAj60-pghKEbRxa7lVIgM95Dk,12484
32
+ rslearn/data_sources/stac.py,sha256=Gj8TZ5pifVzWPCuzgphrle2ekQ02OET54rj-02sR2nw,10705
33
+ rslearn/data_sources/usda_cdl.py,sha256=3GhcgTB50T7GA44nB9WwItqDJliELquw_YbiAVxh6kc,6808
34
+ rslearn/data_sources/usgs_landsat.py,sha256=IsQOhWY8nwmgixJu1uMSR4CqsC3igcP3TArdBXkETd8,10178
35
+ rslearn/data_sources/utils.py,sha256=NOC0qOyYVS6f8EUrSeP4mH0XZbSrtTLV-gKGbCC6ccg,16586
34
36
  rslearn/data_sources/vector_source.py,sha256=NCa7CxIrGKe9yRT0NyyFKFQboDGDZ1h7663PV9OfMOM,44
35
- rslearn/data_sources/worldcereal.py,sha256=rGGxwJAC3pAASVBQoUhwS3qL-qcmF6W__Tb53qWCEmE,21501
36
- rslearn/data_sources/worldcover.py,sha256=n7gi-JRytxkvkUhKT--dVziMcWSSyMbZA7ZCzLT2MJY,6037
37
- rslearn/data_sources/worldpop.py,sha256=S3RSc5kTwSs2bcREjNarBsqf3MBX5CN0eHj7Qkx4K74,5625
38
- rslearn/data_sources/xyz_tiles.py,sha256=P601CvUmoVDC_ZRVhPKaIoPYYCq5UhZ-v7DaGlN5y_0,13797
37
+ rslearn/data_sources/worldcereal.py,sha256=OWZA0pvQQiKvuA5AVAc0lw8JStMEeF4DYOh0n2vdg6I,21521
38
+ rslearn/data_sources/worldcover.py,sha256=ahyrGoXMAGWsIUDHSrqPywiK7ycwUD3E3BruNMxpo90,6057
39
+ rslearn/data_sources/worldpop.py,sha256=lUI7syzNs4FiGVLz2KIiFo63MafFSyWg__YdrSOXtWA,5645
40
+ rslearn/data_sources/xyz_tiles.py,sha256=RKn3q19FbgOR8a-qQ4ijnNPjmYPaVimIaSL7lsWlYqM,13729
39
41
  rslearn/dataset/__init__.py,sha256=bHtBlEEBCekO-gaJqiww0-VjvZTE5ahx0llleo8bfP8,289
40
42
  rslearn/dataset/add_windows.py,sha256=NwIvku6zxCJ9kgVFa5phJc0Gj1Y1bCzh6TLb9nEGl0s,8462
41
43
  rslearn/dataset/dataset.py,sha256=YyGFy_VGUaOPfrEQqBl0Fp5JAsH3KNCqo6ZTu3TW4yY,3223
42
44
  rslearn/dataset/handler_summaries.py,sha256=wI99RDk5erCWkzl1A7Uc4chatQ9KWIr4F_0Hxr9Co6s,2607
43
45
  rslearn/dataset/manage.py,sha256=-lGSIgk6Z7-verF_POwe4n5w9eSpgyt4nEOcOj382rc,18971
44
- rslearn/dataset/materialize.py,sha256=o05OeLk_wWEOsw15oc5yjpD4J-twGCTfXAtxyAQsQ9I,20974
46
+ rslearn/dataset/materialize.py,sha256=VoL5Qf5pGcQV4QMlO5vrcu7w0Sl1NdIRLUVk0kSCMOY,21225
45
47
  rslearn/dataset/remap.py,sha256=6MaImsY02GNACpvRM81RvWmjZWRfAHxo_R3Ox6XLF6A,2723
46
48
  rslearn/dataset/window.py,sha256=X4q8YzcSOTtwKxCPf71QLMoyKUtYMSnZu0kPnmVSUx4,10644
47
49
  rslearn/dataset/storage/__init__.py,sha256=R50AVV5LH2g7ol0-jyvGcB390VsclXGbJXz4fmkn9as,52
@@ -52,10 +54,10 @@ rslearn/models/anysat.py,sha256=nzk6hB83ltNFNXYRNA1rTvq2AQcAhwyvgBaZui1M37o,8107
52
54
  rslearn/models/attention_pooling.py,sha256=Kss1W_HYNzfX78RVDi18m0-cG2BoPsC240u0oEqJ0d4,7187
53
55
  rslearn/models/clip.py,sha256=QG1oUFqcVuNEhx7BNfJ1FnxIOMNUwRNBwXCe3CR6wFI,2415
54
56
  rslearn/models/component.py,sha256=uikFDzPYaW_LSXsrSsES1aup4IDIuWHsitWLpKgF7zU,3432
55
- rslearn/models/concatenate_features.py,sha256=Attemr5KurxlOojpclD0Pd5Cu2KHpNdpXe8jCSjpJ9U,3818
57
+ rslearn/models/concatenate_features.py,sha256=0gZPkUBpyhzq1HNhN7mKl44u2vsL2p-o3gy5gpAy2go,3947
56
58
  rslearn/models/conv.py,sha256=dEAAfhPo4bFlZPSAQjzqZTpP-hdJ394TytYssVK-fDA,2001
57
59
  rslearn/models/croma.py,sha256=BcKV4-D4uira6f9zvW73aslF_XitAhObnyrE_3iTcTs,11008
58
- rslearn/models/dinov3.py,sha256=-hyhkxbjns66s9xKT3bPU1dTzanPPc7qJ0dNAwV19-E,6497
60
+ rslearn/models/dinov3.py,sha256=Q9X7VTwzjllLSEvc235C9BY_jMnIoSybsiOkeA58uHo,6472
59
61
  rslearn/models/faster_rcnn.py,sha256=yOipLPmVHbadvYCR9xfCYgmkU9Mot6fgDK-kKicVTlo,8685
60
62
  rslearn/models/feature_center_crop.py,sha256=_Mu3E4iJLBug9I4ZIBIpB_VJo-xGterHmhtIFGaHR34,1808
61
63
  rslearn/models/fpn.py,sha256=qm7nKMgsZrCoAdz8ASmNKU2nvZ6USm5CedMfy_w_gwE,2079
@@ -64,12 +66,12 @@ rslearn/models/molmo.py,sha256=lXnevwTCNyc1XcnJUB5_pK1G2AJGYMvQYU21mZFf5u0,2246
64
66
  rslearn/models/multitask.py,sha256=bpFxvtFowRyT-tvRSdY7AKbEx_i1y7sToEzZgTMcF4s,16264
65
67
  rslearn/models/panopticon.py,sha256=lXXBusXZfwdf10rBVPAQSbaGOMyKCDeEBmXShzvfMoU,5947
66
68
  rslearn/models/pick_features.py,sha256=fI9SYubqpCWOAHYGVUSg5sgD31dsnAR9mNuLmqfIeL8,1110
67
- rslearn/models/pooling_decoder.py,sha256=zrMH6wUExCa-XD1q9CIFD2ScgiasapyJs9plhcUxhIs,4767
68
- rslearn/models/prithvi.py,sha256=J45eC1pd4l5AGlr19Qjrjrw5PPwvYE9bNM5qCFoznmg,40390
69
+ rslearn/models/pooling_decoder.py,sha256=tsRYihOPxhKUEnzbVueZ9Vr2pNXkt4fAkrbXC9Hftxw,4773
70
+ rslearn/models/prithvi.py,sha256=YTc26hBDJd6e5lky9Vqkz9x6tA2ZiY-GH2X3EFhJ0Zs,40347
69
71
  rslearn/models/resize_features.py,sha256=U7ZIVwwToJJnwchFG59wLWWP9eikHDB_1c4OtpubxHU,1693
70
72
  rslearn/models/sam2_enc.py,sha256=WZOtlp0FjaVztW4gEVIcsFQdKArS9iblRODP0b6Oc8M,3641
71
73
  rslearn/models/satlaspretrain.py,sha256=2R48ulbtd44Qy2FYJCkllE2Wk35eZxkc79ruSgkmgcQ,3384
72
- rslearn/models/simple_time_series.py,sha256=farQwt_nJVyAbgaM2UzdyqpDuIO0SLmHr9e9EVPSWCE,14678
74
+ rslearn/models/simple_time_series.py,sha256=CvJYMIC0cw26TnnwzJn5YTywi-NYEnGRzNb2a0bMf4E,18045
73
75
  rslearn/models/singletask.py,sha256=9DM9a9-Mv3vVQqRhPOIXG2HHuVqVa_zuvgafeeYh4r0,1903
74
76
  rslearn/models/ssl4eo_s12.py,sha256=DOlpIj6NfjIlWyJ27m9Xo8TMlovBDstFq0ARnmAJ6qY,3919
75
77
  rslearn/models/swin.py,sha256=Xqr3SswbHP6IhwT2atZMAPF2TUzQqfxvihksb8WSeRo,6065
@@ -79,11 +81,11 @@ rslearn/models/trunk.py,sha256=1GCH9iyLIytoHVntLSMwfH9duQpe1W4DPmOClLpPKjc,4778
79
81
  rslearn/models/unet.py,sha256=HuuINvkB1-5w9ZOTXZCWkVxJShruPKCol8pKeA3zw_4,7251
80
82
  rslearn/models/upsample.py,sha256=JvfnktT6Dgcql3cSoySWXZ7dmkDkfpRo6vDkpz8KFAQ,1326
81
83
  rslearn/models/use_croma.py,sha256=OSBqMuLp-pDtqPNWAVBfmX4wckmyYCKtUDdGCjJk_K8,17966
82
- rslearn/models/clay/clay.py,sha256=q2vcqyRFhCJvzLHwHLxHfWGyvVt819Xmk7TzuhXdPFI,8478
84
+ rslearn/models/clay/clay.py,sha256=L8pdT3v6cH6H8Kz_JB_851vpZF1Sj8jHz68MkiZbd44,8474
83
85
  rslearn/models/clay/configs/metadata.yaml,sha256=rZTFh4Yb9htEfbQNOPl4HTbFogEhzwIRqFzG-1uT01Y,4652
84
86
  rslearn/models/detr/__init__.py,sha256=GGAnTIhyuvl34IRrJ_4gXjm_01OlM5rbQQ3c3TGfbK8,84
85
87
  rslearn/models/detr/box_ops.py,sha256=ORCF6EwMpMBB_VgQT05SjR47dCR2rN2gPhL_gsuUWJs,3236
86
- rslearn/models/detr/detr.py,sha256=ZiYNwJ3zWqZdvvzc0CXDzdvcwSCO_wSOCWlChemTsX8,19178
88
+ rslearn/models/detr/detr.py,sha256=dmc9YEkQk5WyfQTQI47sv5yDxzJoeZFW_j6F03OkvLA,19236
87
89
  rslearn/models/detr/matcher.py,sha256=4h_xFlgTMEJvJ6aLZUamrKZ72L5hDk9wPglNZ81JBg8,4533
88
90
  rslearn/models/detr/position_encoding.py,sha256=8FFoBT-Jtgqk7D4qDBTbVLOeAdmjdjtJTC608TaX6yY,3869
89
91
  rslearn/models/detr/transformer.py,sha256=aK4HO7AkCZn7xGHP3Iq91w2iFPVshugOILYAjVjroCw,13971
@@ -92,7 +94,7 @@ rslearn/models/galileo/__init__.py,sha256=QQa0C29nuPRva0KtGiMHQ2ZB02n9SSwj_wqTKP
92
94
  rslearn/models/galileo/galileo.py,sha256=CTEuYGPmxhVv8YsZzFm0BeVW2yvdXp7j1GifT53EDLU,22525
93
95
  rslearn/models/galileo/single_file_galileo.py,sha256=l5tlmmdr2eieHNH-M7rVIvcptkv0Fuk3vKXFW691ezA,56143
94
96
  rslearn/models/olmoearth_pretrain/__init__.py,sha256=AjRvbjBdadCdPh-EdvySH76sVAQ8NGQaJt11Tsn1D5I,36
95
- rslearn/models/olmoearth_pretrain/model.py,sha256=Mfq7mv438zhOHBsU2jT19NMslNlslWm1-sCE06wVlbo,17829
97
+ rslearn/models/olmoearth_pretrain/model.py,sha256=wFWiNX4vyu49cYtjgb0VQMEZBk1LnaIEhTJnvzHduMY,17902
96
98
  rslearn/models/olmoearth_pretrain/norm.py,sha256=pV-u9eBGxfiSFDMEipDwyTgKGhN1G5kSoOC5CBE1m-0,3336
97
99
  rslearn/models/panopticon_data/sensors/drone.yaml,sha256=xqWS-_QMtJyRoWXJm-igoSur9hAmCFdqkPin8DT5qpw,431
98
100
  rslearn/models/panopticon_data/sensors/enmap.yaml,sha256=b2j6bSgYR2yKR9DRm3SPIzSVYlHf51ny_p-1B4B9sB4,13431
@@ -113,13 +115,14 @@ rslearn/tile_stores/__init__.py,sha256=-cW1J7So60SEP5ZLHCPdaFBV5CxvV3QlOhaFnUkhT
113
115
  rslearn/tile_stores/default.py,sha256=PYaDNvBxhJTDKJGw0EjDTSE1OKajR7_iJpMbOjj-mE8,15054
114
116
  rslearn/tile_stores/tile_store.py,sha256=9AeYduDYPp_Ia2NMlq6osptpz_AFGIOQcLJrqZ_m-z0,10469
115
117
  rslearn/train/__init__.py,sha256=fnJyY4aHs5zQqbDKSfXsJZXY_M9fbTsf7dRYaPwZr2M,30
116
- rslearn/train/all_patches_dataset.py,sha256=EVoYCmS3g4OfWPt5CZzwHVx9isbnWh5HIGA0RBqPFeA,21145
117
- rslearn/train/data_module.py,sha256=pgut8rEWHIieZ7RR8dUvhtlNqk0egEdznYF3tCvqdHg,23552
118
- rslearn/train/dataset.py,sha256=gMOUmhaKc9whTFJLCeTQC0J6F-pkphEUVR6Cp42vM-0,38659
119
- rslearn/train/lightning_module.py,sha256=V4YoEg9PrwrgG4q9Dmv_9OBrSIK-SRPzjWtZRIfmPFg,15366
120
- rslearn/train/model_context.py,sha256=6o66BY6okBK-D5e0JUwPd7fxD_XehVaqxdQkJJKmQ3E,2580
118
+ rslearn/train/all_crops_dataset.py,sha256=CWnqbSjRXJZQsudljvpA07oldiP4fZTmjwrT0sjVnq4,21399
119
+ rslearn/train/data_module.py,sha256=yPShftkHJ2bhJ4carwYYb9c3PkkP7ArzXQyu37EuAxk,23718
120
+ rslearn/train/dataset.py,sha256=AAkdHX3q8VD1Geq9yIatiPkM5blA2luVPPwDmXDB6Z8,43284
121
+ rslearn/train/dataset_index.py,sha256=S5iXhQga5gnnkDqThXXlyjIwkJBPVWiUfDPx3iVs-pw,5306
122
+ rslearn/train/lightning_module.py,sha256=m0aIGk5xO5y12DEiwSl6eAko6X-gQ78_Wsbvz4Hb_NE,15364
123
+ rslearn/train/model_context.py,sha256=8DMWGj5xCRmRDo_38lkhkUMHfK_yg3XZrUJQIz5a1vA,3200
121
124
  rslearn/train/optimizer.py,sha256=EKSqkmERalDA0bF32Gey7n6z69KLyaUWKlRsGJfKBmE,927
122
- rslearn/train/prediction_writer.py,sha256=rW0BUaYT_F1QqmpnQlbrLiLya1iBfC5Pb78G_NlF-vA,15956
125
+ rslearn/train/prediction_writer.py,sha256=cRFehEtr0iBuVqzE69a0B4Lvb8ywxLeyon34KWI86H0,16961
123
126
  rslearn/train/scheduler.py,sha256=Yyq2fMHH08OyGt9qWD7iLc92XNIBbZHLtzlLR-f732s,2728
124
127
  rslearn/train/callbacks/__init__.py,sha256=VNV0ArZyYMvl3dGK2wl6F046khYJ1dEBlJS6G_SYNm0,47
125
128
  rslearn/train/callbacks/adapters.py,sha256=yfv8nyCj3jmo2_dNkFrjukKxh0MHsf2xKqWwMF0QUtY,1869
@@ -127,36 +130,38 @@ rslearn/train/callbacks/freeze_unfreeze.py,sha256=8fIzBMhCKKjpTffIeAdhdSjsBd8NjT
127
130
  rslearn/train/callbacks/gradients.py,sha256=4YqCf0tBb6E5FnyFYbveXfQFlgNPyxIXb2FCWX4-6qs,5075
128
131
  rslearn/train/callbacks/peft.py,sha256=wEOKsS3RhsRaZTXn_Kz2wdsZdIiIaZPdCJWtdJBurT8,4156
129
132
  rslearn/train/tasks/__init__.py,sha256=dag1u72x1-me6y0YcOubUo5MYZ0Tjf6-dOir9UeFNMs,75
130
- rslearn/train/tasks/classification.py,sha256=72ZBcbunMsdPYQN53S-4GfiLIDrr1X3Hni07dBJ0pu0,14261
131
- rslearn/train/tasks/detection.py,sha256=8nxa90ht0-xlcO_gsI-zR02nL82-wJXq4LpXNFvg5Lw,21730
133
+ rslearn/train/tasks/classification.py,sha256=H-Ayqm59IxwrczC8lUV5J5vg-JILhQhTiVlyaTpBs2k,14259
134
+ rslearn/train/tasks/detection.py,sha256=uDMGtsCMSk9OGXn-vpFKBAyHyVN0ji2NCfqBgg1BQyw,21725
132
135
  rslearn/train/tasks/embedding.py,sha256=NdJEAaDWlWYzvOBVf7eIHfFOzqTgavfFH1J1gMbAMVo,3891
133
136
  rslearn/train/tasks/multi_task.py,sha256=32hvwyVsHqt7N_M3zXsTErK1K7-0-BPHzt7iGNehyaI,6314
134
- rslearn/train/tasks/per_pixel_regression.py,sha256=Clrod6LQGjgNC0IAR4HLY7eCGWMHj2mk4d4moZCl4Qc,10209
135
- rslearn/train/tasks/regression.py,sha256=bVS_ApZSpbL0NaaM8Mu5Bsu4SBUyLpVtrPslulvvZHs,12695
136
- rslearn/train/tasks/segmentation.py,sha256=ZAAal6VShK4OPd-zArDmKdFH58JijMA6aGx_kp3eHPs,29094
137
+ rslearn/train/tasks/per_pixel_regression.py,sha256=njShN-U9fx3SPcCxGgbDlZAp3DT_GlTt0BRZS416gnw,10387
138
+ rslearn/train/tasks/regression.py,sha256=_TGlj3PA14Iye0duf25TcGZQpFXU9fGfNilzpNuPS78,12693
139
+ rslearn/train/tasks/segmentation.py,sha256=dn1yo1dIArKvW9Giw8-LZyIZ87q76eslL0mk58GyApo,29663
137
140
  rslearn/train/tasks/task.py,sha256=nMPunl9OlnOimr48saeTnwKMQ7Du4syGrwNKVQq4FL4,4110
138
141
  rslearn/train/transforms/__init__.py,sha256=BkCAzm4f-8TEhPIuyvCj7eJGh36aMkZFYlq-H_jkSvY,778
139
- rslearn/train/transforms/concatenate.py,sha256=hVVBaxIdk1Cx8JHPirj54TGpbWAJx5y_xD7k1rmGmT0,3166
140
- rslearn/train/transforms/crop.py,sha256=d5mrC8k7g4zz9J0RJrjz_pS1q06HfhUdzH6dUlL3Wqc,4668
141
- rslearn/train/transforms/flip.py,sha256=KjMoZ4eFbu8119IlUDU4BBK06U76WjWEFmvqr9oiOMk,3836
142
- rslearn/train/transforms/mask.py,sha256=KMz-KeC4cuahA8CdRWXK9omeMfwheEM8avhj6yXGmm8,2407
143
- rslearn/train/transforms/normalize.py,sha256=H9hAYDVA__v0IpqC-7q_PyZ05qG6YTsORVQ7DTiLP6o,6382
144
- rslearn/train/transforms/pad.py,sha256=5Mks7Vp8_hRlsRjw9PERsQ7mVVKTAfg7Q6jUguXMhGY,5109
145
- rslearn/train/transforms/resize.py,sha256=AeMuhMlG-G7NRIMNucPESethohGe1ZKew-EVK2HzeSM,2636
146
- rslearn/train/transforms/select_bands.py,sha256=vqerph1UUS9i2G9xwyH6_5AoOuH9tLER8zppR4XiZs4,2802
147
- rslearn/train/transforms/sentinel1.py,sha256=PMMFo4RysMpZS7PBZ3yHGzJ5JADPZAOZpCbGhqL5vsc,2384
142
+ rslearn/train/transforms/concatenate.py,sha256=S8f1svzwb5UmeAgzXe4Af_hFvt5o0tQctIE6t3QYuPI,2625
143
+ rslearn/train/transforms/crop.py,sha256=_3Ca1KcIcZDD9x3WpFWIN54GrGosgg9b0xJiCboIOzs,4299
144
+ rslearn/train/transforms/flip.py,sha256=ptdbbelMWy6uI3vfXWY7flKGScGmv1hvWCJcAWnvuEo,3555
145
+ rslearn/train/transforms/mask.py,sha256=UnUeQp9HNab18EUgWJKieeMU0V7Fvgmoqg15INIkIeU,2348
146
+ rslearn/train/transforms/normalize.py,sha256=HXiVHBUxOsVYt9VeEs7KbfPFJxMxz_lh_RczLUcKlEw,3687
147
+ rslearn/train/transforms/pad.py,sha256=N2m4ni_TgeAmpzL9xwD8Qedmq7HbnundvBRMIp1TmAY,4817
148
+ rslearn/train/transforms/resize.py,sha256=LPXCD6NS8Xi1uPOtHxRWtT5CAkpEzsVafHkHIQ6PEO8,1959
149
+ rslearn/train/transforms/select_bands.py,sha256=owxMOvWEp8lRZhj6pQ1qFYebKZCQJZZCW8sBrK_T9-I,1868
150
+ rslearn/train/transforms/sentinel1.py,sha256=zYwT3amv1M7BYZIfkIX3J2Rzh161d-ngCqp3ypO9gBE,2011
148
151
  rslearn/train/transforms/transform.py,sha256=n1Qzqix2dVvej-Q7iPzHeOQbqH79IBlvqPoymxhNVpE,4446
149
- rslearn/utils/__init__.py,sha256=GNvdTUmXakiEMnLdje7k1fe5aC7SFVqP757kbpN6Fzw,558
152
+ rslearn/utils/__init__.py,sha256=GZc1erpEfXTc32yjEDbt5rnMrnXEBY7WVm3v4NlwwWY,620
150
153
  rslearn/utils/array.py,sha256=RC7ygtPnQwU6Lb9kwORvNxatJcaJ76JPsykQvndAfes,2444
151
154
  rslearn/utils/colors.py,sha256=ELY9_buH06TOVPLrDAyf2S0G--ZiOxnnP8Ujim6_3ig,369
152
155
  rslearn/utils/feature.py,sha256=lsg0WThZDJzo1mrbaL04dXYI5G3x-n5FG9aEjj7uUaI,1649
153
156
  rslearn/utils/fsspec.py,sha256=h3fER_bkewzR9liEAULXguTIvXLUXA17pC_yZoWN5Tk,5902
154
- rslearn/utils/geometry.py,sha256=S60uEvCQ3SyR2-3TJ1yUucFmGRM_rcoIT_gH83PN3RE,21485
157
+ rslearn/utils/geometry.py,sha256=VzLoxtwdV3uC3szowT-bGuCFF6ge8eK0m01lq8q-01Q,22423
155
158
  rslearn/utils/get_utm_ups_crs.py,sha256=kUrcyjCK7KWvuP1XR-nURPeRqYeRO-3L8QUJ1QTF9Ps,3599
156
159
  rslearn/utils/grid_index.py,sha256=hRmrtgpqN1pLa-djnZtgSXqKJlbgGyttGnCEmPLD0zo,2347
157
160
  rslearn/utils/jsonargparse.py,sha256=TRyZA151KzhjJlZczIHYguEA-YxCDYaZ2IwCRgx76nM,4791
161
+ rslearn/utils/m2m_api.py,sha256=YemQkh9ItdU6ojP3XBUf9rj1we_P-8mdy7IHvlMNlKQ,8893
158
162
  rslearn/utils/mp.py,sha256=XYmVckI5TOQuCKc49NJyirDJyFgvb4AI-gGypG2j680,1399
159
163
  rslearn/utils/raster_format.py,sha256=fwotJBadwqYSdK8UokiKOk1pOF8JMim3kP_VwLWivPI,27382
164
+ rslearn/utils/retry_session.py,sha256=alVwqvZqqG3TZNg7NVbgfpUnSMdWve8T7gYzZmBz1jc,1284
160
165
  rslearn/utils/rtree_index.py,sha256=j0Zwrq3pXuAJ-hKpiRFQ7VNtvO3fZYk-Em2uBPAqfx4,6460
161
166
  rslearn/utils/spatial_index.py,sha256=eomJAUgzmjir8j9HZnSgQoJHwN9H0wGTjmJkMkLLfsU,762
162
167
  rslearn/utils/sqlite_index.py,sha256=YGOJi66544e6JNtfSft6YIlHklFdSJO2duxQ4TJ2iu4,2920
@@ -170,10 +175,10 @@ rslearn/vis/render_sensor_image.py,sha256=D0ynK6ABPV046970lIKwF98klpSCtrsUvZTwtZ
170
175
  rslearn/vis/render_vector_label.py,sha256=ncwgRKCYCJCK1-wTpjgksOiDDebku37LpAyq6wsg4jg,14939
171
176
  rslearn/vis/utils.py,sha256=Zop3dEmyaXUYhPiGdYzrTO8BRXWscP2dEZy2myQUnNk,2765
172
177
  rslearn/vis/vis_server.py,sha256=kIGnhTy-yfu5lBOVCoo8VVG259i974JPszudCePbzfI,20157
173
- rslearn-0.0.25.dist-info/licenses/LICENSE,sha256=_99ZWPoLdlUbqZoSC5DF4ihiNwl5rTEmBaq2fACecdg,11352
174
- rslearn-0.0.25.dist-info/licenses/NOTICE,sha256=wLPr6rwV_jCg-xEknNGwhnkfRfuoOE9MZ-lru2yZyLI,5070
175
- rslearn-0.0.25.dist-info/METADATA,sha256=L_Ilp6WKln27vT4ja6ky8qft_1pkm2aql-uXOtghpTo,38576
176
- rslearn-0.0.25.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
177
- rslearn-0.0.25.dist-info/entry_points.txt,sha256=doTBQ57NT7nq-dgYGgTTw6mafcGWb_4PWYtYR4rGm50,46
178
- rslearn-0.0.25.dist-info/top_level.txt,sha256=XDKo90WBH8P9RQumHxo0giLJsoufT4r9odv-WE6Ahk4,8
179
- rslearn-0.0.25.dist-info/RECORD,,
178
+ rslearn-0.0.27.dist-info/licenses/LICENSE,sha256=_99ZWPoLdlUbqZoSC5DF4ihiNwl5rTEmBaq2fACecdg,11352
179
+ rslearn-0.0.27.dist-info/licenses/NOTICE,sha256=wLPr6rwV_jCg-xEknNGwhnkfRfuoOE9MZ-lru2yZyLI,5070
180
+ rslearn-0.0.27.dist-info/METADATA,sha256=_6aHsGpgH_T2MQSb9qKeYshP6zdzwu3CmI2sBhD3dqk,38714
181
+ rslearn-0.0.27.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
182
+ rslearn-0.0.27.dist-info/entry_points.txt,sha256=doTBQ57NT7nq-dgYGgTTw6mafcGWb_4PWYtYR4rGm50,46
183
+ rslearn-0.0.27.dist-info/top_level.txt,sha256=XDKo90WBH8P9RQumHxo0giLJsoufT4r9odv-WE6Ahk4,8
184
+ rslearn-0.0.27.dist-info/RECORD,,