From b4ec234ec2cc01b7beccc0a3a52827081bbb5a43 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Fri, 15 Nov 2024 16:46:02 -0800 Subject: [PATCH 01/56] Add ability to open ee.Image objects --- xee/ext.py | 11 ++++++----- xee/ext_integration_test.py | 8 ++++++++ 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index 2bcd523..763fe84 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -1122,11 +1122,12 @@ def open_dataset( if ee.data.getUserAgent() != user_agent: ee.data.setUserAgent(user_agent) - collection = ( - filename_or_obj - if isinstance(filename_or_obj, ee.ImageCollection) - else ee.ImageCollection(self._parse(filename_or_obj)) - ) + if isinstance(filename_or_obj, ee.ImageCollection): + collection = filename_or_obj + elif isinstance(filename_or_obj, ee.Image): + collection = ee.ImageCollection(filename_or_obj) + else: + collection = ee.ImageCollection(self._parse(filename_or_obj)) store = EarthEngineStore.open( collection, diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 929ad3c..a62a79b 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -382,6 +382,14 @@ def test_open_dataset__n_images(self): self.assertLen(ds.time, 1) + def test_open_dataset_image_to_imagecollection(self): + """Ensure that opening a ee.Image is the same as opening a single image ee.ImageCollection""" + img = ee.Image('CGIAR/SRTM90_V4') + ic = ee.ImageCollection(img) + ds1 = xr.open_dataset(img, engine='ee') + ds2 = xr.open_dataset(ic, engine='ee') + self.assertTrue(ds1.identical(ds2)) + def test_can_chunk__opened_dataset(self): ds = xr.open_dataset( 'NASA/GPM_L3/IMERG_V07', From afaa9c53eb4ac8f25f0ac05f5de194c5cd3a7ea1 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Mon, 18 Nov 2024 10:47:16 -0800 Subject: [PATCH 02/56] End docstring with punctuation --- xee/ext_integration_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index a62a79b..8ea37aa 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -383,7 +383,7 @@ def test_open_dataset__n_images(self): self.assertLen(ds.time, 1) def test_open_dataset_image_to_imagecollection(self): - """Ensure that opening a ee.Image is the same as opening a single image ee.ImageCollection""" + """Ensure that opening an ee.Image is the same as opening a single image ee.ImageCollection.""" img = ee.Image('CGIAR/SRTM90_V4') ic = ee.ImageCollection(img) ds1 = xr.open_dataset(img, engine='ee') From c2e2a9f94c3148d7dbeb1adf8c095269e1a92495 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Thu, 2 Jan 2025 12:25:36 -0800 Subject: [PATCH 03/56] Expose __version__ as module attribute --- xee/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xee/__init__.py b/xee/__init__.py index 83f21cd..f2e8c34 100644 --- a/xee/__init__.py +++ b/xee/__init__.py @@ -14,3 +14,4 @@ # ============================================================================== """A Google Earth Engine extension for Xarray.""" from .ext import * +from .ext import __version__ From fd9e20a4dc01496d4c293af0a32b913aa6513ba6 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 7 Jan 2025 07:34:12 -0800 Subject: [PATCH 04/56] Add install docs PiperOrigin-RevId: 712905652 --- README.md | 7 ++- docs/index.md | 1 + docs/installation.md | 115 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 121 insertions(+), 2 deletions(-) create mode 100644 docs/installation.md diff --git a/README.md b/README.md index 200ae57..d61baba 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,13 @@ import ee import xarray ``` -Next, initialize the EE client with the high volume API: +Next, specify your EE-registered cloud project ID and initialize the EE client +with the high volume API: ```python -ee.Initialize(opt_url='https://earthengine-highvolume.googleapis.com') +ee.Initialize( + project='my-project-id' + opt_url='https://earthengine-highvolume.googleapis.com') ``` Open any Earth Engine ImageCollection by specifying the Xarray engine as `'ee'`: diff --git a/docs/index.md b/docs/index.md index 548ef8c..e5a5d42 100644 --- a/docs/index.md +++ b/docs/index.md @@ -30,5 +30,6 @@ between these tools. ```{toctree} :maxdepth: 1 why-xee.md +installation.md api.md ``` diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000..a87aaf0 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,115 @@ +# Installation + +Install Xee and its dependencies using `pip` or conda-like package managers. To +help minimize system disruption and package conflicts, it's recommended to use +virtual environments like Python's +[`venv`](https://docs.python.org/3/library/venv.html) with `pip` or [conda's +integrated environment management +system](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html). + +Install with `pip`: + +```shell +pip install --upgrade xee +``` + +Install with conda: + +```shell +conda install -c conda-forge xee +``` + +## Earth Engine setup + +Xee makes requests to [Google Earth +Engine](https://developers.google.com/earth-engine/guides) for data. To use +Earth Engine, you'll need to create and register a Google Cloud project, +authenticate with Google, and initialize the service. + +If you already have a Cloud project registered for Earth Engine and are familiar +with Earth Engine authentication and initialization, you can skip this section. + +**Note**: the authentication and initialization steps described in the following +sections cover the majority of common system configurations and access methods, +if you're having trouble, refer to the Earth Engine [Authentication and +Initialization guide](https://developers.google.com/earth-engine/guides/auth). + +### Create and register a Cloud project + +Follow instructions in the [Earth Engine Access +guide](https://developers.google.com/earth-engine/guides/access#get_access_to_earth_engine +) to create and register a Google Cloud project. + +### Authentication + +Google needs to know who is accessing Earth Engine to determine what services +are available and what permissions are granted. The goal of authentication is to +establish credentials that can be used during initialization. There are several +ways to verify your identity and create credentials, depending on your working +environment: + +#### Persistent environment + +If you're working from a system with a persistent environment, such as a local +computer or on-premises server, you can authenticate using the [Earth Engine +command line +utility](https://developers.google.com/earth-engine/guides/command_line#authenticate): + +```shell +earthengine authenticate +``` + +This command opens a browser window for authentication. Once authenticated, the +credentials are stored locally (`~/.config/earthengine/credentials`), allowing +them to be used in subsequent initialization to the Earth Engine service. This +is typically a one-time step. + +#### Temporary environment + +If you're working from a system like [Google Colab](https://colab.google/) that +provides a temporary environment recycled after use, you'll need to authenticate +every session. In this case, you can use the `earthengine-api` library +(installed with Xee) to authenticate interactively: + +```python +ee.Authenticate() +``` + +This method selects the most appropriate [authentication +mode](https://developers.google.com/earth-engine/guides/auth#authentication_details) +and guides you through steps to generate authentication credentials. Be sure to +rerun the authentication process each time the environment is reset. + +### Initialization + +Initialization checks user authentication credentials, sets the Cloud project to +use for requests, and connects the client to Earth Engine's services. At the +top of your script, include one of the following expressions with the `project` +argument modified to match the Google Cloud project ID enabled and registered +for Earth Engine use. + +#### High-volume endpoint + +If you are requesting stored data (supplying a collection ID or passing an +unmodified `ee.ImageCollection()` object to `xarray.open_dataset`), connect to +the [high-volume +endpoint](https://developers.google.com/earth-engine/guides/processing_environments#high-volume_endpoint). + +```python +ee.Initialize( + project='your-project-id', + opt_url='https://earthengine-highvolume.googleapis.com' +) +``` + +#### Standard endpoint + +If you are requesting computed data (applying expressions to the data), consider +connecting to the [standard +endpoint](https://developers.google.com/earth-engine/guides/processing_environments#standard_endpoint). +It utilizes caching, so it can be more efficient if you need to rerun or adjust +something about the request. + +```python + ee.Initialize(project='your-project-id') +``` From 5fac43a81a380c4d9552cac3fb6de83f8c3a8ec1 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 7 Jan 2025 12:08:03 -0800 Subject: [PATCH 05/56] Account for mask byte in chunk size calculation PiperOrigin-RevId: 712996660 --- xee/ext.py | 30 ++++++++++++++++-------------- xee/ext_test.py | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 47 insertions(+), 27 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index 763fe84..78663ab 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -67,10 +67,8 @@ 'double': np.float64, } -# While this documentation says that the limit is 10 MB... -# https://developers.google.com/earth-engine/guides/usage#request_payload_size -# actual byte limit seems to depend on other factors. This has been found via -# trial & error. +# Earth Engine image:computePixels request is limited to 48 MB +# https://developers.google.com/earth-engine/reference/rest/v1/projects.image/computePixels REQUEST_BYTE_LIMIT = 2**20 * 48 # 48 MBs # Xee uses the ee.ImageCollection.toList function for slicing into an @@ -80,10 +78,12 @@ _TO_LIST_WARNING_LIMIT = 10000 +# Used in ext_test.py. def _check_request_limit(chunks: Dict[str, int], dtype_size: int, limit: int): """Checks that the actual number of bytes exceeds the limit.""" index, width, height = chunks['index'], chunks['width'], chunks['height'] - actual_bytes = index * width * height * dtype_size + # Add one for the mask byte (Earth Engine bytes-per-pixel accounting). + actual_bytes = index * width * height * (dtype_size + 1) if actual_bytes > limit: raise ValueError( f'`chunks="auto"` failed! Actual bytes {actual_bytes!r} exceeds limit' @@ -105,7 +105,7 @@ class EarthEngineStore(common.AbstractDataStore): # "Safe" default chunks that won't exceed the request limit. PREFERRED_CHUNKS: Dict[str, int] = { 'index': 48, - 'width': 512, + 'width': 256, 'height': 256, } @@ -352,20 +352,22 @@ def _auto_chunks( # height and width follow round numbers (powers of two) and allocate the # remaining bytes available for the index length. To illustrate this logic, # let's follow through with an example where: - # request_byte_limit = 2 ** 20 * 10 # = 10 MBs + # request_byte_limit = 2 ** 20 * 48 # = 48 MBs # dtype_bytes = 8 - log_total = np.log2(request_byte_limit) # e.g.=23.32... - log_dtype = np.log2(dtype_bytes) # e.g.=3 + + log_total = np.log2(request_byte_limit) # e.g.=25.58... + # Add one for the mask byte (Earth Engine bytes-per-pixel accounting). + log_dtype = np.log2(dtype_bytes + 1) # e.g.=3.16... log_limit = 10 * (log_total // 10) # e.g.=20 - log_index = log_total - log_limit # e.g.=3.32... + log_index = log_total - log_limit # e.g.=5.58... # Motivation: How do we divide a number N into the closest sum of two ints? - d = (log_limit - np.ceil(log_dtype)) / 2 # e.g.=17/2=8.5 - wd, ht = np.ceil(d), np.floor(d) # e.g. wd=9, ht=8 + d = (log_limit - np.ceil(log_dtype)) / 2 # e.g.=16/2=8.0 + wd, ht = np.ceil(d), np.floor(d) # e.g. wd=8, ht=8 # Put back to byte space, then round to the nearst integer number of bytes. - index = int(np.rint(2**log_index)) # e.g.=10 - width = int(np.rint(2**wd)) # e.g.=512 + index = int(np.rint(2**log_index)) # e.g.=48 + width = int(np.rint(2**wd)) # e.g.=256 height = int(np.rint(2**ht)) # e.g.=256 return {'index': index, 'width': width, 'height': height} diff --git a/xee/ext_test.py b/xee/ext_test.py index ae732c8..6ebd852 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -13,32 +13,32 @@ class EEStoreStandardDatatypesTest(parameterized.TestCase): dict( testcase_name='int8', dtype=np.dtype('int8'), - expected_chunks={'index': 48, 'width': 1024, 'height': 1024}, + expected_chunks={'index': 48, 'width': 1024, 'height': 512}, ), dict( testcase_name='int32', dtype=np.dtype('int32'), - expected_chunks={'index': 48, 'width': 512, 'height': 512}, + expected_chunks={'index': 48, 'width': 512, 'height': 256}, ), dict( testcase_name='int64', dtype=np.dtype('int64'), - expected_chunks={'index': 48, 'width': 512, 'height': 256}, + expected_chunks={'index': 48, 'width': 256, 'height': 256}, ), dict( testcase_name='float32', dtype=np.dtype('float32'), - expected_chunks={'index': 48, 'width': 512, 'height': 512}, + expected_chunks={'index': 48, 'width': 512, 'height': 256}, ), dict( testcase_name='float64', dtype=np.dtype('float64'), - expected_chunks={'index': 48, 'width': 512, 'height': 256}, + expected_chunks={'index': 48, 'width': 256, 'height': 256}, ), dict( testcase_name='complex64', dtype=np.dtype('complex64'), - expected_chunks={'index': 48, 'width': 512, 'height': 256}, + expected_chunks={'index': 48, 'width': 256, 'height': 256}, ), ) def test_auto_chunks__handles_standard_dtypes(self, dtype, expected_chunks): @@ -49,7 +49,7 @@ def test_auto_chunks__handles_standard_dtypes(self, dtype, expected_chunks): ) -class EEStoreTest(absltest.TestCase): +class EEStoreTest(parameterized.TestCase): def test_auto_chunks__handles_range_of_dtype_sizes(self): dt = 0 @@ -59,18 +59,36 @@ def test_auto_chunks__handles_range_of_dtype_sizes(self): except ValueError: self.fail(f'Could not handle data type size {dt}.') - def test_auto_chunks__is_optimal_for_powers_of_two(self): - for p in range(10): - dt = 2**p - chunks = xee.EarthEngineStore._auto_chunks(dt) + def test_auto_chunks__matches_observed_values(self): + observed_results = { + 1: 50331648, + 2: 37748736, + 4: 31457280, + 8: 28311552, + 16: 26738688, + 32: 25952256, + 64: 25559040, + 128: 25362432, + 256: 25264128, + 512: 25214976, + } + + for dtype_bytes, expected_bytes in observed_results.items(): + chunks = xee.EarthEngineStore._auto_chunks(dtype_bytes) + actual_bytes = np.prod(list(chunks.values())) * ( + dtype_bytes + 1 + ) # added +1 to account for the mask byte self.assertEqual( - xee.REQUEST_BYTE_LIMIT, np.prod(list(chunks.values())) * dt + expected_bytes, + actual_bytes, + f'dtype_bytes: {dtype_bytes}, Expected: {expected_bytes}, ' + f'Actual: {actual_bytes}, Chunks: {chunks}', ) def test_exceeding_byte_limit__raises_error(self): dtype_size = 8 # does not fail - chunks = {'index': 48, 'width': 512, 'height': 256} + chunks = {'index': 48, 'width': 256, 'height': 256} ext._check_request_limit(chunks, dtype_size, xee.REQUEST_BYTE_LIMIT) # fails From 3c3481675d698e632d1f4566a1834daad324b7ee Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Mon, 3 Feb 2025 10:02:22 -0800 Subject: [PATCH 06/56] ignore temp directory --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 83c6ce6..1ab7591 100644 --- a/.gitignore +++ b/.gitignore @@ -131,3 +131,6 @@ cython_debug/ # pixi environments .pixi + +# temporary work files +temp/ \ No newline at end of file From c107bcae5ce561d1e190ac1261bf139c4a0968f0 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Mon, 3 Feb 2025 10:59:09 -0800 Subject: [PATCH 07/56] Add pixi config files --- .gitattributes | 2 + .gitignore | 1 + pixi.lock | 2377 ++++++++++++++++++++++++++++++++++++++++++++++++ pyproject.toml | 18 + 4 files changed, 2398 insertions(+) create mode 100644 pixi.lock diff --git a/.gitattributes b/.gitattributes index 07fe41c..1d6999e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,4 @@ # GitHub syntax highlighting pixi.lock linguist-language=YAML linguist-generated=true +# SCM syntax highlighting +pixi.lock linguist-language=YAML linguist-generated=true diff --git a/.gitignore b/.gitignore index 1ab7591..5e0110f 100644 --- a/.gitignore +++ b/.gitignore @@ -131,6 +131,7 @@ cython_debug/ # pixi environments .pixi +*.egg-info # temporary work files temp/ \ No newline at end of file diff --git a/pixi.lock b/pixi.lock new file mode 100644 index 0000000..7f7b146 --- /dev/null +++ b/pixi.lock @@ -0,0 +1,2377 @@ +version: 5 +environments: + dataflow: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip + - pypi: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz + - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz + - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl + - pypi: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: . + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: . + examples: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip + - pypi: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz + - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz + - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl + - pypi: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: . + tests: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/77/8d9ce42673e5cb9988f6df73c1c5c1d4e9e788053cccd7f5fb14ef100982/black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/93/72/37d76e26bc9cc5ffb90cd2c29adcf0476922e8d89da6061682298e231a3b/pyink-24.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2e/48/fcd02399c7c4041c850b59c7cd80c309f7b87c86649e2bfb515d44ad061c/rasterio-1.4.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/b7/a881b08bb24ae15bd3644b313244d89b0eb50d88dbda577ce72e5e3e4be4/rioxarray-0.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: . +packages: +- kind: pypi + name: absl-py + version: 2.1.0 + url: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl + sha256: 526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308 + requires_python: '>=3.7' +- kind: pypi + name: affine + version: 2.4.0 + url: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl + sha256: 8a3df80e2b2378aef598a83c1392efd47967afec4242021a0b06b4c7cbc61a92 + requires_dist: + - pydocstyle ; extra == 'dev' + - flake8 ; extra == 'dev' + - coveralls ; extra == 'dev' + - pytest>=4.6 ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.7' +- kind: pypi + name: aiohappyeyeballs + version: 2.4.3 + url: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl + sha256: 8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572 + requires_python: '>=3.8' +- kind: pypi + name: aiohttp + version: 3.11.2 + url: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: d3a2bcf6c81639a165da93469e1e0aff67c956721f3fa9c0560f07dd1e505116 + requires_dist: + - aiohappyeyeballs>=2.3.0 + - aiosignal>=1.1.2 + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - yarl>=1.17.0,<2.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' + - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' + - aiodns>=3.2.0 ; (sys_platform == 'darwin' and extra == 'speedups') or (sys_platform == 'linux' and extra == 'speedups') + requires_python: '>=3.9' +- kind: pypi + name: aiosignal + version: 1.3.1 + url: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl + sha256: f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17 + requires_dist: + - frozenlist>=1.1.0 + requires_python: '>=3.7' +- kind: pypi + name: apache-beam + version: 2.17.0 + url: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip + sha256: 4e90b8a6caf075632314876febbdff949a6dc2217dd63e220bf25141f18ec957 + requires_dist: + - crcmod>=1.7,<2.0 + - dill>=0.3.0,<0.3.1 + - fastavro>=0.21.4,<0.22 + - future>=0.16.0,<1.0.0 + - grpcio>=1.12.1,<2 + - hdfs>=2.1.0,<3.0.0 + - httplib2>=0.8,<=0.12.0 + - mock>=1.0.1,<3.0.0 + - pymongo>=3.8.0,<4.0.0 + - oauth2client>=2.0.1,<4 + - protobuf>=3.5.0.post1,<4 + - pydot>=1.2.0,<2 + - python-dateutil>=2.8.0,<3 + - pytz>=2018.3 + - avro>=1.8.1,<2.0.0 ; python_full_version < '3.0' + - funcsigs>=1.0.2,<2 ; python_full_version < '3.0' + - futures>=3.2.0,<4.0.0 ; python_full_version < '3.0' + - pyvcf>=0.6.8,<0.7.0 ; python_full_version < '3.0' + - typing>=3.6.0,<3.7.0 ; python_full_version < '3.5' + - avro-python3>=1.8.1,<2.0.0 ; python_full_version >= '3.0' + - pyarrow>=0.15.1,<0.16.0 ; platform_system != 'Windows' or python_full_version >= '3.0' + - sphinx>=1.5.2,<2.0 ; extra == 'docs' + - cachetools>=3.1.0,<4 ; extra == 'gcp' + - google-apitools>=0.5.28,<0.5.29 ; extra == 'gcp' + - google-cloud-datastore>=1.7.1,<1.8.0 ; extra == 'gcp' + - google-cloud-pubsub>=0.39.0,<1.1.0 ; extra == 'gcp' + - google-cloud-bigquery>=1.6.0,<1.18.0 ; extra == 'gcp' + - google-cloud-core>=0.28.1,<2 ; extra == 'gcp' + - google-cloud-bigtable>=0.31.1,<1.1.0 ; extra == 'gcp' + - proto-google-cloud-datastore-v1>=0.90.0,<=0.90.4 ; python_full_version < '3.0' and extra == 'gcp' + - googledatastore>=7.0.1,<7.1 ; python_full_version < '3.0' and extra == 'gcp' + - nose>=1.3.7 ; extra == 'test' + - nose-xunitmp>=0.4.1 ; extra == 'test' + - numpy>=1.14.3,<2 ; extra == 'test' + - pandas>=0.23.4,<0.25 ; extra == 'test' + - parameterized>=0.6.0,<0.7.0 ; extra == 'test' + - pyhamcrest>=1.9,<2.0 ; extra == 'test' + - pyyaml>=3.12,<6.0.0 ; extra == 'test' + - requests-mock>=1.7,<2.0 ; extra == 'test' + - tenacity>=5.0.2,<6.0 ; extra == 'test' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- kind: pypi + name: asciitree + version: 0.3.3 + url: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz + sha256: 4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e +- kind: pypi + name: attrs + version: 24.2.0 + url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl + sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + requires_dist: + - importlib-metadata ; python_full_version < '3.8' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier<24.7 ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.7' +- kind: pypi + name: avro-python3 + version: 1.10.2 + url: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz + sha256: 3b63f24e6b04368c3e4a6f923f484be0230d821aad65ac36108edbff29e9aaab + requires_dist: + - python-snappy ; extra == 'snappy' + - zstandard ; extra == 'zstandard' + requires_python: '>=3.5' +- kind: pypi + name: black + version: 24.8.0 + url: https://files.pythonhosted.org/packages/41/77/8d9ce42673e5cb9988f6df73c1c5c1d4e9e788053cccd7f5fb14ef100982/black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=0.9.0 + - platformdirs>=2 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.7.4,!=3.9.0 ; implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd' + - aiohttp>=3.7.4 ; (implementation_name != 'pypy' and extra == 'd') or (sys_platform != 'win32' and extra == 'd') + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; extra == 'uvloop' + requires_python: '>=3.8' +- kind: pypi + name: bokeh + version: 2.4.3 + url: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl + sha256: 104d2f0a4ca7774ee4b11e545aa34ff76bf3e2ad6de0d33944361981b65da420 + requires_dist: + - jinja2>=2.9 + - numpy>=1.11.3 + - packaging>=16.8 + - pillow>=7.1.0 + - pyyaml>=3.10 + - tornado>=5.1 + - typing-extensions>=3.10.0 + requires_python: '>=3.7' +- kind: conda + name: bzip2 + version: 1.0.8 + build: h99b78c6_7 + build_number: 7 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- kind: conda + name: ca-certificates + version: 2024.8.30 + build: hf0a4a13_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda + sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 + md5: 40dec13fd8348dbe303e57be74bd3d35 + license: ISC + purls: [] + size: 158482 + timestamp: 1725019034582 +- kind: pypi + name: cachetools + version: 3.1.1 + url: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl + sha256: 428266a1c0d36dc5aca63a2d7c5942e88c2c898d72139fca0e97fdd2380517ae +- kind: pypi + name: certifi + version: 2024.12.14 + url: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl + sha256: 1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 + requires_python: '>=3.6' +- kind: pypi + name: charset-normalizer + version: 3.4.0 + url: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db + requires_python: '>=3.7.0' +- kind: conda + name: click + version: 8.1.8 + build: pyh707e725_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda + sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab + md5: f22f4d4970e09d68a10b922cbb0408d3 + depends: + - __unix + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/click?source=hash-mapping + size: 84705 + timestamp: 1734858922844 +- kind: pypi + name: click-plugins + version: 1.1.1 + url: https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl + sha256: 5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8 + requires_dist: + - click>=4.0 + - pytest>=3.6 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - wheel ; extra == 'dev' + - coveralls ; extra == 'dev' +- kind: pypi + name: cligj + version: 0.7.2 + url: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl + sha256: c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df + requires_dist: + - click>=4.0 + - pytest-cov ; extra == 'test' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,<4' +- kind: pypi + name: cloudpickle + version: 2.2.1 + url: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + sha256: 61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f + requires_python: '>=3.6' +- kind: pypi + name: crcmod + version: '1.7' + url: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz + sha256: dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e +- kind: pypi + name: dask + version: 2023.3.0 + url: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl + sha256: 4b355da5492fd8699017e786e281ad347528d11c868b645d102124df3621e9ee + requires_dist: + - click>=7.0 + - cloudpickle>=1.1.1 + - fsspec>=0.6.0 + - packaging>=20.0 + - partd>=1.2.0 + - pyyaml>=5.3.1 + - toolz>=0.8.2 + - numpy>=1.21 ; extra == 'array' + - bokeh>=2.4.2,<3 ; extra == 'complete' + - distributed==2023.3.0 ; extra == 'complete' + - jinja2>=2.10.3 ; extra == 'complete' + - numpy>=1.21 ; extra == 'complete' + - pandas>=1.3 ; extra == 'complete' + - numpy>=1.21 ; extra == 'dataframe' + - pandas>=1.3 ; extra == 'dataframe' + - bokeh>=2.4.2,<3 ; extra == 'diagnostics' + - jinja2>=2.10.3 ; extra == 'diagnostics' + - distributed==2023.3.0 ; extra == 'distributed' + - pandas[test] ; extra == 'test' + - pytest ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - pytest-xdist ; extra == 'test' + - pre-commit ; extra == 'test' + requires_python: '>=3.8' +- kind: conda + name: decorator + version: 5.1.1 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 + md5: 43afe5ab04e35e17ba28649471dd7364 + depends: + - python >=3.5 + license: BSD-2-Clause + license_family: BSD + purls: + - pkg:pypi/decorator?source=hash-mapping + size: 12072 + timestamp: 1641555714315 +- kind: pypi + name: dill + version: 0.3.0 + url: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz + sha256: 993409439ebf7f7902d9de93eaa2a395e0446ff773d29f13dc46646482f76906 + requires_dist: + - objgraph>=1.7.2 ; extra == 'graph' + requires_python: '>=2.6,!=3.0.*' +- kind: pypi + name: distributed + version: 2023.3.0 + url: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + sha256: dd1f5854d1117a40c397f08f24e0d832d7e0ef15fba3266c85af4420c6a379ec + requires_dist: + - click>=7.0 + - cloudpickle>=1.5.0 + - dask==2023.3.0 + - jinja2>=2.10.3 + - locket>=1.0.0 + - msgpack>=1.0.0 + - packaging>=20.0 + - psutil>=5.7.0 + - pyyaml>=5.3.1 + - sortedcontainers>=2.0.5 + - tblib>=1.6.0 + - toolz>=0.10.0 + - tornado>=6.0.3 + - urllib3>=1.24.3 + - zict>=2.1.0 + requires_python: '>=3.8' +- kind: pypi + name: docopt + version: 0.6.2 + url: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz + sha256: 49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 +- kind: pypi + name: earthengine-api + version: 1.4.4 + url: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl + sha256: 3976e93c7c50f3263de1b3ecba294ed030bef617fd81f674dd163c4c5eba38a8 + requires_dist: + - google-cloud-storage + - google-api-python-client>=1.12.1 + - google-auth>=1.4.1 + - google-auth-httplib2>=0.0.3 + - httplib2>=0.9.2,<1.dev0 + - requests + - absl-py ; extra == 'tests' + - geopandas ; extra == 'tests' + - numpy ; extra == 'tests' + requires_python: '>=3.9' +- kind: pypi + name: fastavro + version: 0.21.24 + url: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz + sha256: 7ac9bcf6e1226393d6db163f33ab5915e98ebf867fdab8f6239dc15c26f474da + requires_dist: + - python-snappy ; extra == 'snappy' +- kind: pypi + name: fasteners + version: '0.19' + url: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl + sha256: 758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237 + requires_python: '>=3.6' +- kind: pypi + name: frozenlist + version: 1.5.0 + url: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e + requires_python: '>=3.8' +- kind: pypi + name: fsspec + version: 2024.2.0 + url: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl + sha256: 817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8 + requires_dist: + - adlfs ; extra == 'abfs' + - adlfs ; extra == 'adl' + - pyarrow>=1 ; extra == 'arrow' + - dask ; extra == 'dask' + - distributed ; extra == 'dask' + - pytest ; extra == 'devel' + - pytest-cov ; extra == 'devel' + - dropboxdrivefs ; extra == 'dropbox' + - requests ; extra == 'dropbox' + - dropbox ; extra == 'dropbox' + - adlfs ; extra == 'full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' + - dask ; extra == 'full' + - distributed ; extra == 'full' + - dropbox ; extra == 'full' + - dropboxdrivefs ; extra == 'full' + - fusepy ; extra == 'full' + - gcsfs ; extra == 'full' + - libarchive-c ; extra == 'full' + - ocifs ; extra == 'full' + - panel ; extra == 'full' + - paramiko ; extra == 'full' + - pyarrow>=1 ; extra == 'full' + - pygit2 ; extra == 'full' + - requests ; extra == 'full' + - s3fs ; extra == 'full' + - smbprotocol ; extra == 'full' + - tqdm ; extra == 'full' + - fusepy ; extra == 'fuse' + - gcsfs ; extra == 'gcs' + - pygit2 ; extra == 'git' + - requests ; extra == 'github' + - gcsfs ; extra == 'gs' + - panel ; extra == 'gui' + - pyarrow>=1 ; extra == 'hdfs' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' + - libarchive-c ; extra == 'libarchive' + - ocifs ; extra == 'oci' + - s3fs ; extra == 's3' + - paramiko ; extra == 'sftp' + - smbprotocol ; extra == 'smb' + - paramiko ; extra == 'ssh' + - tqdm ; extra == 'tqdm' + requires_python: '>=3.8' +- kind: pypi + name: future + version: 0.18.3 + url: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz + sha256: 34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*' +- kind: pypi + name: gcsfs + version: 2024.2.0 + url: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl + sha256: 20bf70cc81d580474dd299d55e1ffcf8b3e81721aeb562e148ca0a3c900d0421 + requires_dist: + - aiohttp!=4.0.0a0,!=4.0.0a1 + - decorator>4.1.2 + - fsspec==2024.2.0 + - google-auth>=1.2 + - google-auth-oauthlib + - google-cloud-storage + - requests + - crcmod ; extra == 'crc' + - fusepy ; extra == 'gcsfuse' + requires_python: '>=3.8' +- kind: pypi + name: google-api-core + version: 1.34.1 + url: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl + sha256: 52bcc9d9937735f8a3986fa0bbf9135ae9cf5393a722387e5eced520e39c774a + requires_dist: + - googleapis-common-protos>=1.56.2,<2.0.dev0 + - protobuf>=3.19.5,!=3.20.0,!=3.20.1,<4.0.0.dev0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5 + - google-auth>=1.25.0,<3.0.dev0 + - requests>=2.18.0,<3.0.0.dev0 + - grpcio>=1.33.2,<2.0.dev0 ; extra == 'grpc' + - grpcio-status>=1.33.2,<2.0.dev0 ; extra == 'grpc' + - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcgcp' + - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcio-gcp' + requires_python: '>=3.7' +- kind: pypi + name: google-api-python-client + version: 1.12.2 + url: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl + sha256: 05cb331ed1aa15746f606c7e36ea51dbe7c29b1a5df9bbf58140901fe23d7142 + requires_dist: + - httplib2>=0.9.2,<1.dev0 + - google-auth>=1.16.0 + - google-auth-httplib2>=0.0.3 + - google-api-core>=1.21.0,<2.dev0 + - six>=1.13.0,<2.dev0 + - uritemplate>=3.0.0,<4.dev0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: google-apitools + version: 0.5.28 + url: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz + sha256: c41792b0cb1a9d952545a95bb5a18376fd727e4c4977d6fa3f1643d1d51a7177 + requires_dist: + - httplib2>=0.8 + - fasteners>=0.14 + - oauth2client>=1.4.12 + - six>=1.12.0 + - python-gflags>=3.0.6 ; extra == 'cli' + - unittest2>=0.5.1 ; extra == 'testing' + - mock>=1.0.1 ; extra == 'testing' +- kind: pypi + name: google-auth + version: 1.35.0 + url: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl + sha256: 997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 + requires_dist: + - cachetools>=2.0.0,<5.0 + - pyasn1-modules>=0.2.1 + - setuptools>=40.3.0 + - six>=1.9.0 + - rsa<4.6 ; python_full_version < '3.6' + - rsa>=3.1.4,<5 ; python_full_version >= '3.6' + - requests>=2.20.0,<3.0.0.dev0 ; extra == 'aiohttp' + - aiohttp>=3.6.2,<4.0.0.dev0 ; python_full_version >= '3.6' and extra == 'aiohttp' + - pyopenssl>=20.0.0 ; extra == 'pyopenssl' + - pyu2f>=0.1.5 ; extra == 'reauth' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' +- kind: pypi + name: google-auth-httplib2 + version: 0.0.4 + url: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl + sha256: aeaff501738b289717fac1980db9711d77908a6c227f60e4aa1923410b43e2ee + requires_dist: + - google-auth + - httplib2>=0.9.1 + - six +- kind: pypi + name: google-auth-oauthlib + version: 0.5.3 + url: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl + sha256: 9e8ff4ed2b21c174a2d6cc2172c698dbf0b1f686509774c663a83c495091fe09 + requires_dist: + - google-auth>=1.0.0 + - requests-oauthlib>=0.7.0 + - click>=6.0.0 ; extra == 'tool' + requires_python: '>=3.6' +- kind: pypi + name: google-cloud-bigquery + version: 1.17.0 + url: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl + sha256: ce9dfc4407c938b44287fe68da387a0da1bb15da4b7cfa43db864f66a8bb310c + requires_dist: + - google-cloud-core>=1.0.0,<2.0.dev0 + - google-resumable-media>=0.3.1 + - protobuf>=3.6.0 + - enum34 ; python_full_version < '3.4' + - google-cloud-bigquery-storage>=0.6.0,<2.0.0.dev0 ; extra == 'all' + - pyarrow>=0.13.0,!=0.14.0 ; extra == 'all' + - pandas>=0.17.1 ; extra == 'all' + - pyarrow>=0.4.1,!=0.14.0 ; extra == 'all' + - tqdm>=4.0.0,<5.0.0.dev0 ; extra == 'all' + - google-cloud-bigquery-storage>=0.6.0,<2.0.0.dev0 ; extra == 'bqstorage' + - pyarrow>=0.13.0,!=0.14.0 ; extra == 'bqstorage' + - fastparquet ; extra == 'fastparquet' + - python-snappy ; extra == 'fastparquet' + - pandas>=0.17.1 ; extra == 'pandas' + - pyarrow>=0.4.1,!=0.14.0 ; (platform_system != 'Windows' and extra == 'pyarrow') or (python_full_version >= '3.4' and extra == 'pyarrow') + - tqdm>=4.0.0,<5.0.0.dev0 ; extra == 'tqdm' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: google-cloud-bigtable + version: 1.0.0 + url: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl + sha256: 4323362b836ddf9e7324b0be1a34e3f80d09729356233c05e969b577244c49a3 + requires_dist: + - google-api-core[grpc]>=1.14.0,<2.0.0.dev0 + - google-cloud-core>=1.0.0,<2.0.dev0 + - grpc-google-iam-v1>=0.12.3,<0.13.dev0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: google-cloud-core + version: 1.7.3 + url: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl + sha256: d5af737c60a73b9588a0511332ac0cdc6294ad8e477c7b82be03a1afc7c3f7b6 + requires_dist: + - google-api-core>=1.21.0,<3.0.0.dev0 + - google-auth>=1.24.0,<2.0.dev0 + - six>=1.12.0 + - grpcio>=1.8.2,<2.0.dev0 ; extra == 'grpc' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' +- kind: pypi + name: google-cloud-datastore + version: 1.7.4 + url: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl + sha256: ffb075abf606ebd248c3ad76ac0e6d3e93858d8c61a063139938a162a58b28d0 + requires_dist: + - google-api-core[grpc]>=1.6.0,<2.0.0.dev0 + - google-cloud-core>=0.29.0,<2.0.dev0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: google-cloud-pubsub + version: 1.0.2 + url: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl + sha256: 12ff565ef00e4ca19d2ae26ae4515070094ba857d7c7024370dbed81fc7d58ab + requires_dist: + - google-api-core[grpc]>=1.14.0,<2.0.0.dev0 + - grpc-google-iam-v1>=0.12.3,<0.13.dev0 + - enum34 ; python_full_version < '3.4' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: google-cloud-storage + version: 2.2.1 + url: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + sha256: abdf0fadf26516172e804e00b9c24819a3b3f7351cd32f35ca249bbfac965494 + requires_dist: + - google-auth>=1.25.0,<3.0.dev0 + - google-api-core>=1.31.5,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 + - google-cloud-core>=1.6.0,<3.0.dev0 + - google-resumable-media>=2.3.2 + - requests>=2.18.0,<3.0.0.dev0 + - protobuf + requires_python: '>=3.7' +- kind: pypi + name: google-crc32c + version: 1.6.0 + url: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl + sha256: ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d + requires_dist: + - importlib-resources>=1.3 ; python_full_version < '3.9' and os_name == 'nt' + - pytest ; extra == 'testing' + requires_python: '>=3.9' +- kind: pypi + name: google-resumable-media + version: 2.7.2 + url: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl + sha256: 3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa + requires_dist: + - google-crc32c>=1.0,<2.0.dev0 + - aiohttp>=3.6.2,<4.0.0.dev0 ; extra == 'aiohttp' + - google-auth>=1.22.0,<2.0.dev0 ; extra == 'aiohttp' + - requests>=2.18.0,<3.0.0.dev0 ; extra == 'requests' + requires_python: '>=3.7' +- kind: pypi + name: googleapis-common-protos + version: 1.66.0 + url: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl + sha256: d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed + requires_dist: + - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - grpcio>=1.44.0,<2.0.0.dev0 ; extra == 'grpc' + requires_python: '>=3.7' +- kind: pypi + name: grpc-google-iam-v1 + version: 0.12.7 + url: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl + sha256: 834da89f4c4a2abbe842a793ed20fc6d9a77011ef2626755b1b89116fb9596d7 + requires_dist: + - grpcio>=1.44.0,<2.0.0.dev0 + - googleapis-common-protos[grpc]>=1.56.0,<2.0.0.dev0 + - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0 + requires_python: '>=3.7' +- kind: pypi + name: grpcio + version: 1.69.0 + url: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl + sha256: 0f0270bd9ffbff6961fe1da487bdcd594407ad390cc7960e738725d4807b18c4 + requires_dist: + - grpcio-tools>=1.69.0 ; extra == 'protobuf' + requires_python: '>=3.8' +- kind: pypi + name: grpcio-status + version: 1.48.2 + url: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl + sha256: 2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf + requires_dist: + - protobuf>=3.12.0 + - grpcio>=1.48.2 + - googleapis-common-protos>=1.5.5 + requires_python: '>=3.6' +- kind: pypi + name: hdfs + version: 2.7.3 + url: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz + sha256: 752a21e43f82197dce43697c73f454ba490838108c73a57a9247efb66d1c0479 + requires_dist: + - docopt + - requests>=2.7.0 + - six>=1.9.0 + - fastavro>=0.21.19 ; extra == 'avro' + - fastavro>=0.21.19 ; extra == 'dataframe' + - pandas>=0.14.1 ; extra == 'dataframe' + - requests-kerberos>=0.7.0 ; extra == 'kerberos' +- kind: pypi + name: httplib2 + version: 0.12.0 + url: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + sha256: f61fb838a94ce3b349aa32c92fd8430f7e3511afdb18bf9640d647e30c90a6d6 +- kind: pypi + name: idna + version: '3.10' + url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.6' +- kind: pypi + name: iniconfig + version: 2.0.0 + url: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl + sha256: b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + requires_python: '>=3.7' +- kind: pypi + name: jinja2 + version: 3.1.4 + url: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + sha256: bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- kind: conda + name: libblas + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda + sha256: f1fb9a11af0b2878bd8804b4c77d3733c40076218bcbdb35f575b1c0c9fddf11 + md5: f8cf4d920ff36ce471619010eff59cac + depends: + - libopenblas >=0.3.28,<0.3.29.0a0 + - libopenblas >=0.3.28,<1.0a0 + constrains: + - blas * openblas + - liblapack 3.9.0 25_osxarm64_openblas + - liblapacke 3.9.0 25_osxarm64_openblas + - libcblas 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15913 + timestamp: 1729643265495 +- kind: conda + name: libcblas + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda + sha256: d9fa5b6b11252132a3383bbf87bd2f1b9d6248bef1b7e113c2a8ae41b0376218 + md5: 4df0fae81f0b5bf47d48c882b086da11 + depends: + - libblas 3.9.0 25_osxarm64_openblas + constrains: + - blas * openblas + - liblapack 3.9.0 25_osxarm64_openblas + - liblapacke 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15837 + timestamp: 1729643270793 +- kind: conda + name: libcxx + version: 19.1.3 + build: ha82da77_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + sha256: 6d062760c6439e75b9a44d800d89aff60fe3441998d87506c62dc94c50412ef4 + md5: bf691071fba4734984231617783225bc + depends: + - __osx >=11.0 + license: Apache-2.0 WITH LLVM-exception + license_family: Apache + purls: [] + size: 520771 + timestamp: 1730314603920 +- kind: conda + name: libexpat + version: 2.6.4 + build: h286801f_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda + sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745 + md5: 38d2656dd914feb0cab8c629370768bf + depends: + - __osx >=11.0 + constrains: + - expat 2.6.4.* + license: MIT + license_family: MIT + purls: [] + size: 64693 + timestamp: 1730967175868 +- kind: conda + name: libffi + version: 3.4.2 + build: h3422bc3_5 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca + md5: 086914b672be056eb70fd4285b6783b6 + license: MIT + license_family: MIT + purls: [] + size: 39020 + timestamp: 1636488587153 +- kind: conda + name: libgfortran + version: 5.0.0 + build: 13_2_0_hd922786_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda + sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b + md5: 4a55d9e169114b2b90d3ec4604cd7bbf + depends: + - libgfortran5 13.2.0 hf226fd6_3 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 110233 + timestamp: 1707330749033 +- kind: conda + name: libgfortran5 + version: 13.2.0 + build: hf226fd6_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda + sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a + md5: 66ac81d54e95c534ae488726c1f698ea + depends: + - llvm-openmp >=8.0.0 + constrains: + - libgfortran 5.0.0 13_2_0_*_3 + license: GPL-3.0-only WITH GCC-exception-3.1 + license_family: GPL + purls: [] + size: 997381 + timestamp: 1707330687590 +- kind: conda + name: liblapack + version: 3.9.0 + build: 25_osxarm64_openblas + build_number: 25 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + sha256: fdd742407672a9af20e70764550cf18b3ab67f12e48bf04163b90492fbc401e7 + md5: 19bbddfec972d401838330453186108d + depends: + - libblas 3.9.0 25_osxarm64_openblas + constrains: + - blas * openblas + - liblapacke 3.9.0 25_osxarm64_openblas + - libcblas 3.9.0 25_osxarm64_openblas + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 15823 + timestamp: 1729643275943 +- kind: conda + name: libopenblas + version: 0.3.28 + build: openmp_hf332438_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda + sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 + md5: 40803a48d947c8639da6704e9a44d3ce + depends: + - __osx >=11.0 + - libgfortran 5.* + - libgfortran5 >=13.2.0 + - llvm-openmp >=18.1.8 + constrains: + - openblas >=0.3.28,<0.3.29.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 4165774 + timestamp: 1730772154295 +- kind: conda + name: libsqlite + version: 3.47.0 + build: hbaaea75_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + sha256: 5a96caa566c11e5a5ebdcdb86a0759a7fb27d3c5f42e6a0fd0d6023c1e935d9e + md5: 07a14fbe439eef078cc479deca321161 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: Unlicense + purls: [] + size: 837683 + timestamp: 1730208293578 +- kind: conda + name: libzlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- kind: conda + name: llvm-openmp + version: 19.1.3 + build: hb52a8e5_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda + sha256: 49a8940e727aa82ee034fa9a60b3fcababec41b3192d955772aab635a5374b82 + md5: dd695d23e78d1ca4fecce969b1e1db61 + depends: + - __osx >=11.0 + constrains: + - openmp 19.1.3|19.1.3.* + license: Apache-2.0 WITH LLVM-exception + license_family: APACHE + purls: [] + size: 280488 + timestamp: 1730364082380 +- kind: pypi + name: locket + version: 1.0.0 + url: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: markupsafe + version: 3.0.2 + url: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: 846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 + requires_python: '>=3.9' +- kind: pypi + name: mock + version: 2.0.0 + url: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl + sha256: 5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1 + requires_dist: + - pbr>=0.11 + - six>=1.9 + - funcsigs>=1 ; python_full_version < '3.3' + - sphinx ; (python_full_version < '3.0' and extra == 'docs') or (python_full_version >= '3.3' and extra == 'docs') + - pygments<2 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' + - jinja2<2.7 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' + - sphinx<1.3 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' + - unittest2>=1.1.0 ; extra == 'test' +- kind: pypi + name: msgpack + version: 1.1.0 + url: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420 + requires_python: '>=3.8' +- kind: pypi + name: multidict + version: 6.1.0 + url: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.8' +- kind: pypi + name: mypy-extensions + version: 1.0.0 + url: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl + sha256: 4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d + requires_python: '>=3.5' +- kind: conda + name: ncurses + version: '6.5' + build: h7bae524_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda + sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc + md5: cb2b0ea909b97b3d70cd3921d1445e1a + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 802321 + timestamp: 1724658775723 +- kind: pypi + name: numcodecs + version: 0.13.1 + url: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 3501a848adaddce98a71a262fee15cd3618312692aa419da77acd18af4a6a3f6 + requires_dist: + - numpy>=1.7 + - sphinx ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - mock ; extra == 'docs' + - msgpack ; extra == 'msgpack' + - pcodec>=0.2.0 ; extra == 'pcodec' + - coverage ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - importlib-metadata ; extra == 'test-extras' + - zfpy>=1.0.0 ; extra == 'zfpy' + - numpy<2.0.0 ; extra == 'zfpy' + requires_python: '>=3.10' +- kind: conda + name: numpy + version: 2.2.1 + build: py312h41c6370_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda + sha256: 0a08d24a9879009bbb3eeea8aa0116d027968732c2092f0290102cd757307de8 + md5: c8319d0e393fee76123fd617dddb8977 + depends: + - __osx >=11.0 + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - libcxx >=18 + - liblapack >=3.9.0,<4.0a0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + constrains: + - numpy-base <0a0 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/numpy?source=hash-mapping + size: 6495249 + timestamp: 1734904743892 +- kind: pypi + name: oauth2client + version: 3.0.0 + url: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz + sha256: 5b5b056ec6f2304e7920b632885bd157fa71d1a7f3ddd00a43b1541a8d1a2460 + requires_dist: + - httplib2>=0.9.1 + - pyasn1>=0.1.7 + - pyasn1-modules>=0.0.5 + - rsa>=3.1.4 + - six>=1.6.1 +- kind: pypi + name: oauthlib + version: 3.2.2 + url: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl + sha256: 8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca + requires_dist: + - cryptography>=3.0.0 ; extra == 'rsa' + - blinker>=1.4.0 ; extra == 'signals' + - cryptography>=3.0.0 ; extra == 'signedtoken' + - pyjwt>=2.0.0,<3 ; extra == 'signedtoken' + requires_python: '>=3.6' +- kind: conda + name: openssl + version: 3.4.0 + build: h39f12f2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda + sha256: bd1d58ced46e75efa3b842c61642fd12272c69e9fe4d7261078bc082153a1d53 + md5: df307bbc703324722df0293c9ca2e418 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 2935176 + timestamp: 1731377561525 +- kind: conda + name: packaging + version: '24.2' + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda + sha256: 0f8273bf66c2a5c1de72312a509deae07f163bb0ae8de8273c52e6fe945a0850 + md5: c16469afe1ec91aaafcf4bea966c0465 + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 60345 + timestamp: 1731457074006 +- kind: pypi + name: pandas + version: 2.2.3 + url: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl + sha256: a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4 + requires_dist: + - numpy>=1.22.4 ; python_full_version < '3.11' + - numpy>=1.23.2 ; python_full_version == '3.11.*' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - python-dateutil>=2.8.2 + - pytz>=2020.1 + - tzdata>=2022.7 + - hypothesis>=6.46.1 ; extra == 'test' + - pytest>=7.3.2 ; extra == 'test' + - pytest-xdist>=2.2.0 ; extra == 'test' + - pyarrow>=10.0.1 ; extra == 'pyarrow' + - bottleneck>=1.3.6 ; extra == 'performance' + - numba>=0.56.4 ; extra == 'performance' + - numexpr>=2.8.4 ; extra == 'performance' + - scipy>=1.10.0 ; extra == 'computation' + - xarray>=2022.12.0 ; extra == 'computation' + - fsspec>=2022.11.0 ; extra == 'fss' + - s3fs>=2022.11.0 ; extra == 'aws' + - gcsfs>=2022.11.0 ; extra == 'gcp' + - pandas-gbq>=0.19.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.0 ; extra == 'excel' + - python-calamine>=0.1.7 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.0.5 ; extra == 'excel' + - pyarrow>=10.0.1 ; extra == 'parquet' + - pyarrow>=10.0.1 ; extra == 'feather' + - tables>=3.8.0 ; extra == 'hdf5' + - pyreadstat>=1.2.0 ; extra == 'spss' + - sqlalchemy>=2.0.0 ; extra == 'postgresql' + - psycopg2>=2.9.6 ; extra == 'postgresql' + - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.0 ; extra == 'mysql' + - pymysql>=1.0.2 ; extra == 'mysql' + - sqlalchemy>=2.0.0 ; extra == 'sql-other' + - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' + - beautifulsoup4>=4.11.2 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'xml' + - matplotlib>=3.6.3 ; extra == 'plot' + - jinja2>=3.1.2 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.3.0 ; extra == 'clipboard' + - zstandard>=0.19.0 ; extra == 'compression' + - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' + - adbc-driver-postgresql>=0.8.0 ; extra == 'all' + - adbc-driver-sqlite>=0.8.0 ; extra == 'all' + - beautifulsoup4>=4.11.2 ; extra == 'all' + - bottleneck>=1.3.6 ; extra == 'all' + - dataframe-api-compat>=0.1.7 ; extra == 'all' + - fastparquet>=2022.12.0 ; extra == 'all' + - fsspec>=2022.11.0 ; extra == 'all' + - gcsfs>=2022.11.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.46.1 ; extra == 'all' + - jinja2>=3.1.2 ; extra == 'all' + - lxml>=4.9.2 ; extra == 'all' + - matplotlib>=3.6.3 ; extra == 'all' + - numba>=0.56.4 ; extra == 'all' + - numexpr>=2.8.4 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.0 ; extra == 'all' + - pandas-gbq>=0.19.0 ; extra == 'all' + - psycopg2>=2.9.6 ; extra == 'all' + - pyarrow>=10.0.1 ; extra == 'all' + - pymysql>=1.0.2 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.0 ; extra == 'all' + - pytest>=7.3.2 ; extra == 'all' + - pytest-xdist>=2.2.0 ; extra == 'all' + - python-calamine>=0.1.7 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'all' + - scipy>=1.10.0 ; extra == 'all' + - s3fs>=2022.11.0 ; extra == 'all' + - sqlalchemy>=2.0.0 ; extra == 'all' + - tables>=3.8.0 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2022.12.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.0.5 ; extra == 'all' + - zstandard>=0.19.0 ; extra == 'all' + requires_python: '>=3.9' +- kind: pypi + name: partd + version: 1.4.2 + url: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl + sha256: 978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f + requires_dist: + - locket + - toolz + - numpy>=1.20.0 ; extra == 'complete' + - pandas>=1.3 ; extra == 'complete' + - pyzmq ; extra == 'complete' + - blosc ; extra == 'complete' + requires_python: '>=3.9' +- kind: pypi + name: pathspec + version: 0.12.1 + url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 + requires_python: '>=3.8' +- kind: pypi + name: pbr + version: 6.1.0 + url: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl + sha256: a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a + requires_python: '>=2.6' +- kind: pypi + name: pillow + version: 11.0.0 + url: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.1 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - check-manifest ; extra == 'tests' + - coverage ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- kind: conda + name: platformdirs + version: 4.3.6 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda + sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f + md5: fd8f2b18b65bbf62e8f653100690c8d2 + depends: + - python >=3.8 + license: MIT + license_family: MIT + purls: + - pkg:pypi/platformdirs?source=hash-mapping + size: 20625 + timestamp: 1726613611845 +- kind: pypi + name: pluggy + version: 1.5.0 + url: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl + sha256: 44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: propcache + version: 0.2.0 + url: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8 + requires_python: '>=3.8' +- kind: pypi + name: protobuf + version: 3.20.3 + url: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + sha256: a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db + requires_python: '>=3.7' +- kind: conda + name: psutil + version: 6.1.1 + build: py312hea69d52_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda + sha256: 90332053dad4056fe752217fa311ffa61cb37dc693b1721e37580e71a2a6fe04 + md5: 90724dac996a4e9d629a88a4b1ffe694 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/psutil?source=hash-mapping + size: 495397 + timestamp: 1735327574477 +- kind: pypi + name: pyarrow + version: 0.15.1 + url: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz + sha256: 7ad074690ba38313067bf3bbda1258966d38e2037c035d08b9ffe3cce07747a5 + requires_dist: + - numpy>=1.14 + - six>=1.0.0 + - futures ; python_full_version < '3.2' + - enum34>=1.1.6 ; python_full_version < '3.4' +- kind: pypi + name: pyasn1 + version: 0.6.1 + url: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + sha256: 0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 + requires_python: '>=3.8' +- kind: pypi + name: pyasn1-modules + version: 0.4.1 + url: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + sha256: 49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd + requires_dist: + - pyasn1>=0.4.6,<0.7.0 + requires_python: '>=3.8' +- kind: pypi + name: pydot + version: 1.4.2 + url: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl + sha256: 66c98190c65b8d2e2382a441b4c0edfdb4f4c025ef9cb9874de478fb0793a451 + requires_dist: + - pyparsing>=2.1.4 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: pyink + version: 24.10.0 + url: https://files.pythonhosted.org/packages/93/72/37d76e26bc9cc5ffb90cd2c29adcf0476922e8d89da6061682298e231a3b/pyink-24.10.0-py3-none-any.whl + sha256: 98d5250e77a44e906d8fcbf10582ca12f2404a0d38dfe99320bf81ca08c418b9 + requires_dist: + - black==24.8.0 + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=0.9.0 + - platformdirs>=2 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; extra == 'uvloop' + requires_python: '>=3.9' +- kind: pypi + name: pymongo + version: 3.13.0 + url: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz + sha256: e22d6cf5802cd09b674c307cc9e03870b8c37c503ebec3d25b86f2ce8c535dc7 + requires_dist: + - pymongo-auth-aws<2.0.0 ; extra == 'aws' + - pymongocrypt>=1.1.0,<2.0.0 ; extra == 'encryption' + - pykerberos ; extra == 'gssapi' + - pyopenssl>=17.2.0 ; extra == 'ocsp' + - requests<3.0.0 ; extra == 'ocsp' + - service-identity>=18.1.0 ; extra == 'ocsp' + - certifi ; extra == 'ocsp' + - python-snappy ; extra == 'snappy' + - dnspython>=1.16.0,<3.0.0 ; extra == 'srv' + - zstandard ; extra == 'zstd' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- kind: pypi + name: pyparsing + version: 3.2.0 + url: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + sha256: 93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84 + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' +- kind: pypi + name: pyproj + version: 3.7.0 + url: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz + sha256: bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813 + requires_dist: + - certifi + requires_python: '>=3.10' +- kind: pypi + name: pytest + version: 8.3.3 + url: https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl + sha256: a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2 + requires_dist: + - iniconfig + - packaging + - pluggy>=1.5,<2 + - exceptiongroup>=1.0.0rc8 ; python_full_version < '3.11' + - tomli>=1 ; python_full_version < '3.11' + - colorama ; sys_platform == 'win32' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - pygments>=2.7.2 ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.8' +- kind: conda + name: python + version: 3.12.0 + build: h47c9636_0_cpython + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda + sha256: eb66f8f249caa9d5a956c3a407f079e4779d652ebfc2a4b4f50dcea078e84fa8 + md5: ed8ae98b1b510de68392971b9367d18c + depends: + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.5.0,<3.0a0 + - libffi >=3.4,<4.0a0 + - libsqlite >=3.43.0,<4.0a0 + - libzlib >=1.2.13,<2.0.0a0 + - ncurses >=6.4,<7.0a0 + - openssl >=3.1.3,<4.0a0 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + - xz >=5.2.6,<6.0a0 + constrains: + - python_abi 3.12.* *_cp312 + license: Python-2.0 + purls: [] + size: 13306758 + timestamp: 1696322682581 +- kind: conda + name: python-dateutil + version: 2.9.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 + md5: 2cf4264fffb9e6eff6031c5b6884d61c + depends: + - python >=3.7 + - six >=1.5 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/python-dateutil?source=hash-mapping + size: 222742 + timestamp: 1709299922152 +- kind: conda + name: python_abi + version: '3.12' + build: 5_cp312 + build_number: 5 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 + md5: b76f9b1c862128e56ac7aa8cd2333de9 + constrains: + - python 3.12.* *_cpython + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 6278 + timestamp: 1723823099686 +- kind: pypi + name: pytz + version: '2024.2' + url: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + sha256: 31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 +- kind: pypi + name: pyyaml + version: 6.0.2 + url: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 + requires_python: '>=3.8' +- kind: pypi + name: rasterio + version: 1.4.2 + url: https://files.pythonhosted.org/packages/2e/48/fcd02399c7c4041c850b59c7cd80c309f7b87c86649e2bfb515d44ad061c/rasterio-1.4.2.tar.gz + sha256: 1be35ccb4d998a4c48fa51bbee9e37927ecd9b9e954a2b2581b8f3e9bb165332 + requires_dist: + - affine + - attrs + - certifi + - click>=4.0 + - cligj>=0.5 + - numpy>=1.24 + - click-plugins + - pyparsing + - importlib-metadata ; python_full_version < '3.10' + - sphinx ; extra == 'all' + - pytest-cov>=2.2.0 ; extra == 'all' + - packaging ; extra == 'all' + - pytest>=2.8.2 ; extra == 'all' + - boto3>=1.2.4 ; extra == 'all' + - matplotlib ; extra == 'all' + - ghp-import ; extra == 'all' + - numpydoc ; extra == 'all' + - ipython>=2.0 ; extra == 'all' + - sphinx-click ; extra == 'all' + - hypothesis ; extra == 'all' + - fsspec ; extra == 'all' + - sphinx-rtd-theme ; extra == 'all' + - shapely ; extra == 'all' + - ghp-import ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-click ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - ipython>=2.0 ; extra == 'ipython' + - matplotlib ; extra == 'plot' + - boto3>=1.2.4 ; extra == 's3' + - boto3>=1.2.4 ; extra == 'test' + - fsspec ; extra == 'test' + - hypothesis ; extra == 'test' + - packaging ; extra == 'test' + - pytest-cov>=2.2.0 ; extra == 'test' + - pytest>=2.8.2 ; extra == 'test' + - shapely ; extra == 'test' + requires_python: '>=3.9' +- kind: conda + name: readline + version: '8.2' + build: h92ec313_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda + sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 + md5: 8cbb776a2f641b943d413b3e19df71f4 + depends: + - ncurses >=6.3,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 250351 + timestamp: 1679532511311 +- kind: pypi + name: rechunker + version: 0.5.2 + url: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + sha256: e09585d69b429ae466470047a2b828f003c123dffe6a265720c0ab0ca78f4937 + requires_dist: + - dask[array,diagnostics] + - mypy-extensions + - zarr>=2.11 + - apache-beam ; extra == 'complete' + - fsspec ; extra == 'complete' + - prefect<2 ; extra == 'complete' + - pyyaml ; extra == 'complete' + - xarray>=2022.3 ; extra == 'complete' + - black ; extra == 'dev' + - codecov ; extra == 'dev' + - flake8 ; extra == 'dev' + - hypothesis ; extra == 'dev' + - ipython ; extra == 'dev' + - mypy==0.782 ; extra == 'dev' + - nbsphinx ; extra == 'dev' + - numpydoc ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-pangeo-theme ; extra == 'dev' + - sphinxcontrib-srclinks ; extra == 'dev' + - ipython ; extra == 'docs' + - nbsphinx ; extra == 'docs' + - numpydoc ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-pangeo-theme ; extra == 'docs' + - sphinxcontrib-srclinks ; extra == 'docs' + - hypothesis ; extra == 'test' + - pytest ; extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: requests + version: 2.32.3 + url: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl + sha256: 70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.8' +- kind: pypi + name: requests-oauthlib + version: 2.0.0 + url: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + sha256: 7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 + requires_dist: + - oauthlib>=3.0.0 + - requests>=2.0.0 + - oauthlib[signedtoken]>=3.0.0 ; extra == 'rsa' + requires_python: '>=3.4' +- kind: pypi + name: rioxarray + version: 0.18.1 + url: https://files.pythonhosted.org/packages/aa/b7/a881b08bb24ae15bd3644b313244d89b0eb50d88dbda577ce72e5e3e4be4/rioxarray-0.18.1-py3-none-any.whl + sha256: 64cc571807204afc1ffaf5f9a0a2640dccb1e2edd602d952a3c65153b6645540 + requires_dist: + - packaging + - rasterio>=1.3.7 + - xarray>=2024.7.0 + - pyproj>=3.3 + - numpy>=1.23 + - scipy ; extra == 'all' + - scipy ; extra == 'interp' + requires_python: '>=3.10' +- kind: pypi + name: rsa + version: '4.9' + url: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + sha256: 90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 + requires_dist: + - pyasn1>=0.1.3 + requires_python: '>=3.6,<4' +- kind: pypi + name: setuptools + version: 75.6.0 + url: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + sha256: ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.2.0 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - platformdirs>=4.2.2 ; extra == 'core' + - jaraco-collections ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - packaging ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.7.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - mypy>=1.12,<1.14 ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.9' +- kind: conda + name: six + version: 1.16.0 + build: pyh6c4a22f_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 + md5: e5f25f8dbc060e9a8d912e432202afc2 + depends: + - python + license: MIT + license_family: MIT + purls: + - pkg:pypi/six?source=hash-mapping + size: 14259 + timestamp: 1620240338595 +- kind: pypi + name: sortedcontainers + version: 2.4.0 + url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: pypi + name: tblib + version: 3.0.0 + url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl + sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 + requires_python: '>=3.8' +- kind: conda + name: tk + version: 8.6.13 + build: h5083fa2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 + md5: b50a57ba89c32b62428b71a875291c9b + depends: + - libzlib >=1.2.13,<2.0.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3145523 + timestamp: 1699202432999 +- kind: pypi + name: toolz + version: 1.0.0 + url: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl + sha256: 292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236 + requires_python: '>=3.8' +- kind: conda + name: tornado + version: 6.4.2 + build: py312hea69d52_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda + sha256: 964a2705a36c50040c967b18b45b9cc8de3c2aff4af546979a574e0b38e58e39 + md5: fb0605888a475d6a380ae1d1a819d976 + depends: + - __osx >=11.0 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: Apache-2.0 + license_family: Apache + purls: + - pkg:pypi/tornado?source=hash-mapping + size: 842549 + timestamp: 1732616081362 +- kind: conda + name: typing_extensions + version: 4.12.2 + build: pyha770c72_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb + md5: ebe6952715e1d5eb567eeebf25250fa7 + depends: + - python >=3.8 + license: PSF-2.0 + license_family: PSF + purls: + - pkg:pypi/typing-extensions?source=hash-mapping + size: 39888 + timestamp: 1717802653893 +- kind: pypi + name: tzdata + version: '2024.2' + url: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl + sha256: a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd + requires_python: '>=2' +- kind: conda + name: tzdata + version: 2024b + build: hc8b5060_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda + sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf + md5: 8ac3367aafb1cc0a068483c580af8015 + license: LicenseRef-Public-Domain + purls: [] + size: 122354 + timestamp: 1728047496079 +- kind: pypi + name: uritemplate + version: 3.0.1 + url: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl + sha256: 07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: urllib3 + version: 2.2.3 + url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl + sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- kind: pypi + name: xarray + version: 2024.10.0 + url: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + sha256: ae1d38cb44a0324dfb61e492394158ae22389bf7de9f3c174309c17376df63a0 + requires_dist: + - numpy>=1.24 + - packaging>=23.1 + - pandas>=2.1 + - scipy ; extra == 'accel' + - bottleneck ; extra == 'accel' + - numbagg ; extra == 'accel' + - numba>=0.54 ; extra == 'accel' + - flox ; extra == 'accel' + - opt-einsum ; extra == 'accel' + - xarray[accel,etc,io,parallel,viz] ; extra == 'complete' + - hypothesis ; extra == 'dev' + - mypy ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest-env ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - pytest-timeout ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-autosummary-accessors ; extra == 'dev' + - xarray[complete] ; extra == 'dev' + - sparse ; extra == 'etc' + - netcdf4 ; extra == 'io' + - h5netcdf ; extra == 'io' + - scipy ; extra == 'io' + - zarr ; extra == 'io' + - fsspec ; extra == 'io' + - cftime ; extra == 'io' + - pooch ; extra == 'io' + - pydap ; python_full_version < '3.10' and extra == 'io' + - dask[complete] ; extra == 'parallel' + - cartopy ; extra == 'viz' + - matplotlib ; extra == 'viz' + - nc-time-axis ; extra == 'viz' + - seaborn ; extra == 'viz' + requires_python: '>=3.10' +- kind: pypi + name: xarray-beam + version: 0.0.1 + url: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl + sha256: 20f089420b71105f77be9b312514092eab68941818548b6c9bd1c49d447c20ff + requires_dist: + - apache-beam + - dask + - rechunker + - zarr + - xarray + requires_python: '>=3' +- kind: pypi + name: xee + version: 0.0.21.dev7+g4ba0259.d20250203 + path: . + sha256: 8199673c3344c561e099788ada64f45ca20038c3756f42b330664b30d60e551a + requires_dist: + - xarray[parallel] + - earthengine-api>=0.1.374 + - pyproj + - affine + - absl-py ; extra == 'tests' + - pytest ; extra == 'tests' + - pyink ; extra == 'tests' + - rasterio ; extra == 'tests' + - rioxarray ; extra == 'tests' + - absl-py ; extra == 'dataflow' + - apache-beam[gcp] ; extra == 'dataflow' + - gcsfs<=2024.2.0 ; extra == 'dataflow' + - xarray-beam ; extra == 'dataflow' + - xee[dataflow] ; extra == 'examples' + requires_python: '>=3.8' + editable: true +- kind: conda + name: xz + version: 5.2.6 + build: h57fd34a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec + md5: 39c6b54e94014701dd157f4f576ed211 + license: LGPL-2.1 and GPL-2.0 + purls: [] + size: 235693 + timestamp: 1660346961024 +- kind: pypi + name: yarl + version: 1.17.1 + url: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139 + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.0 + requires_python: '>=3.9' +- kind: pypi + name: zarr + version: 2.18.4 + url: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl + sha256: 2795e20aff91093ce7e4da36ab1a138aededbd8ab66bf01fd01512e61d31e5d1 + requires_dist: + - asciitree + - numpy>=1.24 + - fasteners ; sys_platform != 'emscripten' + - numcodecs>=0.10.0,!=0.14.0,!=0.14.1 + - notebook ; extra == 'jupyter' + - ipytree>=0.2.2 ; extra == 'jupyter' + - ipywidgets>=8.0.0 ; extra == 'jupyter' + - sphinx ; extra == 'docs' + - sphinx-automodapi ; extra == 'docs' + - sphinx-design ; extra == 'docs' + - sphinx-issues ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - numpydoc ; extra == 'docs' + - numcodecs[msgpack]!=0.14.0,!=0.14.1 ; extra == 'docs' + - pytest-doctestplus ; extra == 'docs' + requires_python: '>=3.11' +- kind: pypi + name: zict + version: 3.0.0 + url: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + sha256: 5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae + requires_python: '>=3.8' diff --git a/pyproject.toml b/pyproject.toml index 48cd94a..3da1375 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -65,5 +65,23 @@ preview = true pyink-indentation = 2 pyink-use-majority-quotes = true +[tool.setuptools] +packages = ["xee"] + [tool.setuptools_scm] fallback_version = "9999" + +[tool.pixi.project] +channels = ["conda-forge"] +platforms = ["osx-arm64"] + +[tool.pixi.pypi-dependencies] +xee = { path = ".", editable = true } + +[tool.pixi.environments] +default = { solve-group = "default" } +dataflow = { features = ["dataflow"], solve-group = "default" } +examples = { features = ["examples", "dataflow"], solve-group = "default" } +tests = { features = ["tests"], solve-group = "default" } + +[tool.pixi.tasks] From 0dbd2504564c5d53a9538df2fb190b8578bdf178 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Mon, 3 Feb 2025 12:00:54 -0800 Subject: [PATCH 08/56] limit to python<3.13; add proj, gdal as dependencies --- pixi.lock | 4063 ++++++++++++++++++++++++++++++++++++------------ pyproject.toml | 6 +- 2 files changed, 3093 insertions(+), 976 deletions(-) diff --git a/pixi.lock b/pixi.lock index 7f7b146..159c81e 100644 --- a/pixi.lock +++ b/pixi.lock @@ -7,125 +7,219 @@ environments: - https://pypi.org/simple packages: osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip - - pypi: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz - - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz + - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl - - pypi: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: . default: channels: @@ -134,80 +228,133 @@ environments: - https://pypi.org/simple packages: osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - pypi: . examples: @@ -217,125 +364,219 @@ environments: - https://pypi.org/simple packages: osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip - - pypi: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz - - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz + - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz + - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl - - pypi: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: . tests: channels: @@ -344,95 +585,147 @@ environments: - https://pypi.org/simple packages: osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/41/77/8d9ce42673e5cb9988f6df73c1c5c1d4e9e788053cccd7f5fb14ef100982/black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4c/ea/a77bab4cf1887f4b2e0bce5516ea0b3ff7d04ba96af21d65024629afedb6/black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz + - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/93/72/37d76e26bc9cc5ffb90cd2c29adcf0476922e8d89da6061682298e231a3b/pyink-24.10.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1f/12/2f271b3601ae25731879f160d6b3941d80eb6b4f3e24be90289e33fb1dc4/pyink-24.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/2e/48/fcd02399c7c4041c850b59c7cd80c309f7b87c86649e2bfb515d44ad061c/rasterio-1.4.2.tar.gz + - pypi: https://files.pythonhosted.org/packages/de/19/ab4326e419b543da623ce4191f68e3f36a4d9adc64f3df5c78f044d8d9ca/rasterio-1.4.3.tar.gz - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/aa/b7/a881b08bb24ae15bd3644b313244d89b0eb50d88dbda577ce72e5e3e4be4/rioxarray-0.18.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/b0/2c74f302512fbd24d68fbba0ec6b650b33ef83e398daeb0a2bb1a4cd641c/rioxarray-0.18.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - pypi: . packages: @@ -456,117 +749,220 @@ packages: requires_python: '>=3.7' - kind: pypi name: aiohappyeyeballs - version: 2.4.3 - url: https://files.pythonhosted.org/packages/f7/d8/120cd0fe3e8530df0539e71ba9683eade12cae103dd7543e50d15f737917/aiohappyeyeballs-2.4.3-py3-none-any.whl - sha256: 8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572 + version: 2.4.4 + url: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl + sha256: a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8 requires_python: '>=3.8' - kind: pypi name: aiohttp - version: 3.11.2 - url: https://files.pythonhosted.org/packages/4c/c6/2ea8c333f6c26cc48eb35e7bc369124ece9591bb8ef236cf72cb568da4f7/aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: d3a2bcf6c81639a165da93469e1e0aff67c956721f3fa9c0560f07dd1e505116 + version: 3.11.11 + url: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl + sha256: 8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c requires_dist: - aiohappyeyeballs>=2.3.0 - aiosignal>=1.1.2 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' - attrs>=17.3.0 - frozenlist>=1.1.1 - multidict>=4.5,<7.0 - propcache>=0.2.0 - yarl>=1.17.0,<2.0 - - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' - - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' - - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' - aiodns>=3.2.0 ; (sys_platform == 'darwin' and extra == 'speedups') or (sys_platform == 'linux' and extra == 'speedups') + - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' requires_python: '>=3.9' - kind: pypi name: aiosignal - version: 1.3.1 - url: https://files.pythonhosted.org/packages/76/ac/a7305707cb852b7e16ff80eaf5692309bde30e2b1100a1fcacdc8f731d97/aiosignal-1.3.1-py3-none-any.whl - sha256: f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17 + version: 1.3.2 + url: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl + sha256: 45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5 requires_dist: - frozenlist>=1.1.0 - requires_python: '>=3.7' + requires_python: '>=3.9' +- kind: pypi + name: annotated-types + version: 0.7.0 + url: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 + requires_dist: + - typing-extensions>=4.0.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- kind: conda + name: aom + version: 3.9.1 + build: h7bae524_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda + sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef + md5: 7adba36492a1bb22d98ffffe4f6fc6de + depends: + - __osx >=11.0 + - libcxx >=16 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 2235747 + timestamp: 1718551382432 - kind: pypi name: apache-beam - version: 2.17.0 - url: https://files.pythonhosted.org/packages/bf/07/06f8eff85d93194ce4fe4281d7ba970fe46944463cd977f26fdf4b63017a/apache-beam-2.17.0.zip - sha256: 4e90b8a6caf075632314876febbdff949a6dc2217dd63e220bf25141f18ec957 + version: 2.62.0 + url: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz + sha256: b9d97df88b9b9e4585fff5ee09959d76b0ab596bb78ae986fac8c04bf8cc78db requires_dist: - crcmod>=1.7,<2.0 - - dill>=0.3.0,<0.3.1 - - fastavro>=0.21.4,<0.22 - - future>=0.16.0,<1.0.0 - - grpcio>=1.12.1,<2 + - orjson>=3.9.7,<4 + - dill>=0.3.1.1,<0.3.2 + - cloudpickle~=2.2.1 + - fastavro>=0.23.6,<2 + - fasteners>=0.3,<1.0 + - grpcio>=1.33.1,!=1.48.0,!=1.59.*,!=1.60.*,!=1.61.*,!=1.62.0,!=1.62.1,<1.66.0,<2 - hdfs>=2.1.0,<3.0.0 - - httplib2>=0.8,<=0.12.0 - - mock>=1.0.1,<3.0.0 - - pymongo>=3.8.0,<4.0.0 - - oauth2client>=2.0.1,<4 - - protobuf>=3.5.0.post1,<4 + - httplib2>=0.8,<0.23.0 + - jsonschema>=4.0.0,<5.0.0 + - jsonpickle>=3.0.0,<4.0.0 + - numpy>=1.14.3,<2.3.0 + - objsize>=0.6.1,<0.8.0 + - packaging>=22.0 + - pymongo>=3.8.0,<5.0.0 + - proto-plus>=1.7.1,<2 + - protobuf>=3.20.3,!=4.0.*,!=4.21.*,!=4.22.0,!=4.23.*,!=4.24.*,<6.0.0.dev0 - pydot>=1.2.0,<2 - python-dateutil>=2.8.0,<3 - pytz>=2018.3 - - avro>=1.8.1,<2.0.0 ; python_full_version < '3.0' - - funcsigs>=1.0.2,<2 ; python_full_version < '3.0' - - futures>=3.2.0,<4.0.0 ; python_full_version < '3.0' - - pyvcf>=0.6.8,<0.7.0 ; python_full_version < '3.0' - - typing>=3.6.0,<3.7.0 ; python_full_version < '3.5' - - avro-python3>=1.8.1,<2.0.0 ; python_full_version >= '3.0' - - pyarrow>=0.15.1,<0.16.0 ; platform_system != 'Windows' or python_full_version >= '3.0' - - sphinx>=1.5.2,<2.0 ; extra == 'docs' - - cachetools>=3.1.0,<4 ; extra == 'gcp' - - google-apitools>=0.5.28,<0.5.29 ; extra == 'gcp' - - google-cloud-datastore>=1.7.1,<1.8.0 ; extra == 'gcp' - - google-cloud-pubsub>=0.39.0,<1.1.0 ; extra == 'gcp' - - google-cloud-bigquery>=1.6.0,<1.18.0 ; extra == 'gcp' - - google-cloud-core>=0.28.1,<2 ; extra == 'gcp' - - google-cloud-bigtable>=0.31.1,<1.1.0 ; extra == 'gcp' - - proto-google-cloud-datastore-v1>=0.90.0,<=0.90.4 ; python_full_version < '3.0' and extra == 'gcp' - - googledatastore>=7.0.1,<7.1 ; python_full_version < '3.0' and extra == 'gcp' - - nose>=1.3.7 ; extra == 'test' - - nose-xunitmp>=0.4.1 ; extra == 'test' - - numpy>=1.14.3,<2 ; extra == 'test' - - pandas>=0.23.4,<0.25 ; extra == 'test' - - parameterized>=0.6.0,<0.7.0 ; extra == 'test' - - pyhamcrest>=1.9,<2.0 ; extra == 'test' - - pyyaml>=3.12,<6.0.0 ; extra == 'test' + - redis>=5.0.0,<6 + - regex>=2020.6.8 + - requests>=2.24.0,<3.0.0 + - sortedcontainers>=2.4.0 + - typing-extensions>=3.7.0 + - zstandard>=0.18.0,<1 + - pyyaml>=3.12,<7.0.0 + - pyarrow>=3.0.0,<17.0.0 + - pyarrow-hotfix<1 + - jinja2>=3.0,<3.2 ; extra == 'docs' + - sphinx>=7.0.0,<8.0 ; extra == 'docs' + - docstring-parser>=0.15,<1.0 ; extra == 'docs' + - docutils>=0.18.1 ; extra == 'docs' + - pandas<2.2.0 ; extra == 'docs' + - openai ; extra == 'docs' + - docstring-parser>=0.15,<1.0 ; extra == 'test' + - freezegun>=0.3.12 ; extra == 'test' + - jinja2>=3.0,<3.2 ; extra == 'test' + - joblib>=1.0.1 ; extra == 'test' + - mock>=1.0.1,<6.0.0 ; extra == 'test' + - pandas<2.2.0 ; extra == 'test' + - parameterized>=0.7.1,<0.10.0 ; extra == 'test' + - pyhamcrest>=1.9,!=1.10.0,<3.0.0 ; extra == 'test' - requests-mock>=1.7,<2.0 ; extra == 'test' - - tenacity>=5.0.2,<6.0 ; extra == 'test' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- kind: pypi - name: asciitree - version: 0.3.3 - url: https://files.pythonhosted.org/packages/2d/6a/885bc91484e1aa8f618f6f0228d76d0e67000b0fdd6090673b777e311913/asciitree-0.3.3.tar.gz - sha256: 4aa4b9b649f85e3fcb343363d97564aa1fb62e249677f2e18a96765145cc0f6e + - tenacity>=8.0.0,<9 ; extra == 'test' + - pytest>=7.1.2,<8.0 ; extra == 'test' + - pytest-xdist>=2.5.0,<4 ; extra == 'test' + - pytest-timeout>=2.1.0,<3 ; extra == 'test' + - scikit-learn>=0.20.0 ; extra == 'test' + - setuptools ; extra == 'test' + - sqlalchemy>=1.3,<3.0 ; extra == 'test' + - psycopg2-binary>=2.8.5,!=2.9.10,<3.0.0 ; extra == 'test' + - testcontainers[mysql]>=3.0.3,<4.0.0 ; extra == 'test' + - cryptography>=41.0.2 ; extra == 'test' + - hypothesis>5.0.0,<7.0.0 ; extra == 'test' + - cachetools>=3.1.0,<6 ; extra == 'gcp' + - google-api-core>=2.0.0,<3 ; extra == 'gcp' + - google-apitools>=0.5.31,<0.5.32 ; extra == 'gcp' + - google-auth>=1.18.0,<3 ; extra == 'gcp' + - google-auth-httplib2>=0.1.0,<0.3.0 ; extra == 'gcp' + - google-cloud-datastore>=2.0.0,<3 ; extra == 'gcp' + - google-cloud-pubsub>=2.1.0,<3 ; extra == 'gcp' + - google-cloud-pubsublite>=1.2.0,<2 ; extra == 'gcp' + - google-cloud-storage>=2.18.2,<3 ; extra == 'gcp' + - google-cloud-bigquery>=2.0.0,<4 ; extra == 'gcp' + - google-cloud-bigquery-storage>=2.6.3,<3 ; extra == 'gcp' + - google-cloud-core>=2.0.0,<3 ; extra == 'gcp' + - google-cloud-bigtable>=2.19.0,<3 ; extra == 'gcp' + - google-cloud-spanner>=3.0.0,<4 ; extra == 'gcp' + - google-cloud-dlp>=3.0.0,<4 ; extra == 'gcp' + - google-cloud-language>=2.0,<3 ; extra == 'gcp' + - google-cloud-videointelligence>=2.0,<3 ; extra == 'gcp' + - google-cloud-vision>=2,<4 ; extra == 'gcp' + - google-cloud-recommendations-ai>=0.1.0,<0.11.0 ; extra == 'gcp' + - google-cloud-aiplatform>=1.26.0,<2.0 ; extra == 'gcp' + - keyrings-google-artifactregistry-auth ; extra == 'gcp' + - facets-overview>=1.1.0,<2 ; extra == 'interactive' + - google-cloud-dataproc>=5.0.0,<6 ; extra == 'interactive' + - ipython>=8,<9 ; extra == 'interactive' + - ipykernel>=6,<7 ; extra == 'interactive' + - ipywidgets>=8,<9 ; extra == 'interactive' + - jupyter-client>=6.1.11,!=6.1.13,<8.2.1 ; extra == 'interactive' + - timeloop>=1.0.2,<2 ; extra == 'interactive' + - nbformat>=5.0.5,<6 ; extra == 'interactive' + - nbconvert>=6.2.0,<8 ; extra == 'interactive' + - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'interactive' + - needle>=0.5.0,<1 ; extra == 'interactive-test' + - chromedriver-binary>=117,<118 ; extra == 'interactive-test' + - pillow>=7.1.1,<10 ; extra == 'interactive-test' + - urllib3>=1.21.1,<2 ; extra == 'interactive-test' + - datatable ; extra == 'ml-test' + - embeddings ; extra == 'ml-test' + - onnxruntime ; extra == 'ml-test' + - sentence-transformers ; extra == 'ml-test' + - skl2onnx ; extra == 'ml-test' + - pillow ; extra == 'ml-test' + - tensorflow ; extra == 'ml-test' + - tensorflow-hub ; extra == 'ml-test' + - tensorflow-transform ; extra == 'ml-test' + - tf2onnx ; extra == 'ml-test' + - torch ; extra == 'ml-test' + - transformers ; extra == 'ml-test' + - datatable ; extra == 'p312-ml-test' + - embeddings ; extra == 'p312-ml-test' + - onnxruntime ; extra == 'p312-ml-test' + - sentence-transformers ; extra == 'p312-ml-test' + - skl2onnx ; extra == 'p312-ml-test' + - pillow ; extra == 'p312-ml-test' + - tensorflow ; extra == 'p312-ml-test' + - tensorflow-hub ; extra == 'p312-ml-test' + - tf2onnx ; extra == 'p312-ml-test' + - torch ; extra == 'p312-ml-test' + - transformers ; extra == 'p312-ml-test' + - boto3>=1.9,<2 ; extra == 'aws' + - azure-storage-blob>=12.3.2,<13 ; extra == 'azure' + - azure-core>=1.7.0,<2 ; extra == 'azure' + - azure-identity>=1.12.0,<2 ; extra == 'azure' + - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'dataframe' + - distributed>=2024.4.2 ; extra == 'dask' + - dask>=2024.4.2 ; extra == 'dask' + - docstring-parser>=0.15,<1.0 ; extra == 'yaml' + - jinja2>=3.0,<3.2 ; extra == 'yaml' + - virtualenv-clone>=0.5,<1.0 ; extra == 'yaml' + - js2py>=0.74,<1 ; python_full_version < '3.12' and extra == 'yaml' + - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'yaml' + requires_python: '>=3.9' - kind: pypi name: attrs - version: 24.2.0 - url: https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl - sha256: 81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2 + version: 25.1.0 + url: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl + sha256: c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a requires_dist: - - importlib-metadata ; python_full_version < '3.8' - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' - hypothesis ; extra == 'benchmark' - - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' - pympler ; extra == 'benchmark' - pytest-codspeed ; extra == 'benchmark' - - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' - pytest-xdist[psutil] ; extra == 'benchmark' - pytest>=4.3.0 ; extra == 'benchmark' - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' - coverage[toml]>=5.3 ; extra == 'cov' - hypothesis ; extra == 'cov' - - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' - pympler ; extra == 'cov' - - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' - pytest-xdist[psutil] ; extra == 'cov' - pytest>=4.3.0 ; extra == 'cov' - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' - hypothesis ; extra == 'dev' - - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'dev' - - pre-commit ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit-uv ; extra == 'dev' - pympler ; extra == 'dev' - - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' - pytest-xdist[psutil] ; extra == 'dev' - pytest>=4.3.0 ; extra == 'dev' - cogapp ; extra == 'docs' @@ -578,28 +974,19 @@ packages: - towncrier<24.7 ; extra == 'docs' - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' - hypothesis ; extra == 'tests' - - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' - pympler ; extra == 'tests' - - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' - pytest-xdist[psutil] ; extra == 'tests' - pytest>=4.3.0 ; extra == 'tests' - - mypy>=1.11.1 ; python_full_version >= '3.9' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' - - pytest-mypy-plugins ; python_full_version >= '3.9' and python_full_version < '3.13' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' - requires_python: '>=3.7' -- kind: pypi - name: avro-python3 - version: 1.10.2 - url: https://files.pythonhosted.org/packages/cc/97/7a6970380ca8db9139a3cc0b0e3e0dd3e4bc584fb3644e1d06e71e1a55f0/avro-python3-1.10.2.tar.gz - sha256: 3b63f24e6b04368c3e4a6f923f484be0230d821aad65ac36108edbff29e9aaab - requires_dist: - - python-snappy ; extra == 'snappy' - - zstandard ; extra == 'zstandard' - requires_python: '>=3.5' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.8' - kind: pypi name: black - version: 24.8.0 - url: https://files.pythonhosted.org/packages/41/77/8d9ce42673e5cb9988f6df73c1c5c1d4e9e788053cccd7f5fb14ef100982/black-24.8.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 649f6d84ccbae73ab767e206772cc2d7a393a001070a4c814a546afd0d423aed + version: 24.10.0 + url: https://files.pythonhosted.org/packages/4c/ea/a77bab4cf1887f4b2e0bce5516ea0b3ff7d04ba96af21d65024629afedb6/black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65 requires_dist: - click>=8.0.0 - mypy-extensions>=0.4.3 @@ -609,26 +996,48 @@ packages: - tomli>=1.1.0 ; python_full_version < '3.11' - typing-extensions>=4.0.1 ; python_full_version < '3.11' - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.7.4,!=3.9.0 ; implementation_name == 'pypy' and sys_platform == 'win32' and extra == 'd' - - aiohttp>=3.7.4 ; (implementation_name != 'pypy' and extra == 'd') or (sys_platform != 'win32' and extra == 'd') + - aiohttp>=3.10 ; extra == 'd' - ipython>=7.8.0 ; extra == 'jupyter' - tokenize-rt>=3.2.0 ; extra == 'jupyter' - uvloop>=0.15.2 ; extra == 'uvloop' - requires_python: '>=3.8' + requires_python: '>=3.9' +- kind: conda + name: blosc + version: 1.21.6 + build: h7dd00d9_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda + sha256: c3fe902114b9a3ac837e1a32408cc2142c147ec054c1038d37aec6814343f48a + md5: 925acfb50a750aa178f7a0aced77f351 + depends: + - __osx >=11.0 + - libcxx >=18 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - snappy >=1.2.1,<1.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 33602 + timestamp: 1733513285902 - kind: pypi name: bokeh - version: 2.4.3 - url: https://files.pythonhosted.org/packages/15/06/706a9c43436cd0c3e2f4b94e93ae837e74965e59565c596b727974a74169/bokeh-2.4.3-py3-none-any.whl - sha256: 104d2f0a4ca7774ee4b11e545aa34ff76bf3e2ad6de0d33944361981b65da420 + version: 3.6.2 + url: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl + sha256: fddc4b91f8b40178c0e3e83dfcc33886d7803a3a1f041a840834255e435a18c2 requires_dist: - jinja2>=2.9 - - numpy>=1.11.3 + - contourpy>=1.2 + - numpy>=1.16 - packaging>=16.8 + - pandas>=1.2 - pillow>=7.1.0 - pyyaml>=3.10 - - tornado>=5.1 - - typing-extensions>=3.10.0 - requires_python: '>=3.7' + - tornado>=6.2 + - xyzservices>=2021.9.1 + requires_python: '>=3.10' - kind: conda name: bzip2 version: 1.0.8 @@ -645,53 +1054,60 @@ packages: purls: [] size: 122909 timestamp: 1720974522888 +- kind: conda + name: c-ares + version: 1.34.4 + build: h5505292_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda + sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f + md5: c1c999a38a4303b29d75c636eaa13cf9 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 179496 + timestamp: 1734208291879 - kind: conda name: ca-certificates - version: 2024.8.30 + version: 2025.1.31 build: hf0a4a13_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2024.8.30-hf0a4a13_0.conda - sha256: 2db1733f4b644575dbbdd7994a8f338e6ef937f5ebdb74acd557e9dda0211709 - md5: 40dec13fd8348dbe303e57be74bd3d35 + url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + sha256: 7e12816618173fe70f5c638b72adf4bfd4ddabf27794369bb17871c5bb75b9f9 + md5: 3569d6a9141adc64d2fe4797f3289e06 license: ISC purls: [] - size: 158482 - timestamp: 1725019034582 + size: 158425 + timestamp: 1738298167688 - kind: pypi name: cachetools - version: 3.1.1 - url: https://files.pythonhosted.org/packages/2f/a6/30b0a0bef12283e83e58c1d6e7b5aabc7acfc4110df81a4471655d33e704/cachetools-3.1.1-py2.py3-none-any.whl - sha256: 428266a1c0d36dc5aca63a2d7c5942e88c2c898d72139fca0e97fdd2380517ae + version: 5.5.1 + url: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl + sha256: b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb + requires_python: '>=3.7' - kind: pypi name: certifi - version: 2024.12.14 - url: https://files.pythonhosted.org/packages/a5/32/8f6669fc4798494966bf446c8c4a162e0b5d893dff088afddf76414f70e1/certifi-2024.12.14-py3-none-any.whl - sha256: 1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56 + version: 2025.1.31 + url: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl + sha256: ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe requires_python: '>=3.6' - kind: pypi name: charset-normalizer - version: 3.4.0 - url: https://files.pythonhosted.org/packages/fa/44/b730e2a2580110ced837ac083d8ad222343c96bb6b66e9e4e706e4d0b6df/charset_normalizer-3.4.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db - requires_python: '>=3.7.0' -- kind: conda + version: 3.4.1 + url: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl + sha256: 73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 + requires_python: '>=3.7' +- kind: pypi name: click version: 8.1.8 - build: pyh707e725_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/click-8.1.8-pyh707e725_0.conda - sha256: c920d23cd1fcf565031c679adb62d848af60d6fbb0edc2d50ba475cea4f0d8ab - md5: f22f4d4970e09d68a10b922cbb0408d3 - depends: - - __unix - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/click?source=hash-mapping - size: 84705 - timestamp: 1734858922844 + url: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl + sha256: 63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 + requires_dist: + - colorama ; platform_system == 'Windows' + - importlib-metadata ; python_full_version < '3.8' + requires_python: '>=3.7' - kind: pypi name: click-plugins version: 1.1.1 @@ -718,6 +1134,37 @@ packages: url: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl sha256: 61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f requires_python: '>=3.6' +- kind: pypi + name: contourpy + version: 1.3.1 + url: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc + requires_dist: + - numpy>=1.23 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.11.1 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.10' +- kind: pypi + name: crc32c + version: 2.7.1 + url: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: afd778fc8ac0ed2ffbfb122a9aa6a0e409a8019b894a1799cda12c01534493e0 + requires_python: '>=3.7' - kind: pypi name: crcmod version: '1.7' @@ -725,91 +1172,169 @@ packages: sha256: dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e - kind: pypi name: dask - version: 2023.3.0 - url: https://files.pythonhosted.org/packages/16/94/47aa3c13f037824b2b8c351be6f6abc3b93884b338175ea1ef3faaedfc0d/dask-2023.3.0-py3-none-any.whl - sha256: 4b355da5492fd8699017e786e281ad347528d11c868b645d102124df3621e9ee + version: 2024.8.0 + url: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl + sha256: 250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309 requires_dist: - - click>=7.0 - - cloudpickle>=1.1.1 - - fsspec>=0.6.0 + - click>=8.1 + - cloudpickle>=1.5.0 + - fsspec>=2021.9.0 - packaging>=20.0 - - partd>=1.2.0 + - partd>=1.4.0 - pyyaml>=5.3.1 - - toolz>=0.8.2 + - toolz>=0.10.0 + - importlib-metadata>=4.13.0 ; python_full_version < '3.12' - numpy>=1.21 ; extra == 'array' - - bokeh>=2.4.2,<3 ; extra == 'complete' - - distributed==2023.3.0 ; extra == 'complete' - - jinja2>=2.10.3 ; extra == 'complete' - - numpy>=1.21 ; extra == 'complete' - - pandas>=1.3 ; extra == 'complete' - - numpy>=1.21 ; extra == 'dataframe' - - pandas>=1.3 ; extra == 'dataframe' - - bokeh>=2.4.2,<3 ; extra == 'diagnostics' + - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete' + - pyarrow>=7.0 ; extra == 'complete' + - pyarrow-hotfix ; extra == 'complete' + - lz4>=4.3.2 ; extra == 'complete' + - dask[array] ; extra == 'dataframe' + - pandas>=2.0 ; extra == 'dataframe' + - dask-expr>=1.1,<1.2 ; extra == 'dataframe' + - bokeh>=2.4.2 ; extra == 'diagnostics' - jinja2>=2.10.3 ; extra == 'diagnostics' - - distributed==2023.3.0 ; extra == 'distributed' + - distributed==2024.8.0 ; extra == 'distributed' - pandas[test] ; extra == 'test' - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' - pytest-rerunfailures ; extra == 'test' + - pytest-timeout ; extra == 'test' - pytest-xdist ; extra == 'test' - pre-commit ; extra == 'test' - requires_python: '>=3.8' + requires_python: '>=3.9' +- kind: pypi + name: dask-expr + version: 1.1.10 + url: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl + sha256: c6365c6fa6d3e386c5ee79bd20d4c89e566c0cf78fb6c762f74b2f04028935c6 + requires_dist: + - dask==2024.8.0 + - pyarrow>=7.0.0 + - pandas>=2 + - crick ; extra == 'analyze' + - distributed ; extra == 'analyze' + requires_python: '>=3.9' - kind: conda - name: decorator - version: 5.1.1 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 - sha256: 328a6a379f9bdfd0230e51de291ce858e6479411ea4b0545fb377c71662ef3e2 - md5: 43afe5ab04e35e17ba28649471dd7364 - depends: - - python >=3.5 + name: dav1d + version: 1.2.1 + build: hb547adb_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 + md5: 5a74cdee497e6b65173e10d94582fae6 license: BSD-2-Clause license_family: BSD - purls: - - pkg:pypi/decorator?source=hash-mapping - size: 12072 - timestamp: 1641555714315 + purls: [] + size: 316394 + timestamp: 1685695959391 +- kind: pypi + name: decorator + version: 5.1.1 + url: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl + sha256: b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 + requires_python: '>=3.5' +- kind: pypi + name: deprecated + version: 1.2.18 + url: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl + sha256: bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec + requires_dist: + - wrapt>=1.10,<2 + - tox ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - bump2version<1 ; extra == 'dev' + - setuptools ; python_full_version >= '3.12' and extra == 'dev' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - kind: pypi name: dill - version: 0.3.0 - url: https://files.pythonhosted.org/packages/39/7a/70803635c850e351257029089d38748516a280864c97cbc73087afef6d51/dill-0.3.0.tar.gz - sha256: 993409439ebf7f7902d9de93eaa2a395e0446ff773d29f13dc46646482f76906 + version: 0.3.1.1 + url: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz + sha256: 42d8ef819367516592a825746a18073ced42ca169ab1f5f4044134703e7a049c requires_dist: - objgraph>=1.7.2 ; extra == 'graph' requires_python: '>=2.6,!=3.0.*' - kind: pypi name: distributed - version: 2023.3.0 - url: https://files.pythonhosted.org/packages/a2/1e/96d430d905fa3a43bd27fe16fa3832e5f7df11cdaf965fb86849dcb34454/distributed-2023.3.0-py3-none-any.whl - sha256: dd1f5854d1117a40c397f08f24e0d832d7e0ef15fba3266c85af4420c6a379ec + version: 2024.8.0 + url: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl + sha256: 11af55d22dd6e04eb868b87f166b8f59ef1b300f659f87c016643b7f98280ec6 requires_dist: - - click>=7.0 + - click>=8.0 - cloudpickle>=1.5.0 - - dask==2023.3.0 + - dask==2024.8.0 - jinja2>=2.10.3 - locket>=1.0.0 - msgpack>=1.0.0 - packaging>=20.0 - - psutil>=5.7.0 + - psutil>=5.7.2 - pyyaml>=5.3.1 - sortedcontainers>=2.0.5 - tblib>=1.6.0 - toolz>=0.10.0 - - tornado>=6.0.3 + - tornado>=6.0.4 - urllib3>=1.24.3 - - zict>=2.1.0 - requires_python: '>=3.8' + - zict>=3.0.0 + requires_python: '>=3.9' +- kind: pypi + name: dnspython + version: 2.7.0 + url: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl + sha256: b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 + requires_dist: + - black>=23.1.0 ; extra == 'dev' + - coverage>=7.0 ; extra == 'dev' + - flake8>=7 ; extra == 'dev' + - hypercorn>=0.16.0 ; extra == 'dev' + - mypy>=1.8 ; extra == 'dev' + - pylint>=3 ; extra == 'dev' + - pytest-cov>=4.1.0 ; extra == 'dev' + - pytest>=7.4 ; extra == 'dev' + - quart-trio>=0.11.0 ; extra == 'dev' + - sphinx-rtd-theme>=2.0.0 ; extra == 'dev' + - sphinx>=7.2.0 ; extra == 'dev' + - twine>=4.0.0 ; extra == 'dev' + - wheel>=0.42.0 ; extra == 'dev' + - cryptography>=43 ; extra == 'dnssec' + - h2>=4.1.0 ; extra == 'doh' + - httpcore>=1.0.0 ; extra == 'doh' + - httpx>=0.26.0 ; extra == 'doh' + - aioquic>=1.0.0 ; extra == 'doq' + - idna>=3.7 ; extra == 'idna' + - trio>=0.23 ; extra == 'trio' + - wmi>=1.5.1 ; extra == 'wmi' + requires_python: '>=3.9' - kind: pypi name: docopt version: 0.6.2 url: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz sha256: 49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 +- kind: pypi + name: docstring-parser + version: '0.16' + url: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl + sha256: bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637 + requires_python: '>=3.6,<4.0' +- kind: pypi + name: donfig + version: 0.8.1.post1 + url: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl + sha256: 2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d + requires_dist: + - pyyaml + - sphinx>=4.0.0 ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pytest ; extra == 'docs' + - cloudpickle ; extra == 'docs' + - pytest ; extra == 'test' + - cloudpickle ; extra == 'test' + requires_python: '>=3.8' - kind: pypi name: earthengine-api - version: 1.4.4 - url: https://files.pythonhosted.org/packages/a8/e7/1ac281e856159f5045de596c64c597e75dd0238429938c686f2093fac53d/earthengine_api-1.4.4-py3-none-any.whl - sha256: 3976e93c7c50f3263de1b3ecba294ed030bef617fd81f674dd163c4c5eba38a8 + version: 1.5.0 + url: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl + sha256: 7bc0dec75c19eaa20dee1a98d4642efd288dc20e9789de0f2f14e3179de227c5 requires_dist: - google-cloud-storage - google-api-python-client>=1.12.1 @@ -823,17 +1348,42 @@ packages: requires_python: '>=3.9' - kind: pypi name: fastavro - version: 0.21.24 - url: https://files.pythonhosted.org/packages/85/7b/15d6af265fc01bf7ab93e7dc823b3f8dd8a6c56420999207446b7d2de997/fastavro-0.21.24.tar.gz - sha256: 7ac9bcf6e1226393d6db163f33ab5915e98ebf867fdab8f6239dc15c26f474da + version: 1.10.0 + url: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl + sha256: cfe57cb0d72f304bd0dcc5a3208ca6a7363a9ae76f3073307d095c9d053b29d4 requires_dist: - - python-snappy ; extra == 'snappy' + - cramjam ; extra == 'codecs' + - zstandard ; extra == 'codecs' + - lz4 ; extra == 'codecs' + - cramjam ; extra == 'snappy' + - zstandard ; extra == 'zstandard' + - lz4 ; extra == 'lz4' + requires_python: '>=3.9' - kind: pypi name: fasteners version: '0.19' url: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl sha256: 758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237 requires_python: '>=3.6' +- kind: conda + name: freexl + version: 2.0.0 + build: h3ab3353_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda + sha256: b4146ac9ba1676494e3d812ca39664dd7dd454e4d0984f3665fd6feec318c71c + md5: dd655a29b40fe0d1bf95c64cf3cb348d + depends: + - __osx >=11.0 + - libexpat >=2.6.4,<3.0a0 + - libiconv >=1.17,<2.0a0 + - minizip >=4.0.7,<5.0a0 + license: MPL-1.1 + license_family: MOZILLA + purls: [] + size: 53378 + timestamp: 1734014980768 - kind: pypi name: frozenlist version: 1.5.0 @@ -842,20 +1392,25 @@ packages: requires_python: '>=3.8' - kind: pypi name: fsspec - version: 2024.2.0 - url: https://files.pythonhosted.org/packages/ad/30/2281c062222dc39328843bd1ddd30ff3005ef8e30b2fd09c4d2792766061/fsspec-2024.2.0-py3-none-any.whl - sha256: 817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8 + version: 2025.2.0 + url: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl + sha256: 9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b requires_dist: - adlfs ; extra == 'abfs' - adlfs ; extra == 'adl' - pyarrow>=1 ; extra == 'arrow' - dask ; extra == 'dask' - distributed ; extra == 'dask' - - pytest ; extra == 'devel' - - pytest-cov ; extra == 'devel' + - pre-commit ; extra == 'dev' + - ruff ; extra == 'dev' + - numpydoc ; extra == 'doc' + - sphinx ; extra == 'doc' + - sphinx-design ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - yarl ; extra == 'doc' + - dropbox ; extra == 'dropbox' - dropboxdrivefs ; extra == 'dropbox' - requests ; extra == 'dropbox' - - dropbox ; extra == 'dropbox' - adlfs ; extra == 'full' - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' - dask ; extra == 'full' @@ -888,182 +1443,645 @@ packages: - paramiko ; extra == 'sftp' - smbprotocol ; extra == 'smb' - paramiko ; extra == 'ssh' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' + - numpy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-asyncio!=0.22.0 ; extra == 'test' + - pytest-benchmark ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytest-recording ; extra == 'test' + - pytest-rerunfailures ; extra == 'test' + - requests ; extra == 'test' + - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' + - dask[dataframe,test] ; extra == 'test-downstream' + - moto[server]>4,<5 ; extra == 'test-downstream' + - pytest-timeout ; extra == 'test-downstream' + - xarray ; extra == 'test-downstream' + - adlfs ; extra == 'test-full' + - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' + - cloudpickle ; extra == 'test-full' + - dask ; extra == 'test-full' + - distributed ; extra == 'test-full' + - dropbox ; extra == 'test-full' + - dropboxdrivefs ; extra == 'test-full' + - fastparquet ; extra == 'test-full' + - fusepy ; extra == 'test-full' + - gcsfs ; extra == 'test-full' + - jinja2 ; extra == 'test-full' + - kerchunk ; extra == 'test-full' + - libarchive-c ; extra == 'test-full' + - lz4 ; extra == 'test-full' + - notebook ; extra == 'test-full' + - numpy ; extra == 'test-full' + - ocifs ; extra == 'test-full' + - pandas ; extra == 'test-full' + - panel ; extra == 'test-full' + - paramiko ; extra == 'test-full' + - pyarrow ; extra == 'test-full' + - pyarrow>=1 ; extra == 'test-full' + - pyftpdlib ; extra == 'test-full' + - pygit2 ; extra == 'test-full' + - pytest ; extra == 'test-full' + - pytest-asyncio!=0.22.0 ; extra == 'test-full' + - pytest-benchmark ; extra == 'test-full' + - pytest-cov ; extra == 'test-full' + - pytest-mock ; extra == 'test-full' + - pytest-recording ; extra == 'test-full' + - pytest-rerunfailures ; extra == 'test-full' + - python-snappy ; extra == 'test-full' + - requests ; extra == 'test-full' + - smbprotocol ; extra == 'test-full' + - tqdm ; extra == 'test-full' + - urllib3 ; extra == 'test-full' + - zarr ; extra == 'test-full' + - zstandard ; extra == 'test-full' - tqdm ; extra == 'tqdm' requires_python: '>=3.8' -- kind: pypi - name: future - version: 0.18.3 - url: https://files.pythonhosted.org/packages/8f/2e/cf6accf7415237d6faeeebdc7832023c90e0282aa16fd3263db0eb4715ec/future-0.18.3.tar.gz - sha256: 34a17436ed1e96697a86f9de3d15a3b0be01d8bc8de9c1dffd59fb8234ed5307 - requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*' - kind: pypi name: gcsfs - version: 2024.2.0 - url: https://files.pythonhosted.org/packages/5b/18/f40a808abb7ce9aaf8a2143b699dd0b246e61ea590ce55810ceae45610ed/gcsfs-2024.2.0-py2.py3-none-any.whl - sha256: 20bf70cc81d580474dd299d55e1ffcf8b3e81721aeb562e148ca0a3c900d0421 + version: 0.8.0 + url: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl + sha256: 9fc5a9efe7e244a44a880c97c663ad986bb36f1e65e725d272fad9de0c0a1580 requires_dist: - - aiohttp!=4.0.0a0,!=4.0.0a1 - - decorator>4.1.2 - - fsspec==2024.2.0 - google-auth>=1.2 - google-auth-oauthlib - - google-cloud-storage - requests + - decorator + - fsspec>=0.8.0 + - aiohttp + - ujson - crcmod ; extra == 'crc' - fusepy ; extra == 'gcsfuse' - requires_python: '>=3.8' + requires_python: '>=3.6' +- kind: conda + name: gdal + version: 3.10.1 + build: py312h1afea5f_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda + sha256: db13033b6bacf55a4d1b8f964e5b156d0bdb6f2bc81b0eb1746de2ae5be75155 + md5: 955bf5ea321e423f16a94655b893cd98 + depends: + - __osx >=11.0 + - libcxx >=18 + - libgdal-core 3.10.1.* + - libkml >=1.3.0,<1.4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libxml2 >=2.13.5,<3.0a0 + - numpy >=1.19,<3 + - python >=3.12,<3.13.0a0 + - python >=3.12,<3.13.0a0 *_cpython + - python_abi 3.12.* *_cp312 + license: MIT + license_family: MIT + purls: + - pkg:pypi/gdal?source=hash-mapping + size: 1667630 + timestamp: 1737610863982 +- kind: conda + name: geos + version: 3.13.0 + build: hf9b8971_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda + sha256: 273381020b72bde1597d4e07e855ed50ffac083512e61ccbdd99d93f03c6cbf2 + md5: 45b2e9adb9663644b1eefa5300b9eef3 + depends: + - __osx >=11.0 + - libcxx >=17 + license: LGPL-2.1-only + purls: [] + size: 1481430 + timestamp: 1725676193541 +- kind: conda + name: geotiff + version: 1.7.3 + build: h82bf549_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda + sha256: 7ce4d6dced3cd313ea170db69d6929b88d77ebd40715f9f38c3bcba3633d6c65 + md5: cb84033d7c167a16c4577272b4493bc5 + depends: + - __osx >=11.0 + - libcxx >=17 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libtiff >=4.6.0,<4.8.0a0 + - libzlib >=1.3.1,<2.0a0 + - proj >=9.5.0,<9.6.0a0 + - zlib + license: MIT + license_family: MIT + purls: [] + size: 113739 + timestamp: 1726603324989 +- kind: conda + name: giflib + version: 5.2.2 + build: h93a5062_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda + sha256: 843b3f364ff844137e37d5c0a181f11f6d51adcedd216f019d074e5aa5d7e09c + md5: 95fa1486c77505330c20f7202492b913 + license: MIT + license_family: MIT + purls: [] + size: 71613 + timestamp: 1712692611426 - kind: pypi name: google-api-core - version: 1.34.1 - url: https://files.pythonhosted.org/packages/11/51/1d325e9b7358f15dca82e1ed91413c5cecb9d4665da6c44cb8dd348deeaa/google_api_core-1.34.1-py3-none-any.whl - sha256: 52bcc9d9937735f8a3986fa0bbf9135ae9cf5393a722387e5eced520e39c774a + version: 2.24.1 + url: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl + sha256: bc78d608f5a5bf853b80bd70a795f703294de656c096c0968320830a4bc280f1 requires_dist: - googleapis-common-protos>=1.56.2,<2.0.dev0 - - protobuf>=3.19.5,!=3.20.0,!=3.20.1,<4.0.0.dev0,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5 - - google-auth>=1.25.0,<3.0.dev0 + - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - google-auth>=2.14.1,<3.0.dev0 - requests>=2.18.0,<3.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + - google-auth[aiohttp]>=2.35.0,<3.0.dev0 ; extra == 'async-rest' - grpcio>=1.33.2,<2.0.dev0 ; extra == 'grpc' - grpcio-status>=1.33.2,<2.0.dev0 ; extra == 'grpc' + - grpcio>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'grpc' + - grpcio-status>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'grpc' - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcgcp' - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcio-gcp' requires_python: '>=3.7' - kind: pypi name: google-api-python-client - version: 1.12.2 - url: https://files.pythonhosted.org/packages/70/ee/aa94b1af0d5d426a31b89d12e069c64c071e15efdafad70023858a4d52fe/google_api_python_client-1.12.2-py2.py3-none-any.whl - sha256: 05cb331ed1aa15746f606c7e36ea51dbe7c29b1a5df9bbf58140901fe23d7142 + version: 2.160.0 + url: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl + sha256: 63d61fb3e4cf3fb31a70a87f45567c22f6dfe87bbfa27252317e3e2c42900db4 requires_dist: - - httplib2>=0.9.2,<1.dev0 - - google-auth>=1.16.0 - - google-auth-httplib2>=0.0.3 - - google-api-core>=1.21.0,<2.dev0 - - six>=1.13.0,<2.dev0 - - uritemplate>=3.0.0,<4.dev0 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + - httplib2>=0.19.0,<1.dev0 + - google-auth>=1.32.0,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - google-auth-httplib2>=0.2.0,<1.0.0 + - google-api-core>=1.31.5,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 + - uritemplate>=3.0.1,<5 + requires_python: '>=3.7' - kind: pypi name: google-apitools - version: 0.5.28 - url: https://files.pythonhosted.org/packages/7f/32/df3e36fd705a00092f1ffa9f41ce1df8dcb594ae313d239b87861a41fc2e/google-apitools-0.5.28.tar.gz - sha256: c41792b0cb1a9d952545a95bb5a18376fd727e4c4977d6fa3f1643d1d51a7177 + version: 0.5.31 + url: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz + sha256: 4af0dd6dd4582810690251f0b57a97c1873dadfda54c5bc195844c8907624170 requires_dist: - httplib2>=0.8 - fasteners>=0.14 - oauth2client>=1.4.12 - six>=1.12.0 - python-gflags>=3.0.6 ; extra == 'cli' - - unittest2>=0.5.1 ; extra == 'testing' - mock>=1.0.1 ; extra == 'testing' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' - kind: pypi name: google-auth - version: 1.35.0 - url: https://files.pythonhosted.org/packages/fb/7a/1b3eb54caee1b8c73c2c3645f78a382eca4805a301a30c64a078e736e446/google_auth-1.35.0-py2.py3-none-any.whl - sha256: 997516b42ecb5b63e8d80f5632c1a61dddf41d2a4c2748057837e06e00014258 + version: 2.38.0 + url: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl + sha256: e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a requires_dist: - - cachetools>=2.0.0,<5.0 + - cachetools>=2.0.0,<6.0 - pyasn1-modules>=0.2.1 - - setuptools>=40.3.0 - - six>=1.9.0 - - rsa<4.6 ; python_full_version < '3.6' - - rsa>=3.1.4,<5 ; python_full_version >= '3.6' + - rsa>=3.1.4,<5 + - aiohttp>=3.6.2,<4.0.0.dev0 ; extra == 'aiohttp' - requests>=2.20.0,<3.0.0.dev0 ; extra == 'aiohttp' - - aiohttp>=3.6.2,<4.0.0.dev0 ; python_full_version >= '3.6' and extra == 'aiohttp' + - cryptography ; extra == 'enterprise-cert' + - pyopenssl ; extra == 'enterprise-cert' + - pyjwt>=2.0 ; extra == 'pyjwt' + - cryptography>=38.0.3 ; extra == 'pyjwt' - pyopenssl>=20.0.0 ; extra == 'pyopenssl' + - cryptography>=38.0.3 ; extra == 'pyopenssl' - pyu2f>=0.1.5 ; extra == 'reauth' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' + - requests>=2.20.0,<3.0.0.dev0 ; extra == 'requests' + requires_python: '>=3.7' - kind: pypi name: google-auth-httplib2 - version: 0.0.4 - url: https://files.pythonhosted.org/packages/bd/4e/992849016f8b0c27fb604aafd0a7a724db16128906197bd1245c6f18e6a1/google_auth_httplib2-0.0.4-py2.py3-none-any.whl - sha256: aeaff501738b289717fac1980db9711d77908a6c227f60e4aa1923410b43e2ee + version: 0.2.0 + url: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl + sha256: b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d requires_dist: - google-auth - - httplib2>=0.9.1 - - six + - httplib2>=0.19.0 - kind: pypi name: google-auth-oauthlib - version: 0.5.3 - url: https://files.pythonhosted.org/packages/04/74/8a2664dc7b5494ebef67f876467d7a2336810affcd0b9f7cf325631314ac/google_auth_oauthlib-0.5.3-py2.py3-none-any.whl - sha256: 9e8ff4ed2b21c174a2d6cc2172c698dbf0b1f686509774c663a83c495091fe09 + version: 1.2.1 + url: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl + sha256: 2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f requires_dist: - - google-auth>=1.0.0 + - google-auth>=2.15.0 - requests-oauthlib>=0.7.0 - click>=6.0.0 ; extra == 'tool' requires_python: '>=3.6' +- kind: pypi + name: google-cloud-aiplatform + version: 1.79.0 + url: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl + sha256: e52d518c386ce2b4ce57f1b73b46c57531d9a6ccd70c21a37b349f428bfc1c3f + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0.dev0 + - google-auth>=2.14.1,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - packaging>=14.3 + - google-cloud-storage>=1.32.0,<3.0.0.dev0 + - google-cloud-bigquery>=1.15.0,!=3.20.0,<4.0.0.dev0 + - google-cloud-resource-manager>=1.3.3,<3.0.0.dev0 + - shapely<3.0.0.dev0 + - pydantic<3 + - typing-extensions + - docstring-parser<1 + - mlflow>=1.27.0,<=2.16.0 ; extra == 'autologging' + - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'cloud-profiler' + - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'cloud-profiler' + - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'cloud-profiler' + - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'datasets' + - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'datasets' + - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'datasets' + - requests>=2.28.1 ; extra == 'endpoint' + - pandas>=1.0.0 ; extra == 'evaluation' + - tqdm>=4.23.0 ; extra == 'evaluation' + - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'evaluation' + - scikit-learn ; python_full_version >= '3.11' and extra == 'evaluation' + - google-cloud-bigquery ; extra == 'full' + - docker>=5.0.3 ; extra == 'full' + - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'full' + - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'full' + - urllib3>=1.21.1,<1.27 ; extra == 'full' + - mlflow>=1.27.0,<=2.16.0 ; extra == 'full' + - fastapi>=0.71.0,<=0.114.0 ; extra == 'full' + - uvicorn[standard]>=0.16.0 ; extra == 'full' + - requests>=2.28.1 ; extra == 'full' + - immutabledict ; extra == 'full' + - lit-nlp==0.4.0 ; extra == 'full' + - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'full' + - tqdm>=4.23.0 ; extra == 'full' + - pyyaml>=5.3.1,<7 ; extra == 'full' + - google-cloud-bigquery-storage ; extra == 'full' + - explainable-ai-sdk>=1.0.0 ; extra == 'full' + - setuptools<70.0.0 ; extra == 'full' + - starlette>=0.17.1 ; extra == 'full' + - pandas>=1.0.0 ; extra == 'full' + - numpy>=1.15.0 ; extra == 'full' + - pyarrow>=6.0.1 ; extra == 'full' + - google-vizier>=0.1.6 ; extra == 'full' + - httpx>=0.23.0,<0.25.0 ; extra == 'full' + - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'full' + - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'full' + - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'full' + - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'full' + - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'full' + - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'full' + - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'full' + - scikit-learn ; python_full_version >= '3.11' and extra == 'full' + - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'full' + - langchain>=0.1.16,<0.4 ; extra == 'langchain' + - langchain-core<0.4 ; extra == 'langchain' + - langchain-google-vertexai<3 ; extra == 'langchain' + - langgraph>=0.2.45,<0.3 ; extra == 'langchain' + - openinference-instrumentation-langchain>=0.1.19,<0.2 ; extra == 'langchain' + - langchain>=0.1.16,<0.4 ; extra == 'langchain-testing' + - langgraph>=0.2.45,<0.3 ; extra == 'langchain-testing' + - opentelemetry-sdk<2 ; extra == 'langchain-testing' + - langchain-google-vertexai<3 ; extra == 'langchain-testing' + - google-cloud-trace<2 ; extra == 'langchain-testing' + - typing-extensions ; extra == 'langchain-testing' + - pytest-xdist ; extra == 'langchain-testing' + - absl-py ; extra == 'langchain-testing' + - openinference-instrumentation-langchain>=0.1.19,<0.2 ; extra == 'langchain-testing' + - cloudpickle>=3.0,<4.0 ; extra == 'langchain-testing' + - opentelemetry-exporter-gcp-trace<2 ; extra == 'langchain-testing' + - langchain-core<0.4 ; extra == 'langchain-testing' + - pydantic>=2.6.3,<3 ; extra == 'langchain-testing' + - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'lit' + - pandas>=1.0.0 ; extra == 'lit' + - lit-nlp==0.4.0 ; extra == 'lit' + - explainable-ai-sdk>=1.0.0 ; extra == 'lit' + - pandas>=1.0.0 ; extra == 'metadata' + - numpy>=1.15.0 ; extra == 'metadata' + - pyyaml>=5.3.1,<7 ; extra == 'pipelines' + - docker>=5.0.3 ; extra == 'prediction' + - fastapi>=0.71.0,<=0.114.0 ; extra == 'prediction' + - httpx>=0.23.0,<0.25.0 ; extra == 'prediction' + - starlette>=0.17.1 ; extra == 'prediction' + - uvicorn[standard]>=0.16.0 ; extra == 'prediction' + - urllib3>=1.21.1,<1.27 ; extra == 'private-endpoints' + - requests>=2.28.1 ; extra == 'private-endpoints' + - setuptools<70.0.0 ; extra == 'ray' + - google-cloud-bigquery-storage ; extra == 'ray' + - google-cloud-bigquery ; extra == 'ray' + - pandas>=1.0.0 ; extra == 'ray' + - pyarrow>=6.0.1 ; extra == 'ray' + - immutabledict ; extra == 'ray' + - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'ray' + - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'ray' + - setuptools<70.0.0 ; extra == 'ray-testing' + - google-cloud-bigquery-storage ; extra == 'ray-testing' + - google-cloud-bigquery ; extra == 'ray-testing' + - pandas>=1.0.0 ; extra == 'ray-testing' + - pyarrow>=6.0.1 ; extra == 'ray-testing' + - immutabledict ; extra == 'ray-testing' + - pytest-xdist ; extra == 'ray-testing' + - ray[train] ; extra == 'ray-testing' + - scikit-learn<1.6.0 ; extra == 'ray-testing' + - tensorflow ; extra == 'ray-testing' + - torch>=2.0.0,<2.1.0 ; extra == 'ray-testing' + - xgboost ; extra == 'ray-testing' + - xgboost-ray ; extra == 'ray-testing' + - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'ray-testing' + - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'ray-testing' + - cloudpickle>=3.0,<4.0 ; extra == 'reasoningengine' + - google-cloud-trace<2 ; extra == 'reasoningengine' + - opentelemetry-sdk<2 ; extra == 'reasoningengine' + - opentelemetry-exporter-gcp-trace<2 ; extra == 'reasoningengine' + - pydantic>=2.6.3,<3 ; extra == 'reasoningengine' + - typing-extensions ; extra == 'reasoningengine' + - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'tensorboard' + - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'tensorboard' + - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'tensorboard' + - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'tensorboard' + - google-cloud-bigquery ; extra == 'testing' + - docker>=5.0.3 ; extra == 'testing' + - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'testing' + - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'testing' + - urllib3>=1.21.1,<1.27 ; extra == 'testing' + - mlflow>=1.27.0,<=2.16.0 ; extra == 'testing' + - fastapi>=0.71.0,<=0.114.0 ; extra == 'testing' + - uvicorn[standard]>=0.16.0 ; extra == 'testing' + - requests>=2.28.1 ; extra == 'testing' + - immutabledict ; extra == 'testing' + - lit-nlp==0.4.0 ; extra == 'testing' + - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'testing' + - tqdm>=4.23.0 ; extra == 'testing' + - pyyaml>=5.3.1,<7 ; extra == 'testing' + - google-cloud-bigquery-storage ; extra == 'testing' + - explainable-ai-sdk>=1.0.0 ; extra == 'testing' + - setuptools<70.0.0 ; extra == 'testing' + - starlette>=0.17.1 ; extra == 'testing' + - pandas>=1.0.0 ; extra == 'testing' + - numpy>=1.15.0 ; extra == 'testing' + - pyarrow>=6.0.1 ; extra == 'testing' + - google-vizier>=0.1.6 ; extra == 'testing' + - httpx>=0.23.0,<0.25.0 ; extra == 'testing' + - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'testing' + - sentencepiece>=0.2.0 ; extra == 'testing' + - nltk ; extra == 'testing' + - aiohttp ; extra == 'testing' + - google-api-core>=2.11,<3.0.0 ; extra == 'testing' + - grpcio-testing ; extra == 'testing' + - ipython ; extra == 'testing' + - kfp>=2.6.0,<3.0.0 ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - pytest-xdist ; extra == 'testing' + - requests-toolbelt<1.0.0 ; extra == 'testing' + - xgboost ; extra == 'testing' + - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'testing' + - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'testing' + - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'testing' + - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'testing' + - tensorflow==2.13.0 ; python_full_version < '3.12' and extra == 'testing' + - torch>=2.0.0,<2.1.0 ; python_full_version < '3.12' and extra == 'testing' + - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'testing' + - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'testing' + - scikit-learn ; python_full_version >= '3.11' and extra == 'testing' + - tensorflow==2.16.1 ; python_full_version >= '3.12' and extra == 'testing' + - torch>=2.2.0 ; python_full_version >= '3.12' and extra == 'testing' + - bigframes ; python_full_version >= '3.10' and extra == 'testing' + - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'testing' + - sentencepiece>=0.2.0 ; extra == 'tokenization' + - google-vizier>=0.1.6 ; extra == 'vizier' + - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'xai' + requires_python: '>=3.8' - kind: pypi name: google-cloud-bigquery - version: 1.17.0 - url: https://files.pythonhosted.org/packages/d7/72/e88edd9a0b3c16a7b2c4107b1a9d3ff182b84a29f051ae15293e1375d7fe/google_cloud_bigquery-1.17.0-py2.py3-none-any.whl - sha256: ce9dfc4407c938b44287fe68da387a0da1bb15da4b7cfa43db864f66a8bb310c - requires_dist: - - google-cloud-core>=1.0.0,<2.0.dev0 - - google-resumable-media>=0.3.1 - - protobuf>=3.6.0 - - enum34 ; python_full_version < '3.4' - - google-cloud-bigquery-storage>=0.6.0,<2.0.0.dev0 ; extra == 'all' - - pyarrow>=0.13.0,!=0.14.0 ; extra == 'all' - - pandas>=0.17.1 ; extra == 'all' - - pyarrow>=0.4.1,!=0.14.0 ; extra == 'all' - - tqdm>=4.0.0,<5.0.0.dev0 ; extra == 'all' - - google-cloud-bigquery-storage>=0.6.0,<2.0.0.dev0 ; extra == 'bqstorage' - - pyarrow>=0.13.0,!=0.14.0 ; extra == 'bqstorage' - - fastparquet ; extra == 'fastparquet' - - python-snappy ; extra == 'fastparquet' - - pandas>=0.17.1 ; extra == 'pandas' - - pyarrow>=0.4.1,!=0.14.0 ; (platform_system != 'Windows' and extra == 'pyarrow') or (python_full_version >= '3.4' and extra == 'pyarrow') - - tqdm>=4.0.0,<5.0.0.dev0 ; extra == 'tqdm' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + version: 3.29.0 + url: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl + sha256: 5453a4eabe50118254eda9778f3d7dad413490de5f7046b5e66c98f5a1580308 + requires_dist: + - google-api-core[grpc]>=2.11.1,<3.0.0.dev0 + - google-auth>=2.14.1,<3.0.0.dev0 + - google-cloud-core>=2.4.1,<3.0.0.dev0 + - google-resumable-media>=2.0.0,<3.0.dev0 + - packaging>=20.0.0 + - python-dateutil>=2.7.3,<3.0.dev0 + - requests>=2.21.0,<3.0.0.dev0 + - google-cloud-bigquery[bigquery-v2,bqstorage,geopandas,ipython,ipywidgets,opentelemetry,pandas,tqdm] ; extra == 'all' + - proto-plus>=1.22.3,<2.0.0.dev0 ; extra == 'bigquery-v2' + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 ; extra == 'bigquery-v2' + - google-cloud-bigquery-storage>=2.6.0,<3.0.0.dev0 ; extra == 'bqstorage' + - grpcio>=1.47.0,<2.0.dev0 ; extra == 'bqstorage' + - pyarrow>=3.0.0 ; extra == 'bqstorage' + - grpcio>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'bqstorage' + - geopandas>=0.9.0,<2.0.dev0 ; extra == 'geopandas' + - shapely>=1.8.4,<3.0.0.dev0 ; extra == 'geopandas' + - bigquery-magics>=0.1.0 ; extra == 'ipython' + - ipywidgets>=7.7.0 ; extra == 'ipywidgets' + - ipykernel>=6.0.0 ; extra == 'ipywidgets' + - opentelemetry-api>=1.1.0 ; extra == 'opentelemetry' + - opentelemetry-sdk>=1.1.0 ; extra == 'opentelemetry' + - opentelemetry-instrumentation>=0.20b0 ; extra == 'opentelemetry' + - pandas>=1.1.0 ; extra == 'pandas' + - pyarrow>=3.0.0 ; extra == 'pandas' + - db-dtypes>=0.3.0,<2.0.0.dev0 ; extra == 'pandas' + - importlib-metadata>=1.0.0 ; python_full_version < '3.8' and extra == 'pandas' + - tqdm>=4.7.4,<5.0.0.dev0 ; extra == 'tqdm' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-bigquery-storage + version: 2.27.0 + url: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl + sha256: 3bfa8f74a61ceaffd3bfe90be5bbef440ad81c1c19ac9075188cccab34bffc2b + requires_dist: + - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,<3.0.0.dev0 + - proto-plus>=1.22.0,<2.0.0.dev0 + - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' + - fastavro>=0.21.2 ; extra == 'fastavro' + - pandas>=0.21.1 ; extra == 'pandas' + - importlib-metadata>=1.0.0 ; python_full_version < '3.8' and extra == 'pandas' + - pyarrow>=0.15.0 ; extra == 'pyarrow' + requires_python: '>=3.7' - kind: pypi name: google-cloud-bigtable - version: 1.0.0 - url: https://files.pythonhosted.org/packages/95/af/0ef7d097a1d5ad0c843867600e86de915e8ab8864740f49a4636cfb51af6/google_cloud_bigtable-1.0.0-py2.py3-none-any.whl - sha256: 4323362b836ddf9e7324b0be1a34e3f80d09729356233c05e969b577244c49a3 + version: 2.28.1 + url: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl + sha256: 1ae68b8092b70deb63b83273f0b335289ba8da57fc8c0e40c34103d67019de97 requires_dist: - - google-api-core[grpc]>=1.14.0,<2.0.0.dev0 - - google-cloud-core>=1.0.0,<2.0.dev0 - - grpc-google-iam-v1>=0.12.3,<0.13.dev0 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + - google-api-core[grpc]>=2.16.0,<3.0.0.dev0 + - google-cloud-core>=1.4.4,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - libcst>=0.2.5 ; extra == 'libcst' + requires_python: '>=3.7' - kind: pypi name: google-cloud-core - version: 1.7.3 - url: https://files.pythonhosted.org/packages/18/52/f1e01017a8e799e303b53f458bc5a09f864b7ac47a5afafbb6effed05b6d/google_cloud_core-1.7.3-py2.py3-none-any.whl - sha256: d5af737c60a73b9588a0511332ac0cdc6294ad8e477c7b82be03a1afc7c3f7b6 + version: 2.4.1 + url: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl + sha256: a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 requires_dist: - - google-api-core>=1.21.0,<3.0.0.dev0 - - google-auth>=1.24.0,<2.0.dev0 - - six>=1.12.0 - - grpcio>=1.8.2,<2.0.dev0 ; extra == 'grpc' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' + - google-api-core>=1.31.6,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 + - google-auth>=1.25.0,<3.0.dev0 + - importlib-metadata>1.0.0 ; python_full_version < '3.8' + - grpcio>=1.38.0,<2.0.dev0 ; extra == 'grpc' + - grpcio-status>=1.38.0,<2.0.dev0 ; extra == 'grpc' + requires_python: '>=3.7' - kind: pypi name: google-cloud-datastore - version: 1.7.4 - url: https://files.pythonhosted.org/packages/d0/aa/29cbcf8cf7d08ce2d55b9dce858f7c632b434cb6451bed17cb4275804217/google_cloud_datastore-1.7.4-py2.py3-none-any.whl - sha256: ffb075abf606ebd248c3ad76ac0e6d3e93858d8c61a063139938a162a58b28d0 + version: 2.20.2 + url: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl + sha256: d2190180343b807d4aa3b0b3bb837606349b71e5e74e29aa9009c0ae38c0b6a0 requires_dist: - - google-api-core[grpc]>=1.6.0,<2.0.0.dev0 - - google-cloud-core>=0.29.0,<2.0.dev0 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - google-cloud-core>=1.4.0,<3.0.0.dev0 + - proto-plus>=1.22.0,<2.0.0.dev0 + - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' + - libcst>=0.2.5 ; extra == 'libcst' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-dlp + version: 3.26.0 + url: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl + sha256: 3f9e76b7a1c81af4012951435ed60c80623fc39d03e1e875a924013266b2a595 + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-language + version: 2.16.0 + url: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl + sha256: 7e040425be5960cde34229fa850b9e4859e455157134aada52dc75490d59c1de + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + requires_python: '>=3.7' - kind: pypi name: google-cloud-pubsub - version: 1.0.2 - url: https://files.pythonhosted.org/packages/d3/91/07a82945a7396ea34debafd476724bb5fc267c292790fdf2138c693f95c5/google_cloud_pubsub-1.0.2-py2.py3-none-any.whl - sha256: 12ff565ef00e4ca19d2ae26ae4515070094ba857d7c7024370dbed81fc7d58ab + version: 2.28.0 + url: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl + sha256: 76b41a322b43bc845fb06ffe238758726324d957d0161bae3ff4b14339da144b requires_dist: - - google-api-core[grpc]>=1.14.0,<2.0.0.dev0 - - grpc-google-iam-v1>=0.12.3,<0.13.dev0 - - enum34 ; python_full_version < '3.4' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + - grpcio>=1.51.3,<2.0.dev0 + - google-auth>=2.14.1,<3.0.0.dev0 + - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - proto-plus>=1.22.0,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 + - grpcio-status>=1.33.2 + - opentelemetry-api<=1.22.0 ; python_full_version < '3.8' + - opentelemetry-sdk<=1.22.0 ; python_full_version < '3.8' + - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + - opentelemetry-api>=1.27.0 ; python_full_version >= '3.8' + - opentelemetry-sdk>=1.27.0 ; python_full_version >= '3.8' + - libcst>=0.3.10 ; extra == 'libcst' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-pubsublite + version: 1.11.1 + url: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl + sha256: 8aa76f709d18c5bf730b3c6e49f0eefe80323d6c48972126ae02d032ce1a892d + requires_dist: + - google-cloud-pubsub>=2.10.0,<3.0.0.dev0 + - grpcio>=1.38.1,<2.0.0.dev0 + - grpcio-status>=1.38.1,<2.0.0.dev0 + - overrides>=6.0.1,<8.0.0 + - google-api-core[grpc]>=1.33.2,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0.dev0 + - overrides>=7.0.1,<8.0.0 ; python_full_version >= '3.12' + requires_python: '>=3.8' +- kind: pypi + name: google-cloud-recommendations-ai + version: 0.10.15 + url: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl + sha256: 90c0ea658e3f869564a23944b1331a20e0b0b3bd105481611e3337b6fd667380 + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-resource-manager + version: 1.14.0 + url: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl + sha256: 4860c3ea9ace760b317ea90d4e27f1b32e54ededdcc340a7cb70c8ef238d8f7c + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-spanner + version: 3.51.0 + url: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl + sha256: 2d01f33582526ebe7fab62034e92e722e512c21f6bc4abe27e03d86ef7ea576a + requires_dist: + - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-cloud-core>=1.4.4,<3.0.dev0 + - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 + - proto-plus>=1.22.0,<2.0.0.dev0 + - sqlparse>=0.4.4 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - grpc-interceptor>=0.15.4 + - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' + - libcst>=0.2.5 ; extra == 'libcst' + - opentelemetry-api>=1.22.0 ; extra == 'tracing' + - opentelemetry-sdk>=1.22.0 ; extra == 'tracing' + - opentelemetry-semantic-conventions>=0.43b0 ; extra == 'tracing' + requires_python: '>=3.7' - kind: pypi name: google-cloud-storage - version: 2.2.1 - url: https://files.pythonhosted.org/packages/bf/35/b856f2ff76cdbdc88b295e0a85d2a5375386896952872f7b87029da2b89a/google_cloud_storage-2.2.1-py2.py3-none-any.whl - sha256: abdf0fadf26516172e804e00b9c24819a3b3f7351cd32f35ca249bbfac965494 + version: 2.19.0 + url: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl + sha256: aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba requires_dist: - - google-auth>=1.25.0,<3.0.dev0 - - google-api-core>=1.31.5,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 - - google-cloud-core>=1.6.0,<3.0.dev0 - - google-resumable-media>=2.3.2 + - google-auth>=2.26.1,<3.0.dev0 + - google-api-core>=2.15.0,<3.0.0.dev0 + - google-cloud-core>=2.3.0,<3.0.dev0 + - google-resumable-media>=2.7.2 - requests>=2.18.0,<3.0.0.dev0 - - protobuf + - google-crc32c>=1.0,<2.0.dev0 + - protobuf<6.0.0.dev0 ; extra == 'protobuf' + - opentelemetry-api>=1.1.0 ; extra == 'tracing' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-videointelligence + version: 2.15.0 + url: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl + sha256: a42909d96efbddac66ee872aaeadf875f976263834445e707581929d4ecf5999 + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' + requires_python: '>=3.7' +- kind: pypi + name: google-cloud-vision + version: 3.9.0 + url: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl + sha256: 9acec27ee05bd197f0d89c97e9719712ef245e0c37fd428e6af09a15a082fbef + requires_dist: + - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 + - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 + - proto-plus>=1.22.3,<2.0.0.dev0 + - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 + - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' requires_python: '>=3.7' - kind: pypi name: google-crc32c @@ -1096,32 +2114,41 @@ packages: requires_python: '>=3.7' - kind: pypi name: grpc-google-iam-v1 - version: 0.12.7 - url: https://files.pythonhosted.org/packages/5f/4b/404f59d065a410e835576433bc296599ae093460c7724fa5d5ca2354a885/grpc_google_iam_v1-0.12.7-py2.py3-none-any.whl - sha256: 834da89f4c4a2abbe842a793ed20fc6d9a77011ef2626755b1b89116fb9596d7 + version: 0.14.0 + url: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl + sha256: fb4a084b30099ba3ab07d61d620a0d4429570b13ff53bd37bac75235f98b7da4 requires_dist: - grpcio>=1.44.0,<2.0.0.dev0 - googleapis-common-protos[grpc]>=1.56.0,<2.0.0.dev0 - - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0.dev0 + - protobuf>=3.20.2,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 requires_python: '>=3.7' +- kind: pypi + name: grpc-interceptor + version: 0.15.4 + url: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl + sha256: 0035f33228693ed3767ee49d937bac424318db173fef4d2d0170b3215f254d9d + requires_dist: + - grpcio>=1.49.1,<2.0.0 + - protobuf>=4.21.9 ; extra == 'testing' + requires_python: '>=3.7,<4.0' - kind: pypi name: grpcio - version: 1.69.0 - url: https://files.pythonhosted.org/packages/35/4b/9ab8ea65e515e1844feced1ef9e7a5d8359c48d986c93f3d2a2006fbdb63/grpcio-1.69.0-cp312-cp312-macosx_10_14_universal2.whl - sha256: 0f0270bd9ffbff6961fe1da487bdcd594407ad390cc7960e738725d4807b18c4 + version: 1.65.5 + url: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl + sha256: 76991b7a6fb98630a3328839755181ce7c1aa2b1842aa085fd4198f0e5198960 requires_dist: - - grpcio-tools>=1.69.0 ; extra == 'protobuf' + - grpcio-tools>=1.65.5 ; extra == 'protobuf' requires_python: '>=3.8' - kind: pypi name: grpcio-status - version: 1.48.2 - url: https://files.pythonhosted.org/packages/14/32/754cd4474790239c7436a7a9490bc0c4a0a2ed604cb9a940151a3b1055b9/grpcio_status-1.48.2-py3-none-any.whl - sha256: 2c33bbdbe20188b2953f46f31af669263b6ee2a9b2d38fa0d36ee091532e21bf + version: 1.65.5 + url: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl + sha256: 44a445ce55375545a913e005be36fbec7999a4cc320d7aecb7a4469d3d49366c requires_dist: - - protobuf>=3.12.0 - - grpcio>=1.48.2 + - protobuf>=5.26.1,<6.0.dev0 + - grpcio>=1.65.5 - googleapis-common-protos>=1.5.5 - requires_python: '>=3.6' + requires_python: '>=3.8' - kind: pypi name: hdfs version: 2.7.3 @@ -1137,9 +2164,28 @@ packages: - requests-kerberos>=0.7.0 ; extra == 'kerberos' - kind: pypi name: httplib2 - version: 0.12.0 - url: https://files.pythonhosted.org/packages/ce/ed/803905d670b52fa0edfdd135337e545b4496c2ab3a222f1449b7256eb99f/httplib2-0.12.0.tar.gz - sha256: f61fb838a94ce3b349aa32c92fd8430f7e3511afdb18bf9640d647e30c90a6d6 + version: 0.22.0 + url: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl + sha256: 14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc + requires_dist: + - pyparsing>=2.4.2,<3 ; python_full_version < '3.0' + - pyparsing>=2.4.2,!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4 ; python_full_version >= '3.1' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: conda + name: icu + version: '75.1' + build: hfee45f7_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 - kind: pypi name: idna version: '3.10' @@ -1152,77 +2198,473 @@ packages: - flake8>=7.1.1 ; extra == 'all' requires_python: '>=3.6' - kind: pypi - name: iniconfig - version: 2.0.0 - url: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl - sha256: b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - requires_python: '>=3.7' + name: immutabledict + version: 4.2.1 + url: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl + sha256: c56a26ced38c236f79e74af3ccce53772827cef5c3bce7cab33ff2060f756373 + requires_python: '>=3.8' - kind: pypi - name: jinja2 - version: 3.1.4 - url: https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl - sha256: bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d + name: importlib-metadata + version: 8.5.0 + url: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl + sha256: 45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b + requires_dist: + - zipp>=3.20 + - typing-extensions>=3.6.4 ; python_full_version < '3.8' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - ipython ; extra == 'perf' + - pytest>=6,!=8.1.* ; extra == 'test' + - packaging ; extra == 'test' + - pyfakefs ; extra == 'test' + - flufl-flake8 ; extra == 'test' + - pytest-perf>=0.9.2 ; extra == 'test' + - jaraco-test>=5.4 ; extra == 'test' + - importlib-resources>=1.3 ; python_full_version < '3.9' and extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: iniconfig + version: 2.0.0 + url: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl + sha256: b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 + requires_python: '>=3.7' +- kind: pypi + name: jaraco-classes + version: 3.4.0 + url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + requires_dist: + - more-itertools + - sphinx>=3.5 ; extra == 'docs' + - jaraco-packaging>=9.3 ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - furo ; extra == 'docs' + - sphinx-lint ; extra == 'docs' + - jaraco-tidelift>=1.4 ; extra == 'docs' + - pytest>=6 ; extra == 'testing' + - pytest-checkdocs>=2.4 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - pytest-enabler>=2.2 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-context + version: 6.0.1 + url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest>=6,!=8.1.* ; extra == 'test' + - pytest-checkdocs>=2.4 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mypy ; extra == 'test' + - pytest-enabler>=2.2 ; extra == 'test' + - portend ; extra == 'test' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' + requires_python: '>=3.8' +- kind: pypi + name: jaraco-functools + version: 4.1.0 + url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl + sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 + requires_dist: + - more-itertools + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-classes ; extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.8' +- kind: pypi + name: jinja2 + version: 3.1.5 + url: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl + sha256: aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb requires_dist: - markupsafe>=2.0 - babel>=2.7 ; extra == 'i18n' requires_python: '>=3.7' +- kind: conda + name: json-c + version: '0.18' + build: he4178ee_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda + sha256: 73179a1cd0b45c09d4f631cb359d9e755e6e573c5d908df42006728e0bf8297c + md5: 94f14ef6157687c30feb44e1abecd577 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 73715 + timestamp: 1726487214495 +- kind: pypi + name: jsonpickle + version: 3.4.2 + url: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl + sha256: fd6c273278a02b3b66e3405db3dd2f4dbc8f4a4a3123bfcab3045177c6feb9c3 + requires_dist: + - pytest-cov ; extra == 'cov' + - black ; extra == 'dev' + - furo ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - sphinx>=3.5 ; extra == 'docs' + - build ; extra == 'packaging' + - setuptools>=61.2 ; extra == 'packaging' + - setuptools-scm[toml]>=6.0 ; extra == 'packaging' + - twine ; extra == 'packaging' + - pytest>=6.0,!=8.1.* ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - pytest-benchmark[histogram] ; extra == 'testing' + - pytest-checkdocs>=1.2.3 ; extra == 'testing' + - pytest-enabler>=1.0.1 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + - bson ; extra == 'testing' + - ecdsa ; extra == 'testing' + - feedparser ; extra == 'testing' + - gmpy2 ; extra == 'testing' + - numpy ; extra == 'testing' + - pandas ; extra == 'testing' + - pymongo ; extra == 'testing' + - pyyaml ; extra == 'testing' + - scikit-learn ; extra == 'testing' + - simplejson ; extra == 'testing' + - sqlalchemy ; extra == 'testing' + - ujson ; extra == 'testing' + - atheris~=2.3.0 ; python_full_version < '3.12' and extra == 'testing' + - scipy ; python_full_version < '3.11' and extra == 'testing' + - scipy>=1.9.3 ; python_full_version >= '3.11' and extra == 'testing' + requires_python: '>=3.7' +- kind: pypi + name: jsonschema + version: 4.23.0 + url: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl + sha256: fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 + requires_dist: + - attrs>=22.2.0 + - importlib-resources>=1.4.0 ; python_full_version < '3.9' + - jsonschema-specifications>=2023.3.6 + - pkgutil-resolve-name>=1.3.10 ; python_full_version < '3.9' + - referencing>=0.28.4 + - rpds-py>=0.7.1 + - fqdn ; extra == 'format' + - idna ; extra == 'format' + - isoduration ; extra == 'format' + - jsonpointer>1.13 ; extra == 'format' + - rfc3339-validator ; extra == 'format' + - rfc3987 ; extra == 'format' + - uri-template ; extra == 'format' + - webcolors>=1.11 ; extra == 'format' + - fqdn ; extra == 'format-nongpl' + - idna ; extra == 'format-nongpl' + - isoduration ; extra == 'format-nongpl' + - jsonpointer>1.13 ; extra == 'format-nongpl' + - rfc3339-validator ; extra == 'format-nongpl' + - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' + - uri-template ; extra == 'format-nongpl' + - webcolors>=24.6.0 ; extra == 'format-nongpl' + requires_python: '>=3.8' +- kind: pypi + name: jsonschema-specifications + version: 2024.10.1 + url: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl + sha256: a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf + requires_dist: + - referencing>=0.31.0 + requires_python: '>=3.9' +- kind: pypi + name: keyring + version: 25.6.0 + url: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + sha256: 552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd + requires_dist: + - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' + - secretstorage>=3.2 ; sys_platform == 'linux' + - jeepney>=0.4.2 ; sys_platform == 'linux' + - importlib-metadata>=4.11.4 ; python_full_version < '3.12' + - jaraco-classes + - importlib-resources ; python_full_version < '3.9' + - jaraco-functools + - jaraco-context + - pytest>=6,!=8.1.* ; extra == 'test' + - pyfakefs ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - pygobject-stubs ; extra == 'type' + - shtab ; extra == 'type' + - types-pywin32 ; extra == 'type' + - shtab>=1.1.0 ; extra == 'completion' + requires_python: '>=3.9' +- kind: pypi + name: keyrings-google-artifactregistry-auth + version: 1.1.2 + url: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl + sha256: e3f18b50fa945c786593014dc225810d191671d4f5f8e12d9259e39bad3605a3 + requires_dist: + - google-auth + - keyring + - pluggy + - requests + - pytest>=3.5,!=3.7.3 ; extra == 'testing' + - pytest-checkdocs>=1.2.3 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-flake8 ; extra == 'testing' + - pytest-black>=0.3.7 ; platform_python_implementation != 'PyPy' and extra == 'testing' + - pytest-mypy ; platform_python_implementation != 'PyPy' and extra == 'testing' + - tox ; extra == 'tox' + requires_python: '>=3.6' +- kind: conda + name: krb5 + version: 1.21.3 + build: h237132a_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda + sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b + md5: c6dc8a0fdec13a0565936655c33069a1 + depends: + - __osx >=11.0 + - libcxx >=16 + - libedit >=3.1.20191231,<3.2.0a0 + - libedit >=3.1.20191231,<4.0a0 + - openssl >=3.3.1,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 1155530 + timestamp: 1719463474401 +- kind: conda + name: lerc + version: 4.0.0 + build: h9a09cb3_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 + sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 + md5: de462d5aacda3b30721b512c5da4e742 + depends: + - libcxx >=13.0.1 + license: Apache-2.0 + license_family: Apache + purls: [] + size: 215721 + timestamp: 1657977558796 +- kind: conda + name: libarchive + version: 3.7.7 + build: h3b16cec_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda + sha256: cbce64423e72bcd3576b5cfe0e4edd255900100f72467d5b4ea1d77449ac1ce9 + md5: 1c2eda2163510220b9f9d56a85c8da9d + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libxml2 >=2.13.5,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - lzo >=2.10,<3.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 772780 + timestamp: 1734021109752 +- kind: conda + name: libavif16 + version: 1.1.1 + build: h45b7238_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda + sha256: c671365e8c822d29b53f20c4573fdbc70f18b50ff9a4b5b2b6b3c8f7ad2ac2a9 + md5: 7571064a60bc193ff5c25f36ed23394a + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - rav1e >=0.6.6,<1.0a0 + - svt-av1 >=2.3.0,<2.3.1.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 96781 + timestamp: 1730268761553 - kind: conda name: libblas version: 3.9.0 - build: 25_osxarm64_openblas - build_number: 25 + build: 28_h10e41b3_openblas + build_number: 28 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-25_osxarm64_openblas.conda - sha256: f1fb9a11af0b2878bd8804b4c77d3733c40076218bcbdb35f575b1c0c9fddf11 - md5: f8cf4d920ff36ce471619010eff59cac + url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda + sha256: 5bea855a1a7435ce2238535aa4b13db8af8ee301d99a42b083b63fa64c1ea144 + md5: 166166d84a0e9571dc50210baf993b46 depends: - libopenblas >=0.3.28,<0.3.29.0a0 - libopenblas >=0.3.28,<1.0a0 constrains: - - blas * openblas - - liblapack 3.9.0 25_osxarm64_openblas - - liblapacke 3.9.0 25_osxarm64_openblas - - libcblas 3.9.0 25_osxarm64_openblas + - liblapack =3.9.0=28*_openblas + - liblapacke =3.9.0=28*_openblas + - blas =2.128=openblas + - libcblas =3.9.0=28*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 15913 - timestamp: 1729643265495 + size: 16840 + timestamp: 1738114389937 - kind: conda name: libcblas version: 3.9.0 - build: 25_osxarm64_openblas - build_number: 25 + build: 28_hb3479ef_openblas + build_number: 28 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-25_osxarm64_openblas.conda - sha256: d9fa5b6b11252132a3383bbf87bd2f1b9d6248bef1b7e113c2a8ae41b0376218 - md5: 4df0fae81f0b5bf47d48c882b086da11 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda + sha256: f08adea59381babb3568e6d23e52aff874cbc25f299821647ab1127d1e1332ca + md5: 30942dea911ce333765003a8adec4e8a depends: - - libblas 3.9.0 25_osxarm64_openblas + - libblas 3.9.0 28_h10e41b3_openblas constrains: - - blas * openblas - - liblapack 3.9.0 25_osxarm64_openblas - - liblapacke 3.9.0 25_osxarm64_openblas + - blas =2.128=openblas + - liblapacke =3.9.0=28*_openblas + - liblapack =3.9.0=28*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 15837 - timestamp: 1729643270793 + size: 16788 + timestamp: 1738114399962 +- kind: conda + name: libcurl + version: 8.11.1 + build: h73640d1_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda + sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6 + md5: 46d7524cabfdd199bffe63f8f19a552b + depends: + - __osx >=11.0 + - krb5 >=1.21.3,<1.22.0a0 + - libnghttp2 >=1.64.0,<2.0a0 + - libssh2 >=1.11.1,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: curl + license_family: MIT + purls: [] + size: 385098 + timestamp: 1734000160270 - kind: conda name: libcxx - version: 19.1.3 + version: 19.1.7 build: ha82da77_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.3-ha82da77_0.conda - sha256: 6d062760c6439e75b9a44d800d89aff60fe3441998d87506c62dc94c50412ef4 - md5: bf691071fba4734984231617783225bc + url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda + sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 + md5: 5b3e1610ff8bd5443476b91d618f5b77 depends: - __osx >=11.0 license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] - size: 520771 - timestamp: 1730314603920 + size: 523505 + timestamp: 1736877862502 +- kind: conda + name: libde265 + version: 1.0.15 + build: h2ffa867_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda + sha256: 13747fa634f7f16d7f222b7d3869e3c1aab9d3a2791edeb2fc632a87663950e0 + md5: 7c718ee6d8497702145612fa0898a12d + depends: + - libcxx >=15 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 277861 + timestamp: 1703089176970 +- kind: conda + name: libdeflate + version: '1.23' + build: hec38601_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda + sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 + md5: 1d8b9588be14e71df38c525767a1ac30 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 54132 + timestamp: 1734373971372 +- kind: conda + name: libedit + version: 3.1.20250104 + build: pl5321hafb1f1b_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda + sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 + md5: 44083d2d2c2025afca315c7a172eab2b + depends: + - ncurses + - __osx >=11.0 + - ncurses >=6.5,<7.0a0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107691 + timestamp: 1738479560845 +- kind: conda + name: libev + version: '4.33' + build: h93a5062_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda + sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f + md5: 36d33e440c31857372a72137f78bacf5 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 107458 + timestamp: 1702146414478 - kind: conda name: libexpat version: 2.6.4 @@ -1254,6 +2696,53 @@ packages: purls: [] size: 39020 timestamp: 1636488587153 +- kind: conda + name: libgdal-core + version: 3.10.1 + build: h9ef0d2d_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda + sha256: 891e4fc19846b99e5c2232c4e04c72d5eb55cd9702e70416283adf65e0598048 + md5: f0ea5524380b2c76156589e6aa0998a9 + depends: + - __osx >=11.0 + - blosc >=1.21.6,<2.0a0 + - geos >=3.13.0,<3.13.1.0a0 + - geotiff >=1.7.3,<1.8.0a0 + - giflib >=5.2.2,<5.3.0a0 + - json-c >=0.18,<0.19.0a0 + - lerc >=4.0.0,<5.0a0 + - libarchive >=3.7.7,<3.8.0a0 + - libcurl >=8.11.1,<9.0a0 + - libcxx >=18 + - libdeflate >=1.23,<1.24.0a0 + - libexpat >=2.6.4,<3.0a0 + - libheif >=1.19.5,<1.20.0a0 + - libiconv >=1.17,<2.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - libkml >=1.3.0,<1.4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libpng >=1.6.45,<1.7.0a0 + - libspatialite >=5.1.0,<5.2.0a0 + - libsqlite >=3.48.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - libwebp-base >=1.5.0,<2.0a0 + - libxml2 >=2.13.5,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - lz4-c >=1.10.0,<1.11.0a0 + - openssl >=3.4.0,<4.0a0 + - pcre2 >=10.44,<10.45.0a0 + - proj >=9.5.1,<9.6.0a0 + - xerces-c >=3.2.5,<3.3.0a0 + - zstd >=1.5.6,<1.6.0a0 + constrains: + - libgdal 3.10.1.* + license: MIT + license_family: MIT + purls: [] + size: 8493126 + timestamp: 1737610665986 - kind: conda name: libgfortran version: 5.0.0 @@ -1288,26 +2777,131 @@ packages: purls: [] size: 997381 timestamp: 1707330687590 +- kind: conda + name: libheif + version: 1.19.5 + build: gpl_h297b2c4_100 + build_number: 100 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda + sha256: f340e8e51519bcf885da9dd12602f19f76f3206347701accb28034dd0112b1a1 + md5: 5e457131dd237050dbfe6b141592f3ea + depends: + - __osx >=11.0 + - aom >=3.9.1,<3.10.0a0 + - dav1d >=1.2.1,<1.2.2.0a0 + - libavif16 >=1.1.1,<2.0a0 + - libcxx >=18 + - libde265 >=1.0.15,<1.0.16.0a0 + - x265 >=3.5,<3.6.0a0 + license: LGPL-3.0-or-later + license_family: LGPL + purls: [] + size: 429678 + timestamp: 1735260330340 +- kind: conda + name: libiconv + version: '1.17' + build: h0d3ecfb_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda + sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 + md5: 69bda57310071cf6d2b86caf11573d2d + license: LGPL-2.1-only + purls: [] + size: 676469 + timestamp: 1702682458114 +- kind: conda + name: libjpeg-turbo + version: 3.0.0 + build: hb547adb_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda + sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 + md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 + constrains: + - jpeg <0.0.0a + license: IJG AND BSD-3-Clause AND Zlib + purls: [] + size: 547541 + timestamp: 1694475104253 +- kind: conda + name: libkml + version: 1.3.0 + build: he250239_1021 + build_number: 1021 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda + sha256: e578ba448489465b8fea743e214272a9fcfccb0d152ba1ff57657aaa76a0cd7d + md5: 891bb2a18eaef684f37bd4fb942cd8b2 + depends: + - __osx >=11.0 + - libcxx >=17 + - libexpat >=2.6.2,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - uriparser >=0.9.8,<1.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 281362 + timestamp: 1724667138089 - kind: conda name: liblapack version: 3.9.0 - build: 25_osxarm64_openblas - build_number: 25 + build: 28_hc9a63f6_openblas + build_number: 28 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-25_osxarm64_openblas.conda - sha256: fdd742407672a9af20e70764550cf18b3ab67f12e48bf04163b90492fbc401e7 - md5: 19bbddfec972d401838330453186108d + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda + sha256: 79c75a02bff20f8b001e6aecfee8d22a51552c3986e7037fca68e5ed071cc213 + md5: 45f26652530b558c21083ceb7adaf273 depends: - - libblas 3.9.0 25_osxarm64_openblas + - libblas 3.9.0 28_h10e41b3_openblas constrains: - - blas * openblas - - liblapacke 3.9.0 25_osxarm64_openblas - - libcblas 3.9.0 25_osxarm64_openblas + - blas =2.128=openblas + - liblapacke =3.9.0=28*_openblas + - libcblas =3.9.0=28*_openblas license: BSD-3-Clause license_family: BSD purls: [] - size: 15823 - timestamp: 1729643275943 + size: 16793 + timestamp: 1738114407021 +- kind: conda + name: liblzma + version: 5.6.4 + build: h39f12f2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda + sha256: 560c59d3834cc652a84fb45531bd335ad06e271b34ebc216e380a89798fe8e2c + md5: e3fd1f8320a100f2b210e690a57cd615 + depends: + - __osx >=11.0 + license: 0BSD + purls: [] + size: 98945 + timestamp: 1738525462560 +- kind: conda + name: libnghttp2 + version: 1.64.0 + build: h6d7220d_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda + sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f + md5: 3408c02539cee5f1141f9f11450b6a51 + depends: + - __osx >=11.0 + - c-ares >=1.34.2,<2.0a0 + - libcxx >=17 + - libev >=4.33,<4.34.0a0 + - libev >=4.33,<5.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.3.2,<4.0a0 + license: MIT + license_family: MIT + purls: [] + size: 566719 + timestamp: 1729572385640 - kind: conda name: libopenblas version: 0.3.28 @@ -1329,22 +2923,159 @@ packages: purls: [] size: 4165774 timestamp: 1730772154295 +- kind: conda + name: libpng + version: 1.6.46 + build: h3783ad8_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda + sha256: db78a711561bb6df274ef421472d948dfd1093404db3915e891ae6d7fd37fadc + md5: 15d480fb9dad036eaa4de0b51eab3ccc + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: zlib-acknowledgement + purls: [] + size: 266516 + timestamp: 1737791023678 +- kind: conda + name: librttopo + version: 1.1.0 + build: ha2cf0f4_17 + build_number: 17 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda + sha256: 9ff3162d035a1d9022f6145755a70d0c0ce6c9152792402bc42294354c871a17 + md5: ba729f000ea379b76ed2190119d21e13 + depends: + - __osx >=11.0 + - geos >=3.13.0,<3.13.1.0a0 + - libcxx >=17 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 191064 + timestamp: 1727265842691 +- kind: conda + name: libspatialite + version: 5.1.0 + build: hf92fc0a_12 + build_number: 12 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda + sha256: b11e6169fdbef472c307129192fd46133eec543036e41ab2f957615713b03d19 + md5: f05759528e44f74888830119ab32fc81 + depends: + - __osx >=11.0 + - freexl >=2 + - freexl >=2.0.0,<3.0a0 + - geos >=3.13.0,<3.13.1.0a0 + - libcxx >=18 + - libiconv >=1.17,<2.0a0 + - librttopo >=1.1.0,<1.2.0a0 + - libsqlite >=3.47.2,<4.0a0 + - libxml2 >=2.13.5,<3.0a0 + - libzlib >=1.3.1,<2.0a0 + - proj >=9.5.1,<9.6.0a0 + - sqlite + - zlib + license: MPL-1.1 + license_family: MOZILLA + purls: [] + size: 2943606 + timestamp: 1734001158789 - kind: conda name: libsqlite - version: 3.47.0 - build: hbaaea75_1 + version: 3.48.0 + build: h3f77e49_1 build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.47.0-hbaaea75_1.conda - sha256: 5a96caa566c11e5a5ebdcdb86a0759a7fb27d3c5f42e6a0fd0d6023c1e935d9e - md5: 07a14fbe439eef078cc479deca321161 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda + sha256: 17c06940cc2a13fd6a17effabd6881b1477db38b2cd3ee2571092d293d3fdd75 + md5: 4c55169502ecddf8077973a987d08f08 depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 license: Unlicense purls: [] - size: 837683 - timestamp: 1730208293578 + size: 852831 + timestamp: 1737564996616 +- kind: conda + name: libssh2 + version: 1.11.1 + build: h9cc3647_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda + sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 + md5: ddc7194676c285513706e5fc64f214d7 + depends: + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 279028 + timestamp: 1732349599461 +- kind: conda + name: libtiff + version: 4.7.0 + build: h551f018_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda + sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae + md5: a5d084a957563e614ec0c0196d890654 + depends: + - __osx >=11.0 + - lerc >=4.0.0,<5.0a0 + - libcxx >=18 + - libdeflate >=1.23,<1.24.0a0 + - libjpeg-turbo >=3.0.0,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libwebp-base >=1.4.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: HPND + purls: [] + size: 370600 + timestamp: 1734398863052 +- kind: conda + name: libwebp-base + version: 1.5.0 + build: h2471fea_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda + sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a + md5: 569466afeb84f90d5bb88c11cc23d746 + depends: + - __osx >=11.0 + constrains: + - libwebp 1.5.0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 290013 + timestamp: 1734777593617 +- kind: conda + name: libxml2 + version: 2.13.5 + build: h178c5d8_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda + sha256: d7af3f25a4cece170502acd38f2dafbea4521f373f46dcb28a37fbe6ac2da544 + md5: 3dc3cff0eca1640a6acbbfab2f78139e + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + license: MIT + license_family: MIT + purls: [] + size: 582898 + timestamp: 1733443841584 - kind: conda name: libzlib version: 1.3.1 @@ -1365,47 +3096,106 @@ packages: timestamp: 1727963202283 - kind: conda name: llvm-openmp - version: 19.1.3 - build: hb52a8e5_0 + version: 19.1.7 + build: hdb05f8b_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.3-hb52a8e5_0.conda - sha256: 49a8940e727aa82ee034fa9a60b3fcababec41b3192d955772aab635a5374b82 - md5: dd695d23e78d1ca4fecce969b1e1db61 + url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda + sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 + md5: c4d54bfd3817313ce758aa76283b118d depends: - __osx >=11.0 constrains: - - openmp 19.1.3|19.1.3.* + - openmp 19.1.7|19.1.7.* license: Apache-2.0 WITH LLVM-exception license_family: APACHE purls: [] - size: 280488 - timestamp: 1730364082380 + size: 280830 + timestamp: 1736986295869 - kind: pypi name: locket version: 1.0.0 url: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- kind: pypi + name: lz4 + version: 4.4.3 + url: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl + sha256: 2ae50a175fb7b900f7aa42575f4fe99c32ca0ff57e5a8c1fd25e1243e67409db + requires_dist: + - pytest!=3.3.0 ; extra == 'tests' + - psutil ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - sphinx>=1.6.0 ; extra == 'docs' + - sphinx-bootstrap-theme ; extra == 'docs' + - flake8 ; extra == 'flake8' + requires_python: '>=3.9' +- kind: conda + name: lz4-c + version: 1.10.0 + build: h286801f_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda + sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 + md5: 01511afc6cc1909c5303cf31be17b44f + depends: + - __osx >=11.0 + - libcxx >=18 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 148824 + timestamp: 1733741047892 +- kind: conda + name: lzo + version: '2.10' + build: h93a5062_1001 + build_number: 1001 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda + sha256: b68160b0a8ec374cea12de7afb954ca47419cdc300358232e19cec666d60b929 + md5: 915996063a7380c652f83609e970c2a7 + license: GPL-2.0-or-later + license_family: GPL2 + purls: [] + size: 131447 + timestamp: 1713516009610 - kind: pypi name: markupsafe version: 3.0.2 url: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl sha256: 846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 requires_python: '>=3.9' +- kind: conda + name: minizip + version: 4.0.7 + build: hff1a8ea_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda + sha256: 6d904a6fc5e875e687b9fab244d5b286961222d72f546f9939d8f80ebe873c1c + md5: 666bd61287ad7ee417884eacd9aef2ea + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libcxx >=18 + - libiconv >=1.17,<2.0a0 + - liblzma >=5.6.3,<6.0a0 + - libzlib >=1.3.1,<2.0a0 + - openssl >=3.4.0,<4.0a0 + - zstd >=1.5.6,<1.6.0a0 + license: Zlib + license_family: Other + purls: [] + size: 77597 + timestamp: 1734012196026 - kind: pypi - name: mock - version: 2.0.0 - url: https://files.pythonhosted.org/packages/e6/35/f187bdf23be87092bd0f1200d43d23076cee4d0dec109f195173fd3ebc79/mock-2.0.0-py2.py3-none-any.whl - sha256: 5ce3c71c5545b472da17b72268978914d0252980348636840bd34a00b5cc96c1 - requires_dist: - - pbr>=0.11 - - six>=1.9 - - funcsigs>=1 ; python_full_version < '3.3' - - sphinx ; (python_full_version < '3.0' and extra == 'docs') or (python_full_version >= '3.3' and extra == 'docs') - - pygments<2 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' - - jinja2<2.7 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' - - sphinx<1.3 ; python_full_version >= '3.0' and python_full_version < '3.3' and extra == 'docs' - - unittest2>=1.1.0 ; extra == 'test' + name: more-itertools + version: 10.6.0 + url: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl + sha256: 6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89 + requires_python: '>=3.9' - kind: pypi name: msgpack version: 1.1.0 @@ -1429,47 +3219,47 @@ packages: - kind: conda name: ncurses version: '6.5' - build: h7bae524_1 - build_number: 1 + build: h5e97a16_3 + build_number: 3 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h7bae524_1.conda - sha256: 27d0b9ff78ad46e1f3a6c96c479ab44beda5f96def88e2fe626e0a49429d8afc - md5: cb2b0ea909b97b3d70cd3921d1445e1a + url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae depends: - __osx >=11.0 license: X11 AND BSD-3-Clause purls: [] - size: 802321 - timestamp: 1724658775723 + size: 797030 + timestamp: 1738196177597 - kind: pypi name: numcodecs - version: 0.13.1 - url: https://files.pythonhosted.org/packages/3a/cc/dc74d0bfdf9ec192332a089d199f1e543e747c556b5659118db7a437dcca/numcodecs-0.13.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: 3501a848adaddce98a71a262fee15cd3618312692aa419da77acd18af4a6a3f6 + version: 0.15.0 + url: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 9dbe1880856ab65ff7ae16ccfcec4477c471a47297f2c33b87d78c3feb7b5c2b requires_dist: - - numpy>=1.7 + - numpy>=1.24 + - deprecated - sphinx ; extra == 'docs' - sphinx-issues ; extra == 'docs' - pydata-sphinx-theme ; extra == 'docs' - numpydoc ; extra == 'docs' - - mock ; extra == 'docs' - - msgpack ; extra == 'msgpack' - - pcodec>=0.2.0 ; extra == 'pcodec' - coverage ; extra == 'test' - pytest ; extra == 'test' - pytest-cov ; extra == 'test' - importlib-metadata ; extra == 'test-extras' + - msgpack ; extra == 'msgpack' - zfpy>=1.0.0 ; extra == 'zfpy' - - numpy<2.0.0 ; extra == 'zfpy' - requires_python: '>=3.10' + - pcodec>=0.3,<0.4 ; extra == 'pcodec' + - crc32c>=2.7 ; extra == 'crc32c' + requires_python: '>=3.11' - kind: conda name: numpy - version: 2.2.1 - build: py312h41c6370_0 + version: 2.2.2 + build: py312h7c1f314_0 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.1-py312h41c6370_0.conda - sha256: 0a08d24a9879009bbb3eeea8aa0116d027968732c2092f0290102cd757307de8 - md5: c8319d0e393fee76123fd617dddb8977 + url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda + sha256: 411e2262230fd8da86f6f065e751d158b861efb6d9ba7fc5af848be99cce378e + md5: 083cb61e8e81cf8739e22f8a1904e01e depends: - __osx >=11.0 - libblas >=3.9.0,<4.0a0 @@ -1485,13 +3275,13 @@ packages: license_family: BSD purls: - pkg:pypi/numpy?source=hash-mapping - size: 6495249 - timestamp: 1734904743892 + size: 6441437 + timestamp: 1737331520428 - kind: pypi name: oauth2client - version: 3.0.0 - url: https://files.pythonhosted.org/packages/c0/7b/bc893e35d6ca46a72faa4b9eaac25c687ce60e1fbe978993fe2de1b0ff0d/oauth2client-3.0.0.tar.gz - sha256: 5b5b056ec6f2304e7920b632885bd157fa71d1a7f3ddd00a43b1541a8d1a2460 + version: 4.1.3 + url: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl + sha256: b8a81cc5d60e2d364f0b1b98f958dbd472887acaf1a5b05e21c28c31a2d6d3ac requires_dist: - httplib2>=0.9.1 - pyasn1>=0.1.7 @@ -1509,39 +3299,94 @@ packages: - cryptography>=3.0.0 ; extra == 'signedtoken' - pyjwt>=2.0.0,<3 ; extra == 'signedtoken' requires_python: '>=3.6' +- kind: pypi + name: objsize + version: 0.7.1 + url: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl + sha256: 634a0c134c4b1ff2c340fe29caf58bc0a16cb2ff7c556df609d04f026fdf4eca + requires_dist: + - bumpver ; extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - flake8 ; extra == 'dev' + - pylint ; extra == 'dev' + - mypy ; extra == 'dev' + - pip-tools ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - coveralls ; extra == 'dev' + - pyyaml ; extra == 'dev' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - sphinx-rtd-dark-mode ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx-markdown-builder>=0.6.0 ; extra == 'docs' + requires_python: '>=3.8' - kind: conda name: openssl version: 3.4.0 - build: h39f12f2_0 + build: h81ee809_1 + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h39f12f2_0.conda - sha256: bd1d58ced46e75efa3b842c61642fd12272c69e9fe4d7261078bc082153a1d53 - md5: df307bbc703324722df0293c9ca2e418 + url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 + md5: 22f971393637480bda8c679f374d8861 depends: - __osx >=11.0 - ca-certificates license: Apache-2.0 license_family: Apache purls: [] - size: 2935176 - timestamp: 1731377561525 -- kind: conda + size: 2936415 + timestamp: 1736086108693 +- kind: pypi + name: opentelemetry-api + version: 1.29.0 + url: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl + sha256: 5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8 + requires_dist: + - deprecated>=1.2.6 + - importlib-metadata>=6.0,<=8.5.0 + requires_python: '>=3.8' +- kind: pypi + name: opentelemetry-sdk + version: 1.29.0 + url: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl + sha256: 173be3b5d3f8f7d671f20ea37056710217959e774e2749d984355d1f9391a30a + requires_dist: + - opentelemetry-api==1.29.0 + - opentelemetry-semantic-conventions==0.50b0 + - typing-extensions>=3.7.4 + requires_python: '>=3.8' +- kind: pypi + name: opentelemetry-semantic-conventions + version: 0.50b0 + url: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl + sha256: e87efba8fdb67fb38113efea6a349531e75ed7ffc01562f65b802fcecb5e115e + requires_dist: + - deprecated>=1.2.6 + - opentelemetry-api==1.29.0 + requires_python: '>=3.8' +- kind: pypi + name: orjson + version: 3.10.15 + url: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl + sha256: 9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a + requires_python: '>=3.8' +- kind: pypi + name: overrides + version: 7.7.0 + url: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl + sha256: c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49 + requires_dist: + - typing ; python_full_version < '3.5' + requires_python: '>=3.6' +- kind: pypi name: packaging version: '24.2' - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_0.conda - sha256: 0f8273bf66c2a5c1de72312a509deae07f163bb0ae8de8273c52e6fe945a0850 - md5: c16469afe1ec91aaafcf4bea966c0465 - depends: - - python >=3.8 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60345 - timestamp: 1731457074006 + url: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl + sha256: 09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 + requires_python: '>=3.8' - kind: pypi name: pandas version: 2.2.3 @@ -1653,17 +3498,29 @@ packages: url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 requires_python: '>=3.8' -- kind: pypi - name: pbr - version: 6.1.0 - url: https://files.pythonhosted.org/packages/1d/44/6a65ecd630393d47ad3e7d5354768cb7f9a10b3a0eb2cd8c6f52b28211ee/pbr-6.1.0-py2.py3-none-any.whl - sha256: a776ae228892d8013649c0aeccbb3d5f99ee15e005a4cbb7e61d55a067b28a2a - requires_python: '>=2.6' +- kind: conda + name: pcre2 + version: '10.44' + build: h297a79d_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + sha256: 83153c7d8fd99cab33c92ce820aa7bfed0f1c94fc57010cf227b6e3c50cb7796 + md5: 147c83e5e44780c7492998acbacddf52 + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 618973 + timestamp: 1723488853807 - kind: pypi name: pillow - version: 11.0.0 - url: https://files.pythonhosted.org/packages/4f/d5/1caabedd8863526a6cfa44ee7a833bd97f945dc1d56824d6d76e11731939/pillow-11.0.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 084a07ef0821cfe4858fe86652fffac8e187b6ae677e9906e192aafcc1b69903 + version: 11.1.0 + url: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b requires_dist: - furo ; extra == 'docs' - olefile ; extra == 'docs' @@ -1674,7 +3531,7 @@ packages: - olefile ; extra == 'fpx' - olefile ; extra == 'mic' - check-manifest ; extra == 'tests' - - coverage ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' - defusedxml ; extra == 'tests' - markdown2 ; extra == 'tests' - olefile ; extra == 'tests' @@ -1683,26 +3540,27 @@ packages: - pytest ; extra == 'tests' - pytest-cov ; extra == 'tests' - pytest-timeout ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' - typing-extensions ; python_full_version < '3.10' and extra == 'typing' - defusedxml ; extra == 'xmp' requires_python: '>=3.9' -- kind: conda +- kind: pypi name: platformdirs version: 4.3.6 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.3.6-pyhd8ed1ab_0.conda - sha256: c81bdeadc4adcda216b2c7b373f0335f5c78cc480d1d55d10f21823590d7e46f - md5: fd8f2b18b65bbf62e8f653100690c8d2 - depends: - - python >=3.8 - license: MIT - license_family: MIT - purls: - - pkg:pypi/platformdirs?source=hash-mapping - size: 20625 - timestamp: 1726613611845 + url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl + sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - proselint>=0.14 ; extra == 'docs' + - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' + - sphinx>=8.0.2 ; extra == 'docs' + - appdirs==1.4.4 ; extra == 'test' + - covdefaults>=2.3 ; extra == 'test' + - pytest-cov>=5 ; extra == 'test' + - pytest-mock>=3.14 ; extra == 'test' + - pytest>=8.3.2 ; extra == 'test' + - mypy>=1.11.2 ; extra == 'type' + requires_python: '>=3.8' - kind: pypi name: pluggy version: 1.5.0 @@ -1714,47 +3572,92 @@ packages: - pytest ; extra == 'testing' - pytest-benchmark ; extra == 'testing' requires_python: '>=3.8' +- kind: conda + name: proj + version: 9.5.1 + build: h1318a7e_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + sha256: c6289d6f1a13f28ff3754ac0cb2553f7e7bc4a3102291115f62a04995d0421eb + md5: 5eb42e77ae79b46fabcb0f6f6d130763 + depends: + - __osx >=11.0 + - libcurl >=8.10.1,<9.0a0 + - libcxx >=18 + - libsqlite >=3.47.0,<4.0a0 + - libtiff >=4.7.0,<4.8.0a0 + - sqlite + constrains: + - proj4 ==999999999999 + license: MIT + license_family: MIT + purls: [] + size: 2673401 + timestamp: 1733138376056 - kind: pypi name: propcache - version: 0.2.0 - url: https://files.pythonhosted.org/packages/0b/17/308acc6aee65d0f9a8375e36c4807ac6605d1f38074b1581bd4042b9fb37/propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8 - requires_python: '>=3.8' + version: 0.2.1 + url: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl + sha256: 14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d + requires_python: '>=3.9' - kind: pypi - name: protobuf - version: 3.20.3 - url: https://files.pythonhosted.org/packages/8d/14/619e24a4c70df2901e1f4dbc50a6291eb63a759172558df326347dce1f0d/protobuf-3.20.3-py2.py3-none-any.whl - sha256: a7ca6d488aa8ff7f329d4c545b2dbad8ac31464f1d8b1c87ad1346717731e4db + name: proto-plus + version: 1.26.0 + url: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl + sha256: bf2dfaa3da281fc3187d12d224c707cb57214fb2c22ba854eb0c105a3fb2d4d7 + requires_dist: + - protobuf>=3.19.0,<6.0.0.dev0 + - google-api-core>=1.31.5 ; extra == 'testing' requires_python: '>=3.7' -- kind: conda +- kind: pypi + name: protobuf + version: 5.29.3 + url: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl + sha256: a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e + requires_python: '>=3.8' +- kind: pypi name: psutil version: 6.1.1 - build: py312hea69d52_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/psutil-6.1.1-py312hea69d52_0.conda - sha256: 90332053dad4056fe752217fa311ffa61cb37dc693b1721e37580e71a2a6fe04 - md5: 90724dac996a4e9d629a88a4b1ffe694 - depends: - - __osx >=11.0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/psutil?source=hash-mapping - size: 495397 - timestamp: 1735327574477 + url: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl + sha256: 0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377 + requires_dist: + - abi3audit ; extra == 'dev' + - black ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - pytest ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' - kind: pypi name: pyarrow - version: 0.15.1 - url: https://files.pythonhosted.org/packages/e0/e6/d14b4a2b54ef065b1a2c576537abe805c1af0c94caef70d365e2d78fc528/pyarrow-0.15.1.tar.gz - sha256: 7ad074690ba38313067bf3bbda1258966d38e2037c035d08b9ffe3cce07747a5 + version: 16.1.0 + url: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a requires_dist: - - numpy>=1.14 - - six>=1.0.0 - - futures ; python_full_version < '3.2' - - enum34>=1.1.6 ; python_full_version < '3.4' + - numpy>=1.16.6 + requires_python: '>=3.8' +- kind: pypi + name: pyarrow-hotfix + version: '0.6' + url: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl + sha256: dcc9ae2d220dff0083be6a9aa8e0cdee5182ad358d4931fce825c545e5c89178 + requires_python: '>=3.5' - kind: pypi name: pyasn1 version: 0.6.1 @@ -1769,6 +3672,26 @@ packages: requires_dist: - pyasn1>=0.4.6,<0.7.0 requires_python: '>=3.8' +- kind: pypi + name: pydantic + version: 2.10.6 + url: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl + sha256: 427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584 + requires_dist: + - annotated-types>=0.6.0 + - pydantic-core==2.27.2 + - typing-extensions>=4.12.2 + - email-validator>=2.0.0 ; extra == 'email' + - tzdata ; python_full_version >= '3.9' and platform_system == 'Windows' and extra == 'timezone' + requires_python: '>=3.8' +- kind: pypi + name: pydantic-core + version: 2.27.2 + url: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: 83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef + requires_dist: + - typing-extensions>=4.6.0,!=4.7.0 + requires_python: '>=3.8' - kind: pypi name: pydot version: 1.4.2 @@ -1779,11 +3702,11 @@ packages: requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - kind: pypi name: pyink - version: 24.10.0 - url: https://files.pythonhosted.org/packages/93/72/37d76e26bc9cc5ffb90cd2c29adcf0476922e8d89da6061682298e231a3b/pyink-24.10.0-py3-none-any.whl - sha256: 98d5250e77a44e906d8fcbf10582ca12f2404a0d38dfe99320bf81ca08c418b9 + version: 24.10.1 + url: https://files.pythonhosted.org/packages/1f/12/2f271b3601ae25731879f160d6b3941d80eb6b4f3e24be90289e33fb1dc4/pyink-24.10.1-py3-none-any.whl + sha256: 6349bf6ab75e2ea39a5f0bc3dee7ede7f4af8529291472638026de5fd4af80d2 requires_dist: - - black==24.8.0 + - black==24.10.0 - click>=8.0.0 - mypy-extensions>=0.4.3 - packaging>=22.0 @@ -1798,26 +3721,38 @@ packages: requires_python: '>=3.9' - kind: pypi name: pymongo - version: 3.13.0 - url: https://files.pythonhosted.org/packages/ec/ff/9b08f29b57384e1f55080d15a12ba4908d93d46cd7fe83c5c562fdcd3400/pymongo-3.13.0.tar.gz - sha256: e22d6cf5802cd09b674c307cc9e03870b8c37c503ebec3d25b86f2ce8c535dc7 + version: '4.11' + url: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl + sha256: e84e27d6fa4b3e532043daf89d52d2cfbd7b4697b44b86a7b3db8cacdcfcc58c requires_dist: - - pymongo-auth-aws<2.0.0 ; extra == 'aws' - - pymongocrypt>=1.1.0,<2.0.0 ; extra == 'encryption' - - pykerberos ; extra == 'gssapi' + - dnspython>=1.16.0,<3.0.0 + - pymongo-auth-aws>=1.1.0,<2.0.0 ; extra == 'aws' + - furo==2024.8.6 ; extra == 'docs' + - readthedocs-sphinx-search~=0.3 ; extra == 'docs' + - sphinx-autobuild>=2020.9.1 ; extra == 'docs' + - sphinx-rtd-theme>=2,<4 ; extra == 'docs' + - sphinx>=5.3,<9 ; extra == 'docs' + - sphinxcontrib-shellcheck>=1,<2 ; extra == 'docs' + - certifi ; (sys_platform == 'darwin' and extra == 'encryption') or (os_name == 'nt' and extra == 'encryption') + - pymongo-auth-aws>=1.1.0,<2.0.0 ; extra == 'encryption' + - pymongocrypt>=1.12.0,<2.0.0 ; extra == 'encryption' + - pykerberos ; os_name != 'nt' and extra == 'gssapi' + - winkerberos>=0.5.0 ; os_name == 'nt' and extra == 'gssapi' + - certifi ; (sys_platform == 'darwin' and extra == 'ocsp') or (os_name == 'nt' and extra == 'ocsp') + - cryptography>=2.5 ; extra == 'ocsp' - pyopenssl>=17.2.0 ; extra == 'ocsp' - requests<3.0.0 ; extra == 'ocsp' - service-identity>=18.1.0 ; extra == 'ocsp' - - certifi ; extra == 'ocsp' - python-snappy ; extra == 'snappy' - - dnspython>=1.16.0,<3.0.0 ; extra == 'srv' + - pytest-asyncio>=0.24.0 ; extra == 'test' + - pytest>=8.2 ; extra == 'test' - zstandard ; extra == 'zstd' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' + requires_python: '>=3.9' - kind: pypi name: pyparsing - version: 3.2.0 - url: https://files.pythonhosted.org/packages/be/ec/2eb3cd785efd67806c46c13a17339708ddc346cbb684eade7a6e6f79536a/pyparsing-3.2.0-py3-none-any.whl - sha256: 93d9577b88da0bbea8cc8334ee8b918ed014968fd2ec383e868fb8afb1ccef84 + version: 3.2.1 + url: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl + sha256: 506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1 requires_dist: - railroad-diagrams ; extra == 'diagrams' - jinja2 ; extra == 'diagrams' @@ -1832,16 +3767,16 @@ packages: requires_python: '>=3.10' - kind: pypi name: pytest - version: 8.3.3 - url: https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl - sha256: a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2 + version: 8.3.4 + url: https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl + sha256: 50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6 requires_dist: + - colorama ; sys_platform == 'win32' + - exceptiongroup>=1.0.0rc8 ; python_full_version < '3.11' - iniconfig - packaging - pluggy>=1.5,<2 - - exceptiongroup>=1.0.0rc8 ; python_full_version < '3.11' - tomli>=1 ; python_full_version < '3.11' - - colorama ; sys_platform == 'win32' - argcomplete ; extra == 'dev' - attrs>=19.2 ; extra == 'dev' - hypothesis>=3.56 ; extra == 'dev' @@ -1853,48 +3788,40 @@ packages: requires_python: '>=3.8' - kind: conda name: python - version: 3.12.0 - build: h47c9636_0_cpython + version: 3.12.8 + build: hc22306f_1_cpython + build_number: 1 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.0-h47c9636_0_cpython.conda - sha256: eb66f8f249caa9d5a956c3a407f079e4779d652ebfc2a4b4f50dcea078e84fa8 - md5: ed8ae98b1b510de68392971b9367d18c + url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda + sha256: 7586a711b1b08a9df8864e26efdc06980bdfb0e18d5ac4651d0fee30a8d3e3a0 + md5: 54ca5b5d92ef3a3ba61e195ee882a518 depends: + - __osx >=11.0 - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.5.0,<3.0a0 + - libexpat >=2.6.4,<3.0a0 - libffi >=3.4,<4.0a0 - - libsqlite >=3.43.0,<4.0a0 - - libzlib >=1.2.13,<2.0.0a0 - - ncurses >=6.4,<7.0a0 - - openssl >=3.1.3,<4.0a0 + - liblzma >=5.6.3,<6.0a0 + - libsqlite >=3.47.0,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.4.0,<4.0a0 - readline >=8.2,<9.0a0 - tk >=8.6.13,<8.7.0a0 - tzdata - - xz >=5.2.6,<6.0a0 constrains: - python_abi 3.12.* *_cp312 license: Python-2.0 purls: [] - size: 13306758 - timestamp: 1696322682581 -- kind: conda + size: 12998673 + timestamp: 1733408900971 +- kind: pypi name: python-dateutil - version: 2.9.0 - build: pyhd8ed1ab_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - sha256: f3ceef02ac164a8d3a080d0d32f8e2ebe10dd29e3a685d240e38b3599e146320 - md5: 2cf4264fffb9e6eff6031c5b6884d61c - depends: - - python >=3.7 - - six >=1.5 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/python-dateutil?source=hash-mapping - size: 222742 - timestamp: 1709299922152 + version: 2.9.0.post0 + url: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' - kind: conda name: python_abi version: '3.12' @@ -1913,9 +3840,9 @@ packages: timestamp: 1723823099686 - kind: pypi name: pytz - version: '2024.2' - url: https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl - sha256: 31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725 + version: '2025.1' + url: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl + sha256: 89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57 - kind: pypi name: pyyaml version: 6.0.2 @@ -1924,9 +3851,9 @@ packages: requires_python: '>=3.8' - kind: pypi name: rasterio - version: 1.4.2 - url: https://files.pythonhosted.org/packages/2e/48/fcd02399c7c4041c850b59c7cd80c309f7b87c86649e2bfb515d44ad061c/rasterio-1.4.2.tar.gz - sha256: 1be35ccb4d998a4c48fa51bbee9e37927ecd9b9e954a2b2581b8f3e9bb165332 + version: 1.4.3 + url: https://files.pythonhosted.org/packages/de/19/ab4326e419b543da623ce4191f68e3f36a4d9adc64f3df5c78f044d8d9ca/rasterio-1.4.3.tar.gz + sha256: 201f05dbc7c4739dacb2c78a1cf4e09c0b7265b0a4d16ccbd1753ce4f2af350a requires_dist: - affine - attrs @@ -1937,20 +3864,20 @@ packages: - click-plugins - pyparsing - importlib-metadata ; python_full_version < '3.10' - - sphinx ; extra == 'all' - - pytest-cov>=2.2.0 ; extra == 'all' - - packaging ; extra == 'all' - - pytest>=2.8.2 ; extra == 'all' - - boto3>=1.2.4 ; extra == 'all' - matplotlib ; extra == 'all' - - ghp-import ; extra == 'all' - - numpydoc ; extra == 'all' - ipython>=2.0 ; extra == 'all' - - sphinx-click ; extra == 'all' - - hypothesis ; extra == 'all' - fsspec ; extra == 'all' - - sphinx-rtd-theme ; extra == 'all' + - sphinx ; extra == 'all' - shapely ; extra == 'all' + - numpydoc ; extra == 'all' + - hypothesis ; extra == 'all' + - pytest-cov>=2.2.0 ; extra == 'all' + - boto3>=1.2.4 ; extra == 'all' + - pytest>=2.8.2 ; extra == 'all' + - sphinx-rtd-theme ; extra == 'all' + - sphinx-click ; extra == 'all' + - ghp-import ; extra == 'all' + - packaging ; extra == 'all' - ghp-import ; extra == 'docs' - numpydoc ; extra == 'docs' - sphinx ; extra == 'docs' @@ -1967,6 +3894,20 @@ packages: - pytest>=2.8.2 ; extra == 'test' - shapely ; extra == 'test' requires_python: '>=3.9' +- kind: conda + name: rav1e + version: 0.6.6 + build: h69fbcac_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda + sha256: be6174970193cb4d0ffa7d731a93a4c9542881dbc7ab24e74b460ef312161169 + md5: e309ae86569b1cd55a0285fa4e939844 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1526706 + timestamp: 1694329743011 - kind: conda name: readline version: '8.2' @@ -2019,6 +3960,34 @@ packages: - hypothesis ; extra == 'test' - pytest ; extra == 'test' requires_python: '>=3.8' +- kind: pypi + name: redis + version: 5.2.1 + url: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl + sha256: ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4 + requires_dist: + - async-timeout>=4.0.3 ; python_full_version < '3.11.3' + - hiredis>=3.0.0 ; extra == 'hiredis' + - cryptography>=36.0.1 ; extra == 'ocsp' + - pyopenssl==23.2.1 ; extra == 'ocsp' + - requests>=2.31.0 ; extra == 'ocsp' + requires_python: '>=3.8' +- kind: pypi + name: referencing + version: 0.36.2 + url: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + sha256: e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.9' +- kind: pypi + name: regex + version: 2024.11.6 + url: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl + sha256: 805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2 + requires_python: '>=3.8' - kind: pypi name: requests version: 2.32.3 @@ -2044,18 +4013,24 @@ packages: requires_python: '>=3.4' - kind: pypi name: rioxarray - version: 0.18.1 - url: https://files.pythonhosted.org/packages/aa/b7/a881b08bb24ae15bd3644b313244d89b0eb50d88dbda577ce72e5e3e4be4/rioxarray-0.18.1-py3-none-any.whl - sha256: 64cc571807204afc1ffaf5f9a0a2640dccb1e2edd602d952a3c65153b6645540 + version: 0.18.2 + url: https://files.pythonhosted.org/packages/fb/b0/2c74f302512fbd24d68fbba0ec6b650b33ef83e398daeb0a2bb1a4cd641c/rioxarray-0.18.2-py3-none-any.whl + sha256: f351c15fc682081ac2cd2c8db367ef0a7ed5acdea29b9e43a6d7bc2ebc5ec6e5 requires_dist: - packaging - rasterio>=1.3.7 - xarray>=2024.7.0 - pyproj>=3.3 - numpy>=1.23 - - scipy ; extra == 'all' - scipy ; extra == 'interp' + - scipy ; extra == 'all' requires_python: '>=3.10' +- kind: pypi + name: rpds-py + version: 0.22.3 + url: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl + sha256: 1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56 + requires_python: '>=3.9' - kind: pypi name: rsa version: '4.9' @@ -2065,87 +4040,93 @@ packages: - pyasn1>=0.1.3 requires_python: '>=3.6,<4' - kind: pypi - name: setuptools - version: 75.6.0 - url: https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl - sha256: ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d + name: shapely + version: 2.0.7 + url: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl + sha256: 5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51 requires_dist: - - pytest>=6,!=8.1.* ; extra == 'test' - - virtualenv>=13.0.0 ; extra == 'test' - - wheel>=0.44.0 ; extra == 'test' - - pip>=19.1 ; extra == 'test' - - packaging>=24.2 ; extra == 'test' - - jaraco-envs>=2.2 ; extra == 'test' - - pytest-xdist>=3 ; extra == 'test' - - jaraco-path>=3.2.0 ; extra == 'test' - - build[virtualenv]>=1.0.3 ; extra == 'test' - - filelock>=3.4.0 ; extra == 'test' - - ini2toml[lite]>=0.14 ; extra == 'test' - - tomli-w>=1.0.0 ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' - - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' - - pytest-home>=0.5 ; extra == 'test' - - pytest-subprocess ; extra == 'test' - - pyproject-hooks!=1.1 ; extra == 'test' - - jaraco-test>=5.5 ; extra == 'test' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pygments-github-lexers==0.0.5 ; extra == 'doc' - - sphinx-favicon ; extra == 'doc' - - sphinx-inline-tabs ; extra == 'doc' - - sphinx-reredirects ; extra == 'doc' - - sphinxcontrib-towncrier ; extra == 'doc' - - sphinx-notfound-page>=1,<2 ; extra == 'doc' - - pyproject-hooks!=1.1 ; extra == 'doc' - - towncrier<24.7 ; extra == 'doc' - - packaging>=24.2 ; extra == 'core' - - more-itertools>=8.8 ; extra == 'core' - - jaraco-text>=3.7 ; extra == 'core' - - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' - - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' - - wheel>=0.43.0 ; extra == 'core' - - platformdirs>=4.2.2 ; extra == 'core' - - jaraco-collections ; extra == 'core' - - jaraco-functools>=4 ; extra == 'core' - - packaging ; extra == 'core' - - more-itertools ; extra == 'core' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - ruff>=0.7.0 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest-mypy ; extra == 'type' - - mypy>=1.12,<1.14 ; extra == 'type' - - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' - - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' - requires_python: '>=3.9' -- kind: conda + - numpy>=1.14,<3 + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - numpydoc==1.1.* ; extra == 'docs' + - matplotlib ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-book-theme ; extra == 'docs' + - sphinx-remove-toctrees ; extra == 'docs' + requires_python: '>=3.7' +- kind: pypi name: six - version: 1.16.0 - build: pyh6c4a22f_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - sha256: a85c38227b446f42c5b90d9b642f2c0567880c15d72492d8da074a59c8f91dd6 - md5: e5f25f8dbc060e9a8d912e432202afc2 + version: 1.17.0 + url: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- kind: conda + name: snappy + version: 1.2.1 + build: h98b9ce2_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda + sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f + md5: ded86dee325290da2967a3fea3800eb5 depends: - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/six?source=hash-mapping - size: 14259 - timestamp: 1620240338595 + - __osx >=11.0 + - libcxx >=18 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 35857 + timestamp: 1733502172664 - kind: pypi name: sortedcontainers version: 2.4.0 url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- kind: conda + name: sqlite + version: 3.48.0 + build: hd7222ec_1 + build_number: 1 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda + sha256: 6c1609abe16ed39dd099eb7e32e2f3228105ab81bdd8da65700d46ee0984013e + md5: 802cc94c9fa238cb3f802d430a528bd5 + depends: + - __osx >=11.0 + - libsqlite 3.48.0 h3f77e49_1 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - readline >=8.2,<9.0a0 + license: Unlicense + purls: [] + size: 858007 + timestamp: 1737565018178 +- kind: pypi + name: sqlparse + version: 0.5.3 + url: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl + sha256: cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca + requires_dist: + - build ; extra == 'dev' + - hatch ; extra == 'dev' + - sphinx ; extra == 'doc' + requires_python: '>=3.8' +- kind: conda + name: svt-av1 + version: 2.3.0 + build: hf24288c_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda + sha256: ab876ed8bdd20e22a868dcb8d03e9ce9bbba7762d7e652d49bfff6af768a5b8f + md5: 114c33e9eec335a379c9ee6c498bb807 + depends: + - __osx >=11.0 + - libcxx >=17 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 1387330 + timestamp: 1730246134730 - kind: pypi name: tblib version: 3.0.0 @@ -2174,87 +4155,107 @@ packages: url: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl sha256: 292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236 requires_python: '>=3.8' -- kind: conda +- kind: pypi name: tornado version: 6.4.2 - build: py312hea69d52_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tornado-6.4.2-py312hea69d52_0.conda - sha256: 964a2705a36c50040c967b18b45b9cc8de3c2aff4af546979a574e0b38e58e39 - md5: fb0605888a475d6a380ae1d1a819d976 - depends: - - __osx >=11.0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: Apache-2.0 - license_family: Apache - purls: - - pkg:pypi/tornado?source=hash-mapping - size: 842549 - timestamp: 1732616081362 -- kind: conda - name: typing_extensions + url: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl + sha256: e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1 + requires_python: '>=3.8' +- kind: pypi + name: typing-extensions version: 4.12.2 - build: pyha770c72_0 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda - sha256: 0fce54f8ec3e59f5ef3bb7641863be4e1bf1279623e5af3d3fa726e8f7628ddb - md5: ebe6952715e1d5eb567eeebf25250fa7 - depends: - - python >=3.8 - license: PSF-2.0 - license_family: PSF - purls: - - pkg:pypi/typing-extensions?source=hash-mapping - size: 39888 - timestamp: 1717802653893 + url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl + sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d + requires_python: '>=3.8' - kind: pypi name: tzdata - version: '2024.2' - url: https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl - sha256: a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd + version: '2025.1' + url: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl + sha256: 7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639 requires_python: '>=2' - kind: conda name: tzdata - version: 2024b - build: hc8b5060_0 + version: 2025a + build: h78e105d_0 subdir: noarch noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024b-hc8b5060_0.conda - sha256: 4fde5c3008bf5d2db82f2b50204464314cc3c91c1d953652f7bd01d9e52aefdf - md5: 8ac3367aafb1cc0a068483c580af8015 + url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda + sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de + md5: dbcace4706afdfb7eb891f7b37d07c04 license: LicenseRef-Public-Domain purls: [] - size: 122354 - timestamp: 1728047496079 + size: 122921 + timestamp: 1737119101255 +- kind: pypi + name: ujson + version: 5.10.0 + url: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e + requires_python: '>=3.8' +- kind: conda + name: uriparser + version: 0.9.8 + build: h00cdb27_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda + sha256: fa0bcbfb20a508ca9bf482236fe799581cbd0eab016e47a865e9fa44dbe3c512 + md5: e8ff9e11babbc8cd77af5a4258dc2802 + depends: + - __osx >=11.0 + - libcxx >=16 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 40625 + timestamp: 1715010029254 - kind: pypi name: uritemplate - version: 3.0.1 - url: https://files.pythonhosted.org/packages/bf/0c/60d82c077998feb631608dca3cc1fe19ac074e772bf0c24cf409b977b815/uritemplate-3.0.1-py2.py3-none-any.whl - sha256: 07620c3f3f8eed1f12600845892b0e036a2420acf513c53f7de0abd911a5894f - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' + version: 4.1.1 + url: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl + sha256: 830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e + requires_python: '>=3.6' - kind: pypi name: urllib3 - version: 2.2.3 - url: https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl - sha256: ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac + version: 2.3.0 + url: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl + sha256: 1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df requires_dist: - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - h2>=4,<5 ; extra == 'h2' - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.9' +- kind: pypi + name: wrapt + version: 1.17.2 + url: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl + sha256: 8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 requires_python: '>=3.8' +- kind: conda + name: x265 + version: '3.5' + build: hbc6ce65_3 + build_number: 3 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 + sha256: 2fed6987dba7dee07bd9adc1a6f8e6c699efb851431bcb6ebad7de196e87841d + md5: b1f7f2780feffe310b068c021e8ff9b2 + depends: + - libcxx >=12.0.1 + license: GPL-2.0-or-later + license_family: GPL + purls: [] + size: 1832744 + timestamp: 1646609481185 - kind: pypi name: xarray - version: 2024.10.0 - url: https://files.pythonhosted.org/packages/a9/b7/9830def68e5575a24ca6d6f46b285d35ed27860beaa4f72848cd82870253/xarray-2024.10.0-py3-none-any.whl - sha256: ae1d38cb44a0324dfb61e492394158ae22389bf7de9f3c174309c17376df63a0 + version: 2025.1.2 + url: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl + sha256: a7ad6a36c6e0becd67f8aff6a7808d20e4bdcd344debb5205f0a34b1a4a7f8d6 requires_dist: - numpy>=1.24 - - packaging>=23.1 + - packaging>=23.2 - pandas>=2.1 - scipy ; extra == 'accel' - bottleneck ; extra == 'accel' @@ -2264,6 +4265,7 @@ packages: - opt-einsum ; extra == 'accel' - xarray[accel,etc,io,parallel,viz] ; extra == 'complete' - hypothesis ; extra == 'dev' + - jinja2 ; extra == 'dev' - mypy ; extra == 'dev' - pre-commit ; extra == 'dev' - pytest ; extra == 'dev' @@ -2271,19 +4273,19 @@ packages: - pytest-env ; extra == 'dev' - pytest-xdist ; extra == 'dev' - pytest-timeout ; extra == 'dev' - - ruff ; extra == 'dev' + - ruff>=0.8.0 ; extra == 'dev' - sphinx ; extra == 'dev' - sphinx-autosummary-accessors ; extra == 'dev' - xarray[complete] ; extra == 'dev' - - sparse ; extra == 'etc' - netcdf4 ; extra == 'io' - h5netcdf ; extra == 'io' - scipy ; extra == 'io' + - pydap ; python_full_version < '3.10' and extra == 'io' - zarr ; extra == 'io' - fsspec ; extra == 'io' - cftime ; extra == 'io' - pooch ; extra == 'io' - - pydap ; python_full_version < '3.10' and extra == 'io' + - sparse ; extra == 'etc' - dask[complete] ; extra == 'parallel' - cartopy ; extra == 'viz' - matplotlib ; extra == 'viz' @@ -2292,21 +4294,32 @@ packages: requires_python: '>=3.10' - kind: pypi name: xarray-beam - version: 0.0.1 - url: https://files.pythonhosted.org/packages/72/f4/797f3e15cd1136d3f530baec0e06a0c700339b55b96e9420b28324c60c73/xarray_beam-0.0.1-py3-none-any.whl - sha256: 20f089420b71105f77be9b312514092eab68941818548b6c9bd1c49d447c20ff + version: 0.6.3 + url: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl + sha256: 3236e90bf6fd5a2b9efdd6e61a40df1d16dff5536c2cc2b1117c179f4215e842 requires_dist: - - apache-beam + - apache-beam>=2.31.0 - dask - - rechunker + - immutabledict + - rechunker>=0.5.1 - zarr - xarray + - myst-nb ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - scipy ; extra == 'docs' + - absl-py ; extra == 'tests' + - pandas ; extra == 'tests' + - pytest ; extra == 'tests' + - scipy ; extra == 'tests' + - h5netcdf ; extra == 'tests' requires_python: '>=3' - kind: pypi name: xee - version: 0.0.21.dev7+g4ba0259.d20250203 + version: 0.0.21.dev8+gc107bca.d20250203 path: . - sha256: 8199673c3344c561e099788ada64f45ca20038c3756f42b330664b30d60e551a + sha256: d78c5962a962436b95decd8fc2a1394031fc684e1b6605d6ffcc17028e2311a1 requires_dist: - xarray[parallel] - earthengine-api>=0.1.374 @@ -2322,25 +4335,37 @@ packages: - gcsfs<=2024.2.0 ; extra == 'dataflow' - xarray-beam ; extra == 'dataflow' - xee[dataflow] ; extra == 'examples' - requires_python: '>=3.8' + requires_python: '>=3.8,<3.13' editable: true - kind: conda - name: xz - version: 5.2.6 - build: h57fd34a_0 + name: xerces-c + version: 3.2.5 + build: h92fc2f4_2 + build_number: 2 subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xz-5.2.6-h57fd34a_0.tar.bz2 - sha256: 59d78af0c3e071021cfe82dc40134c19dab8cdf804324b62940f5c8cd71803ec - md5: 39c6b54e94014701dd157f4f576ed211 - license: LGPL-2.1 and GPL-2.0 + url: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda + sha256: 863a7c2a991a4399d362d42c285ebc20748a4ea417647ebd3a171e2220c7457d + md5: 50b7325437ef0901fe25dc5c9e743b88 + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libcxx >=17 + license: Apache-2.0 + license_family: Apache purls: [] - size: 235693 - timestamp: 1660346961024 + size: 1277884 + timestamp: 1727733870250 +- kind: pypi + name: xyzservices + version: 2025.1.0 + url: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl + sha256: fa599956c5ab32dad1689960b3bb08fdcdbe0252cc82d84fc60ae415dc648907 + requires_python: '>=3.8' - kind: pypi name: yarl - version: 1.17.1 - url: https://files.pythonhosted.org/packages/e3/a2/b65447626227ebe36f18f63ac551790068bf42c69bb22dfa3ae986170728/yarl-1.17.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139 + version: 1.18.3 + url: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl + sha256: 25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640 requires_dist: - idna>=2.0 - multidict>=4.0 @@ -2348,26 +4373,46 @@ packages: requires_python: '>=3.9' - kind: pypi name: zarr - version: 2.18.4 - url: https://files.pythonhosted.org/packages/b4/d1/c84022a44afc7b7ccc442fba3daee56bdd03593d91ee4bc245a08e4fcc55/zarr-2.18.4-py3-none-any.whl - sha256: 2795e20aff91093ce7e4da36ab1a138aededbd8ab66bf01fd01512e61d31e5d1 + version: 3.0.2 + url: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl + sha256: cd57949934a339cddc4853c0e819fd7f8e0370022e8eeddec2e56a6b13dc5021 requires_dist: - - asciitree - - numpy>=1.24 - - fasteners ; sys_platform != 'emscripten' - - numcodecs>=0.10.0,!=0.14.0,!=0.14.1 - - notebook ; extra == 'jupyter' - - ipytree>=0.2.2 ; extra == 'jupyter' - - ipywidgets>=8.0.0 ; extra == 'jupyter' - - sphinx ; extra == 'docs' - - sphinx-automodapi ; extra == 'docs' + - donfig>=0.8 + - numcodecs[crc32c]>=0.14 + - numpy>=1.25 + - packaging>=22.0 + - typing-extensions>=4.9 + - numcodecs[msgpack] ; extra == 'docs' + - numpydoc ; extra == 'docs' + - pydata-sphinx-theme ; extra == 'docs' + - rich ; extra == 'docs' + - s3fs ; extra == 'docs' + - sphinx-autoapi==3.4.0 ; extra == 'docs' + - sphinx-autobuild>=2021.3.14 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' - sphinx-design ; extra == 'docs' - sphinx-issues ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - numpydoc ; extra == 'docs' - - numcodecs[msgpack]!=0.14.0,!=0.14.1 ; extra == 'docs' - - pytest-doctestplus ; extra == 'docs' + - sphinx-reredirects ; extra == 'docs' + - sphinx==8.1.3 ; extra == 'docs' + - towncrier ; extra == 'docs' + - cupy-cuda12x ; extra == 'gpu' + - rich ; extra == 'optional' + - universal-pathlib ; extra == 'optional' + - fsspec>=2023.10.0 ; extra == 'remote' + - botocore ; extra == 'test' + - coverage ; extra == 'test' + - fsspec>=2023.10.0 ; extra == 'test' + - hypothesis ; extra == 'test' + - moto[s3,server] ; extra == 'test' + - mypy ; extra == 'test' + - pytest ; extra == 'test' + - pytest-accept ; extra == 'test' + - pytest-asyncio ; extra == 'test' + - pytest-cov ; extra == 'test' + - requests ; extra == 'test' + - rich ; extra == 'test' + - s3fs ; extra == 'test' + - universal-pathlib ; extra == 'test' requires_python: '>=3.11' - kind: pypi name: zict @@ -2375,3 +4420,71 @@ packages: url: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl sha256: 5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae requires_python: '>=3.8' +- kind: pypi + name: zipp + version: 3.21.0 + url: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl + sha256: ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 + requires_dist: + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-itertools ; extra == 'test' + - jaraco-functools ; extra == 'test' + - more-itertools ; extra == 'test' + - big-o ; extra == 'test' + - pytest-ignore-flaky ; extra == 'test' + - jaraco-test ; extra == 'test' + - importlib-resources ; python_full_version < '3.9' and extra == 'test' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.9' +- kind: conda + name: zlib + version: 1.3.1 + build: h8359307_2 + build_number: 2 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda + sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 + md5: e3170d898ca6cb48f1bb567afb92f775 + depends: + - __osx >=11.0 + - libzlib 1.3.1 h8359307_2 + license: Zlib + license_family: Other + purls: [] + size: 77606 + timestamp: 1727963209370 +- kind: pypi + name: zstandard + version: 0.23.0 + url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl + sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 + requires_dist: + - cffi>=1.11 ; platform_python_implementation == 'PyPy' + - cffi>=1.11 ; extra == 'cffi' + requires_python: '>=3.8' +- kind: conda + name: zstd + version: 1.5.6 + build: hb46c0d2_0 + subdir: osx-arm64 + url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda + sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 + md5: d96942c06c3e84bfcc5efb038724a7fd + depends: + - __osx >=11.0 + - libzlib >=1.2.13,<2.0.0a0 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 405089 + timestamp: 1714723101397 diff --git a/pyproject.toml b/pyproject.toml index 3da1375..dacf39d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "xee" dynamic = ["version"] description = "A Google Earth Engine extension for Xarray." readme = "README.md" -requires-python = ">=3.8" +requires-python = ">=3.8,<3.13" license = {text = "Apache-2.0"} authors = [ {name = "Google LLC", email = "noreply@google.com"}, @@ -85,3 +85,7 @@ examples = { features = ["examples", "dataflow"], solve-group = "default" } tests = { features = ["tests"], solve-group = "default" } [tool.pixi.tasks] + +[tool.pixi.dependencies] +proj = ">=9.5.1,<10" +gdal = ">=3.10.1,<4" From fd2b255b2d78cced2415ad939192954113e94c5e Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Wed, 26 Feb 2025 10:18:28 -0800 Subject: [PATCH 09/56] Use grid params (crs, crs_transform, shape_2d) --- .vscode/settings.json | 3 + pixi.lock | 200 ++++++++++++++++++------ pyproject.toml | 2 + xee/ext.py | 277 +++++++--------------------------- xee/ext_integration_test.py | 293 +++++++++++++++++------------------- xee/ext_test.py | 72 +++++++++ xee/helpers.py | 156 +++++++++++++++++++ 7 files changed, 583 insertions(+), 420 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 xee/helpers.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ff30c44 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "editor.tabSize": 2 +} \ No newline at end of file diff --git a/pixi.lock b/pixi.lock index 159c81e..443ab96 100644 --- a/pixi.lock +++ b/pixi.lock @@ -12,13 +12,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 @@ -61,8 +64,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda @@ -71,6 +77,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 @@ -169,11 +176,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl @@ -233,13 +238,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 @@ -282,8 +290,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda @@ -292,6 +303,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 @@ -327,7 +339,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl @@ -369,13 +380,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 @@ -418,8 +432,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda @@ -428,6 +445,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 @@ -526,11 +544,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl @@ -590,13 +606,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 @@ -639,8 +658,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda @@ -649,6 +671,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 @@ -684,20 +707,17 @@ environments: - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl @@ -708,7 +728,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/1f/12/2f271b3601ae25731879f160d6b3941d80eb6b4f3e24be90289e33fb1dc4/pyink-24.10.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl @@ -716,6 +735,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fb/b0/2c74f302512fbd24d68fbba0ec6b650b33ef83e398daeb0a2bb1a4cd641c/rioxarray-0.18.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl @@ -1134,6 +1154,24 @@ packages: url: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl sha256: 61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f requires_python: '>=3.6' +- kind: conda + name: colorama + version: 0.4.6 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda + sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 + md5: 962b9857ee8e7018c22f2776ffa0b2d7 + depends: + - python >=3.9 + license: BSD-3-Clause + license_family: BSD + purls: + - pkg:pypi/colorama?source=hash-mapping + size: 27011 + timestamp: 1733218222191 - kind: pypi name: contourpy version: 1.3.1 @@ -1346,6 +1384,23 @@ packages: - geopandas ; extra == 'tests' - numpy ; extra == 'tests' requires_python: '>=3.9' +- kind: conda + name: exceptiongroup + version: 1.2.2 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda + sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 + md5: a16662747cdeb9abbac74d0057cc976e + depends: + - python >=3.9 + license: MIT and PSF-2.0 + purls: + - pkg:pypi/exceptiongroup?source=hash-mapping + size: 20486 + timestamp: 1733208916977 - kind: pypi name: fastavro version: 1.10.0 @@ -2231,12 +2286,24 @@ packages: - importlib-resources>=1.3 ; python_full_version < '3.9' and extra == 'test' - pytest-mypy ; extra == 'type' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: iniconfig version: 2.0.0 - url: https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl - sha256: b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 - requires_python: '>=3.7' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda + sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca + md5: 6837f3eff7dcea42ecd714ce1ac2b108 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/iniconfig?source=hash-mapping + size: 11474 + timestamp: 1733223232820 - kind: pypi name: jaraco-classes version: 3.4.0 @@ -3381,12 +3448,24 @@ packages: requires_dist: - typing ; python_full_version < '3.5' requires_python: '>=3.6' -- kind: pypi +- kind: conda name: packaging version: '24.2' - url: https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl - sha256: 09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759 - requires_python: '>=3.8' + build: pyhd8ed1ab_2 + build_number: 2 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda + sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 + md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa + depends: + - python >=3.8 + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=hash-mapping + size: 60164 + timestamp: 1733203368787 - kind: pypi name: pandas version: 2.2.3 @@ -3561,17 +3640,24 @@ packages: - pytest>=8.3.2 ; extra == 'test' - mypy>=1.11.2 ; extra == 'type' requires_python: '>=3.8' -- kind: pypi +- kind: conda name: pluggy version: 1.5.0 - url: https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl - sha256: 44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669 - requires_dist: - - pre-commit ; extra == 'dev' - - tox ; extra == 'dev' - - pytest ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - requires_python: '>=3.8' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda + sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 + md5: e9dcbce5f45f9ee500e728ae58b605b6 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pluggy?source=hash-mapping + size: 23595 + timestamp: 1733222855563 - kind: conda name: proj version: 9.5.1 @@ -3765,27 +3851,32 @@ packages: requires_dist: - certifi requires_python: '>=3.10' -- kind: pypi +- kind: conda name: pytest version: 8.3.4 - url: https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl - sha256: 50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6 - requires_dist: - - colorama ; sys_platform == 'win32' - - exceptiongroup>=1.0.0rc8 ; python_full_version < '3.11' + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda + sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 + md5: 799ed216dc6af62520f32aa39bc1c2bb + depends: + - colorama + - exceptiongroup >=1.0.0rc8 - iniconfig - packaging - - pluggy>=1.5,<2 - - tomli>=1 ; python_full_version < '3.11' - - argcomplete ; extra == 'dev' - - attrs>=19.2 ; extra == 'dev' - - hypothesis>=3.56 ; extra == 'dev' - - mock ; extra == 'dev' - - pygments>=2.7.2 ; extra == 'dev' - - requests ; extra == 'dev' - - setuptools ; extra == 'dev' - - xmlschema ; extra == 'dev' - requires_python: '>=3.8' + - pluggy <2,>=1.5 + - python >=3.9 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + purls: + - pkg:pypi/pytest?source=hash-mapping + size: 259195 + timestamp: 1733217599806 - kind: conda name: python version: 3.12.8 @@ -4149,6 +4240,24 @@ packages: purls: [] size: 3145523 timestamp: 1699202432999 +- kind: conda + name: tomli + version: 2.2.1 + build: pyhd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda + sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e + md5: ac944244f1fed2eb49bae07193ae8215 + depends: + - python >=3.9 + license: MIT + license_family: MIT + purls: + - pkg:pypi/tomli?source=hash-mapping + size: 19167 + timestamp: 1733256819729 - kind: pypi name: toolz version: 1.0.0 @@ -4317,9 +4426,9 @@ packages: requires_python: '>=3' - kind: pypi name: xee - version: 0.0.21.dev8+gc107bca.d20250203 + version: 0.0.21.dev9+g0dbd250.d20250217 path: . - sha256: d78c5962a962436b95decd8fc2a1394031fc684e1b6605d6ffcc17028e2311a1 + sha256: 387d6352b9b392c59aeb19f771a8d8f46661876f39be368b955f04724f2beb0b requires_dist: - xarray[parallel] - earthengine-api>=0.1.374 @@ -4330,6 +4439,7 @@ packages: - pyink ; extra == 'tests' - rasterio ; extra == 'tests' - rioxarray ; extra == 'tests' + - shapely ; extra == 'tests' - absl-py ; extra == 'dataflow' - apache-beam[gcp] ; extra == 'dataflow' - gcsfs<=2024.2.0 ; extra == 'dataflow' diff --git a/pyproject.toml b/pyproject.toml index dacf39d..9427152 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,6 +40,7 @@ tests = [ "pyink", "rasterio", "rioxarray", + "shapely", ] dataflow = [ "absl-py", @@ -89,3 +90,4 @@ tests = { features = ["tests"], solve-group = "default" } [tool.pixi.dependencies] proj = ">=9.5.1,<10" gdal = ">=3.10.1,<4" +pytest = ">=8.3.4,<9" diff --git a/xee/ext.py b/xee/ext.py index c6890ad..cacebe1 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -34,8 +34,6 @@ import affine import numpy as np import pandas as pd -import pyproj -from pyproj.crs import CRS import xarray from xarray import backends from xarray.backends import common @@ -61,6 +59,10 @@ # data as a single chunk. Chunks = Union[int, Dict[Any, Any], Literal['auto'], None] +# Types for type hints +CrsType = str +TransformType = Union[affine.Affine, Tuple[float, float, float, float, float, float]] +ShapeType = Tuple[int, int] _BUILTIN_DTYPES = { 'int': np.int32, @@ -78,6 +80,14 @@ # value was chosen by trial and error. _TO_LIST_WARNING_LIMIT = 10000 +EE_AFFINE_TRANSFORM_FIELDS = [ + 'scaleX', + 'shearX', + 'translateX', + 'shearY', + 'scaleY', + 'translateY' +] # Used in ext_test.py. def _check_request_limit(chunks: Dict[str, int], dtype_size: int, limit: int): @@ -122,13 +132,6 @@ class EarthEngineStore(common.AbstractDataStore): 'm': 10_000, } - DIMENSION_NAMES: Dict[str, Tuple[str, str]] = { - 'degree': ('lon', 'lat'), - 'metre': ('X', 'Y'), - 'meter': ('X', 'Y'), - 'm': ('X', 'Y'), - } - DEFAULT_MASK_VALUE = np.iinfo(np.int32).max ATTRS_VALID_TYPES = ( @@ -146,13 +149,12 @@ class EarthEngineStore(common.AbstractDataStore): def open( cls, image_collection: ee.ImageCollection, + crs: CrsType, + crs_transform: TransformType, + shape_2d: ShapeType, mode: Literal['r'] = 'r', chunk_store: Chunks = None, n_images: int = -1, - crs: Optional[str] = None, - scale: Optional[float] = None, - projection: Optional[ee.Projection] = None, - geometry: ee.Geometry | Tuple[float, float, float, float] | None = None, primary_dim_name: Optional[str] = None, primary_dim_property: Optional[str] = None, mask_value: Optional[float] = None, @@ -170,12 +172,11 @@ def open( return cls( image_collection, + crs=crs, + crs_transform=crs_transform, + shape_2d=shape_2d, chunks=chunk_store, n_images=n_images, - crs=crs, - scale=scale, - projection=projection, - geometry=geometry, primary_dim_name=primary_dim_name, primary_dim_property=primary_dim_property, mask_value=mask_value, @@ -190,12 +191,11 @@ def open( def __init__( self, image_collection: ee.ImageCollection, + crs: CrsType, + crs_transform: TransformType, + shape_2d: ShapeType, chunks: Chunks = None, n_images: int = -1, - crs: Optional[str] = None, - scale: Union[float, int, None] = None, - projection: Optional[ee.Projection] = None, - geometry: ee.Geometry | Tuple[float, float, float, float] | None = None, primary_dim_name: Optional[str] = None, primary_dim_property: Optional[str] = None, mask_value: Optional[float] = None, @@ -221,8 +221,10 @@ def __init__( if n_images != -1: self.image_collection = image_collection.limit(n_images) - self.projection = projection - self.geometry = geometry + self.crs = crs + self.crs_transform = crs_transform + self.shape_2d = shape_2d + self.primary_dim_name = primary_dim_name or 'time' self.primary_dim_property = primary_dim_property or 'system:time_start' @@ -231,36 +233,11 @@ def __init__( # Metadata should apply to all imgs. self._img_info: types.ImageInfo = self.get_info['first'] - proj = self.get_info.get('projection', {}) - - self.crs_arg = crs or proj.get('crs', proj.get('wkt', 'EPSG:4326')) - self.crs = CRS(self.crs_arg) - - is_crs_geographic = self.crs.is_geographic - # Gets the unit i.e. meter, degree etc. - self.scale_units = 'degree' if is_crs_geographic else 'meter' - # Get the dimensions name based on the CRS (scale units). - self.dimension_names = self.DIMENSION_NAMES.get( - self.scale_units, ('X', 'Y') - ) - x_dim_name, y_dim_name = self.dimension_names - self._props.update( - coordinates=f'{self.primary_dim_name} {x_dim_name} {y_dim_name}', - crs=self.crs_arg, - ) + self.dimension_names = ('x', 'y') self._props = self._make_attrs_valid(self._props) - # Scale in the projection's units. Typically, either meters or degrees. - # If we use the default CRS i.e. EPSG:3857, the units is in meters. - default_scale = self.SCALE_UNITS.get(self.scale_units, 1) - if scale is None: - scale = default_scale - default_transform = affine.Affine.scale(scale, scale) - - transform = affine.Affine(*proj.get('transform', default_transform)[:6]) - self.scale_x, self.scale_y = transform.a, transform.e - self.scale = np.sqrt(np.abs(transform.determinant)) - - self.bounds = self._determine_bounds(geometry=geometry) + self.scale_x, self.scale_y = crs_transform[0], crs_transform[4] + affine_transform = affine.Affine(*crs_transform) + self.scale = np.sqrt(np.abs(affine_transform.determinant)) max_dtype = self._max_itemsize() @@ -288,20 +265,6 @@ def get_info(self) -> Dict[str, Any]: ('first', self.image_collection.first()), ] - if isinstance(self.projection, ee.Projection): - rpcs.append(('projection', self.projection)) - - if isinstance(self.geometry, ee.Geometry): - rpcs.append(('bounds', self.geometry.bounds(1, proj=self.projection))) - else: - rpcs.append( - ( - 'bounds', - self.image_collection.first() - .geometry() - .bounds(1, proj=self.projection), - ) - ) # TODO(#29, #30): This RPC call takes the longest time to compute. This # requires a full scan of the images in the collection, which happens on the @@ -416,11 +379,6 @@ def _assign_preferred_chunks(self) -> Chunks: chunks[y_dim_name] = self.chunks['height'] return chunks - def transform(self, xs: float, ys: float) -> Tuple[float, float]: - transformer = pyproj.Transformer.from_crs( - self.crs.geodetic_crs, self.crs, always_xy=True - ) - return transformer.transform(xs, ys) def project(self, bbox: types.BBox) -> types.Grid: """Translate a bounding box (pixel space) to a grid (projection space). @@ -436,41 +394,24 @@ def project(self, bbox: types.BBox) -> types.Grid: appropriate region of data to return according to the Array's configured projection and scale. """ - x_min, y_min, x_max, y_max = self.bounds x_start, y_start, x_end, y_end = bbox - width = x_end - x_start - height = y_end - y_start - - # Find the actual coordinates of the first or last point of the bounding box - # (bbox) based on the positive and negative scale in the actual Earth Engine - # (EE) image. Since EE bounding boxes can be flipped (negative scale), we - # cannot determine the origin (transform translation) simply by identifying - # the min and max extents. Instead, we calculate the translation by - # considering the direction of scaling (positive or negative) along both - # the x and y axes. - translate_x = self.scale_x * x_start + ( - x_min if self.scale_x > 0 else x_max - ) - translate_y = self.scale_y * y_start + ( - y_min if self.scale_y > 0 else y_max - ) + + # Translate the crs_transform to the origin of the bounding box + transform_image = affine.Affine(*self.crs_transform) + transform_grid_cell = affine.Affine.translation( + xoff=x_start * transform_image.a, + yoff=y_start * transform_image.e + ) * transform_image return { # The size of the bounding box. The affine transform and project will be # applied, so we can think in terms of pixels. 'dimensions': { - 'width': width, - 'height': height, - }, - 'affineTransform': { - 'translateX': translate_x, - 'translateY': translate_y, - # Define the scale for each pixel (e.g. the number of meters between - # each value). - 'scaleX': self.scale_x, - 'scaleY': self.scale_y, + 'width': x_end - x_start, + 'height': y_end - y_start, }, - 'crsCode': self.crs_arg, + 'affineTransform': dict(zip(EE_AFFINE_TRANSFORM_FIELDS, transform_grid_cell)), + 'crsCode': self.crs, } def image_to_array( @@ -576,10 +517,8 @@ def open_store_variable(self, name: str) -> xarray.Variable: encoding = { 'source': attrs['id'], 'scale_factor': arr.scale, - 'scale_units': self.scale_units, 'dtype': data.dtype, 'preferred_chunks': self.preferred_chunks, - 'bounds': arr.bounds, } return xarray.Variable(dimensions, data, attrs, encoding) @@ -606,74 +545,6 @@ def _get_primary_coordinates(self) -> List[Any]: ] return primary_coords - def _get_tile_from_ee( - self, tile_and_band: Tuple[Tuple[int, int, int], str] - ) -> Tuple[int, np.ndarray[Any, np.dtype]]: - """Get a numpy array from EE for a specific bounding box (a 'tile').""" - (tile_index, tile_coords_start, tile_coords_end), band_id = tile_and_band - bbox = self.project( - (tile_coords_start, 0, tile_coords_end, 1) - if band_id == 'x' - else (0, tile_coords_start, 1, tile_coords_end) - ) - target_image = ee.Image.pixelCoordinates(ee.Projection(self.crs_arg)) - return tile_index, self.image_to_array( - target_image, grid=bbox, dtype=np.float64, bandIds=[band_id] - ) - - def _process_coordinate_data( - self, - tile_count: int, - tile_size: int, - end_point: int, - coordinate_type: str, - ) -> np.ndarray: - """Process coordinate data using multithreading for longitude or latitude.""" - data = [ - (i, tile_size * i, min(tile_size * (i + 1), end_point)) - for i in range(tile_count) - ] - tiles = [None] * tile_count - with concurrent.futures.ThreadPoolExecutor(**self.executor_kwargs) as pool: - for i, arr in pool.map( - self._get_tile_from_ee, - list(zip(data, itertools.cycle([coordinate_type]))), - ): - tiles[i] = arr.flatten() - return np.concatenate(tiles) - - def _determine_bounds( - self, - geometry: ee.Geometry | Tuple[float, float, float, float] | None = None, - ) -> Tuple[float, float, float, float]: - if geometry is None: - try: - x_min_0, y_min_0, x_max_0, y_max_0 = self.crs.area_of_use.bounds - except AttributeError: - # `area_of_use` is probably `None`. Parse the geometry from the first - # image instead (calculated in self.get_info()) - x_min_0, y_min_0, x_max_0, y_max_0 = _ee_bounds_to_bounds( - self.get_info['bounds'] - ) - elif isinstance(geometry, ee.Geometry): - x_min_0, y_min_0, x_max_0, y_max_0 = _ee_bounds_to_bounds( - self.get_info['bounds'] - ) - elif isinstance(geometry, Sequence): - if len(geometry) != 4: - raise ValueError( - 'geometry must be a tuple or list of length 4, or a ee.Geometry, ' - f'but got {geometry!r}' - ) - x_min_0, y_min_0, x_max_0, y_max_0 = geometry - else: - raise ValueError( - 'geometry must be a tuple or list of length 4, a ee.Geometry, or' - f' None but got {type(geometry)}' - ) - x_min, y_min = self.transform(x_min_0, y_min_0) - x_max, y_max = self.transform(x_max_0, y_max_0) - return x_min, y_min, x_max, y_max def get_variables(self) -> utils.Frozen[str, xarray.Variable]: vars_ = [(name, self.open_store_variable(name)) for name in self._bands()] @@ -690,26 +561,10 @@ def get_variables(self) -> utils.Frozen[str, xarray.Variable]: f'ImageCollection due to: {e}.' ) - if isinstance(self.chunks, dict): - # when the value of self.chunks = 'auto' or user-defined. - width_chunk = self.chunks['width'] - height_chunk = self.chunks['height'] - else: - # when the value of self.chunks = -1. - width_chunk = v0.shape[1] - height_chunk = v0.shape[2] - - lon_total_tile = math.ceil(v0.shape[1] / width_chunk) - lon = self._process_coordinate_data( - lon_total_tile, width_chunk, v0.shape[1], 'x' - ) - lat_total_tile = math.ceil(v0.shape[2] / height_chunk) - lat = self._process_coordinate_data( - lat_total_tile, height_chunk, v0.shape[2], 'y' - ) - - width_coord = np.squeeze(lon) - height_coord = np.squeeze(lat) + x_scale, _, x_translate, _, y_scale, y_translate = self.crs_transform + width, height = self.shape_2d + width_coord = np.array([x_translate + x_scale / 2 + ix * x_scale for ix in range(width)]) + height_coord = np.array([y_translate + y_scale / 2 + iy * y_scale for iy in range(height)]) # Make sure there's at least a single point in each dimension. if width_coord.ndim == 0: @@ -782,19 +637,13 @@ def __init__(self, variable_name: str, ee_store: EarthEngineStore): self.store = ee_store self.scale = ee_store.scale - self.bounds = ee_store.bounds # It looks like different bands have different dimensions & transforms! # Can we get this into consistent dimensions? self._info = ee_store._band_attrs(variable_name) self.dtype = np.dtype(np.float32) - x_min, y_min, x_max, y_max = self.bounds - # Make sure the size is at least 1x1. - x_size = max(1, int(np.round((x_max - x_min) / np.abs(self.store.scale_x)))) - y_size = max(1, int(np.round((y_max - y_min) / np.abs(self.store.scale_y)))) - - self.shape = (ee_store.n_images, x_size, y_size) + self.shape = (ee_store.n_images, ) + ee_store.shape_2d self._apparent_chunks = {k: 1 for k in self.store.PREFERRED_CHUNKS.keys()} if isinstance(self.store.chunks, dict): self._apparent_chunks = self.store.chunks.copy() @@ -1014,6 +863,9 @@ def guess_can_open( def open_dataset( self, filename_or_obj: Union[str, os.PathLike[Any], ee.ImageCollection], + crs: CrsType, + crs_transform: TransformType, + shape_2d: ShapeType, drop_variables: Optional[Tuple[str, ...]] = None, io_chunks: Optional[Any] = None, n_images: int = -1, @@ -1023,10 +875,6 @@ def open_dataset( use_cftime: Optional[bool] = None, concat_characters: bool = True, decode_coords: bool = True, - crs: Optional[str] = None, - scale: Union[float, int, None] = None, - projection: Optional[ee.Projection] = None, - geometry: ee.Geometry | Tuple[float, float, float, float] | None = None, primary_dim_name: Optional[str] = None, primary_dim_property: Optional[str] = None, ee_mask_value: Optional[float] = None, @@ -1042,6 +890,12 @@ def open_dataset( Args: filename_or_obj: An asset ID for an ImageCollection, or an ee.ImageCollection object. + crs: The coordinate reference system (a CRS code or WKT + string). This defines the frame of reference to coalesce all variables + upon opening. + crs_transform: Transform matrix describing the grid origin and scale + relative to the CRS. + shape_2d: Dimensions of the pixel grid in the form (width, height). drop_variables (optional): Variables or bands to drop before opening. io_chunks (optional): Specifies the chunking strategy for loading data from EE. By default, this automatically calculates optional chunks based @@ -1076,22 +930,6 @@ def open_dataset( or individual variables as coordinate variables. - "all": Set variables referred to in ``'grid_mapping'``, ``'bounds'`` and other attributes as coordinate variables. - crs (optional): The coordinate reference system (a CRS code or WKT - string). This defines the frame of reference to coalesce all variables - upon opening. By default, data is opened with `EPSG:4326'. - scale (optional): The scale in the `crs` or `projection`'s units of - measure -- either meters or degrees. This defines the scale that all - data is represented in upon opening. By default, the scale is 1° when - the CRS is in degrees or 10,000 when in meters. - projection (optional): Specify an `ee.Projection` object to define the - `scale` and `crs` (or other coordinate reference system) with which to - coalesce all variables upon opening. By default, the scale and reference - system is set by the the `crs` and `scale` arguments. - geometry (optional): Specify an `ee.Geometry` to define the regional - bounds when opening the data or a bbox specifying [x_min, y_min, x_max, - y_max] in EPSG:4326. When not set, the bounds are defined by - the CRS's 'area_of_use` boundaries. If those aren't present, the bounds - are derived from the geometry of the first image of the collection. primary_dim_name (optional): Override the name of the primary dimension of the output Dataset. By default, the name is 'time'. primary_dim_property (optional): Override the `ee.Image` property for @@ -1135,12 +973,11 @@ def open_dataset( store = EarthEngineStore.open( collection, + crs=crs, + crs_transform=crs_transform, + shape_2d=shape_2d, chunk_store=io_chunks, n_images=n_images, - crs=crs, - scale=scale, - projection=projection, - geometry=geometry, primary_dim_name=primary_dim_name, primary_dim_property=primary_dim_property, mask_value=ee_mask_value, diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 128d719..be17359 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -21,9 +21,11 @@ from absl.testing import absltest from google.auth import identity_pool import numpy as np +import shapely import xarray as xr from xarray.core import indexing import xee +from xee import helpers import ee @@ -39,8 +41,12 @@ 'https://www.googleapis.com/auth/cloud-platform', 'https://www.googleapis.com/auth/earthengine', ] -_USE_ADC_CREDENTIALS_KEY = 'USE_ADC_CREDENTIALS' - +# Define grid parameters for tests +_TEST_GRID_PARAMS = { + 'crs': 'EPSG:4326', + 'crs_transform': [1.0, 0, -180.0, 0, -1.0, 90.0], + 'shape_2d': (360, 180) +} def _read_identity_pool_creds() -> identity_pool.Credentials: credentials_path = os.environ[_CREDENTIALS_PATH_KEY] @@ -54,7 +60,8 @@ def init_ee_for_tests(): init_params = { 'opt_url': ee.data.HIGH_VOLUME_API_BASE_URL, } - if not os.environ.get(_USE_ADC_CREDENTIALS_KEY, False): + + if _CREDENTIALS_PATH_KEY in os.environ: credentials = _read_identity_pool_creds() init_params['credentials'] = credentials init_params['project'] = credentials.project_number @@ -72,16 +79,19 @@ def setUp(self): ), n_images=64, getitem_kwargs={'max_retries': 10, 'initial_delay': 1500}, + **_TEST_GRID_PARAMS, ) self.store_with_neg_mask_value = xee.EarthEngineStore( ee.ImageCollection('LANDSAT/LC08/C02/T1').filterDate( '2017-01-01', '2017-01-03' ), + **_TEST_GRID_PARAMS, n_images=64, mask_value=-9999, ) self.lnglat_store = xee.EarthEngineStore( ee.ImageCollection.fromImages([ee.Image.pixelLonLat()]), + **_TEST_GRID_PARAMS, chunks={'index': 256, 'width': 512, 'height': 512}, n_images=64, ) @@ -89,13 +99,15 @@ def setUp(self): ee.ImageCollection('GRIDMET/DROUGHT').filterDate( '2020-03-30', '2020-04-01' ), + **_TEST_GRID_PARAMS, n_images=64, getitem_kwargs={'max_retries': 9}, ) self.all_img_store = xee.EarthEngineStore( ee.ImageCollection('LANDSAT/LC08/C02/T1').filterDate( '2017-01-01', '2017-01-03' - ) + ), + **_TEST_GRID_PARAMS, ) def test_creates_lat_long_array(self): @@ -271,32 +283,6 @@ def __getitem__(self, params): self.assertEqual(getter.count, 3) - def test_geometry_bounds_with_and_without_projection(self): - image = ( - ee.ImageCollection('LANDSAT/LC08/C02/T1') - .filterDate('2017-01-01', '2017-01-03') - .first() - ) - point = ee.Geometry.Point(-40.2414893624401, 105.48790177216375) - distance = 311.5 - scale = 5000 - projection = ee.Projection('EPSG:4326', [1, 0, 0, 0, -1, 0]).atScale(scale) - image = image.reproject(projection) - - geometry = point.buffer(distance, proj=projection).bounds(proj=projection) - - data_store = xee.EarthEngineStore( - ee.ImageCollection(image), - projection=image.projection(), - geometry=geometry, - ) - data_store_bounds = data_store.get_info['bounds'] - - self.assertNotEqual(geometry.bounds().getInfo(), data_store_bounds) - self.assertEqual( - geometry.bounds(1, proj=projection).getInfo(), data_store_bounds - ) - def test_getitem_kwargs(self): arr = xee.EarthEngineBackendArray('B4', self.store) self.assertEqual(arr.store.getitem_kwargs['initial_delay'], 1500) @@ -337,67 +323,62 @@ def test_guess_can_open__image_collection(self): self.assertFalse(self.entry.guess_can_open('WRI/GPPD/power_plants')) def test_open_dataset__sanity_check(self): + """Test opening a simple image collection in geographic coordinates.""" + n_images, width, height = 3, 4, 5 ds = self.entry.open_dataset( - pathlib.Path('LANDSAT') / 'LC08' / 'C02' / 'T1', - drop_variables=tuple(f'B{i}' for i in range(3, 12)), - n_images=3, - projection=ee.Projection('EPSG:4326', [25, 0, 0, 0, -25, 0]), + pathlib.Path('ECMWF') / 'ERA5' / 'MONTHLY', + n_images=n_images, + crs='EPSG:4326', + crs_transform=[12.0, 0, -180.0, 0, -25.0, 90.0], + shape_2d=(width, height), ) - self.assertEqual(dict(ds.sizes), {'time': 3, 'lon': 14, 'lat': 7}) + print(f'{ds=}') + self.assertEqual(dict(ds.sizes), {'time': 3, 'x': width, 'y': height}) self.assertNotEmpty(dict(ds.coords)) self.assertEqual( - list(ds.data_vars.keys()), - [f'B{i}' for i in range(1, 3)] - + ['QA_PIXEL', 'QA_RADSAT', 'SAA', 'SZA', 'VAA', 'VZA'], - ) + list(ds.data_vars.keys()), + [ + 'mean_2m_air_temperature', + 'minimum_2m_air_temperature', + 'maximum_2m_air_temperature', + 'dewpoint_2m_temperature', + 'total_precipitation', + 'surface_pressure', + 'mean_sea_level_pressure', + 'u_component_of_wind_10m', + 'v_component_of_wind_10m' + ] + ) + # Loop through the data variables. for v in ds.values(): + print(f'{v = }') self.assertIsNotNone(v.data) self.assertFalse(v.isnull().all(), 'All values are null!') - self.assertEqual(v.shape, (3, 14, 7)) + self.assertEqual(v.shape, (n_images, width, height)) - def test_open_dataset__sanity_check_with_negative_scale(self): - ds = self.entry.open_dataset( - pathlib.Path('LANDSAT') / 'LC08' / 'C02' / 'T1', - drop_variables=tuple(f'B{i}' for i in range(3, 12)), - scale=-25.0, # in degrees - n_images=3, - ) - self.assertEqual(dict(ds.sizes), {'time': 3, 'lon': 14, 'lat': 7}) - self.assertNotEmpty(dict(ds.coords)) - self.assertEqual( - list(ds.data_vars.keys()), - [f'B{i}' for i in range(1, 3)] - + ['QA_PIXEL', 'QA_RADSAT', 'SAA', 'SZA', 'VAA', 'VZA'], - ) - for v in ds.values(): - self.assertIsNotNone(v.data) - self.assertTrue(v.isnull().all(), 'All values must be null!') - self.assertEqual(v.shape, (3, 14, 7)) def test_open_dataset__n_images(self): ds = self.entry.open_dataset( pathlib.Path('LANDSAT') / 'LC08' / 'C02' / 'T1', drop_variables=tuple(f'B{i}' for i in range(3, 12)), n_images=1, - scale=25.0, # in degrees + **_TEST_GRID_PARAMS ) - self.assertLen(ds.time, 1) def test_open_dataset_image_to_imagecollection(self): """Ensure that opening an ee.Image is the same as opening a single image ee.ImageCollection.""" img = ee.Image('CGIAR/SRTM90_V4') ic = ee.ImageCollection(img) - ds1 = xr.open_dataset(img, engine='ee') - ds2 = xr.open_dataset(ic, engine='ee') + ds1 = xr.open_dataset(img, engine='ee', **_TEST_GRID_PARAMS) + ds2 = xr.open_dataset(ic, engine='ee', **_TEST_GRID_PARAMS) self.assertTrue(ds1.identical(ds2)) def test_can_chunk__opened_dataset(self): ds = xr.open_dataset( 'NASA/GPM_L3/IMERG_V07', - crs='EPSG:4326', - scale=0.25, engine=xee.EarthEngineBackendEntrypoint, + **_TEST_GRID_PARAMS ).isel(time=slice(0, 1)) try: @@ -405,40 +386,48 @@ def test_can_chunk__opened_dataset(self): except ValueError: self.fail('Chunking failed.') - def test_honors_geometry(self): - ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( - '1992-10-05', '1993-03-31' - ) - leg1 = ee.Geometry.Rectangle(113.33, -43.63, 153.56, -10.66) + + def test_honors_geometry_simple_utm(self): + """Test that a non-geographic projection can be used.""" + ic = ee.ImageCollection([ + ee.Image('LANDSAT/LC09/C02/T1_L2/LC09_043034_20211116').select(0) + .addBands(ee.Image.pixelLonLat()), + ]) + min_x, max_x = 10, 12 + min_y, max_y = -4, 0 + width = max_x - min_x + height = max_y - min_y ds = xr.open_dataset( ic, engine=xee.EarthEngineBackendEntrypoint, - geometry=leg1, + crs="EPSG:32610", + crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # Origin over SF + shape_2d=(width, height), ) - standard_ds = xr.open_dataset( - ic, - engine=xee.EarthEngineBackendEntrypoint, - ) - - self.assertEqual(ds.sizes, {'time': 4248, 'lon': 40, 'lat': 35}) - self.assertNotEqual(ds.sizes, standard_ds.sizes) - def test_honors_projection(self): - ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( - '1992-10-05', '1993-03-31' + self.assertEqual(ds.sizes, {'time': 1, 'x': width, 'y': height}) + np.testing.assert_allclose( + ds['latitude'].values, + np.array([[ + [37.764977, 37.764706, 37.764435, 37.764164], + [37.764973, 37.7647 , 37.76443 , 37.764164] + ]]) ) - ds = xr.open_dataset( - ic, - engine=xee.EarthEngineBackendEntrypoint, - projection=ic.first().select(0).projection(), + np.testing.assert_allclose( + ds['longitude'].values, + np.array([[ + [-122.41528, -122.41529, -122.41529, -122.41529], + [-122.41495, -122.41495, -122.41495, -122.41495] + ]]) ) - standard_ds = xr.open_dataset( - ic, - engine=xee.EarthEngineBackendEntrypoint, + np.testing.assert_allclose( + ds['SR_B1'].values, + np.array([[ + [14332., 13622., 12058., 11264.], + [12254., 10379., 10701., 11150.] + ]]) ) - self.assertEqual(ds.sizes, {'time': 4248, 'lon': 3600, 'lat': 1800}) - self.assertNotEqual(ds.sizes, standard_ds.sizes) @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') def test_expected_precise_transform(self): @@ -468,32 +457,33 @@ def test_expected_precise_transform(self): xee_dataset = xr.open_dataset( ee.ImageCollection(ic), engine='ee', - geometry=tuple(raster.rio.bounds()), - projection=ee.Projection( - crs=str(raster.rio.crs), transform=raster.rio.transform()[:6] - ), - ).rename({'lon': 'x', 'lat': 'y'}) + crs=str(raster.rio.crs), + crs_transform=raster.rio.transform()[:6], + shape_2d=data.shape + ) self.assertNotEqual(abs(x_res), abs(y_res)) - np.testing.assert_equal( + np.testing.assert_allclose( np.array(xee_dataset.rio.transform()), np.array(raster.rio.transform()), ) def test_parses_ee_url(self): - ds = self.entry.open_dataset( - 'ee://LANDSAT/LC08/C02/T1', - drop_variables=tuple(f'B{i}' for i in range(3, 12)), - scale=25.0, # in degrees - n_images=3, - ) - self.assertEqual(dict(ds.sizes), {'time': 3, 'lon': 14, 'lat': 7}) - ds = self.entry.open_dataset( - 'ee:LANDSAT/LC08/C02/T1', - drop_variables=tuple(f'B{i}' for i in range(3, 12)), - scale=25.0, # in degrees - n_images=3, + """Test the ee: URL parsing.""" + n_images, width, height = 3, 10, 20 + test_params = { + 'n_images': n_images, + 'crs': 'EPSG:4326', + 'crs_transform': [12.0, 0, -180.0, 0, -25.0, 90.0], + 'shape_2d': (width, height) + } + ds1 = self.entry.open_dataset('ee://LANDSAT/LC08/C02/T1', **test_params) + ds2 = self.entry.open_dataset('ee:LANDSAT/LC08/C02/T1', **test_params) + self.assertEqual(dict(ds1.sizes), {'time': n_images, 'x': width, 'y': height}) + self.assertEqual(dict(ds2.sizes), {'time': n_images, 'x': width, 'y': height}) + np.testing.assert_allclose( + ds1["B1"].compute().values, + ds2["B1"].compute().values ) - self.assertEqual(dict(ds.sizes), {'time': 3, 'lon': 14, 'lat': 7}) def test_data_sanity_check(self): # This simple test uncovered a bug with the default definition of `scale`. @@ -503,6 +493,7 @@ def test_data_sanity_check(self): 'ECMWF/ERA5_LAND/HOURLY', engine=xee.EarthEngineBackendEntrypoint, n_images=1, + **_TEST_GRID_PARAMS ) temperature_2m = era5.isel(time=0).temperature_2m self.assertNotEqual(temperature_2m.min(), 0.0) @@ -512,8 +503,8 @@ def test_validate_band_attrs(self): ds = self.entry.open_dataset( 'ee:LANDSAT/LC08/C02/T1', drop_variables=tuple(f'B{i}' for i in range(3, 12)), - scale=25.0, # in degrees n_images=3, + **_TEST_GRID_PARAMS ) valid_types = (str, int, float, complex, np.ndarray, np.number, list, tuple) @@ -544,8 +535,9 @@ def test_fast_time_slicing(self): params = dict( filename_or_obj=fake_collection, engine=xee.EarthEngineBackendEntrypoint, - geometry=ee.Geometry.BBox(-83.86, 41.13, -76.83, 46.15), - projection=first.projection().atScale(100000), + crs='EPSG:4326', + crs_transform=[1, 0, -100, 0, 1, 50], + shape_2d=(3, 4), ) # With slow slicing, the returned data should include the modified image. @@ -555,7 +547,7 @@ def test_fast_time_slicing(self): # With fast slicing, the returned data should include the original image. fast_slicing = xr.open_dataset(**params, fast_time_slicing=True) - fast_slicing_data = getattr(fast_slicing[dict(time=0)], band).as_numpy() + fast_slicing_data = getattr(fast_slicing[dict(time=0)], band).as_numpy() self.assertTrue(np.all(fast_slicing_data > 0)) @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') @@ -565,26 +557,31 @@ def test_write_projected_dataset_to_raster(self): with tempfile.TemporaryDirectory() as temp_dir: temp_file = os.path.join(temp_dir, 'test.tif') - crs = 'epsg:32610' + crs = 'EPSG:32610' proj = ee.Projection(crs) - point = ee.Geometry.Point([-122.44, 37.78]) - geom = point.buffer(1024).bounds() + + point = shapely.geometry.Point(-122.44, 37.78) + ee_point = ee.Geometry.Point(list(point.coords)[0]) + # Create a collection of 10 low-cloud images intersecting a point. col = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') - col = col.filterBounds(point) + col = col.filterBounds(ee_point) col = col.filter(ee.Filter.lte('CLOUDY_PIXEL_PERCENTAGE', 5)) col = col.limit(10) + grid_dict = helpers.fit_geometry( + geometry=point.buffer(0.1), + grid_crs=crs, + grid_scale=100 + ) + ds = xr.open_dataset( col, engine=xee.EarthEngineBackendEntrypoint, - crs=crs, - geometry=geom, - projection=ee.Projection('EPSG:4326', [10, 0, 0, 0, -10, 0]), + **grid_dict ) - ds = ds.isel(time=0).transpose('Y', 'X') - ds.rio.set_spatial_dims(x_dim='X', y_dim='Y', inplace=True) + ds = ds.isel(time=0).transpose('y', 'x') ds.rio.write_crs(crs, inplace=True) ds.rio.reproject(crs, inplace=True) ds.rio.to_raster(temp_file) @@ -592,44 +589,30 @@ def test_write_projected_dataset_to_raster(self): with rasterio.open(temp_file) as raster: # see https://gis.stackexchange.com/a/407755 for evenOdd explanation bbox = ee.Geometry.Rectangle(raster.bounds, proj=proj, evenOdd=False) - intersects = bbox.intersects(point, 1, proj=proj) + intersects = bbox.intersects(ee_point, 1, proj=proj) self.assertTrue(intersects.getInfo()) - @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') - def test_write_dataset_to_raster(self): - # ensure that a dataset written to a raster intersects with the point used - # to create the initial image collection - with tempfile.TemporaryDirectory() as temp_dir: - temp_file = os.path.join(temp_dir, 'test.tif') - - crs = 'EPSG:4326' - proj = ee.Projection(crs) - point = ee.Geometry.Point([-122.44, 37.78]) - geom = point.buffer(1024).bounds() - - col = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED') - col = col.filterBounds(point) - col = col.filter(ee.Filter.lte('CLOUDY_PIXEL_PERCENTAGE', 5)) - col = col.limit(10) - ds = xr.open_dataset( - col, - engine=xee.EarthEngineBackendEntrypoint, - geometry=geom, - projection=ee.Projection('EPSG:4326', [0.0025, 0, 0, 0, -0.0025, 0]), - ) +class GridHelpersTest(absltest.TestCase): + """Test grid helper functions that require GEE access.""" - ds = ds.isel(time=0).transpose('lat', 'lon') - ds.rio.set_spatial_dims(x_dim='lon', y_dim='lat', inplace=True) - ds.rio.write_crs(crs, inplace=True) - ds.rio.reproject(crs, inplace=True) - ds.rio.to_raster(temp_file) - - with rasterio.open(temp_file) as raster: - # see https://gis.stackexchange.com/a/407755 for evenOdd explanation - bbox = ee.Geometry.Rectangle(raster.bounds, proj=proj, evenOdd=False) - intersects = bbox.intersects(point, 1, proj=proj) - self.assertTrue(intersects.getInfo()) + def setUp(self): + super().setUp() + init_ee_for_tests() + self.entry = xee.EarthEngineBackendEntrypoint() + + def test_extract_projection_from_image(self): + img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_031034_20110619') + grid_params = helpers.extract_projection(img) + self.assertEqual(grid_params['shape_2d'], [7881, 6981]) + self.assertEqual(grid_params['crs'], 'EPSG:32613') + np.allclose(grid_params['crs_transform'], [30, 0, 643185, 0, -30, 4255815]) + + dem = ee.ImageCollection("COPERNICUS/DEM/GLO30"); + grid_params = helpers.extract_projection(dem) + self.assertEqual(grid_params['shape_2d'], [3601, 3601]) + self.assertEqual(grid_params['crs'], 'EPSG:4326') + np.allclose(grid_params['crs_transform'], [0.000278, 0, 5.999861, 0, -0.000278, 1.000139]) if __name__ == '__main__': diff --git a/xee/ext_test.py b/xee/ext_test.py index a873d2f..88159d8 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -3,8 +3,10 @@ from absl.testing import absltest from absl.testing import parameterized import numpy as np +import shapely import xee from xee import ext +from xee import helpers class EEStoreStandardDatatypesTest(parameterized.TestCase): @@ -141,5 +143,75 @@ def test_parse_ee_init_kwargs__credentials_and_credentials_function(self): ) +class GridHelpersTest(absltest.TestCase): + """Test grid helper functions that do not require GEE access.""" + + def test_set_scale(self): + """Test that the scale values of the CRS transform can be updated.""" + crs_transform = [1, 0, 100, 0, 5, 200] + scaling = (123, 456) + crs_transform_new = helpers.set_scale(crs_transform, scaling) + np.testing.assert_allclose( + crs_transform_new, + [123, 0, 100, 0, 456, 200] + ) + + + def test_fit_geometry_specify_scale(self): + """Test generating grid parameters to match a geometry, specifying the scale.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Polygon([(10.1, 10.1), + (10.1, 10.9), + (11.9, 10.1)]), + grid_crs='EPSG:4326', + grid_scale=0.5 + ) + self.assertEqual( + grid_dict['crs_transform'], + [0.5, 0, 10, 0, -0.5, 11.0] + ) + self.assertEqual( + grid_dict['shape_2d'], + (4, 2) + ) + + + def test_fit_geometry_specify_scale_utm(self): + """Test generating grid parameters to match a UTM geometry, specifying the scale.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Polygon([(551000, 4179000), + (551000, 4179000), + (552000, 4180000), + (552000, 4180000)]), # over San Francisco + geometry_crs='EPSG:32610', + grid_crs='EPSG:4326', + grid_scale=0.01 + ) + self.assertEqual( + grid_dict['crs_transform'], + [0.01, 0.0, -122.43, 0.0, -0.01, 37.77] + ) + self.assertEqual( + grid_dict['shape_2d'], + (3, 2) + ) + + + def test_fit_geometry_specify_shape(self): + """Test generating grid parameters to match a geometry, specifying the shape.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Polygon([(10.0, 2.0), + (10.0, 3.0), + (12.0, 2.0)]), + grid_crs='EPSG:4326', + grid_shape=(4, 2) + ) + np.testing.assert_allclose( + grid_dict['crs_transform'], + [0.5, 0, 10, 0, -0.5, 3], + rtol=1e-4, + ) + + if __name__ == '__main__': absltest.main() diff --git a/xee/helpers.py b/xee/helpers.py new file mode 100644 index 0000000..f841029 --- /dev/null +++ b/xee/helpers.py @@ -0,0 +1,156 @@ +# Copyright 2025 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============================================================================== +"""Helper functions for grid parameters.""" +import math + +import ee +from pyproj import Transformer +from rasterio.transform import Affine +import shapely +from shapely.ops import transform +from shapely.geometry import box +from typing import Literal + +def set_scale(crs_transform, scaling): + """Update the CRS transform's scale parameters.""" + match scaling: + case int(xy_scale) | float(xy_scale): + crs_transform[0] = xy_scale + crs_transform[4] = xy_scale + case (int(x_scale) | float(x_scale), int(y_scale) | float(y_scale)): + crs_transform[0] = x_scale + crs_transform[4] = y_scale + case _: + raise TypeError + affine_transform = Affine(*crs_transform) + return list(affine_transform)[:6] + + +def fit_geometry( + geometry, + *, + geometry_crs='EPSG:4326', + buffer=0, + grid_crs='EPSG:4326', + grid_scale=None, + grid_scale_digits=None, + grid_shape=None, +): + """Return grid parameters that fit the geometry.""" + + # Check that exactly one of the arguments is specified + if (grid_scale is None) == (grid_shape is None): + raise ValueError("Exactly one of 'grid_scale' or 'grid_shape' must be specified.") + + # Reproject geometry to the grid CRS. If the grids are the same this + # is a no-op. + transformer = Transformer.from_crs( + crs_from=geometry_crs, + crs_to=grid_crs, + always_xy=True + ) + reprojected_geometry = transform(transformer.transform, geometry) + if buffer and buffer > 0: + buffered_geom = shapely.buffer(reprojected_geometry, buffer) + else: + buffered_geom = reprojected_geometry + x_min, y_min, x_max, y_max = buffered_geom.bounds + + if grid_scale: + # Given scale & geometry, determine the translation & shape parameters. + x_scale = y_scale = grid_scale + + x_shape = math.ceil( + (x_max / x_scale - math.floor(x_min / x_scale)) + ) + y_shape = math.ceil( + (-y_min / y_scale + math.ceil(y_max / y_scale)) + ) + + if grid_shape: + # Given shape & geometry, determine the translation & scale parameters. + x_shape, y_shape = grid_shape + + x_scale = (x_max - x_min) / x_shape + y_scale = (y_max - y_min) / y_shape + + if grid_scale_digits: + x_scale = round(x_scale, grid_scale_digits) + y_scale = round(y_scale, grid_scale_digits) + + grid_x_min = math.floor(x_min / x_scale) * x_scale + grid_y_max = math.ceil(y_max / y_scale) * y_scale + + affine_transform = Affine.translation(grid_x_min, grid_y_max) * Affine.scale(x_scale, -y_scale) + crs_transform = list(affine_transform)[:6] + + return dict( + crs=grid_crs, + crs_transform=crs_transform, + shape_2d=(x_shape, y_shape) + ) + + + +def update_grid_translation( + crs, + crs_transform, + shape, + geometry + ): + """Update the grid's translateX and translateY parameters to center on the geometry.""" + + return crs, crs_transform, shape + + + +def update_shape( + crs, + crs_transform, + shape, + geometry + ): + # Update the shape to cover the geometry. + return crs, crs_transform, shape + + +def extract_projection( + ee_obj + ): + # Estimate the CRS and transform from an ee.Image or ee.ImageCollection object + + # proj_info = ee_obj.projection().getInfo() + + # return dict( + # crs=proj_info['crs'], + # crs_transform=proj_info['transform'] + # ) + match ee_obj: + case ee.Image(): + print('Its an image') + img_obj = ee_obj + case ee.ImageCollection(): + print('Its an image collection') + img_obj = ee_obj.first() + case _: + raise TypeError + + first_band_info = img_obj.select(0).getInfo()['bands'][0] + + return dict( + crs=first_band_info['crs'], + crs_transform=first_band_info['crs_transform'], + shape_2d=first_band_info['dimensions'] + ) From dab729783e68880a0a29cb70a34f0929afe409ce Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Fri, 28 Feb 2025 15:50:59 -0800 Subject: [PATCH 10/56] Remove helper placeholders Ensure shape_2d is a tuple --- xee/helpers.py | 35 +++-------------------------------- 1 file changed, 3 insertions(+), 32 deletions(-) diff --git a/xee/helpers.py b/xee/helpers.py index f841029..ba92add 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -103,40 +103,11 @@ def fit_geometry( ) - -def update_grid_translation( - crs, - crs_transform, - shape, - geometry - ): - """Update the grid's translateX and translateY parameters to center on the geometry.""" - - return crs, crs_transform, shape - - - -def update_shape( - crs, - crs_transform, - shape, - geometry - ): - # Update the shape to cover the geometry. - return crs, crs_transform, shape - - -def extract_projection( +def extract_grid_params( ee_obj ): - # Estimate the CRS and transform from an ee.Image or ee.ImageCollection object + # Extract the pixel grid parameters from an ee.Image or ee.ImageCollection object - # proj_info = ee_obj.projection().getInfo() - - # return dict( - # crs=proj_info['crs'], - # crs_transform=proj_info['transform'] - # ) match ee_obj: case ee.Image(): print('Its an image') @@ -152,5 +123,5 @@ def extract_projection( return dict( crs=first_band_info['crs'], crs_transform=first_band_info['crs_transform'], - shape_2d=first_band_info['dimensions'] + shape_2d=tuple(first_band_info['dimensions']) ) From 68d7a462f1360740e473c2f95f4b6c24ab853416 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Fri, 28 Feb 2025 16:45:17 -0800 Subject: [PATCH 11/56] Update README code and add tests --- README.md | 75 ++++++++++++++++++++----------------- xee/ext_integration_test.py | 74 +++++++++++++++++++++++++++++++++--- 2 files changed, 109 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index a270156..143bfe8 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Now, in your Python environment, make the following imports: ```python import ee -import xarray +import xarray as xr ``` Next, specify your EE-registered cloud project ID and initialize the EE client @@ -48,68 +48,73 @@ ee.Initialize( opt_url='https://earthengine-highvolume.googleapis.com') ``` -Open any Earth Engine ImageCollection by specifying the Xarray engine as `'ee'`: - +We specify the desired pixel grid using three parameters: `crs`, `crs_transform`, and `shape_2d`. Xee contains a helper function `extract_grid_params` that can extract these parameters from an Earth Engine Image or ImageCollection object. ```python -ds = xarray.open_dataset('ee://ECMWF/ERA5_LAND/HOURLY', engine='ee') +ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') +grid_params = helpers.extract_grid_params(ic) ``` -Open all bands in a specific projection (not the Xee default): +Open any Earth Engine ImageCollection by specifying the Xarray engine as `'ee'`: ```python -ds = xarray.open_dataset('ee://ECMWF/ERA5_LAND/HOURLY', engine='ee', - crs='EPSG:4326', scale=0.25) +ds = xr.open_dataset( + 'ee://ECMWF/ERA5_LAND/HOURLY', + engine='ee', + **grid_params +) ``` -Open an ImageCollection (maybe, with EE-side filtering or processing): +Open all bands in a specific projection: ```python -ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( - '1992-10-05', '1993-03-31') -ds = xarray.open_dataset(ic, engine='ee', crs='EPSG:4326', scale=0.25) +ds = xr.open_dataset( + 'ee://ECMWF/ERA5_LAND/HOURLY', + engine='ee', + crs="EPSG:32610", + crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + shape_2d=(64, 64), +) ``` -Open an ImageCollection with a specific EE projection or geometry: +Open an ImageCollection (maybe, with EE-side filtering or processing): ```python -ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( - '1992-10-05', '1993-03-31') -leg1 = ee.Geometry.Rectangle(113.33, -43.63, 153.56, -10.66) -ds = xarray.open_dataset( +ds = xr.open_dataset( ic, engine='ee', - projection=ic.first().select(0).projection(), - geometry=leg1 + crs="EPSG:32610", + crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + shape_2d=(64, 64), ) ``` -Open multiple ImageCollections into one `xarray.Dataset`, all with the same -projection: +Open an ImageCollection with a specific EE projection or geometry: ```python -ds = xarray.open_mfdataset( - ['ee://ECMWF/ERA5_LAND/HOURLY', 'ee://NASA/GDDP-CMIP6'], - engine='ee', crs='EPSG:4326', scale=0.25) -``` +import shapely -Open a single Image by passing it to an ImageCollection: +grid_params = helpers.fit_geometry( + geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), + grid_crs='EPSG:4326', + grid_shape=(256, 256) +) -```python -i = ee.ImageCollection(ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318')) -ds = xarray.open_dataset(i, engine='ee') +ds = xr.open_dataset( + ic, + engine='ee', + **grid_params +) ``` -Open any Earth Engine ImageCollection to match an existing transform: +Open a single Image: ```python -raster = rioxarray.open_rasterio(...) # assume crs + transform is set +img = ee.Image("LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318") +grid_params = helpers.extract_grid_params(img) ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/HOURLY', + img, engine='ee', - geometry=tuple(raster.rio.bounds()), # must be in EPSG:4326 - projection=ee.Projection( - crs=str(raster.rio.crs), transform=raster.rio.transform()[:6] - ), + **grid_params ) ``` diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 541bf96..3e43849 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -602,19 +602,83 @@ def setUp(self): init_ee_for_tests() self.entry = xee.EarthEngineBackendEntrypoint() - def test_extract_projection_from_image(self): + def test_extract_grid_params_from_image(self): img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_031034_20110619') - grid_params = helpers.extract_projection(img) - self.assertEqual(grid_params['shape_2d'], [7881, 6981]) + grid_params = helpers.extract_grid_params(img) + self.assertEqual(grid_params['shape_2d'], (7881, 6981)) self.assertEqual(grid_params['crs'], 'EPSG:32613') np.allclose(grid_params['crs_transform'], [30, 0, 643185, 0, -30, 4255815]) + def test_extract_grid_params_from_image_collection(self): dem = ee.ImageCollection("COPERNICUS/DEM/GLO30"); - grid_params = helpers.extract_projection(dem) - self.assertEqual(grid_params['shape_2d'], [3601, 3601]) + grid_params = helpers.extract_grid_params(dem) + self.assertEqual(grid_params['shape_2d'], (3601, 3601)) self.assertEqual(grid_params['crs'], 'EPSG:4326') np.allclose(grid_params['crs_transform'], [0.000278, 0, 5.999861, 0, -0.000278, 1.000139]) +class ReadmeCodeTest(absltest.TestCase): + """Tests a copy of code contained in the Xee README.""" + + def setUp(self): + super().setUp() + init_ee_for_tests() + self.entry = xee.EarthEngineBackendEntrypoint() + + def test_extract_projection_from_image(self): + + ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate('1992-10-05', '1993-03-31') + grid_params = helpers.extract_grid_params(ic) + + # Open any Earth Engine ImageCollection by specifying the Xarray engine as 'ee': + ds = xr.open_dataset( + 'ee://ECMWF/ERA5_LAND/HOURLY', + engine='ee', + **grid_params + ) + + # Open all bands in a specific projection: + ds = xr.open_dataset( + 'ee://ECMWF/ERA5_LAND/HOURLY', + engine='ee', + crs="EPSG:32610", + crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + shape_2d=(64, 64), + ) + + # Open an ImageCollection (maybe, with EE-side filtering or processing): + ds = xr.open_dataset( + ic, + engine='ee', + crs="EPSG:32610", + crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + shape_2d=(64, 64), + ) + + # Open an ImageCollection with a specific EE projection or geometry: + import shapely + + grid_params = helpers.fit_geometry( + geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), + grid_crs='EPSG:4326', + grid_shape=(256, 256) + ) + + ds = xr.open_dataset( + ic, + engine='ee', + **grid_params + ) + + # Open a single Image: + img = ee.Image("LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318") + grid_params = helpers.extract_grid_params(img) + ds = xr.open_dataset( + img, + engine='ee', + **grid_params + ) + + if __name__ == '__main__': absltest.main() From 97a3814ca1861a83f4d3b3fbcbc4c664b5c115f4 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:25:08 -0700 Subject: [PATCH 12/56] Double to single quotes. --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 143bfe8..3feb7d2 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ Open all bands in a specific projection: ds = xr.open_dataset( 'ee://ECMWF/ERA5_LAND/HOURLY', engine='ee', - crs="EPSG:32610", + crs='EPSG:32610', crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California shape_2d=(64, 64), ) @@ -82,8 +82,8 @@ Open an ImageCollection (maybe, with EE-side filtering or processing): ds = xr.open_dataset( ic, engine='ee', - crs="EPSG:32610", - crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + crs='EPSG:32610', + crs_transform=[30, 0, 551485, 0, -30, 4179915], # In San Francisco, California shape_2d=(64, 64), ) ``` @@ -109,7 +109,7 @@ ds = xr.open_dataset( Open a single Image: ```python -img = ee.Image("LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318") +img = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') grid_params = helpers.extract_grid_params(img) ds = xr.open_dataset( img, From c4da1992b48f10fabecd7d6d2a51b2c5c5e8c817 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:25:39 -0700 Subject: [PATCH 13/56] Remove unnecessary import and print --- xee/ext_integration_test.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 3e43849..9b153d0 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -333,7 +333,6 @@ def test_open_dataset__sanity_check(self): crs_transform=[12.0, 0, -180.0, 0, -25.0, 90.0], shape_2d=(width, height), ) - print(f'{ds=}') self.assertEqual(dict(ds.sizes), {'time': 3, 'x': width, 'y': height}) self.assertNotEmpty(dict(ds.coords)) self.assertEqual( @@ -616,6 +615,10 @@ def test_extract_grid_params_from_image_collection(self): self.assertEqual(grid_params['crs'], 'EPSG:4326') np.allclose(grid_params['crs_transform'], [0.000278, 0, 5.999861, 0, -0.000278, 1.000139]) + def test_extract_grid_params_from_invalid_object(self): + with self.assertRaises(TypeError): + helpers.extract_grid_params("a string object") + class ReadmeCodeTest(absltest.TestCase): """Tests a copy of code contained in the Xee README.""" @@ -656,7 +659,6 @@ def test_extract_projection_from_image(self): ) # Open an ImageCollection with a specific EE projection or geometry: - import shapely grid_params = helpers.fit_geometry( geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), From 4566716aa1a9e830eac60395c187c2643e03a481 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:26:52 -0700 Subject: [PATCH 14/56] Clean up TransformType type definition --- xee/ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/ext.py b/xee/ext.py index cacebe1..8dd02d3 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -61,7 +61,7 @@ # Types for type hints CrsType = str -TransformType = Union[affine.Affine, Tuple[float, float, float, float, float, float]] +TransformType = Tuple[float, float, float, float, float, float] ShapeType = Tuple[int, int] _BUILTIN_DTYPES = { From 5b5a75f644577ae6f469c46ebb90593643f974de Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:27:15 -0700 Subject: [PATCH 15/56] Add type hints. --- xee/helpers.py | 54 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 21 deletions(-) diff --git a/xee/helpers.py b/xee/helpers.py index ba92add..0418c89 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -21,9 +21,24 @@ import shapely from shapely.ops import transform from shapely.geometry import box -from typing import Literal +from typing import TypedDict, Tuple, Union -def set_scale(crs_transform, scaling): + +TransformType = Tuple[float, float, float, float, float, float] +ShapeType = Tuple[int, int] +ScalingType = Union[float, Tuple[float, float]] + + +class PixelGridParams(TypedDict): + crs: str + crs_transform: TransformType + shape_d2: ShapeType + + +def set_scale( + crs_transform: TransformType, + scaling: ScalingType, + ) -> list: """Update the CRS transform's scale parameters.""" match scaling: case int(xy_scale) | float(xy_scale): @@ -39,15 +54,15 @@ def set_scale(crs_transform, scaling): def fit_geometry( - geometry, + geometry: shapely.geometry, *, - geometry_crs='EPSG:4326', - buffer=0, - grid_crs='EPSG:4326', - grid_scale=None, - grid_scale_digits=None, - grid_shape=None, -): + geometry_crs: str = 'EPSG:4326', + buffer: float = 0, + grid_crs: str = 'EPSG:4326', + grid_scale: float = None, + grid_scale_digits: int = None, + grid_shape: ShapeType = None, +) -> PixelGridParams: """Return grid parameters that fit the geometry.""" # Check that exactly one of the arguments is specified @@ -104,19 +119,16 @@ def fit_geometry( def extract_grid_params( - ee_obj - ): + ee_obj: Union[ee.Image, ee.ImageCollection] + ) -> PixelGridParams: # Extract the pixel grid parameters from an ee.Image or ee.ImageCollection object - match ee_obj: - case ee.Image(): - print('Its an image') - img_obj = ee_obj - case ee.ImageCollection(): - print('Its an image collection') - img_obj = ee_obj.first() - case _: - raise TypeError + if isinstance(ee_obj, ee.Image): + img_obj = ee_obj + elif isinstance(ee_obj, ee.ImageCollection): + img_obj = ee_obj.first() + else: + raise TypeError(f'Expected ee.Image or ee.ImageCollection, got {type(ee_obj)}') first_band_info = img_obj.select(0).getInfo()['bands'][0] From 6419d93d34aa1e0c3e3ff079cc96901f562a5a9d Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:31:35 -0700 Subject: [PATCH 16/56] Revert .gitattributes change --- .gitattributes | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index 1d6999e..07fe41c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,2 @@ # GitHub syntax highlighting pixi.lock linguist-language=YAML linguist-generated=true -# SCM syntax highlighting -pixi.lock linguist-language=YAML linguist-generated=true From b52f63002c10c784a0d7154f74a2abc47b7a4730 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:33:29 -0700 Subject: [PATCH 17/56] Revert .gitignore changes --- .gitignore | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 5e0110f..c0e496a 100644 --- a/.gitignore +++ b/.gitignore @@ -130,8 +130,4 @@ cython_debug/ .DS_Store # pixi environments -.pixi -*.egg-info - -# temporary work files -temp/ \ No newline at end of file +.pixi \ No newline at end of file From 82407deb51f26cac02091a76ee5136412bdc50bb Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 11 Mar 2025 13:35:48 -0700 Subject: [PATCH 18/56] Revert .vscode/settings.json --- .vscode/settings.json | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index ff30c44..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "editor.tabSize": 2 -} \ No newline at end of file From 3044fce60b4990be7055abccdf98a86d85b579ca Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Mon, 17 Mar 2025 13:13:26 -0700 Subject: [PATCH 19/56] Remove pixi config --- pixi.lock | 4600 ------------------------------------------------ pyproject.toml | 20 - 2 files changed, 4620 deletions(-) delete mode 100644 pixi.lock diff --git a/pixi.lock b/pixi.lock deleted file mode 100644 index 443ab96..0000000 --- a/pixi.lock +++ /dev/null @@ -1,4600 +0,0 @@ -version: 5 -environments: - dataflow: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz - - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz - - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: . - default: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - - pypi: . - examples: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz - - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz - - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz - - pypi: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz - - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - - pypi: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: . - tests: - channels: - - url: https://conda.anaconda.org/conda-forge/ - indexes: - - https://pypi.org/simple - packages: - osx-arm64: - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - - pypi: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/4c/ea/a77bab4cf1887f4b2e0bce5516ea0b3ff7d04ba96af21d65024629afedb6/black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl - - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1f/12/2f271b3601ae25731879f160d6b3941d80eb6b4f3e24be90289e33fb1dc4/pyink-24.10.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/de/19/ab4326e419b543da623ce4191f68e3f36a4d9adc64f3df5c78f044d8d9ca/rasterio-1.4.3.tar.gz - - pypi: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/fb/b0/2c74f302512fbd24d68fbba0ec6b650b33ef83e398daeb0a2bb1a4cd641c/rioxarray-0.18.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl - - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl - - pypi: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - - pypi: . -packages: -- kind: pypi - name: absl-py - version: 2.1.0 - url: https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl - sha256: 526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308 - requires_python: '>=3.7' -- kind: pypi - name: affine - version: 2.4.0 - url: https://files.pythonhosted.org/packages/0b/f7/85273299ab57117850cc0a936c64151171fac4da49bc6fba0dad984a7c5f/affine-2.4.0-py3-none-any.whl - sha256: 8a3df80e2b2378aef598a83c1392efd47967afec4242021a0b06b4c7cbc61a92 - requires_dist: - - pydocstyle ; extra == 'dev' - - flake8 ; extra == 'dev' - - coveralls ; extra == 'dev' - - pytest>=4.6 ; extra == 'test' - - pytest-cov ; extra == 'test' - requires_python: '>=3.7' -- kind: pypi - name: aiohappyeyeballs - version: 2.4.4 - url: https://files.pythonhosted.org/packages/b9/74/fbb6559de3607b3300b9be3cc64e97548d55678e44623db17820dbd20002/aiohappyeyeballs-2.4.4-py3-none-any.whl - sha256: a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8 - requires_python: '>=3.8' -- kind: pypi - name: aiohttp - version: 3.11.11 - url: https://files.pythonhosted.org/packages/5a/a6/789e1f17a1b6f4a38939fbc39d29e1d960d5f89f73d0629a939410171bc0/aiohttp-3.11.11-cp312-cp312-macosx_11_0_arm64.whl - sha256: 8811f3f098a78ffa16e0ea36dffd577eb031aea797cbdba81be039a4169e242c - requires_dist: - - aiohappyeyeballs>=2.3.0 - - aiosignal>=1.1.2 - - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' - - attrs>=17.3.0 - - frozenlist>=1.1.1 - - multidict>=4.5,<7.0 - - propcache>=0.2.0 - - yarl>=1.17.0,<2.0 - - aiodns>=3.2.0 ; (sys_platform == 'darwin' and extra == 'speedups') or (sys_platform == 'linux' and extra == 'speedups') - - brotli ; platform_python_implementation == 'CPython' and extra == 'speedups' - - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'speedups' - requires_python: '>=3.9' -- kind: pypi - name: aiosignal - version: 1.3.2 - url: https://files.pythonhosted.org/packages/ec/6a/bc7e17a3e87a2985d3e8f4da4cd0f481060eb78fb08596c42be62c90a4d9/aiosignal-1.3.2-py2.py3-none-any.whl - sha256: 45cde58e409a301715980c2b01d0c28bdde3770d8290b5eb2173759d9acb31a5 - requires_dist: - - frozenlist>=1.1.0 - requires_python: '>=3.9' -- kind: pypi - name: annotated-types - version: 0.7.0 - url: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - sha256: 1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53 - requires_dist: - - typing-extensions>=4.0.0 ; python_full_version < '3.9' - requires_python: '>=3.8' -- kind: conda - name: aom - version: 3.9.1 - build: h7bae524_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda - sha256: ec238f18ce8140485645252351a0eca9ef4f7a1c568a420f240a585229bc12ef - md5: 7adba36492a1bb22d98ffffe4f6fc6de - depends: - - __osx >=11.0 - - libcxx >=16 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 2235747 - timestamp: 1718551382432 -- kind: pypi - name: apache-beam - version: 2.62.0 - url: https://files.pythonhosted.org/packages/e2/1c/f1efde858d0a750f16e5bd0a9e16a04d44a6c7f25e13307d5e1834841e33/apache_beam-2.62.0.tar.gz - sha256: b9d97df88b9b9e4585fff5ee09959d76b0ab596bb78ae986fac8c04bf8cc78db - requires_dist: - - crcmod>=1.7,<2.0 - - orjson>=3.9.7,<4 - - dill>=0.3.1.1,<0.3.2 - - cloudpickle~=2.2.1 - - fastavro>=0.23.6,<2 - - fasteners>=0.3,<1.0 - - grpcio>=1.33.1,!=1.48.0,!=1.59.*,!=1.60.*,!=1.61.*,!=1.62.0,!=1.62.1,<1.66.0,<2 - - hdfs>=2.1.0,<3.0.0 - - httplib2>=0.8,<0.23.0 - - jsonschema>=4.0.0,<5.0.0 - - jsonpickle>=3.0.0,<4.0.0 - - numpy>=1.14.3,<2.3.0 - - objsize>=0.6.1,<0.8.0 - - packaging>=22.0 - - pymongo>=3.8.0,<5.0.0 - - proto-plus>=1.7.1,<2 - - protobuf>=3.20.3,!=4.0.*,!=4.21.*,!=4.22.0,!=4.23.*,!=4.24.*,<6.0.0.dev0 - - pydot>=1.2.0,<2 - - python-dateutil>=2.8.0,<3 - - pytz>=2018.3 - - redis>=5.0.0,<6 - - regex>=2020.6.8 - - requests>=2.24.0,<3.0.0 - - sortedcontainers>=2.4.0 - - typing-extensions>=3.7.0 - - zstandard>=0.18.0,<1 - - pyyaml>=3.12,<7.0.0 - - pyarrow>=3.0.0,<17.0.0 - - pyarrow-hotfix<1 - - jinja2>=3.0,<3.2 ; extra == 'docs' - - sphinx>=7.0.0,<8.0 ; extra == 'docs' - - docstring-parser>=0.15,<1.0 ; extra == 'docs' - - docutils>=0.18.1 ; extra == 'docs' - - pandas<2.2.0 ; extra == 'docs' - - openai ; extra == 'docs' - - docstring-parser>=0.15,<1.0 ; extra == 'test' - - freezegun>=0.3.12 ; extra == 'test' - - jinja2>=3.0,<3.2 ; extra == 'test' - - joblib>=1.0.1 ; extra == 'test' - - mock>=1.0.1,<6.0.0 ; extra == 'test' - - pandas<2.2.0 ; extra == 'test' - - parameterized>=0.7.1,<0.10.0 ; extra == 'test' - - pyhamcrest>=1.9,!=1.10.0,<3.0.0 ; extra == 'test' - - requests-mock>=1.7,<2.0 ; extra == 'test' - - tenacity>=8.0.0,<9 ; extra == 'test' - - pytest>=7.1.2,<8.0 ; extra == 'test' - - pytest-xdist>=2.5.0,<4 ; extra == 'test' - - pytest-timeout>=2.1.0,<3 ; extra == 'test' - - scikit-learn>=0.20.0 ; extra == 'test' - - setuptools ; extra == 'test' - - sqlalchemy>=1.3,<3.0 ; extra == 'test' - - psycopg2-binary>=2.8.5,!=2.9.10,<3.0.0 ; extra == 'test' - - testcontainers[mysql]>=3.0.3,<4.0.0 ; extra == 'test' - - cryptography>=41.0.2 ; extra == 'test' - - hypothesis>5.0.0,<7.0.0 ; extra == 'test' - - cachetools>=3.1.0,<6 ; extra == 'gcp' - - google-api-core>=2.0.0,<3 ; extra == 'gcp' - - google-apitools>=0.5.31,<0.5.32 ; extra == 'gcp' - - google-auth>=1.18.0,<3 ; extra == 'gcp' - - google-auth-httplib2>=0.1.0,<0.3.0 ; extra == 'gcp' - - google-cloud-datastore>=2.0.0,<3 ; extra == 'gcp' - - google-cloud-pubsub>=2.1.0,<3 ; extra == 'gcp' - - google-cloud-pubsublite>=1.2.0,<2 ; extra == 'gcp' - - google-cloud-storage>=2.18.2,<3 ; extra == 'gcp' - - google-cloud-bigquery>=2.0.0,<4 ; extra == 'gcp' - - google-cloud-bigquery-storage>=2.6.3,<3 ; extra == 'gcp' - - google-cloud-core>=2.0.0,<3 ; extra == 'gcp' - - google-cloud-bigtable>=2.19.0,<3 ; extra == 'gcp' - - google-cloud-spanner>=3.0.0,<4 ; extra == 'gcp' - - google-cloud-dlp>=3.0.0,<4 ; extra == 'gcp' - - google-cloud-language>=2.0,<3 ; extra == 'gcp' - - google-cloud-videointelligence>=2.0,<3 ; extra == 'gcp' - - google-cloud-vision>=2,<4 ; extra == 'gcp' - - google-cloud-recommendations-ai>=0.1.0,<0.11.0 ; extra == 'gcp' - - google-cloud-aiplatform>=1.26.0,<2.0 ; extra == 'gcp' - - keyrings-google-artifactregistry-auth ; extra == 'gcp' - - facets-overview>=1.1.0,<2 ; extra == 'interactive' - - google-cloud-dataproc>=5.0.0,<6 ; extra == 'interactive' - - ipython>=8,<9 ; extra == 'interactive' - - ipykernel>=6,<7 ; extra == 'interactive' - - ipywidgets>=8,<9 ; extra == 'interactive' - - jupyter-client>=6.1.11,!=6.1.13,<8.2.1 ; extra == 'interactive' - - timeloop>=1.0.2,<2 ; extra == 'interactive' - - nbformat>=5.0.5,<6 ; extra == 'interactive' - - nbconvert>=6.2.0,<8 ; extra == 'interactive' - - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'interactive' - - needle>=0.5.0,<1 ; extra == 'interactive-test' - - chromedriver-binary>=117,<118 ; extra == 'interactive-test' - - pillow>=7.1.1,<10 ; extra == 'interactive-test' - - urllib3>=1.21.1,<2 ; extra == 'interactive-test' - - datatable ; extra == 'ml-test' - - embeddings ; extra == 'ml-test' - - onnxruntime ; extra == 'ml-test' - - sentence-transformers ; extra == 'ml-test' - - skl2onnx ; extra == 'ml-test' - - pillow ; extra == 'ml-test' - - tensorflow ; extra == 'ml-test' - - tensorflow-hub ; extra == 'ml-test' - - tensorflow-transform ; extra == 'ml-test' - - tf2onnx ; extra == 'ml-test' - - torch ; extra == 'ml-test' - - transformers ; extra == 'ml-test' - - datatable ; extra == 'p312-ml-test' - - embeddings ; extra == 'p312-ml-test' - - onnxruntime ; extra == 'p312-ml-test' - - sentence-transformers ; extra == 'p312-ml-test' - - skl2onnx ; extra == 'p312-ml-test' - - pillow ; extra == 'p312-ml-test' - - tensorflow ; extra == 'p312-ml-test' - - tensorflow-hub ; extra == 'p312-ml-test' - - tf2onnx ; extra == 'p312-ml-test' - - torch ; extra == 'p312-ml-test' - - transformers ; extra == 'p312-ml-test' - - boto3>=1.9,<2 ; extra == 'aws' - - azure-storage-blob>=12.3.2,<13 ; extra == 'azure' - - azure-core>=1.7.0,<2 ; extra == 'azure' - - azure-identity>=1.12.0,<2 ; extra == 'azure' - - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'dataframe' - - distributed>=2024.4.2 ; extra == 'dask' - - dask>=2024.4.2 ; extra == 'dask' - - docstring-parser>=0.15,<1.0 ; extra == 'yaml' - - jinja2>=3.0,<3.2 ; extra == 'yaml' - - virtualenv-clone>=0.5,<1.0 ; extra == 'yaml' - - js2py>=0.74,<1 ; python_full_version < '3.12' and extra == 'yaml' - - pandas>=1.4.3,!=1.5.0,!=1.5.1,<2.3 ; extra == 'yaml' - requires_python: '>=3.9' -- kind: pypi - name: attrs - version: 25.1.0 - url: https://files.pythonhosted.org/packages/fc/30/d4986a882011f9df997a55e6becd864812ccfcd821d64aac8570ee39f719/attrs-25.1.0-py3-none-any.whl - sha256: c75a69e28a550a7e93789579c22aa26b0f5b83b75dc4e08fe092980051e1090a - requires_dist: - - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' - - hypothesis ; extra == 'benchmark' - - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' - - pympler ; extra == 'benchmark' - - pytest-codspeed ; extra == 'benchmark' - - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' - - pytest-xdist[psutil] ; extra == 'benchmark' - - pytest>=4.3.0 ; extra == 'benchmark' - - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' - - coverage[toml]>=5.3 ; extra == 'cov' - - hypothesis ; extra == 'cov' - - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' - - pympler ; extra == 'cov' - - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' - - pytest-xdist[psutil] ; extra == 'cov' - - pytest>=4.3.0 ; extra == 'cov' - - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' - - hypothesis ; extra == 'dev' - - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' - - pre-commit-uv ; extra == 'dev' - - pympler ; extra == 'dev' - - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' - - pytest-xdist[psutil] ; extra == 'dev' - - pytest>=4.3.0 ; extra == 'dev' - - cogapp ; extra == 'docs' - - furo ; extra == 'docs' - - myst-parser ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-notfound-page ; extra == 'docs' - - sphinxcontrib-towncrier ; extra == 'docs' - - towncrier<24.7 ; extra == 'docs' - - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' - - hypothesis ; extra == 'tests' - - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' - - pympler ; extra == 'tests' - - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' - - pytest-xdist[psutil] ; extra == 'tests' - - pytest>=4.3.0 ; extra == 'tests' - - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' - - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' - requires_python: '>=3.8' -- kind: pypi - name: black - version: 24.10.0 - url: https://files.pythonhosted.org/packages/4c/ea/a77bab4cf1887f4b2e0bce5516ea0b3ff7d04ba96af21d65024629afedb6/black-24.10.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: d37d422772111794b26757c5b55a3eade028aa3fde43121ab7b673d050949d65 - requires_dist: - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=0.9.0 - - platformdirs>=2 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - aiohttp>=3.10 ; extra == 'd' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; extra == 'uvloop' - requires_python: '>=3.9' -- kind: conda - name: blosc - version: 1.21.6 - build: h7dd00d9_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - sha256: c3fe902114b9a3ac837e1a32408cc2142c147ec054c1038d37aec6814343f48a - md5: 925acfb50a750aa178f7a0aced77f351 - depends: - - __osx >=11.0 - - libcxx >=18 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.1,<1.3.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 33602 - timestamp: 1733513285902 -- kind: pypi - name: bokeh - version: 3.6.2 - url: https://files.pythonhosted.org/packages/56/12/2c266a0dc57379c60b4e73a2f93e71343db4170bf26c5a76a74e7d8bce2a/bokeh-3.6.2-py3-none-any.whl - sha256: fddc4b91f8b40178c0e3e83dfcc33886d7803a3a1f041a840834255e435a18c2 - requires_dist: - - jinja2>=2.9 - - contourpy>=1.2 - - numpy>=1.16 - - packaging>=16.8 - - pandas>=1.2 - - pillow>=7.1.0 - - pyyaml>=3.10 - - tornado>=6.2 - - xyzservices>=2021.9.1 - requires_python: '>=3.10' -- kind: conda - name: bzip2 - version: 1.0.8 - build: h99b78c6_7 - build_number: 7 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda - sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 - md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab - depends: - - __osx >=11.0 - license: bzip2-1.0.6 - license_family: BSD - purls: [] - size: 122909 - timestamp: 1720974522888 -- kind: conda - name: c-ares - version: 1.34.4 - build: h5505292_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/c-ares-1.34.4-h5505292_0.conda - sha256: 09c0c8476e50b2955f474a4a1c17c4c047dd52993b5366b6ea8e968e583b921f - md5: c1c999a38a4303b29d75c636eaa13cf9 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 179496 - timestamp: 1734208291879 -- kind: conda - name: ca-certificates - version: 2025.1.31 - build: hf0a4a13_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda - sha256: 7e12816618173fe70f5c638b72adf4bfd4ddabf27794369bb17871c5bb75b9f9 - md5: 3569d6a9141adc64d2fe4797f3289e06 - license: ISC - purls: [] - size: 158425 - timestamp: 1738298167688 -- kind: pypi - name: cachetools - version: 5.5.1 - url: https://files.pythonhosted.org/packages/ec/4e/de4ff18bcf55857ba18d3a4bd48c8a9fde6bb0980c9d20b263f05387fd88/cachetools-5.5.1-py3-none-any.whl - sha256: b76651fdc3b24ead3c648bbdeeb940c1b04d365b38b4af66788f9ec4a81d42bb - requires_python: '>=3.7' -- kind: pypi - name: certifi - version: 2025.1.31 - url: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - sha256: ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe - requires_python: '>=3.6' -- kind: pypi - name: charset-normalizer - version: 3.4.1 - url: https://files.pythonhosted.org/packages/0a/9a/dd1e1cdceb841925b7798369a09279bd1cf183cef0f9ddf15a3a6502ee45/charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl - sha256: 73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545 - requires_python: '>=3.7' -- kind: pypi - name: click - version: 8.1.8 - url: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - sha256: 63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 - requires_dist: - - colorama ; platform_system == 'Windows' - - importlib-metadata ; python_full_version < '3.8' - requires_python: '>=3.7' -- kind: pypi - name: click-plugins - version: 1.1.1 - url: https://files.pythonhosted.org/packages/e9/da/824b92d9942f4e472702488857914bdd50f73021efea15b4cad9aca8ecef/click_plugins-1.1.1-py2.py3-none-any.whl - sha256: 5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8 - requires_dist: - - click>=4.0 - - pytest>=3.6 ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - wheel ; extra == 'dev' - - coveralls ; extra == 'dev' -- kind: pypi - name: cligj - version: 0.7.2 - url: https://files.pythonhosted.org/packages/73/86/43fa9f15c5b9fb6e82620428827cd3c284aa933431405d1bcf5231ae3d3e/cligj-0.7.2-py3-none-any.whl - sha256: c1ca117dbce1fe20a5809dc96f01e1c2840f6dcc939b3ddbb1111bf330ba82df - requires_dist: - - click>=4.0 - - pytest-cov ; extra == 'test' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,<4' -- kind: pypi - name: cloudpickle - version: 2.2.1 - url: https://files.pythonhosted.org/packages/15/80/44286939ca215e88fa827b2aeb6fa3fd2b4a7af322485c7170d6f9fd96e0/cloudpickle-2.2.1-py3-none-any.whl - sha256: 61f594d1f4c295fa5cd9014ceb3a1fc4a70b0de1164b94fbc2d854ccba056f9f - requires_python: '>=3.6' -- kind: conda - name: colorama - version: 0.4.6 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - sha256: ab29d57dc70786c1269633ba3dff20288b81664d3ff8d21af995742e2bb03287 - md5: 962b9857ee8e7018c22f2776ffa0b2d7 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/colorama?source=hash-mapping - size: 27011 - timestamp: 1733218222191 -- kind: pypi - name: contourpy - version: 1.3.1 - url: https://files.pythonhosted.org/packages/6b/6a/7833cfae2c1e63d1d8875a50fd23371394f540ce809d7383550681a1fa64/contourpy-1.3.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: 805617228ba7e2cbbfb6c503858e626ab528ac2a32a04a2fe88ffaf6b02c32bc - requires_dist: - - numpy>=1.23 - - furo ; extra == 'docs' - - sphinx>=7.2 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - bokeh ; extra == 'bokeh' - - selenium ; extra == 'bokeh' - - contourpy[bokeh,docs] ; extra == 'mypy' - - docutils-stubs ; extra == 'mypy' - - mypy==1.11.1 ; extra == 'mypy' - - types-pillow ; extra == 'mypy' - - contourpy[test-no-images] ; extra == 'test' - - matplotlib ; extra == 'test' - - pillow ; extra == 'test' - - pytest ; extra == 'test-no-images' - - pytest-cov ; extra == 'test-no-images' - - pytest-rerunfailures ; extra == 'test-no-images' - - pytest-xdist ; extra == 'test-no-images' - - wurlitzer ; extra == 'test-no-images' - requires_python: '>=3.10' -- kind: pypi - name: crc32c - version: 2.7.1 - url: https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: afd778fc8ac0ed2ffbfb122a9aa6a0e409a8019b894a1799cda12c01534493e0 - requires_python: '>=3.7' -- kind: pypi - name: crcmod - version: '1.7' - url: https://files.pythonhosted.org/packages/6b/b0/e595ce2a2527e169c3bcd6c33d2473c1918e0b7f6826a043ca1245dd4e5b/crcmod-1.7.tar.gz - sha256: dc7051a0db5f2bd48665a990d3ec1cc305a466a77358ca4492826f41f283601e -- kind: pypi - name: dask - version: 2024.8.0 - url: https://files.pythonhosted.org/packages/db/47/136a5dd68a33089f96f8aa1178ccd545d325ec9ab2bb42a3038711a935c0/dask-2024.8.0-py3-none-any.whl - sha256: 250ea3df30d4a25958290eec4f252850091c6cfaed82d098179c3b25bba18309 - requires_dist: - - click>=8.1 - - cloudpickle>=1.5.0 - - fsspec>=2021.9.0 - - packaging>=20.0 - - partd>=1.4.0 - - pyyaml>=5.3.1 - - toolz>=0.10.0 - - importlib-metadata>=4.13.0 ; python_full_version < '3.12' - - numpy>=1.21 ; extra == 'array' - - dask[array,dataframe,diagnostics,distributed] ; extra == 'complete' - - pyarrow>=7.0 ; extra == 'complete' - - pyarrow-hotfix ; extra == 'complete' - - lz4>=4.3.2 ; extra == 'complete' - - dask[array] ; extra == 'dataframe' - - pandas>=2.0 ; extra == 'dataframe' - - dask-expr>=1.1,<1.2 ; extra == 'dataframe' - - bokeh>=2.4.2 ; extra == 'diagnostics' - - jinja2>=2.10.3 ; extra == 'diagnostics' - - distributed==2024.8.0 ; extra == 'distributed' - - pandas[test] ; extra == 'test' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-rerunfailures ; extra == 'test' - - pytest-timeout ; extra == 'test' - - pytest-xdist ; extra == 'test' - - pre-commit ; extra == 'test' - requires_python: '>=3.9' -- kind: pypi - name: dask-expr - version: 1.1.10 - url: https://files.pythonhosted.org/packages/2c/e3/cf7a05892b04b22b9e28ec25f8bc2acaa0304bf3128f76031e4363b63e21/dask_expr-1.1.10-py3-none-any.whl - sha256: c6365c6fa6d3e386c5ee79bd20d4c89e566c0cf78fb6c762f74b2f04028935c6 - requires_dist: - - dask==2024.8.0 - - pyarrow>=7.0.0 - - pandas>=2 - - crick ; extra == 'analyze' - - distributed ; extra == 'analyze' - requires_python: '>=3.9' -- kind: conda - name: dav1d - version: 1.2.1 - build: hb547adb_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/dav1d-1.2.1-hb547adb_0.conda - sha256: 93e077b880a85baec8227e8c72199220c7f87849ad32d02c14fb3807368260b8 - md5: 5a74cdee497e6b65173e10d94582fae6 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 316394 - timestamp: 1685695959391 -- kind: pypi - name: decorator - version: 5.1.1 - url: https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl - sha256: b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 - requires_python: '>=3.5' -- kind: pypi - name: deprecated - version: 1.2.18 - url: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl - sha256: bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec - requires_dist: - - wrapt>=1.10,<2 - - tox ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - bump2version<1 ; extra == 'dev' - - setuptools ; python_full_version >= '3.12' and extra == 'dev' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' -- kind: pypi - name: dill - version: 0.3.1.1 - url: https://files.pythonhosted.org/packages/c7/11/345f3173809cea7f1a193bfbf02403fff250a3360e0e118a1630985e547d/dill-0.3.1.1.tar.gz - sha256: 42d8ef819367516592a825746a18073ced42ca169ab1f5f4044134703e7a049c - requires_dist: - - objgraph>=1.7.2 ; extra == 'graph' - requires_python: '>=2.6,!=3.0.*' -- kind: pypi - name: distributed - version: 2024.8.0 - url: https://files.pythonhosted.org/packages/95/8a/d828dea3a1b6d7e796bebd8c64dc40d44d9a60762f759a11a61386eb38b5/distributed-2024.8.0-py3-none-any.whl - sha256: 11af55d22dd6e04eb868b87f166b8f59ef1b300f659f87c016643b7f98280ec6 - requires_dist: - - click>=8.0 - - cloudpickle>=1.5.0 - - dask==2024.8.0 - - jinja2>=2.10.3 - - locket>=1.0.0 - - msgpack>=1.0.0 - - packaging>=20.0 - - psutil>=5.7.2 - - pyyaml>=5.3.1 - - sortedcontainers>=2.0.5 - - tblib>=1.6.0 - - toolz>=0.10.0 - - tornado>=6.0.4 - - urllib3>=1.24.3 - - zict>=3.0.0 - requires_python: '>=3.9' -- kind: pypi - name: dnspython - version: 2.7.0 - url: https://files.pythonhosted.org/packages/68/1b/e0a87d256e40e8c888847551b20a017a6b98139178505dc7ffb96f04e954/dnspython-2.7.0-py3-none-any.whl - sha256: b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86 - requires_dist: - - black>=23.1.0 ; extra == 'dev' - - coverage>=7.0 ; extra == 'dev' - - flake8>=7 ; extra == 'dev' - - hypercorn>=0.16.0 ; extra == 'dev' - - mypy>=1.8 ; extra == 'dev' - - pylint>=3 ; extra == 'dev' - - pytest-cov>=4.1.0 ; extra == 'dev' - - pytest>=7.4 ; extra == 'dev' - - quart-trio>=0.11.0 ; extra == 'dev' - - sphinx-rtd-theme>=2.0.0 ; extra == 'dev' - - sphinx>=7.2.0 ; extra == 'dev' - - twine>=4.0.0 ; extra == 'dev' - - wheel>=0.42.0 ; extra == 'dev' - - cryptography>=43 ; extra == 'dnssec' - - h2>=4.1.0 ; extra == 'doh' - - httpcore>=1.0.0 ; extra == 'doh' - - httpx>=0.26.0 ; extra == 'doh' - - aioquic>=1.0.0 ; extra == 'doq' - - idna>=3.7 ; extra == 'idna' - - trio>=0.23 ; extra == 'trio' - - wmi>=1.5.1 ; extra == 'wmi' - requires_python: '>=3.9' -- kind: pypi - name: docopt - version: 0.6.2 - url: https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz - sha256: 49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491 -- kind: pypi - name: docstring-parser - version: '0.16' - url: https://files.pythonhosted.org/packages/d5/7c/e9fcff7623954d86bdc17782036cbf715ecab1bec4847c008557affe1ca8/docstring_parser-0.16-py3-none-any.whl - sha256: bf0a1387354d3691d102edef7ec124f219ef639982d096e26e3b60aeffa90637 - requires_python: '>=3.6,<4.0' -- kind: pypi - name: donfig - version: 0.8.1.post1 - url: https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl - sha256: 2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d - requires_dist: - - pyyaml - - sphinx>=4.0.0 ; extra == 'docs' - - numpydoc ; extra == 'docs' - - pytest ; extra == 'docs' - - cloudpickle ; extra == 'docs' - - pytest ; extra == 'test' - - cloudpickle ; extra == 'test' - requires_python: '>=3.8' -- kind: pypi - name: earthengine-api - version: 1.5.0 - url: https://files.pythonhosted.org/packages/0c/12/63ed9f3baa44816c47bfeeebf820083d89245a2d382940263a9fc8e51754/earthengine_api-1.5.0-py3-none-any.whl - sha256: 7bc0dec75c19eaa20dee1a98d4642efd288dc20e9789de0f2f14e3179de227c5 - requires_dist: - - google-cloud-storage - - google-api-python-client>=1.12.1 - - google-auth>=1.4.1 - - google-auth-httplib2>=0.0.3 - - httplib2>=0.9.2,<1.dev0 - - requests - - absl-py ; extra == 'tests' - - geopandas ; extra == 'tests' - - numpy ; extra == 'tests' - requires_python: '>=3.9' -- kind: conda - name: exceptiongroup - version: 1.2.2 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_1.conda - sha256: cbde2c64ec317118fc06b223c5fd87c8a680255e7348dd60e7b292d2e103e701 - md5: a16662747cdeb9abbac74d0057cc976e - depends: - - python >=3.9 - license: MIT and PSF-2.0 - purls: - - pkg:pypi/exceptiongroup?source=hash-mapping - size: 20486 - timestamp: 1733208916977 -- kind: pypi - name: fastavro - version: 1.10.0 - url: https://files.pythonhosted.org/packages/9c/a4/8e69c0a5cd121e5d476237de1bde5a7947f791ae45768ae52ed0d3ea8d18/fastavro-1.10.0-cp312-cp312-macosx_10_13_universal2.whl - sha256: cfe57cb0d72f304bd0dcc5a3208ca6a7363a9ae76f3073307d095c9d053b29d4 - requires_dist: - - cramjam ; extra == 'codecs' - - zstandard ; extra == 'codecs' - - lz4 ; extra == 'codecs' - - cramjam ; extra == 'snappy' - - zstandard ; extra == 'zstandard' - - lz4 ; extra == 'lz4' - requires_python: '>=3.9' -- kind: pypi - name: fasteners - version: '0.19' - url: https://files.pythonhosted.org/packages/61/bf/fd60001b3abc5222d8eaa4a204cd8c0ae78e75adc688f33ce4bf25b7fafa/fasteners-0.19-py3-none-any.whl - sha256: 758819cb5d94cdedf4e836988b74de396ceacb8e2794d21f82d131fd9ee77237 - requires_python: '>=3.6' -- kind: conda - name: freexl - version: 2.0.0 - build: h3ab3353_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/freexl-2.0.0-h3ab3353_2.conda - sha256: b4146ac9ba1676494e3d812ca39664dd7dd454e4d0984f3665fd6feec318c71c - md5: dd655a29b40fe0d1bf95c64cf3cb348d - depends: - - __osx >=11.0 - - libexpat >=2.6.4,<3.0a0 - - libiconv >=1.17,<2.0a0 - - minizip >=4.0.7,<5.0a0 - license: MPL-1.1 - license_family: MOZILLA - purls: [] - size: 53378 - timestamp: 1734014980768 -- kind: pypi - name: frozenlist - version: 1.5.0 - url: https://files.pythonhosted.org/packages/d0/9a/8e479b482a6f2070b26bda572c5e6889bb3ba48977e81beea35b5ae13ece/frozenlist-1.5.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 7948140d9f8ece1745be806f2bfdf390127cf1a763b925c4a805c603df5e697e - requires_python: '>=3.8' -- kind: pypi - name: fsspec - version: 2025.2.0 - url: https://files.pythonhosted.org/packages/e2/94/758680531a00d06e471ef649e4ec2ed6bf185356a7f9fbfbb7368a40bd49/fsspec-2025.2.0-py3-none-any.whl - sha256: 9de2ad9ce1f85e1931858535bc882543171d197001a0a5eb2ddc04f1781ab95b - requires_dist: - - adlfs ; extra == 'abfs' - - adlfs ; extra == 'adl' - - pyarrow>=1 ; extra == 'arrow' - - dask ; extra == 'dask' - - distributed ; extra == 'dask' - - pre-commit ; extra == 'dev' - - ruff ; extra == 'dev' - - numpydoc ; extra == 'doc' - - sphinx ; extra == 'doc' - - sphinx-design ; extra == 'doc' - - sphinx-rtd-theme ; extra == 'doc' - - yarl ; extra == 'doc' - - dropbox ; extra == 'dropbox' - - dropboxdrivefs ; extra == 'dropbox' - - requests ; extra == 'dropbox' - - adlfs ; extra == 'full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'full' - - dask ; extra == 'full' - - distributed ; extra == 'full' - - dropbox ; extra == 'full' - - dropboxdrivefs ; extra == 'full' - - fusepy ; extra == 'full' - - gcsfs ; extra == 'full' - - libarchive-c ; extra == 'full' - - ocifs ; extra == 'full' - - panel ; extra == 'full' - - paramiko ; extra == 'full' - - pyarrow>=1 ; extra == 'full' - - pygit2 ; extra == 'full' - - requests ; extra == 'full' - - s3fs ; extra == 'full' - - smbprotocol ; extra == 'full' - - tqdm ; extra == 'full' - - fusepy ; extra == 'fuse' - - gcsfs ; extra == 'gcs' - - pygit2 ; extra == 'git' - - requests ; extra == 'github' - - gcsfs ; extra == 'gs' - - panel ; extra == 'gui' - - pyarrow>=1 ; extra == 'hdfs' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'http' - - libarchive-c ; extra == 'libarchive' - - ocifs ; extra == 'oci' - - s3fs ; extra == 's3' - - paramiko ; extra == 'sftp' - - smbprotocol ; extra == 'smb' - - paramiko ; extra == 'ssh' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test' - - numpy ; extra == 'test' - - pytest ; extra == 'test' - - pytest-asyncio!=0.22.0 ; extra == 'test' - - pytest-benchmark ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mock ; extra == 'test' - - pytest-recording ; extra == 'test' - - pytest-rerunfailures ; extra == 'test' - - requests ; extra == 'test' - - aiobotocore>=2.5.4,<3.0.0 ; extra == 'test-downstream' - - dask[dataframe,test] ; extra == 'test-downstream' - - moto[server]>4,<5 ; extra == 'test-downstream' - - pytest-timeout ; extra == 'test-downstream' - - xarray ; extra == 'test-downstream' - - adlfs ; extra == 'test-full' - - aiohttp!=4.0.0a0,!=4.0.0a1 ; extra == 'test-full' - - cloudpickle ; extra == 'test-full' - - dask ; extra == 'test-full' - - distributed ; extra == 'test-full' - - dropbox ; extra == 'test-full' - - dropboxdrivefs ; extra == 'test-full' - - fastparquet ; extra == 'test-full' - - fusepy ; extra == 'test-full' - - gcsfs ; extra == 'test-full' - - jinja2 ; extra == 'test-full' - - kerchunk ; extra == 'test-full' - - libarchive-c ; extra == 'test-full' - - lz4 ; extra == 'test-full' - - notebook ; extra == 'test-full' - - numpy ; extra == 'test-full' - - ocifs ; extra == 'test-full' - - pandas ; extra == 'test-full' - - panel ; extra == 'test-full' - - paramiko ; extra == 'test-full' - - pyarrow ; extra == 'test-full' - - pyarrow>=1 ; extra == 'test-full' - - pyftpdlib ; extra == 'test-full' - - pygit2 ; extra == 'test-full' - - pytest ; extra == 'test-full' - - pytest-asyncio!=0.22.0 ; extra == 'test-full' - - pytest-benchmark ; extra == 'test-full' - - pytest-cov ; extra == 'test-full' - - pytest-mock ; extra == 'test-full' - - pytest-recording ; extra == 'test-full' - - pytest-rerunfailures ; extra == 'test-full' - - python-snappy ; extra == 'test-full' - - requests ; extra == 'test-full' - - smbprotocol ; extra == 'test-full' - - tqdm ; extra == 'test-full' - - urllib3 ; extra == 'test-full' - - zarr ; extra == 'test-full' - - zstandard ; extra == 'test-full' - - tqdm ; extra == 'tqdm' - requires_python: '>=3.8' -- kind: pypi - name: gcsfs - version: 0.8.0 - url: https://files.pythonhosted.org/packages/6e/49/2dbc00f89ab9e7513faee7927ea0c649d68eb721108aee860380eaf86ff4/gcsfs-0.8.0-py2.py3-none-any.whl - sha256: 9fc5a9efe7e244a44a880c97c663ad986bb36f1e65e725d272fad9de0c0a1580 - requires_dist: - - google-auth>=1.2 - - google-auth-oauthlib - - requests - - decorator - - fsspec>=0.8.0 - - aiohttp - - ujson - - crcmod ; extra == 'crc' - - fusepy ; extra == 'gcsfuse' - requires_python: '>=3.6' -- kind: conda - name: gdal - version: 3.10.1 - build: py312h1afea5f_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/gdal-3.10.1-py312h1afea5f_2.conda - sha256: db13033b6bacf55a4d1b8f964e5b156d0bdb6f2bc81b0eb1746de2ae5be75155 - md5: 955bf5ea321e423f16a94655b893cd98 - depends: - - __osx >=11.0 - - libcxx >=18 - - libgdal-core 3.10.1.* - - libkml >=1.3.0,<1.4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libxml2 >=2.13.5,<3.0a0 - - numpy >=1.19,<3 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - license: MIT - license_family: MIT - purls: - - pkg:pypi/gdal?source=hash-mapping - size: 1667630 - timestamp: 1737610863982 -- kind: conda - name: geos - version: 3.13.0 - build: hf9b8971_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.13.0-hf9b8971_0.conda - sha256: 273381020b72bde1597d4e07e855ed50ffac083512e61ccbdd99d93f03c6cbf2 - md5: 45b2e9adb9663644b1eefa5300b9eef3 - depends: - - __osx >=11.0 - - libcxx >=17 - license: LGPL-2.1-only - purls: [] - size: 1481430 - timestamp: 1725676193541 -- kind: conda - name: geotiff - version: 1.7.3 - build: h82bf549_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/geotiff-1.7.3-h82bf549_3.conda - sha256: 7ce4d6dced3cd313ea170db69d6929b88d77ebd40715f9f38c3bcba3633d6c65 - md5: cb84033d7c167a16c4577272b4493bc5 - depends: - - __osx >=11.0 - - libcxx >=17 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libtiff >=4.6.0,<4.8.0a0 - - libzlib >=1.3.1,<2.0a0 - - proj >=9.5.0,<9.6.0a0 - - zlib - license: MIT - license_family: MIT - purls: [] - size: 113739 - timestamp: 1726603324989 -- kind: conda - name: giflib - version: 5.2.2 - build: h93a5062_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - sha256: 843b3f364ff844137e37d5c0a181f11f6d51adcedd216f019d074e5aa5d7e09c - md5: 95fa1486c77505330c20f7202492b913 - license: MIT - license_family: MIT - purls: [] - size: 71613 - timestamp: 1712692611426 -- kind: pypi - name: google-api-core - version: 2.24.1 - url: https://files.pythonhosted.org/packages/b1/a6/8e30ddfd3d39ee6d2c76d3d4f64a83f77ac86a4cab67b286ae35ce9e4369/google_api_core-2.24.1-py3-none-any.whl - sha256: bc78d608f5a5bf853b80bd70a795f703294de656c096c0968320830a4bc280f1 - requires_dist: - - googleapis-common-protos>=1.56.2,<2.0.dev0 - - protobuf>=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - google-auth>=2.14.1,<3.0.dev0 - - requests>=2.18.0,<3.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - - google-auth[aiohttp]>=2.35.0,<3.0.dev0 ; extra == 'async-rest' - - grpcio>=1.33.2,<2.0.dev0 ; extra == 'grpc' - - grpcio-status>=1.33.2,<2.0.dev0 ; extra == 'grpc' - - grpcio>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'grpc' - - grpcio-status>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'grpc' - - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcgcp' - - grpcio-gcp>=0.2.2,<1.0.dev0 ; extra == 'grpcio-gcp' - requires_python: '>=3.7' -- kind: pypi - name: google-api-python-client - version: 2.160.0 - url: https://files.pythonhosted.org/packages/49/35/41623ac3b581781169eed7f5fcd24bc114c774dc491fab5c05d8eb81af36/google_api_python_client-2.160.0-py2.py3-none-any.whl - sha256: 63d61fb3e4cf3fb31a70a87f45567c22f6dfe87bbfa27252317e3e2c42900db4 - requires_dist: - - httplib2>=0.19.0,<1.dev0 - - google-auth>=1.32.0,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - google-auth-httplib2>=0.2.0,<1.0.0 - - google-api-core>=1.31.5,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 - - uritemplate>=3.0.1,<5 - requires_python: '>=3.7' -- kind: pypi - name: google-apitools - version: 0.5.31 - url: https://files.pythonhosted.org/packages/19/da/aefc4cf4c168b5d875344cd9dddc77e3a2d11986b630251af5ce47dd2843/google-apitools-0.5.31.tar.gz - sha256: 4af0dd6dd4582810690251f0b57a97c1873dadfda54c5bc195844c8907624170 - requires_dist: - - httplib2>=0.8 - - fasteners>=0.14 - - oauth2client>=1.4.12 - - six>=1.12.0 - - python-gflags>=3.0.6 ; extra == 'cli' - - mock>=1.0.1 ; extra == 'testing' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' -- kind: pypi - name: google-auth - version: 2.38.0 - url: https://files.pythonhosted.org/packages/9d/47/603554949a37bca5b7f894d51896a9c534b9eab808e2520a748e081669d0/google_auth-2.38.0-py2.py3-none-any.whl - sha256: e7dae6694313f434a2727bf2906f27ad259bae090d7aa896590d86feec3d9d4a - requires_dist: - - cachetools>=2.0.0,<6.0 - - pyasn1-modules>=0.2.1 - - rsa>=3.1.4,<5 - - aiohttp>=3.6.2,<4.0.0.dev0 ; extra == 'aiohttp' - - requests>=2.20.0,<3.0.0.dev0 ; extra == 'aiohttp' - - cryptography ; extra == 'enterprise-cert' - - pyopenssl ; extra == 'enterprise-cert' - - pyjwt>=2.0 ; extra == 'pyjwt' - - cryptography>=38.0.3 ; extra == 'pyjwt' - - pyopenssl>=20.0.0 ; extra == 'pyopenssl' - - cryptography>=38.0.3 ; extra == 'pyopenssl' - - pyu2f>=0.1.5 ; extra == 'reauth' - - requests>=2.20.0,<3.0.0.dev0 ; extra == 'requests' - requires_python: '>=3.7' -- kind: pypi - name: google-auth-httplib2 - version: 0.2.0 - url: https://files.pythonhosted.org/packages/be/8a/fe34d2f3f9470a27b01c9e76226965863f153d5fbe276f83608562e49c04/google_auth_httplib2-0.2.0-py2.py3-none-any.whl - sha256: b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d - requires_dist: - - google-auth - - httplib2>=0.19.0 -- kind: pypi - name: google-auth-oauthlib - version: 1.2.1 - url: https://files.pythonhosted.org/packages/1a/8e/22a28dfbd218033e4eeaf3a0533b2b54852b6530da0c0fe934f0cc494b29/google_auth_oauthlib-1.2.1-py2.py3-none-any.whl - sha256: 2d58a27262d55aa1b87678c3ba7142a080098cbc2024f903c62355deb235d91f - requires_dist: - - google-auth>=2.15.0 - - requests-oauthlib>=0.7.0 - - click>=6.0.0 ; extra == 'tool' - requires_python: '>=3.6' -- kind: pypi - name: google-cloud-aiplatform - version: 1.79.0 - url: https://files.pythonhosted.org/packages/d9/df/a7629fc1c405ead82249a70903068992932cc5a8c494c396e22995b4429d/google_cloud_aiplatform-1.79.0-py2.py3-none-any.whl - sha256: e52d518c386ce2b4ce57f1b73b46c57531d9a6ccd70c21a37b349f428bfc1c3f - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0.dev0 - - google-auth>=2.14.1,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - packaging>=14.3 - - google-cloud-storage>=1.32.0,<3.0.0.dev0 - - google-cloud-bigquery>=1.15.0,!=3.20.0,<4.0.0.dev0 - - google-cloud-resource-manager>=1.3.3,<3.0.0.dev0 - - shapely<3.0.0.dev0 - - pydantic<3 - - typing-extensions - - docstring-parser<1 - - mlflow>=1.27.0,<=2.16.0 ; extra == 'autologging' - - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'cloud-profiler' - - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'cloud-profiler' - - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'cloud-profiler' - - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'datasets' - - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'datasets' - - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'datasets' - - requests>=2.28.1 ; extra == 'endpoint' - - pandas>=1.0.0 ; extra == 'evaluation' - - tqdm>=4.23.0 ; extra == 'evaluation' - - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'evaluation' - - scikit-learn ; python_full_version >= '3.11' and extra == 'evaluation' - - google-cloud-bigquery ; extra == 'full' - - docker>=5.0.3 ; extra == 'full' - - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'full' - - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'full' - - urllib3>=1.21.1,<1.27 ; extra == 'full' - - mlflow>=1.27.0,<=2.16.0 ; extra == 'full' - - fastapi>=0.71.0,<=0.114.0 ; extra == 'full' - - uvicorn[standard]>=0.16.0 ; extra == 'full' - - requests>=2.28.1 ; extra == 'full' - - immutabledict ; extra == 'full' - - lit-nlp==0.4.0 ; extra == 'full' - - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'full' - - tqdm>=4.23.0 ; extra == 'full' - - pyyaml>=5.3.1,<7 ; extra == 'full' - - google-cloud-bigquery-storage ; extra == 'full' - - explainable-ai-sdk>=1.0.0 ; extra == 'full' - - setuptools<70.0.0 ; extra == 'full' - - starlette>=0.17.1 ; extra == 'full' - - pandas>=1.0.0 ; extra == 'full' - - numpy>=1.15.0 ; extra == 'full' - - pyarrow>=6.0.1 ; extra == 'full' - - google-vizier>=0.1.6 ; extra == 'full' - - httpx>=0.23.0,<0.25.0 ; extra == 'full' - - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'full' - - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'full' - - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'full' - - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'full' - - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'full' - - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'full' - - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'full' - - scikit-learn ; python_full_version >= '3.11' and extra == 'full' - - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'full' - - langchain>=0.1.16,<0.4 ; extra == 'langchain' - - langchain-core<0.4 ; extra == 'langchain' - - langchain-google-vertexai<3 ; extra == 'langchain' - - langgraph>=0.2.45,<0.3 ; extra == 'langchain' - - openinference-instrumentation-langchain>=0.1.19,<0.2 ; extra == 'langchain' - - langchain>=0.1.16,<0.4 ; extra == 'langchain-testing' - - langgraph>=0.2.45,<0.3 ; extra == 'langchain-testing' - - opentelemetry-sdk<2 ; extra == 'langchain-testing' - - langchain-google-vertexai<3 ; extra == 'langchain-testing' - - google-cloud-trace<2 ; extra == 'langchain-testing' - - typing-extensions ; extra == 'langchain-testing' - - pytest-xdist ; extra == 'langchain-testing' - - absl-py ; extra == 'langchain-testing' - - openinference-instrumentation-langchain>=0.1.19,<0.2 ; extra == 'langchain-testing' - - cloudpickle>=3.0,<4.0 ; extra == 'langchain-testing' - - opentelemetry-exporter-gcp-trace<2 ; extra == 'langchain-testing' - - langchain-core<0.4 ; extra == 'langchain-testing' - - pydantic>=2.6.3,<3 ; extra == 'langchain-testing' - - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'lit' - - pandas>=1.0.0 ; extra == 'lit' - - lit-nlp==0.4.0 ; extra == 'lit' - - explainable-ai-sdk>=1.0.0 ; extra == 'lit' - - pandas>=1.0.0 ; extra == 'metadata' - - numpy>=1.15.0 ; extra == 'metadata' - - pyyaml>=5.3.1,<7 ; extra == 'pipelines' - - docker>=5.0.3 ; extra == 'prediction' - - fastapi>=0.71.0,<=0.114.0 ; extra == 'prediction' - - httpx>=0.23.0,<0.25.0 ; extra == 'prediction' - - starlette>=0.17.1 ; extra == 'prediction' - - uvicorn[standard]>=0.16.0 ; extra == 'prediction' - - urllib3>=1.21.1,<1.27 ; extra == 'private-endpoints' - - requests>=2.28.1 ; extra == 'private-endpoints' - - setuptools<70.0.0 ; extra == 'ray' - - google-cloud-bigquery-storage ; extra == 'ray' - - google-cloud-bigquery ; extra == 'ray' - - pandas>=1.0.0 ; extra == 'ray' - - pyarrow>=6.0.1 ; extra == 'ray' - - immutabledict ; extra == 'ray' - - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'ray' - - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'ray' - - setuptools<70.0.0 ; extra == 'ray-testing' - - google-cloud-bigquery-storage ; extra == 'ray-testing' - - google-cloud-bigquery ; extra == 'ray-testing' - - pandas>=1.0.0 ; extra == 'ray-testing' - - pyarrow>=6.0.1 ; extra == 'ray-testing' - - immutabledict ; extra == 'ray-testing' - - pytest-xdist ; extra == 'ray-testing' - - ray[train] ; extra == 'ray-testing' - - scikit-learn<1.6.0 ; extra == 'ray-testing' - - tensorflow ; extra == 'ray-testing' - - torch>=2.0.0,<2.1.0 ; extra == 'ray-testing' - - xgboost ; extra == 'ray-testing' - - xgboost-ray ; extra == 'ray-testing' - - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'ray-testing' - - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'ray-testing' - - cloudpickle>=3.0,<4.0 ; extra == 'reasoningengine' - - google-cloud-trace<2 ; extra == 'reasoningengine' - - opentelemetry-sdk<2 ; extra == 'reasoningengine' - - opentelemetry-exporter-gcp-trace<2 ; extra == 'reasoningengine' - - pydantic>=2.6.3,<3 ; extra == 'reasoningengine' - - typing-extensions ; extra == 'reasoningengine' - - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'tensorboard' - - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'tensorboard' - - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'tensorboard' - - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'tensorboard' - - google-cloud-bigquery ; extra == 'testing' - - docker>=5.0.3 ; extra == 'testing' - - tensorboard-plugin-profile>=2.4.0,<2.18.0 ; extra == 'testing' - - werkzeug>=2.0.0,<2.1.0.dev0 ; extra == 'testing' - - urllib3>=1.21.1,<1.27 ; extra == 'testing' - - mlflow>=1.27.0,<=2.16.0 ; extra == 'testing' - - fastapi>=0.71.0,<=0.114.0 ; extra == 'testing' - - uvicorn[standard]>=0.16.0 ; extra == 'testing' - - requests>=2.28.1 ; extra == 'testing' - - immutabledict ; extra == 'testing' - - lit-nlp==0.4.0 ; extra == 'testing' - - tensorflow>=2.4.0,<3.0.0.dev0 ; extra == 'testing' - - tqdm>=4.23.0 ; extra == 'testing' - - pyyaml>=5.3.1,<7 ; extra == 'testing' - - google-cloud-bigquery-storage ; extra == 'testing' - - explainable-ai-sdk>=1.0.0 ; extra == 'testing' - - setuptools<70.0.0 ; extra == 'testing' - - starlette>=0.17.1 ; extra == 'testing' - - pandas>=1.0.0 ; extra == 'testing' - - numpy>=1.15.0 ; extra == 'testing' - - pyarrow>=6.0.1 ; extra == 'testing' - - google-vizier>=0.1.6 ; extra == 'testing' - - httpx>=0.23.0,<0.25.0 ; extra == 'testing' - - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'testing' - - sentencepiece>=0.2.0 ; extra == 'testing' - - nltk ; extra == 'testing' - - aiohttp ; extra == 'testing' - - google-api-core>=2.11,<3.0.0 ; extra == 'testing' - - grpcio-testing ; extra == 'testing' - - ipython ; extra == 'testing' - - kfp>=2.6.0,<3.0.0 ; extra == 'testing' - - pytest-asyncio ; extra == 'testing' - - pytest-xdist ; extra == 'testing' - - requests-toolbelt<1.0.0 ; extra == 'testing' - - xgboost ; extra == 'testing' - - ray[default]>=2.4,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.0,!=2.9.1,!=2.9.2,!=2.10.*,!=2.11.*,!=2.12.*,!=2.13.*,!=2.14.*,!=2.15.*,!=2.16.*,!=2.17.*,!=2.18.*,!=2.19.*,!=2.20.*,!=2.21.*,!=2.22.*,!=2.23.*,!=2.24.*,!=2.25.*,!=2.26.*,!=2.27.*,!=2.28.*,!=2.29.*,!=2.30.*,!=2.31.*,!=2.32.*,<=2.33.0 ; python_full_version < '3.11' and extra == 'testing' - - pyarrow>=3.0.0,<8.0.dev0 ; python_full_version < '3.11' and extra == 'testing' - - scikit-learn<1.6.0 ; python_full_version < '3.11' and extra == 'testing' - - tensorflow>=2.3.0,<3.0.0.dev0 ; python_full_version < '3.12' and extra == 'testing' - - tensorflow==2.13.0 ; python_full_version < '3.12' and extra == 'testing' - - torch>=2.0.0,<2.1.0 ; python_full_version < '3.12' and extra == 'testing' - - pyarrow>=10.0.1 ; python_full_version == '3.11.*' and extra == 'testing' - - ray[default]>=2.5,<=2.33.0 ; python_full_version == '3.11.*' and extra == 'testing' - - scikit-learn ; python_full_version >= '3.11' and extra == 'testing' - - tensorflow==2.16.1 ; python_full_version >= '3.12' and extra == 'testing' - - torch>=2.2.0 ; python_full_version >= '3.12' and extra == 'testing' - - bigframes ; python_full_version >= '3.10' and extra == 'testing' - - pyarrow>=14.0.0 ; python_full_version >= '3.12' and extra == 'testing' - - sentencepiece>=0.2.0 ; extra == 'tokenization' - - google-vizier>=0.1.6 ; extra == 'vizier' - - tensorflow>=2.3.0,<3.0.0.dev0 ; extra == 'xai' - requires_python: '>=3.8' -- kind: pypi - name: google-cloud-bigquery - version: 3.29.0 - url: https://files.pythonhosted.org/packages/68/60/9e1430f0fe17f8e8e931eff468021516f74f2573f261221529767dd59591/google_cloud_bigquery-3.29.0-py2.py3-none-any.whl - sha256: 5453a4eabe50118254eda9778f3d7dad413490de5f7046b5e66c98f5a1580308 - requires_dist: - - google-api-core[grpc]>=2.11.1,<3.0.0.dev0 - - google-auth>=2.14.1,<3.0.0.dev0 - - google-cloud-core>=2.4.1,<3.0.0.dev0 - - google-resumable-media>=2.0.0,<3.0.dev0 - - packaging>=20.0.0 - - python-dateutil>=2.7.3,<3.0.dev0 - - requests>=2.21.0,<3.0.0.dev0 - - google-cloud-bigquery[bigquery-v2,bqstorage,geopandas,ipython,ipywidgets,opentelemetry,pandas,tqdm] ; extra == 'all' - - proto-plus>=1.22.3,<2.0.0.dev0 ; extra == 'bigquery-v2' - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 ; extra == 'bigquery-v2' - - google-cloud-bigquery-storage>=2.6.0,<3.0.0.dev0 ; extra == 'bqstorage' - - grpcio>=1.47.0,<2.0.dev0 ; extra == 'bqstorage' - - pyarrow>=3.0.0 ; extra == 'bqstorage' - - grpcio>=1.49.1,<2.0.dev0 ; python_full_version >= '3.11' and extra == 'bqstorage' - - geopandas>=0.9.0,<2.0.dev0 ; extra == 'geopandas' - - shapely>=1.8.4,<3.0.0.dev0 ; extra == 'geopandas' - - bigquery-magics>=0.1.0 ; extra == 'ipython' - - ipywidgets>=7.7.0 ; extra == 'ipywidgets' - - ipykernel>=6.0.0 ; extra == 'ipywidgets' - - opentelemetry-api>=1.1.0 ; extra == 'opentelemetry' - - opentelemetry-sdk>=1.1.0 ; extra == 'opentelemetry' - - opentelemetry-instrumentation>=0.20b0 ; extra == 'opentelemetry' - - pandas>=1.1.0 ; extra == 'pandas' - - pyarrow>=3.0.0 ; extra == 'pandas' - - db-dtypes>=0.3.0,<2.0.0.dev0 ; extra == 'pandas' - - importlib-metadata>=1.0.0 ; python_full_version < '3.8' and extra == 'pandas' - - tqdm>=4.7.4,<5.0.0.dev0 ; extra == 'tqdm' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-bigquery-storage - version: 2.27.0 - url: https://files.pythonhosted.org/packages/9f/ed/b7a74ae48435854ec2352f58c21e358df14458bafe4b0d237a8649326f9c/google_cloud_bigquery_storage-2.27.0-py2.py3-none-any.whl - sha256: 3bfa8f74a61ceaffd3bfe90be5bbef440ad81c1c19ac9075188cccab34bffc2b - requires_dist: - - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,<3.0.0.dev0 - - proto-plus>=1.22.0,<2.0.0.dev0 - - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' - - fastavro>=0.21.2 ; extra == 'fastavro' - - pandas>=0.21.1 ; extra == 'pandas' - - importlib-metadata>=1.0.0 ; python_full_version < '3.8' and extra == 'pandas' - - pyarrow>=0.15.0 ; extra == 'pyarrow' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-bigtable - version: 2.28.1 - url: https://files.pythonhosted.org/packages/f7/92/1a1e082cbc3a233b9ea4861b0124a1e8a37d6c59904e25f090e1a6038769/google_cloud_bigtable-2.28.1-py2.py3-none-any.whl - sha256: 1ae68b8092b70deb63b83273f0b335289ba8da57fc8c0e40c34103d67019de97 - requires_dist: - - google-api-core[grpc]>=2.16.0,<3.0.0.dev0 - - google-cloud-core>=1.4.4,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - libcst>=0.2.5 ; extra == 'libcst' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-core - version: 2.4.1 - url: https://files.pythonhosted.org/packages/5e/0f/2e2061e3fbcb9d535d5da3f58cc8de4947df1786fe6a1355960feb05a681/google_cloud_core-2.4.1-py2.py3-none-any.whl - sha256: a9e6a4422b9ac5c29f79a0ede9485473338e2ce78d91f2370c01e730eab22e61 - requires_dist: - - google-api-core>=1.31.6,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.0,<3.0.0.dev0 - - google-auth>=1.25.0,<3.0.dev0 - - importlib-metadata>1.0.0 ; python_full_version < '3.8' - - grpcio>=1.38.0,<2.0.dev0 ; extra == 'grpc' - - grpcio-status>=1.38.0,<2.0.dev0 ; extra == 'grpc' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-datastore - version: 2.20.2 - url: https://files.pythonhosted.org/packages/c6/0f/7af12d058dc907663a0d97fc268f02ebcecb31ca963e0d6ef439d65e09c4/google_cloud_datastore-2.20.2-py2.py3-none-any.whl - sha256: d2190180343b807d4aa3b0b3bb837606349b71e5e74e29aa9009c0ae38c0b6a0 - requires_dist: - - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - google-cloud-core>=1.4.0,<3.0.0.dev0 - - proto-plus>=1.22.0,<2.0.0.dev0 - - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' - - libcst>=0.2.5 ; extra == 'libcst' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-dlp - version: 3.26.0 - url: https://files.pythonhosted.org/packages/81/41/d9b818387c56bf96d0d03a076c0407f39eb64b9cae61c45af18820457f86/google_cloud_dlp-3.26.0-py2.py3-none-any.whl - sha256: 3f9e76b7a1c81af4012951435ed60c80623fc39d03e1e875a924013266b2a595 - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-language - version: 2.16.0 - url: https://files.pythonhosted.org/packages/e3/43/c103ffae8069d1e1da9e05fb0116a654a215b62b8585e4f916b2a68ed328/google_cloud_language-2.16.0-py2.py3-none-any.whl - sha256: 7e040425be5960cde34229fa850b9e4859e455157134aada52dc75490d59c1de - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-pubsub - version: 2.28.0 - url: https://files.pythonhosted.org/packages/b9/33/07636ce3dd59016ab88b98fbb9e614c76d8f210f5c8feec2db5891f6dc5d/google_cloud_pubsub-2.28.0-py2.py3-none-any.whl - sha256: 76b41a322b43bc845fb06ffe238758726324d957d0161bae3ff4b14339da144b - requires_dist: - - grpcio>=1.51.3,<2.0.dev0 - - google-auth>=2.14.1,<3.0.0.dev0 - - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - proto-plus>=1.22.0,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 - - grpcio-status>=1.33.2 - - opentelemetry-api<=1.22.0 ; python_full_version < '3.8' - - opentelemetry-sdk<=1.22.0 ; python_full_version < '3.8' - - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - - opentelemetry-api>=1.27.0 ; python_full_version >= '3.8' - - opentelemetry-sdk>=1.27.0 ; python_full_version >= '3.8' - - libcst>=0.3.10 ; extra == 'libcst' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-pubsublite - version: 1.11.1 - url: https://files.pythonhosted.org/packages/03/8b/f0cd7f3b16fe8ab0f449868b5d62868d7c03cd10326acd3472476305c2e3/google_cloud_pubsublite-1.11.1-py2.py3-none-any.whl - sha256: 8aa76f709d18c5bf730b3c6e49f0eefe80323d6c48972126ae02d032ce1a892d - requires_dist: - - google-cloud-pubsub>=2.10.0,<3.0.0.dev0 - - grpcio>=1.38.1,<2.0.0.dev0 - - grpcio-status>=1.38.1,<2.0.0.dev0 - - overrides>=6.0.1,<8.0.0 - - google-api-core[grpc]>=1.33.2,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,<3.0.0.dev0 - - overrides>=7.0.1,<8.0.0 ; python_full_version >= '3.12' - requires_python: '>=3.8' -- kind: pypi - name: google-cloud-recommendations-ai - version: 0.10.15 - url: https://files.pythonhosted.org/packages/3a/ed/c579fa8f48fb070ed50b3de4a9b72b3909197c57735b5b45cd977504d043/google_cloud_recommendations_ai-0.10.15-py2.py3-none-any.whl - sha256: 90c0ea658e3f869564a23944b1331a20e0b0b3bd105481611e3337b6fd667380 - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-resource-manager - version: 1.14.0 - url: https://files.pythonhosted.org/packages/64/c4/2275ca35419f9a2ae66846f389490b356856bf55a9ad9f95a88399a89294/google_cloud_resource_manager-1.14.0-py2.py3-none-any.whl - sha256: 4860c3ea9ace760b317ea90d4e27f1b32e54ededdcc340a7cb70c8ef238d8f7c - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-spanner - version: 3.51.0 - url: https://files.pythonhosted.org/packages/cc/b0/b0328d320d80d6963e7c4eb1e07a40d791f2c2847cda6af033141b02852a/google_cloud_spanner-3.51.0-py2.py3-none-any.whl - sha256: 2d01f33582526ebe7fab62034e92e722e512c21f6bc4abe27e03d86ef7ea576a - requires_dist: - - google-api-core[grpc]>=1.34.0,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-cloud-core>=1.4.4,<3.0.dev0 - - grpc-google-iam-v1>=0.12.4,<1.0.0.dev0 - - proto-plus>=1.22.0,<2.0.0.dev0 - - sqlparse>=0.4.4 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - grpc-interceptor>=0.15.4 - - proto-plus>=1.22.2,<2.0.0.dev0 ; python_full_version >= '3.11' - - libcst>=0.2.5 ; extra == 'libcst' - - opentelemetry-api>=1.22.0 ; extra == 'tracing' - - opentelemetry-sdk>=1.22.0 ; extra == 'tracing' - - opentelemetry-semantic-conventions>=0.43b0 ; extra == 'tracing' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-storage - version: 2.19.0 - url: https://files.pythonhosted.org/packages/d5/94/6db383d8ee1adf45dc6c73477152b82731fa4c4a46d9c1932cc8757e0fd4/google_cloud_storage-2.19.0-py2.py3-none-any.whl - sha256: aeb971b5c29cf8ab98445082cbfe7b161a1f48ed275822f59ed3f1524ea54fba - requires_dist: - - google-auth>=2.26.1,<3.0.dev0 - - google-api-core>=2.15.0,<3.0.0.dev0 - - google-cloud-core>=2.3.0,<3.0.dev0 - - google-resumable-media>=2.7.2 - - requests>=2.18.0,<3.0.0.dev0 - - google-crc32c>=1.0,<2.0.dev0 - - protobuf<6.0.0.dev0 ; extra == 'protobuf' - - opentelemetry-api>=1.1.0 ; extra == 'tracing' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-videointelligence - version: 2.15.0 - url: https://files.pythonhosted.org/packages/49/1a/108e7867b28c93274812ac8107202d93e338f9d190a05f877d41ce86391e/google_cloud_videointelligence-2.15.0-py2.py3-none-any.whl - sha256: a42909d96efbddac66ee872aaeadf875f976263834445e707581929d4ecf5999 - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-cloud-vision - version: 3.9.0 - url: https://files.pythonhosted.org/packages/b7/53/54440af12f0b198c8402c1b104a5dd955d49cd71ac4cd5d4a10a3c58a301/google_cloud_vision-3.9.0-py2.py3-none-any.whl - sha256: 9acec27ee05bd197f0d89c97e9719712ef245e0c37fd428e6af09a15a082fbef - requires_dist: - - google-api-core[grpc]>=1.34.1,!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,!=2.5.*,!=2.6.*,!=2.7.*,!=2.8.*,!=2.9.*,!=2.10.*,<3.0.0.dev0 - - google-auth>=2.14.1,!=2.24.0,!=2.25.0,<3.0.0.dev0 - - proto-plus>=1.22.3,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - proto-plus>=1.25.0,<2.0.0.dev0 ; python_full_version >= '3.13' - requires_python: '>=3.7' -- kind: pypi - name: google-crc32c - version: 1.6.0 - url: https://files.pythonhosted.org/packages/cf/41/65a91657d6a8123c6c12f9aac72127b6ac76dda9e2ba1834026a842eb77c/google_crc32c-1.6.0-cp312-cp312-macosx_12_0_arm64.whl - sha256: ed767bf4ba90104c1216b68111613f0d5926fb3780660ea1198fc469af410e9d - requires_dist: - - importlib-resources>=1.3 ; python_full_version < '3.9' and os_name == 'nt' - - pytest ; extra == 'testing' - requires_python: '>=3.9' -- kind: pypi - name: google-resumable-media - version: 2.7.2 - url: https://files.pythonhosted.org/packages/82/35/b8d3baf8c46695858cb9d8835a53baa1eeb9906ddaf2f728a5f5b640fd1e/google_resumable_media-2.7.2-py2.py3-none-any.whl - sha256: 3ce7551e9fe6d99e9a126101d2536612bb73486721951e9562fee0f90c6ababa - requires_dist: - - google-crc32c>=1.0,<2.0.dev0 - - aiohttp>=3.6.2,<4.0.0.dev0 ; extra == 'aiohttp' - - google-auth>=1.22.0,<2.0.dev0 ; extra == 'aiohttp' - - requests>=2.18.0,<3.0.0.dev0 ; extra == 'requests' - requires_python: '>=3.7' -- kind: pypi - name: googleapis-common-protos - version: 1.66.0 - url: https://files.pythonhosted.org/packages/a0/0f/c0713fb2b3d28af4b2fded3291df1c4d4f79a00d15c2374a9e010870016c/googleapis_common_protos-1.66.0-py2.py3-none-any.whl - sha256: d7abcd75fabb2e0ec9f74466401f6c119a0b498e27370e9be4c94cb7e382b8ed - requires_dist: - - protobuf!=3.20.0,!=3.20.1,>=3.20.2,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - - grpcio>=1.44.0,<2.0.0.dev0 ; extra == 'grpc' - requires_python: '>=3.7' -- kind: pypi - name: grpc-google-iam-v1 - version: 0.14.0 - url: https://files.pythonhosted.org/packages/66/b4/ab54f7fda4af43ca5c094bc1d6341780fd669c44ae18952b5337029b1d98/grpc_google_iam_v1-0.14.0-py2.py3-none-any.whl - sha256: fb4a084b30099ba3ab07d61d620a0d4429570b13ff53bd37bac75235f98b7da4 - requires_dist: - - grpcio>=1.44.0,<2.0.0.dev0 - - googleapis-common-protos[grpc]>=1.56.0,<2.0.0.dev0 - - protobuf>=3.20.2,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<6.0.0.dev0 - requires_python: '>=3.7' -- kind: pypi - name: grpc-interceptor - version: 0.15.4 - url: https://files.pythonhosted.org/packages/15/ac/8d53f230a7443401ce81791ec50a3b0e54924bf615ad287654fa4a2f5cdc/grpc_interceptor-0.15.4-py3-none-any.whl - sha256: 0035f33228693ed3767ee49d937bac424318db173fef4d2d0170b3215f254d9d - requires_dist: - - grpcio>=1.49.1,<2.0.0 - - protobuf>=4.21.9 ; extra == 'testing' - requires_python: '>=3.7,<4.0' -- kind: pypi - name: grpcio - version: 1.65.5 - url: https://files.pythonhosted.org/packages/6b/8c/35a8d0f7135dbeb87f522ec743cd06423dba8eaec6c891f9466b0f46284c/grpcio-1.65.5-cp312-cp312-macosx_10_9_universal2.whl - sha256: 76991b7a6fb98630a3328839755181ce7c1aa2b1842aa085fd4198f0e5198960 - requires_dist: - - grpcio-tools>=1.65.5 ; extra == 'protobuf' - requires_python: '>=3.8' -- kind: pypi - name: grpcio-status - version: 1.65.5 - url: https://files.pythonhosted.org/packages/9e/05/b21346efcf5bc01e3747ba6732f2f17bd04703f6a9a8a4ed8ff18119ebf0/grpcio_status-1.65.5-py3-none-any.whl - sha256: 44a445ce55375545a913e005be36fbec7999a4cc320d7aecb7a4469d3d49366c - requires_dist: - - protobuf>=5.26.1,<6.0.dev0 - - grpcio>=1.65.5 - - googleapis-common-protos>=1.5.5 - requires_python: '>=3.8' -- kind: pypi - name: hdfs - version: 2.7.3 - url: https://files.pythonhosted.org/packages/29/c7/1be559eb10cb7cac0d26373f18656c8037553619ddd4098e50b04ea8b4ab/hdfs-2.7.3.tar.gz - sha256: 752a21e43f82197dce43697c73f454ba490838108c73a57a9247efb66d1c0479 - requires_dist: - - docopt - - requests>=2.7.0 - - six>=1.9.0 - - fastavro>=0.21.19 ; extra == 'avro' - - fastavro>=0.21.19 ; extra == 'dataframe' - - pandas>=0.14.1 ; extra == 'dataframe' - - requests-kerberos>=0.7.0 ; extra == 'kerberos' -- kind: pypi - name: httplib2 - version: 0.22.0 - url: https://files.pythonhosted.org/packages/a8/6c/d2fbdaaa5959339d53ba38e94c123e4e84b8fbc4b84beb0e70d7c1608486/httplib2-0.22.0-py3-none-any.whl - sha256: 14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc - requires_dist: - - pyparsing>=2.4.2,<3 ; python_full_version < '3.0' - - pyparsing>=2.4.2,!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4 ; python_full_version >= '3.1' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' -- kind: conda - name: icu - version: '75.1' - build: hfee45f7_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda - sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 - md5: 5eb22c1d7b3fc4abb50d92d621583137 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 11857802 - timestamp: 1720853997952 -- kind: pypi - name: idna - version: '3.10' - url: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl - sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 - requires_dist: - - ruff>=0.6.2 ; extra == 'all' - - mypy>=1.11.2 ; extra == 'all' - - pytest>=8.3.2 ; extra == 'all' - - flake8>=7.1.1 ; extra == 'all' - requires_python: '>=3.6' -- kind: pypi - name: immutabledict - version: 4.2.1 - url: https://files.pythonhosted.org/packages/59/56/25ca7b848164b7d93dbd5fc97dd7751700c93e324fe854afbeb562ee2f98/immutabledict-4.2.1-py3-none-any.whl - sha256: c56a26ced38c236f79e74af3ccce53772827cef5c3bce7cab33ff2060f756373 - requires_python: '>=3.8' -- kind: pypi - name: importlib-metadata - version: 8.5.0 - url: https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl - sha256: 45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b - requires_dist: - - zipp>=3.20 - - typing-extensions>=3.6.4 ; python_full_version < '3.8' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - ipython ; extra == 'perf' - - pytest>=6,!=8.1.* ; extra == 'test' - - packaging ; extra == 'test' - - pyfakefs ; extra == 'test' - - flufl-flake8 ; extra == 'test' - - pytest-perf>=0.9.2 ; extra == 'test' - - jaraco-test>=5.4 ; extra == 'test' - - importlib-resources>=1.3 ; python_full_version < '3.9' and extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' -- kind: conda - name: iniconfig - version: 2.0.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - sha256: 0ec8f4d02053cd03b0f3e63168316530949484f80e16f5e2fb199a1d117a89ca - md5: 6837f3eff7dcea42ecd714ce1ac2b108 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/iniconfig?source=hash-mapping - size: 11474 - timestamp: 1733223232820 -- kind: pypi - name: jaraco-classes - version: 3.4.0 - url: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl - sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 - requires_dist: - - more-itertools - - sphinx>=3.5 ; extra == 'docs' - - jaraco-packaging>=9.3 ; extra == 'docs' - - rst-linker>=1.9 ; extra == 'docs' - - furo ; extra == 'docs' - - sphinx-lint ; extra == 'docs' - - jaraco-tidelift>=1.4 ; extra == 'docs' - - pytest>=6 ; extra == 'testing' - - pytest-checkdocs>=2.4 ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-mypy ; extra == 'testing' - - pytest-enabler>=2.2 ; extra == 'testing' - - pytest-ruff>=0.2.1 ; extra == 'testing' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-context - version: 6.0.1 - url: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl - sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 - requires_dist: - - backports-tarfile ; python_full_version < '3.12' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest>=6,!=8.1.* ; extra == 'test' - - pytest-checkdocs>=2.4 ; extra == 'test' - - pytest-cov ; extra == 'test' - - pytest-mypy ; extra == 'test' - - pytest-enabler>=2.2 ; extra == 'test' - - portend ; extra == 'test' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' - requires_python: '>=3.8' -- kind: pypi - name: jaraco-functools - version: 4.1.0 - url: https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl - sha256: ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649 - requires_dist: - - more-itertools - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest>=6,!=8.1.* ; extra == 'test' - - jaraco-classes ; extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.8' -- kind: pypi - name: jinja2 - version: 3.1.5 - url: https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl - sha256: aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb - requires_dist: - - markupsafe>=2.0 - - babel>=2.7 ; extra == 'i18n' - requires_python: '>=3.7' -- kind: conda - name: json-c - version: '0.18' - build: he4178ee_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/json-c-0.18-he4178ee_0.conda - sha256: 73179a1cd0b45c09d4f631cb359d9e755e6e573c5d908df42006728e0bf8297c - md5: 94f14ef6157687c30feb44e1abecd577 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 73715 - timestamp: 1726487214495 -- kind: pypi - name: jsonpickle - version: 3.4.2 - url: https://files.pythonhosted.org/packages/c0/a3/e610ae0feba3e7374da08ab6cc9bb76c8bfa84b4e502aa357bda0ef6dcae/jsonpickle-3.4.2-py3-none-any.whl - sha256: fd6c273278a02b3b66e3405db3dd2f4dbc8f4a4a3123bfcab3045177c6feb9c3 - requires_dist: - - pytest-cov ; extra == 'cov' - - black ; extra == 'dev' - - furo ; extra == 'docs' - - rst-linker>=1.9 ; extra == 'docs' - - sphinx>=3.5 ; extra == 'docs' - - build ; extra == 'packaging' - - setuptools>=61.2 ; extra == 'packaging' - - setuptools-scm[toml]>=6.0 ; extra == 'packaging' - - twine ; extra == 'packaging' - - pytest>=6.0,!=8.1.* ; extra == 'testing' - - pytest-benchmark ; extra == 'testing' - - pytest-benchmark[histogram] ; extra == 'testing' - - pytest-checkdocs>=1.2.3 ; extra == 'testing' - - pytest-enabler>=1.0.1 ; extra == 'testing' - - pytest-ruff>=0.2.1 ; extra == 'testing' - - bson ; extra == 'testing' - - ecdsa ; extra == 'testing' - - feedparser ; extra == 'testing' - - gmpy2 ; extra == 'testing' - - numpy ; extra == 'testing' - - pandas ; extra == 'testing' - - pymongo ; extra == 'testing' - - pyyaml ; extra == 'testing' - - scikit-learn ; extra == 'testing' - - simplejson ; extra == 'testing' - - sqlalchemy ; extra == 'testing' - - ujson ; extra == 'testing' - - atheris~=2.3.0 ; python_full_version < '3.12' and extra == 'testing' - - scipy ; python_full_version < '3.11' and extra == 'testing' - - scipy>=1.9.3 ; python_full_version >= '3.11' and extra == 'testing' - requires_python: '>=3.7' -- kind: pypi - name: jsonschema - version: 4.23.0 - url: https://files.pythonhosted.org/packages/69/4a/4f9dbeb84e8850557c02365a0eee0649abe5eb1d84af92a25731c6c0f922/jsonschema-4.23.0-py3-none-any.whl - sha256: fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566 - requires_dist: - - attrs>=22.2.0 - - importlib-resources>=1.4.0 ; python_full_version < '3.9' - - jsonschema-specifications>=2023.3.6 - - pkgutil-resolve-name>=1.3.10 ; python_full_version < '3.9' - - referencing>=0.28.4 - - rpds-py>=0.7.1 - - fqdn ; extra == 'format' - - idna ; extra == 'format' - - isoduration ; extra == 'format' - - jsonpointer>1.13 ; extra == 'format' - - rfc3339-validator ; extra == 'format' - - rfc3987 ; extra == 'format' - - uri-template ; extra == 'format' - - webcolors>=1.11 ; extra == 'format' - - fqdn ; extra == 'format-nongpl' - - idna ; extra == 'format-nongpl' - - isoduration ; extra == 'format-nongpl' - - jsonpointer>1.13 ; extra == 'format-nongpl' - - rfc3339-validator ; extra == 'format-nongpl' - - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' - - uri-template ; extra == 'format-nongpl' - - webcolors>=24.6.0 ; extra == 'format-nongpl' - requires_python: '>=3.8' -- kind: pypi - name: jsonschema-specifications - version: 2024.10.1 - url: https://files.pythonhosted.org/packages/d1/0f/8910b19ac0670a0f80ce1008e5e751c4a57e14d2c4c13a482aa6079fa9d6/jsonschema_specifications-2024.10.1-py3-none-any.whl - sha256: a09a0680616357d9a0ecf05c12ad234479f549239d0f5b55f3deea67475da9bf - requires_dist: - - referencing>=0.31.0 - requires_python: '>=3.9' -- kind: pypi - name: keyring - version: 25.6.0 - url: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl - sha256: 552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd - requires_dist: - - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' - - secretstorage>=3.2 ; sys_platform == 'linux' - - jeepney>=0.4.2 ; sys_platform == 'linux' - - importlib-metadata>=4.11.4 ; python_full_version < '3.12' - - jaraco-classes - - importlib-resources ; python_full_version < '3.9' - - jaraco-functools - - jaraco-context - - pytest>=6,!=8.1.* ; extra == 'test' - - pyfakefs ; extra == 'test' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest-mypy ; extra == 'type' - - pygobject-stubs ; extra == 'type' - - shtab ; extra == 'type' - - types-pywin32 ; extra == 'type' - - shtab>=1.1.0 ; extra == 'completion' - requires_python: '>=3.9' -- kind: pypi - name: keyrings-google-artifactregistry-auth - version: 1.1.2 - url: https://files.pythonhosted.org/packages/dc/a0/9698d906772b8c445f502e30c9408314998b29a0ee9fb22d849433a8146b/keyrings.google_artifactregistry_auth-1.1.2-py3-none-any.whl - sha256: e3f18b50fa945c786593014dc225810d191671d4f5f8e12d9259e39bad3605a3 - requires_dist: - - google-auth - - keyring - - pluggy - - requests - - pytest>=3.5,!=3.7.3 ; extra == 'testing' - - pytest-checkdocs>=1.2.3 ; extra == 'testing' - - pytest-cov ; extra == 'testing' - - pytest-flake8 ; extra == 'testing' - - pytest-black>=0.3.7 ; platform_python_implementation != 'PyPy' and extra == 'testing' - - pytest-mypy ; platform_python_implementation != 'PyPy' and extra == 'testing' - - tox ; extra == 'tox' - requires_python: '>=3.6' -- kind: conda - name: krb5 - version: 1.21.3 - build: h237132a_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/krb5-1.21.3-h237132a_0.conda - sha256: 4442f957c3c77d69d9da3521268cad5d54c9033f1a73f99cde0a3658937b159b - md5: c6dc8a0fdec13a0565936655c33069a1 - depends: - - __osx >=11.0 - - libcxx >=16 - - libedit >=3.1.20191231,<3.2.0a0 - - libedit >=3.1.20191231,<4.0a0 - - openssl >=3.3.1,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 1155530 - timestamp: 1719463474401 -- kind: conda - name: lerc - version: 4.0.0 - build: h9a09cb3_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/lerc-4.0.0-h9a09cb3_0.tar.bz2 - sha256: 6f068bb53dfb6147d3147d981bb851bb5477e769407ad4e6a68edf482fdcb958 - md5: de462d5aacda3b30721b512c5da4e742 - depends: - - libcxx >=13.0.1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 215721 - timestamp: 1657977558796 -- kind: conda - name: libarchive - version: 3.7.7 - build: h3b16cec_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libarchive-3.7.7-h3b16cec_3.conda - sha256: cbce64423e72bcd3576b5cfe0e4edd255900100f72467d5b4ea1d77449ac1ce9 - md5: 1c2eda2163510220b9f9d56a85c8da9d - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libxml2 >=2.13.5,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - lzo >=2.10,<3.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 772780 - timestamp: 1734021109752 -- kind: conda - name: libavif16 - version: 1.1.1 - build: h45b7238_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libavif16-1.1.1-h45b7238_2.conda - sha256: c671365e8c822d29b53f20c4573fdbc70f18b50ff9a4b5b2b6b3c8f7ad2ac2a9 - md5: 7571064a60bc193ff5c25f36ed23394a - depends: - - __osx >=11.0 - - aom >=3.9.1,<3.10.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - rav1e >=0.6.6,<1.0a0 - - svt-av1 >=2.3.0,<2.3.1.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 96781 - timestamp: 1730268761553 -- kind: conda - name: libblas - version: 3.9.0 - build: 28_h10e41b3_openblas - build_number: 28 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libblas-3.9.0-28_h10e41b3_openblas.conda - sha256: 5bea855a1a7435ce2238535aa4b13db8af8ee301d99a42b083b63fa64c1ea144 - md5: 166166d84a0e9571dc50210baf993b46 - depends: - - libopenblas >=0.3.28,<0.3.29.0a0 - - libopenblas >=0.3.28,<1.0a0 - constrains: - - liblapack =3.9.0=28*_openblas - - liblapacke =3.9.0=28*_openblas - - blas =2.128=openblas - - libcblas =3.9.0=28*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 16840 - timestamp: 1738114389937 -- kind: conda - name: libcblas - version: 3.9.0 - build: 28_hb3479ef_openblas - build_number: 28 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcblas-3.9.0-28_hb3479ef_openblas.conda - sha256: f08adea59381babb3568e6d23e52aff874cbc25f299821647ab1127d1e1332ca - md5: 30942dea911ce333765003a8adec4e8a - depends: - - libblas 3.9.0 28_h10e41b3_openblas - constrains: - - blas =2.128=openblas - - liblapacke =3.9.0=28*_openblas - - liblapack =3.9.0=28*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 16788 - timestamp: 1738114399962 -- kind: conda - name: libcurl - version: 8.11.1 - build: h73640d1_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcurl-8.11.1-h73640d1_0.conda - sha256: f47c35938144c23278987c7d12096f6a42d7c850ffc277222b032073412383b6 - md5: 46d7524cabfdd199bffe63f8f19a552b - depends: - - __osx >=11.0 - - krb5 >=1.21.3,<1.22.0a0 - - libnghttp2 >=1.64.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: curl - license_family: MIT - purls: [] - size: 385098 - timestamp: 1734000160270 -- kind: conda - name: libcxx - version: 19.1.7 - build: ha82da77_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-19.1.7-ha82da77_0.conda - sha256: 776092346da87a2a23502e14d91eb0c32699c4a1522b7331537bd1c3751dcff5 - md5: 5b3e1610ff8bd5443476b91d618f5b77 - depends: - - __osx >=11.0 - license: Apache-2.0 WITH LLVM-exception - license_family: Apache - purls: [] - size: 523505 - timestamp: 1736877862502 -- kind: conda - name: libde265 - version: 1.0.15 - build: h2ffa867_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libde265-1.0.15-h2ffa867_0.conda - sha256: 13747fa634f7f16d7f222b7d3869e3c1aab9d3a2791edeb2fc632a87663950e0 - md5: 7c718ee6d8497702145612fa0898a12d - depends: - - libcxx >=15 - license: LGPL-3.0-or-later - license_family: LGPL - purls: [] - size: 277861 - timestamp: 1703089176970 -- kind: conda - name: libdeflate - version: '1.23' - build: hec38601_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.23-hec38601_0.conda - sha256: 887c02deaed6d583459eba6367023e36d8761085b2f7126e389424f57155da53 - md5: 1d8b9588be14e71df38c525767a1ac30 - depends: - - __osx >=11.0 - license: MIT - license_family: MIT - purls: [] - size: 54132 - timestamp: 1734373971372 -- kind: conda - name: libedit - version: 3.1.20250104 - build: pl5321hafb1f1b_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libedit-3.1.20250104-pl5321hafb1f1b_0.conda - sha256: 66aa216a403de0bb0c1340a88d1a06adaff66bae2cfd196731aa24db9859d631 - md5: 44083d2d2c2025afca315c7a172eab2b - depends: - - ncurses - - __osx >=11.0 - - ncurses >=6.5,<7.0a0 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 107691 - timestamp: 1738479560845 -- kind: conda - name: libev - version: '4.33' - build: h93a5062_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda - sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f - md5: 36d33e440c31857372a72137f78bacf5 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 107458 - timestamp: 1702146414478 -- kind: conda - name: libexpat - version: 2.6.4 - build: h286801f_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.6.4-h286801f_0.conda - sha256: e42ab5ace927ee7c84e3f0f7d813671e1cf3529f5f06ee5899606630498c2745 - md5: 38d2656dd914feb0cab8c629370768bf - depends: - - __osx >=11.0 - constrains: - - expat 2.6.4.* - license: MIT - license_family: MIT - purls: [] - size: 64693 - timestamp: 1730967175868 -- kind: conda - name: libffi - version: 3.4.2 - build: h3422bc3_5 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.2-h3422bc3_5.tar.bz2 - sha256: 41b3d13efb775e340e4dba549ab5c029611ea6918703096b2eaa9c015c0750ca - md5: 086914b672be056eb70fd4285b6783b6 - license: MIT - license_family: MIT - purls: [] - size: 39020 - timestamp: 1636488587153 -- kind: conda - name: libgdal-core - version: 3.10.1 - build: h9ef0d2d_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-core-3.10.1-h9ef0d2d_2.conda - sha256: 891e4fc19846b99e5c2232c4e04c72d5eb55cd9702e70416283adf65e0598048 - md5: f0ea5524380b2c76156589e6aa0998a9 - depends: - - __osx >=11.0 - - blosc >=1.21.6,<2.0a0 - - geos >=3.13.0,<3.13.1.0a0 - - geotiff >=1.7.3,<1.8.0a0 - - giflib >=5.2.2,<5.3.0a0 - - json-c >=0.18,<0.19.0a0 - - lerc >=4.0.0,<5.0a0 - - libarchive >=3.7.7,<3.8.0a0 - - libcurl >=8.11.1,<9.0a0 - - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libexpat >=2.6.4,<3.0a0 - - libheif >=1.19.5,<1.20.0a0 - - libiconv >=1.17,<2.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - libkml >=1.3.0,<1.4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libpng >=1.6.45,<1.7.0a0 - - libspatialite >=5.1.0,<5.2.0a0 - - libsqlite >=3.48.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - libwebp-base >=1.5.0,<2.0a0 - - libxml2 >=2.13.5,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - openssl >=3.4.0,<4.0a0 - - pcre2 >=10.44,<10.45.0a0 - - proj >=9.5.1,<9.6.0a0 - - xerces-c >=3.2.5,<3.3.0a0 - - zstd >=1.5.6,<1.6.0a0 - constrains: - - libgdal 3.10.1.* - license: MIT - license_family: MIT - purls: [] - size: 8493126 - timestamp: 1737610665986 -- kind: conda - name: libgfortran - version: 5.0.0 - build: 13_2_0_hd922786_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-5.0.0-13_2_0_hd922786_3.conda - sha256: 44e541b4821c96b28b27fef5630883a60ce4fee91fd9c79f25a199f8f73f337b - md5: 4a55d9e169114b2b90d3ec4604cd7bbf - depends: - - libgfortran5 13.2.0 hf226fd6_3 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 110233 - timestamp: 1707330749033 -- kind: conda - name: libgfortran5 - version: 13.2.0 - build: hf226fd6_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-13.2.0-hf226fd6_3.conda - sha256: bafc679eedb468a86aa4636061c55966186399ee0a04b605920d208d97ac579a - md5: 66ac81d54e95c534ae488726c1f698ea - depends: - - llvm-openmp >=8.0.0 - constrains: - - libgfortran 5.0.0 13_2_0_*_3 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 997381 - timestamp: 1707330687590 -- kind: conda - name: libheif - version: 1.19.5 - build: gpl_h297b2c4_100 - build_number: 100 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libheif-1.19.5-gpl_h297b2c4_100.conda - sha256: f340e8e51519bcf885da9dd12602f19f76f3206347701accb28034dd0112b1a1 - md5: 5e457131dd237050dbfe6b141592f3ea - depends: - - __osx >=11.0 - - aom >=3.9.1,<3.10.0a0 - - dav1d >=1.2.1,<1.2.2.0a0 - - libavif16 >=1.1.1,<2.0a0 - - libcxx >=18 - - libde265 >=1.0.15,<1.0.16.0a0 - - x265 >=3.5,<3.6.0a0 - license: LGPL-3.0-or-later - license_family: LGPL - purls: [] - size: 429678 - timestamp: 1735260330340 -- kind: conda - name: libiconv - version: '1.17' - build: h0d3ecfb_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libiconv-1.17-h0d3ecfb_2.conda - sha256: bc7de5097b97bcafcf7deaaed505f7ce02f648aac8eccc0d5a47cc599a1d0304 - md5: 69bda57310071cf6d2b86caf11573d2d - license: LGPL-2.1-only - purls: [] - size: 676469 - timestamp: 1702682458114 -- kind: conda - name: libjpeg-turbo - version: 3.0.0 - build: hb547adb_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.0.0-hb547adb_1.conda - sha256: a42054eaa38e84fc1e5ab443facac4bbc9d1b6b6f23f54b7bf4f1eb687e1d993 - md5: 3ff1e053dc3a2b8e36b9bfa4256a58d1 - constrains: - - jpeg <0.0.0a - license: IJG AND BSD-3-Clause AND Zlib - purls: [] - size: 547541 - timestamp: 1694475104253 -- kind: conda - name: libkml - version: 1.3.0 - build: he250239_1021 - build_number: 1021 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libkml-1.3.0-he250239_1021.conda - sha256: e578ba448489465b8fea743e214272a9fcfccb0d152ba1ff57657aaa76a0cd7d - md5: 891bb2a18eaef684f37bd4fb942cd8b2 - depends: - - __osx >=11.0 - - libcxx >=17 - - libexpat >=2.6.2,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - uriparser >=0.9.8,<1.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 281362 - timestamp: 1724667138089 -- kind: conda - name: liblapack - version: 3.9.0 - build: 28_hc9a63f6_openblas - build_number: 28 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblapack-3.9.0-28_hc9a63f6_openblas.conda - sha256: 79c75a02bff20f8b001e6aecfee8d22a51552c3986e7037fca68e5ed071cc213 - md5: 45f26652530b558c21083ceb7adaf273 - depends: - - libblas 3.9.0 28_h10e41b3_openblas - constrains: - - blas =2.128=openblas - - liblapacke =3.9.0=28*_openblas - - libcblas =3.9.0=28*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 16793 - timestamp: 1738114407021 -- kind: conda - name: liblzma - version: 5.6.4 - build: h39f12f2_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.6.4-h39f12f2_0.conda - sha256: 560c59d3834cc652a84fb45531bd335ad06e271b34ebc216e380a89798fe8e2c - md5: e3fd1f8320a100f2b210e690a57cd615 - depends: - - __osx >=11.0 - license: 0BSD - purls: [] - size: 98945 - timestamp: 1738525462560 -- kind: conda - name: libnghttp2 - version: 1.64.0 - build: h6d7220d_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libnghttp2-1.64.0-h6d7220d_0.conda - sha256: 00cc685824f39f51be5233b54e19f45abd60de5d8847f1a56906f8936648b72f - md5: 3408c02539cee5f1141f9f11450b6a51 - depends: - - __osx >=11.0 - - c-ares >=1.34.2,<2.0a0 - - libcxx >=17 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.3.2,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 566719 - timestamp: 1729572385640 -- kind: conda - name: libopenblas - version: 0.3.28 - build: openmp_hf332438_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libopenblas-0.3.28-openmp_hf332438_1.conda - sha256: 62bb669c37a845129096f73d446cdb6bb170e4927f2fea2b661329680dbbc373 - md5: 40803a48d947c8639da6704e9a44d3ce - depends: - - __osx >=11.0 - - libgfortran 5.* - - libgfortran5 >=13.2.0 - - llvm-openmp >=18.1.8 - constrains: - - openblas >=0.3.28,<0.3.29.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 4165774 - timestamp: 1730772154295 -- kind: conda - name: libpng - version: 1.6.46 - build: h3783ad8_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libpng-1.6.46-h3783ad8_0.conda - sha256: db78a711561bb6df274ef421472d948dfd1093404db3915e891ae6d7fd37fadc - md5: 15d480fb9dad036eaa4de0b51eab3ccc - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: zlib-acknowledgement - purls: [] - size: 266516 - timestamp: 1737791023678 -- kind: conda - name: librttopo - version: 1.1.0 - build: ha2cf0f4_17 - build_number: 17 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha2cf0f4_17.conda - sha256: 9ff3162d035a1d9022f6145755a70d0c0ce6c9152792402bc42294354c871a17 - md5: ba729f000ea379b76ed2190119d21e13 - depends: - - __osx >=11.0 - - geos >=3.13.0,<3.13.1.0a0 - - libcxx >=17 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 191064 - timestamp: 1727265842691 -- kind: conda - name: libspatialite - version: 5.1.0 - build: hf92fc0a_12 - build_number: 12 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hf92fc0a_12.conda - sha256: b11e6169fdbef472c307129192fd46133eec543036e41ab2f957615713b03d19 - md5: f05759528e44f74888830119ab32fc81 - depends: - - __osx >=11.0 - - freexl >=2 - - freexl >=2.0.0,<3.0a0 - - geos >=3.13.0,<3.13.1.0a0 - - libcxx >=18 - - libiconv >=1.17,<2.0a0 - - librttopo >=1.1.0,<1.2.0a0 - - libsqlite >=3.47.2,<4.0a0 - - libxml2 >=2.13.5,<3.0a0 - - libzlib >=1.3.1,<2.0a0 - - proj >=9.5.1,<9.6.0a0 - - sqlite - - zlib - license: MPL-1.1 - license_family: MOZILLA - purls: [] - size: 2943606 - timestamp: 1734001158789 -- kind: conda - name: libsqlite - version: 3.48.0 - build: h3f77e49_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.48.0-h3f77e49_1.conda - sha256: 17c06940cc2a13fd6a17effabd6881b1477db38b2cd3ee2571092d293d3fdd75 - md5: 4c55169502ecddf8077973a987d08f08 - depends: - - __osx >=11.0 - - libzlib >=1.3.1,<2.0a0 - license: Unlicense - purls: [] - size: 852831 - timestamp: 1737564996616 -- kind: conda - name: libssh2 - version: 1.11.1 - build: h9cc3647_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h9cc3647_0.conda - sha256: f7047c6ed44bcaeb04432e8c74da87591940d091b0a3940c0d884b7faa8062e9 - md5: ddc7194676c285513706e5fc64f214d7 - depends: - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 279028 - timestamp: 1732349599461 -- kind: conda - name: libtiff - version: 4.7.0 - build: h551f018_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.0-h551f018_3.conda - sha256: 91417846157e04992801438a496b151df89604b2e7c6775d6f701fcd0cbed5ae - md5: a5d084a957563e614ec0c0196d890654 - depends: - - __osx >=11.0 - - lerc >=4.0.0,<5.0a0 - - libcxx >=18 - - libdeflate >=1.23,<1.24.0a0 - - libjpeg-turbo >=3.0.0,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libwebp-base >=1.4.0,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: HPND - purls: [] - size: 370600 - timestamp: 1734398863052 -- kind: conda - name: libwebp-base - version: 1.5.0 - build: h2471fea_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.5.0-h2471fea_0.conda - sha256: f8bdb876b4bc8cb5df47c28af29188de8911c3fea4b799a33743500149de3f4a - md5: 569466afeb84f90d5bb88c11cc23d746 - depends: - - __osx >=11.0 - constrains: - - libwebp 1.5.0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 290013 - timestamp: 1734777593617 -- kind: conda - name: libxml2 - version: 2.13.5 - build: h178c5d8_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libxml2-2.13.5-h178c5d8_1.conda - sha256: d7af3f25a4cece170502acd38f2dafbea4521f373f46dcb28a37fbe6ac2da544 - md5: 3dc3cff0eca1640a6acbbfab2f78139e - depends: - - __osx >=11.0 - - icu >=75.1,<76.0a0 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 582898 - timestamp: 1733443841584 -- kind: conda - name: libzlib - version: 1.3.1 - build: h8359307_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda - sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b - md5: 369964e85dc26bfe78f41399b366c435 - depends: - - __osx >=11.0 - constrains: - - zlib 1.3.1 *_2 - license: Zlib - license_family: Other - purls: [] - size: 46438 - timestamp: 1727963202283 -- kind: conda - name: llvm-openmp - version: 19.1.7 - build: hdb05f8b_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/llvm-openmp-19.1.7-hdb05f8b_0.conda - sha256: b92a669f2059874ebdcb69041b6c243d68ffc3fb356ac1339cec44aeb27245d7 - md5: c4d54bfd3817313ce758aa76283b118d - depends: - - __osx >=11.0 - constrains: - - openmp 19.1.7|19.1.7.* - license: Apache-2.0 WITH LLVM-exception - license_family: APACHE - purls: [] - size: 280830 - timestamp: 1736986295869 -- kind: pypi - name: locket - version: 1.0.0 - url: https://files.pythonhosted.org/packages/db/bc/83e112abc66cd466c6b83f99118035867cecd41802f8d044638aa78a106e/locket-1.0.0-py2.py3-none-any.whl - sha256: b6c819a722f7b6bd955b80781788e4a66a55628b858d347536b7e81325a3a5e3 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' -- kind: pypi - name: lz4 - version: 4.4.3 - url: https://files.pythonhosted.org/packages/b7/25/edd77ac155e167f0d183f0a30be1665ab581f77108ca6e19d628cd381e42/lz4-4.4.3-cp312-cp312-macosx_11_0_arm64.whl - sha256: 2ae50a175fb7b900f7aa42575f4fe99c32ca0ff57e5a8c1fd25e1243e67409db - requires_dist: - - pytest!=3.3.0 ; extra == 'tests' - - psutil ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - sphinx>=1.6.0 ; extra == 'docs' - - sphinx-bootstrap-theme ; extra == 'docs' - - flake8 ; extra == 'flake8' - requires_python: '>=3.9' -- kind: conda - name: lz4-c - version: 1.10.0 - build: h286801f_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/lz4-c-1.10.0-h286801f_1.conda - sha256: 94d3e2a485dab8bdfdd4837880bde3dd0d701e2b97d6134b8806b7c8e69c8652 - md5: 01511afc6cc1909c5303cf31be17b44f - depends: - - __osx >=11.0 - - libcxx >=18 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 148824 - timestamp: 1733741047892 -- kind: conda - name: lzo - version: '2.10' - build: h93a5062_1001 - build_number: 1001 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/lzo-2.10-h93a5062_1001.conda - sha256: b68160b0a8ec374cea12de7afb954ca47419cdc300358232e19cec666d60b929 - md5: 915996063a7380c652f83609e970c2a7 - license: GPL-2.0-or-later - license_family: GPL2 - purls: [] - size: 131447 - timestamp: 1713516009610 -- kind: pypi - name: markupsafe - version: 3.0.2 - url: https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: 846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225 - requires_python: '>=3.9' -- kind: conda - name: minizip - version: 4.0.7 - build: hff1a8ea_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.0.7-hff1a8ea_3.conda - sha256: 6d904a6fc5e875e687b9fab244d5b286961222d72f546f9939d8f80ebe873c1c - md5: 666bd61287ad7ee417884eacd9aef2ea - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libcxx >=18 - - libiconv >=1.17,<2.0a0 - - liblzma >=5.6.3,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.4.0,<4.0a0 - - zstd >=1.5.6,<1.6.0a0 - license: Zlib - license_family: Other - purls: [] - size: 77597 - timestamp: 1734012196026 -- kind: pypi - name: more-itertools - version: 10.6.0 - url: https://files.pythonhosted.org/packages/23/62/0fe302c6d1be1c777cab0616e6302478251dfbf9055ad426f5d0def75c89/more_itertools-10.6.0-py3-none-any.whl - sha256: 6eb054cb4b6db1473f6e15fcc676a08e4732548acd47c708f0e179c2c7c01e89 - requires_python: '>=3.9' -- kind: pypi - name: msgpack - version: 1.1.0 - url: https://files.pythonhosted.org/packages/28/51/da7f3ae4462e8bb98af0d5bdf2707f1b8c65a0d4f496e46b6afb06cbc286/msgpack-1.1.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 58dfc47f8b102da61e8949708b3eafc3504509a5728f8b4ddef84bd9e16ad420 - requires_python: '>=3.8' -- kind: pypi - name: multidict - version: 6.1.0 - url: https://files.pythonhosted.org/packages/a2/12/adb6b3200c363062f805275b4c1e656be2b3681aada66c80129932ff0bae/multidict-6.1.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 071120490b47aa997cca00666923a83f02c7fbb44f71cf7f136df753f7fa8761 - requires_dist: - - typing-extensions>=4.1.0 ; python_full_version < '3.11' - requires_python: '>=3.8' -- kind: pypi - name: mypy-extensions - version: 1.0.0 - url: https://files.pythonhosted.org/packages/2a/e2/5d3f6ada4297caebe1a2add3b126fe800c96f56dbe5d1988a2cbe0b267aa/mypy_extensions-1.0.0-py3-none-any.whl - sha256: 4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d - requires_python: '>=3.5' -- kind: conda - name: ncurses - version: '6.5' - build: h5e97a16_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 - md5: 068d497125e4bf8a66bf707254fff5ae - depends: - - __osx >=11.0 - license: X11 AND BSD-3-Clause - purls: [] - size: 797030 - timestamp: 1738196177597 -- kind: pypi - name: numcodecs - version: 0.15.0 - url: https://files.pythonhosted.org/packages/b7/62/9dd265a57c75df0dda3885c28b8880ec711245febe006434fa78b6b69c86/numcodecs-0.15.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 9dbe1880856ab65ff7ae16ccfcec4477c471a47297f2c33b87d78c3feb7b5c2b - requires_dist: - - numpy>=1.24 - - deprecated - - sphinx ; extra == 'docs' - - sphinx-issues ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - numpydoc ; extra == 'docs' - - coverage ; extra == 'test' - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - importlib-metadata ; extra == 'test-extras' - - msgpack ; extra == 'msgpack' - - zfpy>=1.0.0 ; extra == 'zfpy' - - pcodec>=0.3,<0.4 ; extra == 'pcodec' - - crc32c>=2.7 ; extra == 'crc32c' - requires_python: '>=3.11' -- kind: conda - name: numpy - version: 2.2.2 - build: py312h7c1f314_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/numpy-2.2.2-py312h7c1f314_0.conda - sha256: 411e2262230fd8da86f6f065e751d158b861efb6d9ba7fc5af848be99cce378e - md5: 083cb61e8e81cf8739e22f8a1904e01e - depends: - - __osx >=11.0 - - libblas >=3.9.0,<4.0a0 - - libcblas >=3.9.0,<4.0a0 - - libcxx >=18 - - liblapack >=3.9.0,<4.0a0 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - - python_abi 3.12.* *_cp312 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=hash-mapping - size: 6441437 - timestamp: 1737331520428 -- kind: pypi - name: oauth2client - version: 4.1.3 - url: https://files.pythonhosted.org/packages/95/a9/4f25a14d23f0786b64875b91784607c2277eff25d48f915e39ff0cff505a/oauth2client-4.1.3-py2.py3-none-any.whl - sha256: b8a81cc5d60e2d364f0b1b98f958dbd472887acaf1a5b05e21c28c31a2d6d3ac - requires_dist: - - httplib2>=0.9.1 - - pyasn1>=0.1.7 - - pyasn1-modules>=0.0.5 - - rsa>=3.1.4 - - six>=1.6.1 -- kind: pypi - name: oauthlib - version: 3.2.2 - url: https://files.pythonhosted.org/packages/7e/80/cab10959dc1faead58dc8384a781dfbf93cb4d33d50988f7a69f1b7c9bbe/oauthlib-3.2.2-py3-none-any.whl - sha256: 8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca - requires_dist: - - cryptography>=3.0.0 ; extra == 'rsa' - - blinker>=1.4.0 ; extra == 'signals' - - cryptography>=3.0.0 ; extra == 'signedtoken' - - pyjwt>=2.0.0,<3 ; extra == 'signedtoken' - requires_python: '>=3.6' -- kind: pypi - name: objsize - version: 0.7.1 - url: https://files.pythonhosted.org/packages/f3/a7/55f8f3853a4a654d3a6fbf63e646e0b469b52c174703a10db70a1cb06c7e/objsize-0.7.1-py3-none-any.whl - sha256: 634a0c134c4b1ff2c340fe29caf58bc0a16cb2ff7c556df609d04f026fdf4eca - requires_dist: - - bumpver ; extra == 'dev' - - black ; extra == 'dev' - - isort ; extra == 'dev' - - flake8 ; extra == 'dev' - - pylint ; extra == 'dev' - - mypy ; extra == 'dev' - - pip-tools ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - coveralls ; extra == 'dev' - - pyyaml ; extra == 'dev' - - sphinx ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - sphinx-rtd-dark-mode ; extra == 'docs' - - myst-parser ; extra == 'docs' - - sphinx-markdown-builder>=0.6.0 ; extra == 'docs' - requires_python: '>=3.8' -- kind: conda - name: openssl - version: 3.4.0 - build: h81ee809_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.4.0-h81ee809_1.conda - sha256: 97772762abc70b3a537683ca9fc3ff3d6099eb64e4aba3b9c99e6fce48422d21 - md5: 22f971393637480bda8c679f374d8861 - depends: - - __osx >=11.0 - - ca-certificates - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2936415 - timestamp: 1736086108693 -- kind: pypi - name: opentelemetry-api - version: 1.29.0 - url: https://files.pythonhosted.org/packages/43/53/5249ea860d417a26a3a6f1bdedfc0748c4f081a3adaec3d398bc0f7c6a71/opentelemetry_api-1.29.0-py3-none-any.whl - sha256: 5fcd94c4141cc49c736271f3e1efb777bebe9cc535759c54c936cca4f1b312b8 - requires_dist: - - deprecated>=1.2.6 - - importlib-metadata>=6.0,<=8.5.0 - requires_python: '>=3.8' -- kind: pypi - name: opentelemetry-sdk - version: 1.29.0 - url: https://files.pythonhosted.org/packages/d1/1d/512b86af21795fb463726665e2f61db77d384e8779fdcf4cb0ceec47866d/opentelemetry_sdk-1.29.0-py3-none-any.whl - sha256: 173be3b5d3f8f7d671f20ea37056710217959e774e2749d984355d1f9391a30a - requires_dist: - - opentelemetry-api==1.29.0 - - opentelemetry-semantic-conventions==0.50b0 - - typing-extensions>=3.7.4 - requires_python: '>=3.8' -- kind: pypi - name: opentelemetry-semantic-conventions - version: 0.50b0 - url: https://files.pythonhosted.org/packages/da/fb/dc15fad105450a015e913cfa4f5c27b6a5f1bea8fb649f8cae11e699c8af/opentelemetry_semantic_conventions-0.50b0-py3-none-any.whl - sha256: e87efba8fdb67fb38113efea6a349531e75ed7ffc01562f65b802fcecb5e115e - requires_dist: - - deprecated>=1.2.6 - - opentelemetry-api==1.29.0 - requires_python: '>=3.8' -- kind: pypi - name: orjson - version: 3.10.15 - url: https://files.pythonhosted.org/packages/66/85/22fe737188905a71afcc4bf7cc4c79cd7f5bbe9ed1fe0aac4ce4c33edc30/orjson-3.10.15-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - sha256: 9d11c0714fc85bfcf36ada1179400862da3288fc785c30e8297844c867d7505a - requires_python: '>=3.8' -- kind: pypi - name: overrides - version: 7.7.0 - url: https://files.pythonhosted.org/packages/2c/ab/fc8290c6a4c722e5514d80f62b2dc4c4df1a68a41d1364e625c35990fcf3/overrides-7.7.0-py3-none-any.whl - sha256: c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49 - requires_dist: - - typing ; python_full_version < '3.5' - requires_python: '>=3.6' -- kind: conda - name: packaging - version: '24.2' - build: pyhd8ed1ab_2 - build_number: 2 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/packaging-24.2-pyhd8ed1ab_2.conda - sha256: da157b19bcd398b9804c5c52fc000fcb8ab0525bdb9c70f95beaa0bb42f85af1 - md5: 3bfed7e6228ebf2f7b9eaa47f1b4e2aa - depends: - - python >=3.8 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=hash-mapping - size: 60164 - timestamp: 1733203368787 -- kind: pypi - name: pandas - version: 2.2.3 - url: https://files.pythonhosted.org/packages/e1/0c/ad295fd74bfac85358fd579e271cded3ac969de81f62dd0142c426b9da91/pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl - sha256: a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4 - requires_dist: - - numpy>=1.22.4 ; python_full_version < '3.11' - - numpy>=1.23.2 ; python_full_version == '3.11.*' - - numpy>=1.26.0 ; python_full_version >= '3.12' - - python-dateutil>=2.8.2 - - pytz>=2020.1 - - tzdata>=2022.7 - - hypothesis>=6.46.1 ; extra == 'test' - - pytest>=7.3.2 ; extra == 'test' - - pytest-xdist>=2.2.0 ; extra == 'test' - - pyarrow>=10.0.1 ; extra == 'pyarrow' - - bottleneck>=1.3.6 ; extra == 'performance' - - numba>=0.56.4 ; extra == 'performance' - - numexpr>=2.8.4 ; extra == 'performance' - - scipy>=1.10.0 ; extra == 'computation' - - xarray>=2022.12.0 ; extra == 'computation' - - fsspec>=2022.11.0 ; extra == 'fss' - - s3fs>=2022.11.0 ; extra == 'aws' - - gcsfs>=2022.11.0 ; extra == 'gcp' - - pandas-gbq>=0.19.0 ; extra == 'gcp' - - odfpy>=1.4.1 ; extra == 'excel' - - openpyxl>=3.1.0 ; extra == 'excel' - - python-calamine>=0.1.7 ; extra == 'excel' - - pyxlsb>=1.0.10 ; extra == 'excel' - - xlrd>=2.0.1 ; extra == 'excel' - - xlsxwriter>=3.0.5 ; extra == 'excel' - - pyarrow>=10.0.1 ; extra == 'parquet' - - pyarrow>=10.0.1 ; extra == 'feather' - - tables>=3.8.0 ; extra == 'hdf5' - - pyreadstat>=1.2.0 ; extra == 'spss' - - sqlalchemy>=2.0.0 ; extra == 'postgresql' - - psycopg2>=2.9.6 ; extra == 'postgresql' - - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' - - sqlalchemy>=2.0.0 ; extra == 'mysql' - - pymysql>=1.0.2 ; extra == 'mysql' - - sqlalchemy>=2.0.0 ; extra == 'sql-other' - - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' - - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' - - beautifulsoup4>=4.11.2 ; extra == 'html' - - html5lib>=1.1 ; extra == 'html' - - lxml>=4.9.2 ; extra == 'html' - - lxml>=4.9.2 ; extra == 'xml' - - matplotlib>=3.6.3 ; extra == 'plot' - - jinja2>=3.1.2 ; extra == 'output-formatting' - - tabulate>=0.9.0 ; extra == 'output-formatting' - - pyqt5>=5.15.9 ; extra == 'clipboard' - - qtpy>=2.3.0 ; extra == 'clipboard' - - zstandard>=0.19.0 ; extra == 'compression' - - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' - - adbc-driver-postgresql>=0.8.0 ; extra == 'all' - - adbc-driver-sqlite>=0.8.0 ; extra == 'all' - - beautifulsoup4>=4.11.2 ; extra == 'all' - - bottleneck>=1.3.6 ; extra == 'all' - - dataframe-api-compat>=0.1.7 ; extra == 'all' - - fastparquet>=2022.12.0 ; extra == 'all' - - fsspec>=2022.11.0 ; extra == 'all' - - gcsfs>=2022.11.0 ; extra == 'all' - - html5lib>=1.1 ; extra == 'all' - - hypothesis>=6.46.1 ; extra == 'all' - - jinja2>=3.1.2 ; extra == 'all' - - lxml>=4.9.2 ; extra == 'all' - - matplotlib>=3.6.3 ; extra == 'all' - - numba>=0.56.4 ; extra == 'all' - - numexpr>=2.8.4 ; extra == 'all' - - odfpy>=1.4.1 ; extra == 'all' - - openpyxl>=3.1.0 ; extra == 'all' - - pandas-gbq>=0.19.0 ; extra == 'all' - - psycopg2>=2.9.6 ; extra == 'all' - - pyarrow>=10.0.1 ; extra == 'all' - - pymysql>=1.0.2 ; extra == 'all' - - pyqt5>=5.15.9 ; extra == 'all' - - pyreadstat>=1.2.0 ; extra == 'all' - - pytest>=7.3.2 ; extra == 'all' - - pytest-xdist>=2.2.0 ; extra == 'all' - - python-calamine>=0.1.7 ; extra == 'all' - - pyxlsb>=1.0.10 ; extra == 'all' - - qtpy>=2.3.0 ; extra == 'all' - - scipy>=1.10.0 ; extra == 'all' - - s3fs>=2022.11.0 ; extra == 'all' - - sqlalchemy>=2.0.0 ; extra == 'all' - - tables>=3.8.0 ; extra == 'all' - - tabulate>=0.9.0 ; extra == 'all' - - xarray>=2022.12.0 ; extra == 'all' - - xlrd>=2.0.1 ; extra == 'all' - - xlsxwriter>=3.0.5 ; extra == 'all' - - zstandard>=0.19.0 ; extra == 'all' - requires_python: '>=3.9' -- kind: pypi - name: partd - version: 1.4.2 - url: https://files.pythonhosted.org/packages/71/e7/40fb618334dcdf7c5a316c0e7343c5cd82d3d866edc100d98e29bc945ecd/partd-1.4.2-py3-none-any.whl - sha256: 978e4ac767ec4ba5b86c6eaa52e5a2a3bc748a2ca839e8cc798f1cc6ce6efb0f - requires_dist: - - locket - - toolz - - numpy>=1.20.0 ; extra == 'complete' - - pandas>=1.3 ; extra == 'complete' - - pyzmq ; extra == 'complete' - - blosc ; extra == 'complete' - requires_python: '>=3.9' -- kind: pypi - name: pathspec - version: 0.12.1 - url: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 - requires_python: '>=3.8' -- kind: conda - name: pcre2 - version: '10.44' - build: h297a79d_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/pcre2-10.44-h297a79d_2.conda - sha256: 83153c7d8fd99cab33c92ce820aa7bfed0f1c94fc57010cf227b6e3c50cb7796 - md5: 147c83e5e44780c7492998acbacddf52 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 618973 - timestamp: 1723488853807 -- kind: pypi - name: pillow - version: 11.1.0 - url: https://files.pythonhosted.org/packages/b9/d8/f6004d98579a2596c098d1e30d10b248798cceff82d2b77aa914875bfea1/pillow-11.1.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: a85b653980faad27e88b141348707ceeef8a1186f75ecc600c395dcac19f385b - requires_dist: - - furo ; extra == 'docs' - - olefile ; extra == 'docs' - - sphinx>=8.1 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-inline-tabs ; extra == 'docs' - - sphinxext-opengraph ; extra == 'docs' - - olefile ; extra == 'fpx' - - olefile ; extra == 'mic' - - check-manifest ; extra == 'tests' - - coverage>=7.4.2 ; extra == 'tests' - - defusedxml ; extra == 'tests' - - markdown2 ; extra == 'tests' - - olefile ; extra == 'tests' - - packaging ; extra == 'tests' - - pyroma ; extra == 'tests' - - pytest ; extra == 'tests' - - pytest-cov ; extra == 'tests' - - pytest-timeout ; extra == 'tests' - - trove-classifiers>=2024.10.12 ; extra == 'tests' - - typing-extensions ; python_full_version < '3.10' and extra == 'typing' - - defusedxml ; extra == 'xmp' - requires_python: '>=3.9' -- kind: pypi - name: platformdirs - version: 4.3.6 - url: https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl - sha256: 73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb - requires_dist: - - furo>=2024.8.6 ; extra == 'docs' - - proselint>=0.14 ; extra == 'docs' - - sphinx-autodoc-typehints>=2.4 ; extra == 'docs' - - sphinx>=8.0.2 ; extra == 'docs' - - appdirs==1.4.4 ; extra == 'test' - - covdefaults>=2.3 ; extra == 'test' - - pytest-cov>=5 ; extra == 'test' - - pytest-mock>=3.14 ; extra == 'test' - - pytest>=8.3.2 ; extra == 'test' - - mypy>=1.11.2 ; extra == 'type' - requires_python: '>=3.8' -- kind: conda - name: pluggy - version: 1.5.0 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_1.conda - sha256: 122433fc5318816b8c69283aaf267c73d87aa2d09ce39f64c9805c9a3b264819 - md5: e9dcbce5f45f9ee500e728ae58b605b6 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pluggy?source=hash-mapping - size: 23595 - timestamp: 1733222855563 -- kind: conda - name: proj - version: 9.5.1 - build: h1318a7e_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/proj-9.5.1-h1318a7e_0.conda - sha256: c6289d6f1a13f28ff3754ac0cb2553f7e7bc4a3102291115f62a04995d0421eb - md5: 5eb42e77ae79b46fabcb0f6f6d130763 - depends: - - __osx >=11.0 - - libcurl >=8.10.1,<9.0a0 - - libcxx >=18 - - libsqlite >=3.47.0,<4.0a0 - - libtiff >=4.7.0,<4.8.0a0 - - sqlite - constrains: - - proj4 ==999999999999 - license: MIT - license_family: MIT - purls: [] - size: 2673401 - timestamp: 1733138376056 -- kind: pypi - name: propcache - version: 0.2.1 - url: https://files.pythonhosted.org/packages/4a/de/bbe712f94d088da1d237c35d735f675e494a816fd6f54e9db2f61ef4d03f/propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl - sha256: 14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d - requires_python: '>=3.9' -- kind: pypi - name: proto-plus - version: 1.26.0 - url: https://files.pythonhosted.org/packages/42/c3/59308ccc07b34980f9d532f7afc718a9f32b40e52cde7a740df8d55632fb/proto_plus-1.26.0-py3-none-any.whl - sha256: bf2dfaa3da281fc3187d12d224c707cb57214fb2c22ba854eb0c105a3fb2d4d7 - requires_dist: - - protobuf>=3.19.0,<6.0.0.dev0 - - google-api-core>=1.31.5 ; extra == 'testing' - requires_python: '>=3.7' -- kind: pypi - name: protobuf - version: 5.29.3 - url: https://files.pythonhosted.org/packages/dd/04/3eaedc2ba17a088961d0e3bd396eac764450f431621b58a04ce898acd126/protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl - sha256: a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e - requires_python: '>=3.8' -- kind: pypi - name: psutil - version: 6.1.1 - url: https://files.pythonhosted.org/packages/0b/6b/73dbde0dd38f3782905d4587049b9be64d76671042fdcaf60e2430c6796d/psutil-6.1.1-cp36-abi3-macosx_11_0_arm64.whl - sha256: 0bdd4eab935276290ad3cb718e9809412895ca6b5b334f5a9111ee6d9aff9377 - requires_dist: - - abi3audit ; extra == 'dev' - - black ; extra == 'dev' - - check-manifest ; extra == 'dev' - - coverage ; extra == 'dev' - - packaging ; extra == 'dev' - - pylint ; extra == 'dev' - - pyperf ; extra == 'dev' - - pypinfo ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - requests ; extra == 'dev' - - rstcheck ; extra == 'dev' - - ruff ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-rtd-theme ; extra == 'dev' - - toml-sort ; extra == 'dev' - - twine ; extra == 'dev' - - virtualenv ; extra == 'dev' - - vulture ; extra == 'dev' - - wheel ; extra == 'dev' - - pytest ; extra == 'test' - - pytest-xdist ; extra == 'test' - - setuptools ; extra == 'test' - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*' -- kind: pypi - name: pyarrow - version: 16.1.0 - url: https://files.pythonhosted.org/packages/9b/73/560ef6bf05f16305502b8e368c771e8f82d774898b37a3fb231f89c13342/pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a - requires_dist: - - numpy>=1.16.6 - requires_python: '>=3.8' -- kind: pypi - name: pyarrow-hotfix - version: '0.6' - url: https://files.pythonhosted.org/packages/e4/f4/9ec2222f5f5f8ea04f66f184caafd991a39c8782e31f5b0266f101cb68ca/pyarrow_hotfix-0.6-py3-none-any.whl - sha256: dcc9ae2d220dff0083be6a9aa8e0cdee5182ad358d4931fce825c545e5c89178 - requires_python: '>=3.5' -- kind: pypi - name: pyasn1 - version: 0.6.1 - url: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl - sha256: 0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 - requires_python: '>=3.8' -- kind: pypi - name: pyasn1-modules - version: 0.4.1 - url: https://files.pythonhosted.org/packages/77/89/bc88a6711935ba795a679ea6ebee07e128050d6382eaa35a0a47c8032bdc/pyasn1_modules-0.4.1-py3-none-any.whl - sha256: 49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd - requires_dist: - - pyasn1>=0.4.6,<0.7.0 - requires_python: '>=3.8' -- kind: pypi - name: pydantic - version: 2.10.6 - url: https://files.pythonhosted.org/packages/f4/3c/8cc1cc84deffa6e25d2d0c688ebb80635dfdbf1dbea3e30c541c8cf4d860/pydantic-2.10.6-py3-none-any.whl - sha256: 427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584 - requires_dist: - - annotated-types>=0.6.0 - - pydantic-core==2.27.2 - - typing-extensions>=4.12.2 - - email-validator>=2.0.0 ; extra == 'email' - - tzdata ; python_full_version >= '3.9' and platform_system == 'Windows' and extra == 'timezone' - requires_python: '>=3.8' -- kind: pypi - name: pydantic-core - version: 2.27.2 - url: https://files.pythonhosted.org/packages/d3/f3/c97e80721735868313c58b89d2de85fa80fe8dfeeed84dc51598b92a135e/pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: 83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef - requires_dist: - - typing-extensions>=4.6.0,!=4.7.0 - requires_python: '>=3.8' -- kind: pypi - name: pydot - version: 1.4.2 - url: https://files.pythonhosted.org/packages/ea/76/75b1bb82e9bad3e3d656556eaa353d8cd17c4254393b08ec9786ac8ed273/pydot-1.4.2-py2.py3-none-any.whl - sha256: 66c98190c65b8d2e2382a441b4c0edfdb4f4c025ef9cb9874de478fb0793a451 - requires_dist: - - pyparsing>=2.1.4 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' -- kind: pypi - name: pyink - version: 24.10.1 - url: https://files.pythonhosted.org/packages/1f/12/2f271b3601ae25731879f160d6b3941d80eb6b4f3e24be90289e33fb1dc4/pyink-24.10.1-py3-none-any.whl - sha256: 6349bf6ab75e2ea39a5f0bc3dee7ede7f4af8529291472638026de5fd4af80d2 - requires_dist: - - black==24.10.0 - - click>=8.0.0 - - mypy-extensions>=0.4.3 - - packaging>=22.0 - - pathspec>=0.9.0 - - platformdirs>=2 - - tomli>=1.1.0 ; python_full_version < '3.11' - - typing-extensions>=4.0.1 ; python_full_version < '3.11' - - colorama>=0.4.3 ; extra == 'colorama' - - ipython>=7.8.0 ; extra == 'jupyter' - - tokenize-rt>=3.2.0 ; extra == 'jupyter' - - uvloop>=0.15.2 ; extra == 'uvloop' - requires_python: '>=3.9' -- kind: pypi - name: pymongo - version: '4.11' - url: https://files.pythonhosted.org/packages/00/e3/471839c8705ae024d6eb3af65bd2fac85b33561c04048ff846d22d5ed9d4/pymongo-4.11-cp312-cp312-macosx_11_0_arm64.whl - sha256: e84e27d6fa4b3e532043daf89d52d2cfbd7b4697b44b86a7b3db8cacdcfcc58c - requires_dist: - - dnspython>=1.16.0,<3.0.0 - - pymongo-auth-aws>=1.1.0,<2.0.0 ; extra == 'aws' - - furo==2024.8.6 ; extra == 'docs' - - readthedocs-sphinx-search~=0.3 ; extra == 'docs' - - sphinx-autobuild>=2020.9.1 ; extra == 'docs' - - sphinx-rtd-theme>=2,<4 ; extra == 'docs' - - sphinx>=5.3,<9 ; extra == 'docs' - - sphinxcontrib-shellcheck>=1,<2 ; extra == 'docs' - - certifi ; (sys_platform == 'darwin' and extra == 'encryption') or (os_name == 'nt' and extra == 'encryption') - - pymongo-auth-aws>=1.1.0,<2.0.0 ; extra == 'encryption' - - pymongocrypt>=1.12.0,<2.0.0 ; extra == 'encryption' - - pykerberos ; os_name != 'nt' and extra == 'gssapi' - - winkerberos>=0.5.0 ; os_name == 'nt' and extra == 'gssapi' - - certifi ; (sys_platform == 'darwin' and extra == 'ocsp') or (os_name == 'nt' and extra == 'ocsp') - - cryptography>=2.5 ; extra == 'ocsp' - - pyopenssl>=17.2.0 ; extra == 'ocsp' - - requests<3.0.0 ; extra == 'ocsp' - - service-identity>=18.1.0 ; extra == 'ocsp' - - python-snappy ; extra == 'snappy' - - pytest-asyncio>=0.24.0 ; extra == 'test' - - pytest>=8.2 ; extra == 'test' - - zstandard ; extra == 'zstd' - requires_python: '>=3.9' -- kind: pypi - name: pyparsing - version: 3.2.1 - url: https://files.pythonhosted.org/packages/1c/a7/c8a2d361bf89c0d9577c934ebb7421b25dc84bf3a8e3ac0a40aed9acc547/pyparsing-3.2.1-py3-none-any.whl - sha256: 506ff4f4386c4cec0590ec19e6302d3aedb992fdc02c761e90416f158dacf8e1 - requires_dist: - - railroad-diagrams ; extra == 'diagrams' - - jinja2 ; extra == 'diagrams' - requires_python: '>=3.9' -- kind: pypi - name: pyproj - version: 3.7.0 - url: https://files.pythonhosted.org/packages/47/c2/0572c8e31aebf0270f15f3368adebd10fc473de9f09567a0743a3bc41c8d/pyproj-3.7.0.tar.gz - sha256: bf658f4aaf815d9d03c8121650b6f0b8067265c36e31bc6660b98ef144d81813 - requires_dist: - - certifi - requires_python: '>=3.10' -- kind: conda - name: pytest - version: 8.3.4 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.4-pyhd8ed1ab_1.conda - sha256: 75245ca9d0cbd6d38bb45ec02430189a9d4c21c055c5259739d738a2298d61b3 - md5: 799ed216dc6af62520f32aa39bc1c2bb - depends: - - colorama - - exceptiongroup >=1.0.0rc8 - - iniconfig - - packaging - - pluggy <2,>=1.5 - - python >=3.9 - - tomli >=1 - constrains: - - pytest-faulthandler >=2 - license: MIT - license_family: MIT - purls: - - pkg:pypi/pytest?source=hash-mapping - size: 259195 - timestamp: 1733217599806 -- kind: conda - name: python - version: 3.12.8 - build: hc22306f_1_cpython - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.8-hc22306f_1_cpython.conda - sha256: 7586a711b1b08a9df8864e26efdc06980bdfb0e18d5ac4651d0fee30a8d3e3a0 - md5: 54ca5b5d92ef3a3ba61e195ee882a518 - depends: - - __osx >=11.0 - - bzip2 >=1.0.8,<2.0a0 - - libexpat >=2.6.4,<3.0a0 - - libffi >=3.4,<4.0a0 - - liblzma >=5.6.3,<6.0a0 - - libsqlite >=3.47.0,<4.0a0 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - openssl >=3.4.0,<4.0a0 - - readline >=8.2,<9.0a0 - - tk >=8.6.13,<8.7.0a0 - - tzdata - constrains: - - python_abi 3.12.* *_cp312 - license: Python-2.0 - purls: [] - size: 12998673 - timestamp: 1733408900971 -- kind: pypi - name: python-dateutil - version: 2.9.0.post0 - url: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 - requires_dist: - - six>=1.5 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- kind: conda - name: python_abi - version: '3.12' - build: 5_cp312 - build_number: 5 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/python_abi-3.12-5_cp312.conda - sha256: 49d624e4b809c799d2bf257b22c23cf3fc4460f5570d9a58e7ad86350aeaa1f4 - md5: b76f9b1c862128e56ac7aa8cd2333de9 - constrains: - - python 3.12.* *_cpython - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 6278 - timestamp: 1723823099686 -- kind: pypi - name: pytz - version: '2025.1' - url: https://files.pythonhosted.org/packages/eb/38/ac33370d784287baa1c3d538978b5e2ea064d4c1b93ffbd12826c190dd10/pytz-2025.1-py2.py3-none-any.whl - sha256: 89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57 -- kind: pypi - name: pyyaml - version: 6.0.2 - url: https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725 - requires_python: '>=3.8' -- kind: pypi - name: rasterio - version: 1.4.3 - url: https://files.pythonhosted.org/packages/de/19/ab4326e419b543da623ce4191f68e3f36a4d9adc64f3df5c78f044d8d9ca/rasterio-1.4.3.tar.gz - sha256: 201f05dbc7c4739dacb2c78a1cf4e09c0b7265b0a4d16ccbd1753ce4f2af350a - requires_dist: - - affine - - attrs - - certifi - - click>=4.0 - - cligj>=0.5 - - numpy>=1.24 - - click-plugins - - pyparsing - - importlib-metadata ; python_full_version < '3.10' - - matplotlib ; extra == 'all' - - ipython>=2.0 ; extra == 'all' - - fsspec ; extra == 'all' - - sphinx ; extra == 'all' - - shapely ; extra == 'all' - - numpydoc ; extra == 'all' - - hypothesis ; extra == 'all' - - pytest-cov>=2.2.0 ; extra == 'all' - - boto3>=1.2.4 ; extra == 'all' - - pytest>=2.8.2 ; extra == 'all' - - sphinx-rtd-theme ; extra == 'all' - - sphinx-click ; extra == 'all' - - ghp-import ; extra == 'all' - - packaging ; extra == 'all' - - ghp-import ; extra == 'docs' - - numpydoc ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-click ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - ipython>=2.0 ; extra == 'ipython' - - matplotlib ; extra == 'plot' - - boto3>=1.2.4 ; extra == 's3' - - boto3>=1.2.4 ; extra == 'test' - - fsspec ; extra == 'test' - - hypothesis ; extra == 'test' - - packaging ; extra == 'test' - - pytest-cov>=2.2.0 ; extra == 'test' - - pytest>=2.8.2 ; extra == 'test' - - shapely ; extra == 'test' - requires_python: '>=3.9' -- kind: conda - name: rav1e - version: 0.6.6 - build: h69fbcac_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/rav1e-0.6.6-h69fbcac_2.conda - sha256: be6174970193cb4d0ffa7d731a93a4c9542881dbc7ab24e74b460ef312161169 - md5: e309ae86569b1cd55a0285fa4e939844 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 1526706 - timestamp: 1694329743011 -- kind: conda - name: readline - version: '8.2' - build: h92ec313_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h92ec313_1.conda - sha256: a1dfa679ac3f6007362386576a704ad2d0d7a02e98f5d0b115f207a2da63e884 - md5: 8cbb776a2f641b943d413b3e19df71f4 - depends: - - ncurses >=6.3,<7.0a0 - license: GPL-3.0-only - license_family: GPL - purls: [] - size: 250351 - timestamp: 1679532511311 -- kind: pypi - name: rechunker - version: 0.5.2 - url: https://files.pythonhosted.org/packages/34/83/a485250bc09db55e4b4389d99e583fac871ceeaaa4620b67a31d8db95ef5/rechunker-0.5.2-py3-none-any.whl - sha256: e09585d69b429ae466470047a2b828f003c123dffe6a265720c0ab0ca78f4937 - requires_dist: - - dask[array,diagnostics] - - mypy-extensions - - zarr>=2.11 - - apache-beam ; extra == 'complete' - - fsspec ; extra == 'complete' - - prefect<2 ; extra == 'complete' - - pyyaml ; extra == 'complete' - - xarray>=2022.3 ; extra == 'complete' - - black ; extra == 'dev' - - codecov ; extra == 'dev' - - flake8 ; extra == 'dev' - - hypothesis ; extra == 'dev' - - ipython ; extra == 'dev' - - mypy==0.782 ; extra == 'dev' - - nbsphinx ; extra == 'dev' - - numpydoc ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-pangeo-theme ; extra == 'dev' - - sphinxcontrib-srclinks ; extra == 'dev' - - ipython ; extra == 'docs' - - nbsphinx ; extra == 'docs' - - numpydoc ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-pangeo-theme ; extra == 'docs' - - sphinxcontrib-srclinks ; extra == 'docs' - - hypothesis ; extra == 'test' - - pytest ; extra == 'test' - requires_python: '>=3.8' -- kind: pypi - name: redis - version: 5.2.1 - url: https://files.pythonhosted.org/packages/3c/5f/fa26b9b2672cbe30e07d9a5bdf39cf16e3b80b42916757c5f92bca88e4ba/redis-5.2.1-py3-none-any.whl - sha256: ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4 - requires_dist: - - async-timeout>=4.0.3 ; python_full_version < '3.11.3' - - hiredis>=3.0.0 ; extra == 'hiredis' - - cryptography>=36.0.1 ; extra == 'ocsp' - - pyopenssl==23.2.1 ; extra == 'ocsp' - - requests>=2.31.0 ; extra == 'ocsp' - requires_python: '>=3.8' -- kind: pypi - name: referencing - version: 0.36.2 - url: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl - sha256: e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 - requires_dist: - - attrs>=22.2.0 - - rpds-py>=0.7.0 - - typing-extensions>=4.4.0 ; python_full_version < '3.13' - requires_python: '>=3.9' -- kind: pypi - name: regex - version: 2024.11.6 - url: https://files.pythonhosted.org/packages/60/85/cebcc0aff603ea0a201667b203f13ba75d9fc8668fab917ac5b2de3967bc/regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl - sha256: 805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2 - requires_python: '>=3.8' -- kind: pypi - name: requests - version: 2.32.3 - url: https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl - sha256: 70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6 - requires_dist: - - charset-normalizer>=2,<4 - - idna>=2.5,<4 - - urllib3>=1.21.1,<3 - - certifi>=2017.4.17 - - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' - - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' - requires_python: '>=3.8' -- kind: pypi - name: requests-oauthlib - version: 2.0.0 - url: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - sha256: 7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 - requires_dist: - - oauthlib>=3.0.0 - - requests>=2.0.0 - - oauthlib[signedtoken]>=3.0.0 ; extra == 'rsa' - requires_python: '>=3.4' -- kind: pypi - name: rioxarray - version: 0.18.2 - url: https://files.pythonhosted.org/packages/fb/b0/2c74f302512fbd24d68fbba0ec6b650b33ef83e398daeb0a2bb1a4cd641c/rioxarray-0.18.2-py3-none-any.whl - sha256: f351c15fc682081ac2cd2c8db367ef0a7ed5acdea29b9e43a6d7bc2ebc5ec6e5 - requires_dist: - - packaging - - rasterio>=1.3.7 - - xarray>=2024.7.0 - - pyproj>=3.3 - - numpy>=1.23 - - scipy ; extra == 'interp' - - scipy ; extra == 'all' - requires_python: '>=3.10' -- kind: pypi - name: rpds-py - version: 0.22.3 - url: https://files.pythonhosted.org/packages/40/14/aa6400fa8158b90a5a250a77f2077c0d0cd8a76fce31d9f2b289f04c6dec/rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl - sha256: 1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56 - requires_python: '>=3.9' -- kind: pypi - name: rsa - version: '4.9' - url: https://files.pythonhosted.org/packages/49/97/fa78e3d2f65c02c8e1268b9aba606569fe97f6c8f7c2d74394553347c145/rsa-4.9-py3-none-any.whl - sha256: 90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 - requires_dist: - - pyasn1>=0.1.3 - requires_python: '>=3.6,<4' -- kind: pypi - name: shapely - version: 2.0.7 - url: https://files.pythonhosted.org/packages/ce/53/c6a3487716fd32e1f813d2a9608ba7b72a8a52a6966e31c6443480a1d016/shapely-2.0.7-cp312-cp312-macosx_11_0_arm64.whl - sha256: 5aed1c6764f51011d69a679fdf6b57e691371ae49ebe28c3edb5486537ffbd51 - requires_dist: - - numpy>=1.14,<3 - - pytest ; extra == 'test' - - pytest-cov ; extra == 'test' - - numpydoc==1.1.* ; extra == 'docs' - - matplotlib ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-book-theme ; extra == 'docs' - - sphinx-remove-toctrees ; extra == 'docs' - requires_python: '>=3.7' -- kind: pypi - name: six - version: 1.17.0 - url: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl - sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' -- kind: conda - name: snappy - version: 1.2.1 - build: h98b9ce2_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.1-h98b9ce2_1.conda - sha256: 4242f95b215127a006eb664fe26ed5a82df87e90cbdbc7ce7ff4971f0720997f - md5: ded86dee325290da2967a3fea3800eb5 - depends: - - __osx >=11.0 - - libcxx >=18 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 35857 - timestamp: 1733502172664 -- kind: pypi - name: sortedcontainers - version: 2.4.0 - url: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl - sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 -- kind: conda - name: sqlite - version: 3.48.0 - build: hd7222ec_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.48.0-hd7222ec_1.conda - sha256: 6c1609abe16ed39dd099eb7e32e2f3228105ab81bdd8da65700d46ee0984013e - md5: 802cc94c9fa238cb3f802d430a528bd5 - depends: - - __osx >=11.0 - - libsqlite 3.48.0 h3f77e49_1 - - libzlib >=1.3.1,<2.0a0 - - ncurses >=6.5,<7.0a0 - - readline >=8.2,<9.0a0 - license: Unlicense - purls: [] - size: 858007 - timestamp: 1737565018178 -- kind: pypi - name: sqlparse - version: 0.5.3 - url: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl - sha256: cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca - requires_dist: - - build ; extra == 'dev' - - hatch ; extra == 'dev' - - sphinx ; extra == 'doc' - requires_python: '>=3.8' -- kind: conda - name: svt-av1 - version: 2.3.0 - build: hf24288c_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/svt-av1-2.3.0-hf24288c_0.conda - sha256: ab876ed8bdd20e22a868dcb8d03e9ce9bbba7762d7e652d49bfff6af768a5b8f - md5: 114c33e9eec335a379c9ee6c498bb807 - depends: - - __osx >=11.0 - - libcxx >=17 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 1387330 - timestamp: 1730246134730 -- kind: pypi - name: tblib - version: 3.0.0 - url: https://files.pythonhosted.org/packages/9b/87/ce70db7cae60e67851eb94e1a2127d4abb573d3866d2efd302ceb0d4d2a5/tblib-3.0.0-py3-none-any.whl - sha256: 80a6c77e59b55e83911e1e607c649836a69c103963c5f28a46cbeef44acf8129 - requires_python: '>=3.8' -- kind: conda - name: tk - version: 8.6.13 - build: h5083fa2_1 - build_number: 1 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h5083fa2_1.conda - sha256: 72457ad031b4c048e5891f3f6cb27a53cb479db68a52d965f796910e71a403a8 - md5: b50a57ba89c32b62428b71a875291c9b - depends: - - libzlib >=1.2.13,<2.0.0a0 - license: TCL - license_family: BSD - purls: [] - size: 3145523 - timestamp: 1699202432999 -- kind: conda - name: tomli - version: 2.2.1 - build: pyhd8ed1ab_1 - build_number: 1 - subdir: noarch - noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhd8ed1ab_1.conda - sha256: 18636339a79656962723077df9a56c0ac7b8a864329eb8f847ee3d38495b863e - md5: ac944244f1fed2eb49bae07193ae8215 - depends: - - python >=3.9 - license: MIT - license_family: MIT - purls: - - pkg:pypi/tomli?source=hash-mapping - size: 19167 - timestamp: 1733256819729 -- kind: pypi - name: toolz - version: 1.0.0 - url: https://files.pythonhosted.org/packages/03/98/eb27cc78ad3af8e302c9d8ff4977f5026676e130d28dd7578132a457170c/toolz-1.0.0-py3-none-any.whl - sha256: 292c8f1c4e7516bf9086f8850935c799a874039c8bcf959d47b600e4c44a6236 - requires_python: '>=3.8' -- kind: pypi - name: tornado - version: 6.4.2 - url: https://files.pythonhosted.org/packages/26/7e/71f604d8cea1b58f82ba3590290b66da1e72d840aeb37e0d5f7291bd30db/tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl - sha256: e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1 - requires_python: '>=3.8' -- kind: pypi - name: typing-extensions - version: 4.12.2 - url: https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl - sha256: 04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d - requires_python: '>=3.8' -- kind: pypi - name: tzdata - version: '2025.1' - url: https://files.pythonhosted.org/packages/0f/dd/84f10e23edd882c6f968c21c2434fe67bd4a528967067515feca9e611e5e/tzdata-2025.1-py2.py3-none-any.whl - sha256: 7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639 - requires_python: '>=2' -- kind: conda - name: tzdata - version: 2025a - build: h78e105d_0 - subdir: noarch - noarch: generic - url: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025a-h78e105d_0.conda - sha256: c4b1ae8a2931fe9b274c44af29c5475a85b37693999f8c792dad0f8c6734b1de - md5: dbcace4706afdfb7eb891f7b37d07c04 - license: LicenseRef-Public-Domain - purls: [] - size: 122921 - timestamp: 1737119101255 -- kind: pypi - name: ujson - version: 5.10.0 - url: https://files.pythonhosted.org/packages/a8/47/dd03fd2b5ae727e16d5d18919b383959c6d269c7b948a380fdd879518640/ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e - requires_python: '>=3.8' -- kind: conda - name: uriparser - version: 0.9.8 - build: h00cdb27_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - sha256: fa0bcbfb20a508ca9bf482236fe799581cbd0eab016e47a865e9fa44dbe3c512 - md5: e8ff9e11babbc8cd77af5a4258dc2802 - depends: - - __osx >=11.0 - - libcxx >=16 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 40625 - timestamp: 1715010029254 -- kind: pypi - name: uritemplate - version: 4.1.1 - url: https://files.pythonhosted.org/packages/81/c0/7461b49cd25aeece13766f02ee576d1db528f1c37ce69aee300e075b485b/uritemplate-4.1.1-py2.py3-none-any.whl - sha256: 830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e - requires_python: '>=3.6' -- kind: pypi - name: urllib3 - version: 2.3.0 - url: https://files.pythonhosted.org/packages/c8/19/4ec628951a74043532ca2cf5d97b7b14863931476d117c471e8e2b1eb39f/urllib3-2.3.0-py3-none-any.whl - sha256: 1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df - requires_dist: - - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' - - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' - - h2>=4,<5 ; extra == 'h2' - - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' - - zstandard>=0.18.0 ; extra == 'zstd' - requires_python: '>=3.9' -- kind: pypi - name: wrapt - version: 1.17.2 - url: https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl - sha256: 8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40 - requires_python: '>=3.8' -- kind: conda - name: x265 - version: '3.5' - build: hbc6ce65_3 - build_number: 3 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/x265-3.5-hbc6ce65_3.tar.bz2 - sha256: 2fed6987dba7dee07bd9adc1a6f8e6c699efb851431bcb6ebad7de196e87841d - md5: b1f7f2780feffe310b068c021e8ff9b2 - depends: - - libcxx >=12.0.1 - license: GPL-2.0-or-later - license_family: GPL - purls: [] - size: 1832744 - timestamp: 1646609481185 -- kind: pypi - name: xarray - version: 2025.1.2 - url: https://files.pythonhosted.org/packages/05/79/4e19100342fe13d69fd6e77b343e2269924fec681258e2ea21b55576aad2/xarray-2025.1.2-py3-none-any.whl - sha256: a7ad6a36c6e0becd67f8aff6a7808d20e4bdcd344debb5205f0a34b1a4a7f8d6 - requires_dist: - - numpy>=1.24 - - packaging>=23.2 - - pandas>=2.1 - - scipy ; extra == 'accel' - - bottleneck ; extra == 'accel' - - numbagg ; extra == 'accel' - - numba>=0.54 ; extra == 'accel' - - flox ; extra == 'accel' - - opt-einsum ; extra == 'accel' - - xarray[accel,etc,io,parallel,viz] ; extra == 'complete' - - hypothesis ; extra == 'dev' - - jinja2 ; extra == 'dev' - - mypy ; extra == 'dev' - - pre-commit ; extra == 'dev' - - pytest ; extra == 'dev' - - pytest-cov ; extra == 'dev' - - pytest-env ; extra == 'dev' - - pytest-xdist ; extra == 'dev' - - pytest-timeout ; extra == 'dev' - - ruff>=0.8.0 ; extra == 'dev' - - sphinx ; extra == 'dev' - - sphinx-autosummary-accessors ; extra == 'dev' - - xarray[complete] ; extra == 'dev' - - netcdf4 ; extra == 'io' - - h5netcdf ; extra == 'io' - - scipy ; extra == 'io' - - pydap ; python_full_version < '3.10' and extra == 'io' - - zarr ; extra == 'io' - - fsspec ; extra == 'io' - - cftime ; extra == 'io' - - pooch ; extra == 'io' - - sparse ; extra == 'etc' - - dask[complete] ; extra == 'parallel' - - cartopy ; extra == 'viz' - - matplotlib ; extra == 'viz' - - nc-time-axis ; extra == 'viz' - - seaborn ; extra == 'viz' - requires_python: '>=3.10' -- kind: pypi - name: xarray-beam - version: 0.6.3 - url: https://files.pythonhosted.org/packages/40/7d/01fea08d4dcb21d41cc6a69ee1106866dd4ee90b91f501416ad892e4e12f/xarray_beam-0.6.3-py3-none-any.whl - sha256: 3236e90bf6fd5a2b9efdd6e61a40df1d16dff5536c2cc2b1117c179f4215e842 - requires_dist: - - apache-beam>=2.31.0 - - dask - - immutabledict - - rechunker>=0.5.1 - - zarr - - xarray - - myst-nb ; extra == 'docs' - - myst-parser ; extra == 'docs' - - sphinx ; extra == 'docs' - - sphinx-rtd-theme ; extra == 'docs' - - scipy ; extra == 'docs' - - absl-py ; extra == 'tests' - - pandas ; extra == 'tests' - - pytest ; extra == 'tests' - - scipy ; extra == 'tests' - - h5netcdf ; extra == 'tests' - requires_python: '>=3' -- kind: pypi - name: xee - version: 0.0.21.dev9+g0dbd250.d20250217 - path: . - sha256: 387d6352b9b392c59aeb19f771a8d8f46661876f39be368b955f04724f2beb0b - requires_dist: - - xarray[parallel] - - earthengine-api>=0.1.374 - - pyproj - - affine - - absl-py ; extra == 'tests' - - pytest ; extra == 'tests' - - pyink ; extra == 'tests' - - rasterio ; extra == 'tests' - - rioxarray ; extra == 'tests' - - shapely ; extra == 'tests' - - absl-py ; extra == 'dataflow' - - apache-beam[gcp] ; extra == 'dataflow' - - gcsfs<=2024.2.0 ; extra == 'dataflow' - - xarray-beam ; extra == 'dataflow' - - xee[dataflow] ; extra == 'examples' - requires_python: '>=3.8,<3.13' - editable: true -- kind: conda - name: xerces-c - version: 3.2.5 - build: h92fc2f4_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/xerces-c-3.2.5-h92fc2f4_2.conda - sha256: 863a7c2a991a4399d362d42c285ebc20748a4ea417647ebd3a171e2220c7457d - md5: 50b7325437ef0901fe25dc5c9e743b88 - depends: - - __osx >=11.0 - - icu >=75.1,<76.0a0 - - libcxx >=17 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1277884 - timestamp: 1727733870250 -- kind: pypi - name: xyzservices - version: 2025.1.0 - url: https://files.pythonhosted.org/packages/9a/6e/49408735dae940a0c1c225c6b908fd83bd6e3f5fae120f865754e72f78cb/xyzservices-2025.1.0-py3-none-any.whl - sha256: fa599956c5ab32dad1689960b3bb08fdcdbe0252cc82d84fc60ae415dc648907 - requires_python: '>=3.8' -- kind: pypi - name: yarl - version: 1.18.3 - url: https://files.pythonhosted.org/packages/be/75/79c6acc0261e2c2ae8a1c41cf12265e91628c8c58ae91f5ff59e29c0787f/yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl - sha256: 25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640 - requires_dist: - - idna>=2.0 - - multidict>=4.0 - - propcache>=0.2.0 - requires_python: '>=3.9' -- kind: pypi - name: zarr - version: 3.0.2 - url: https://files.pythonhosted.org/packages/27/83/4316503558c57a2d1928afaf0e77f47cf00d394347c88aaafbf0efaf5685/zarr-3.0.2-py3-none-any.whl - sha256: cd57949934a339cddc4853c0e819fd7f8e0370022e8eeddec2e56a6b13dc5021 - requires_dist: - - donfig>=0.8 - - numcodecs[crc32c]>=0.14 - - numpy>=1.25 - - packaging>=22.0 - - typing-extensions>=4.9 - - numcodecs[msgpack] ; extra == 'docs' - - numpydoc ; extra == 'docs' - - pydata-sphinx-theme ; extra == 'docs' - - rich ; extra == 'docs' - - s3fs ; extra == 'docs' - - sphinx-autoapi==3.4.0 ; extra == 'docs' - - sphinx-autobuild>=2021.3.14 ; extra == 'docs' - - sphinx-copybutton ; extra == 'docs' - - sphinx-design ; extra == 'docs' - - sphinx-issues ; extra == 'docs' - - sphinx-reredirects ; extra == 'docs' - - sphinx==8.1.3 ; extra == 'docs' - - towncrier ; extra == 'docs' - - cupy-cuda12x ; extra == 'gpu' - - rich ; extra == 'optional' - - universal-pathlib ; extra == 'optional' - - fsspec>=2023.10.0 ; extra == 'remote' - - botocore ; extra == 'test' - - coverage ; extra == 'test' - - fsspec>=2023.10.0 ; extra == 'test' - - hypothesis ; extra == 'test' - - moto[s3,server] ; extra == 'test' - - mypy ; extra == 'test' - - pytest ; extra == 'test' - - pytest-accept ; extra == 'test' - - pytest-asyncio ; extra == 'test' - - pytest-cov ; extra == 'test' - - requests ; extra == 'test' - - rich ; extra == 'test' - - s3fs ; extra == 'test' - - universal-pathlib ; extra == 'test' - requires_python: '>=3.11' -- kind: pypi - name: zict - version: 3.0.0 - url: https://files.pythonhosted.org/packages/80/ab/11a76c1e2126084fde2639514f24e6111b789b0bfa4fc6264a8975c7e1f1/zict-3.0.0-py2.py3-none-any.whl - sha256: 5796e36bd0e0cc8cf0fbc1ace6a68912611c1dbd74750a3f3026b9b9d6a327ae - requires_python: '>=3.8' -- kind: pypi - name: zipp - version: 3.21.0 - url: https://files.pythonhosted.org/packages/b7/1a/7e4798e9339adc931158c9d69ecc34f5e6791489d469f5e50ec15e35f458/zipp-3.21.0-py3-none-any.whl - sha256: ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931 - requires_dist: - - pytest-checkdocs>=2.4 ; extra == 'check' - - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' - - pytest-cov ; extra == 'cover' - - sphinx>=3.5 ; extra == 'doc' - - jaraco-packaging>=9.3 ; extra == 'doc' - - rst-linker>=1.9 ; extra == 'doc' - - furo ; extra == 'doc' - - sphinx-lint ; extra == 'doc' - - jaraco-tidelift>=1.4 ; extra == 'doc' - - pytest-enabler>=2.2 ; extra == 'enabler' - - pytest>=6,!=8.1.* ; extra == 'test' - - jaraco-itertools ; extra == 'test' - - jaraco-functools ; extra == 'test' - - more-itertools ; extra == 'test' - - big-o ; extra == 'test' - - pytest-ignore-flaky ; extra == 'test' - - jaraco-test ; extra == 'test' - - importlib-resources ; python_full_version < '3.9' and extra == 'test' - - pytest-mypy ; extra == 'type' - requires_python: '>=3.9' -- kind: conda - name: zlib - version: 1.3.1 - build: h8359307_2 - build_number: 2 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - sha256: 58f8860756680a4831c1bf4f294e2354d187f2e999791d53b1941834c4b37430 - md5: e3170d898ca6cb48f1bb567afb92f775 - depends: - - __osx >=11.0 - - libzlib 1.3.1 h8359307_2 - license: Zlib - license_family: Other - purls: [] - size: 77606 - timestamp: 1727963209370 -- kind: pypi - name: zstandard - version: 0.23.0 - url: https://files.pythonhosted.org/packages/5b/b3/1a028f6750fd9227ee0b937a278a434ab7f7fdc3066c3173f64366fe2466/zstandard-0.23.0-cp312-cp312-macosx_11_0_arm64.whl - sha256: 1e172f57cd78c20f13a3415cc8dfe24bf388614324d25539146594c16d78fcc8 - requires_dist: - - cffi>=1.11 ; platform_python_implementation == 'PyPy' - - cffi>=1.11 ; extra == 'cffi' - requires_python: '>=3.8' -- kind: conda - name: zstd - version: 1.5.6 - build: hb46c0d2_0 - subdir: osx-arm64 - url: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.6-hb46c0d2_0.conda - sha256: 2d4fd1ff7ee79cd954ca8e81abf11d9d49954dd1fef80f27289e2402ae9c2e09 - md5: d96942c06c3e84bfcc5efb038724a7fd - depends: - - __osx >=11.0 - - libzlib >=1.2.13,<2.0.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 405089 - timestamp: 1714723101397 diff --git a/pyproject.toml b/pyproject.toml index 9427152..ebbb940 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -71,23 +71,3 @@ packages = ["xee"] [tool.setuptools_scm] fallback_version = "9999" - -[tool.pixi.project] -channels = ["conda-forge"] -platforms = ["osx-arm64"] - -[tool.pixi.pypi-dependencies] -xee = { path = ".", editable = true } - -[tool.pixi.environments] -default = { solve-group = "default" } -dataflow = { features = ["dataflow"], solve-group = "default" } -examples = { features = ["examples", "dataflow"], solve-group = "default" } -tests = { features = ["tests"], solve-group = "default" } - -[tool.pixi.tasks] - -[tool.pixi.dependencies] -proj = ">=9.5.1,<10" -gdal = ">=3.10.1,<4" -pytest = ">=8.3.4,<9" From 022887155744d51f7df49713d816bd38af04f558 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 18 Mar 2025 11:29:05 -0700 Subject: [PATCH 20/56] Remove extra print statement --- xee/ext_integration_test.py | 1 - 1 file changed, 1 deletion(-) diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 9b153d0..52cfa92 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -351,7 +351,6 @@ def test_open_dataset__sanity_check(self): ) # Loop through the data variables. for v in ds.values(): - print(f'{v = }') self.assertIsNotNone(v.data) self.assertFalse(v.isnull().all(), 'All values are null!') self.assertEqual(v.shape, (n_images, width, height)) From 9770faecc3aaa5df3170d63a61fc629c23e6586d Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 18 Mar 2025 11:36:52 -0700 Subject: [PATCH 21/56] Change strings from double to single quotes --- xee/ext.py | 2 +- xee/ext_integration_test.py | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index 8dd02d3..154f654 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -705,7 +705,7 @@ def _slice_collection(self, image_slice: slice) -> ee.Image: else: if self.store.fast_time_slicing: logging.warning( - "fast_time_slicing is enabled but ImageCollection images don't have" + 'fast_time_slicing is enabled but ImageCollection images don't have' ' IDs. Reverting to default behavior.' ) if stop > _TO_LIST_WARNING_LIMIT: diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 52cfa92..7105a53 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -399,7 +399,7 @@ def test_honors_geometry_simple_utm(self): ds = xr.open_dataset( ic, engine=xee.EarthEngineBackendEntrypoint, - crs="EPSG:32610", + crs='EPSG:32610', crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # Origin over SF shape_2d=(width, height), ) @@ -480,8 +480,8 @@ def test_parses_ee_url(self): self.assertEqual(dict(ds1.sizes), {'time': n_images, 'x': width, 'y': height}) self.assertEqual(dict(ds2.sizes), {'time': n_images, 'x': width, 'y': height}) np.testing.assert_allclose( - ds1["B1"].compute().values, - ds2["B1"].compute().values + ds1['B1'].compute().values, + ds2['B1'].compute().values ) def test_data_sanity_check(self): @@ -608,7 +608,7 @@ def test_extract_grid_params_from_image(self): np.allclose(grid_params['crs_transform'], [30, 0, 643185, 0, -30, 4255815]) def test_extract_grid_params_from_image_collection(self): - dem = ee.ImageCollection("COPERNICUS/DEM/GLO30"); + dem = ee.ImageCollection('COPERNICUS/DEM/GLO30'); grid_params = helpers.extract_grid_params(dem) self.assertEqual(grid_params['shape_2d'], (3601, 3601)) self.assertEqual(grid_params['crs'], 'EPSG:4326') @@ -616,7 +616,7 @@ def test_extract_grid_params_from_image_collection(self): def test_extract_grid_params_from_invalid_object(self): with self.assertRaises(TypeError): - helpers.extract_grid_params("a string object") + helpers.extract_grid_params('a string object') class ReadmeCodeTest(absltest.TestCase): @@ -643,7 +643,7 @@ def test_extract_projection_from_image(self): ds = xr.open_dataset( 'ee://ECMWF/ERA5_LAND/HOURLY', engine='ee', - crs="EPSG:32610", + crs='EPSG:32610', crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California shape_2d=(64, 64), ) @@ -652,7 +652,7 @@ def test_extract_projection_from_image(self): ds = xr.open_dataset( ic, engine='ee', - crs="EPSG:32610", + crs='EPSG:32610', crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California shape_2d=(64, 64), ) @@ -672,7 +672,7 @@ def test_extract_projection_from_image(self): ) # Open a single Image: - img = ee.Image("LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318") + img = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') grid_params = helpers.extract_grid_params(img) ds = xr.open_dataset( img, From 68c19057f359cb2d96cdd812dc5d474289e9b9be Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 18 Mar 2025 11:43:45 -0700 Subject: [PATCH 22/56] Switch back to double quotes to enclose single quote --- xee/ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/ext.py b/xee/ext.py index 154f654..8dd02d3 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -705,7 +705,7 @@ def _slice_collection(self, image_slice: slice) -> ee.Image: else: if self.store.fast_time_slicing: logging.warning( - 'fast_time_slicing is enabled but ImageCollection images don't have' + "fast_time_slicing is enabled but ImageCollection images don't have" ' IDs. Reverting to default behavior.' ) if stop > _TO_LIST_WARNING_LIMIT: From d661309e2d14148f3fa63dfe56c81381ce5c9807 Mon Sep 17 00:00:00 2001 From: Tyler Erickson Date: Tue, 18 Mar 2025 12:00:45 -0700 Subject: [PATCH 23/56] Remove match/case syntax --- xee/helpers.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/xee/helpers.py b/xee/helpers.py index 0418c89..77d50a9 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -40,15 +40,13 @@ def set_scale( scaling: ScalingType, ) -> list: """Update the CRS transform's scale parameters.""" - match scaling: - case int(xy_scale) | float(xy_scale): - crs_transform[0] = xy_scale - crs_transform[4] = xy_scale - case (int(x_scale) | float(x_scale), int(y_scale) | float(y_scale)): - crs_transform[0] = x_scale - crs_transform[4] = y_scale - case _: - raise TypeError + print(f'{type(scaling)=}') + if isinstance(scaling, tuple) and len(scaling) == 2: + x_scale, y_scale = scaling + crs_transform[0] = x_scale + crs_transform[4] = y_scale + else: + raise TypeError(f'Expected a tuple of length 2 for scaling, got {scaling}') affine_transform = Affine(*crs_transform) return list(affine_transform)[:6] From addc8233aa2ee418ec8432ad015c4a6e8b265897 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 25 Sep 2025 23:25:12 +0000 Subject: [PATCH 24/56] refactor: Use `affine` directly instead of `rasterio.transform.Affine` --- xee/helpers.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/xee/helpers.py b/xee/helpers.py index 77d50a9..6ee1b43 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -15,9 +15,9 @@ """Helper functions for grid parameters.""" import math +import affine import ee from pyproj import Transformer -from rasterio.transform import Affine import shapely from shapely.ops import transform from shapely.geometry import box @@ -47,7 +47,7 @@ def set_scale( crs_transform[4] = y_scale else: raise TypeError(f'Expected a tuple of length 2 for scaling, got {scaling}') - affine_transform = Affine(*crs_transform) + affine_transform = affine.Affine(*crs_transform) return list(affine_transform)[:6] @@ -106,7 +106,11 @@ def fit_geometry( grid_x_min = math.floor(x_min / x_scale) * x_scale grid_y_max = math.ceil(y_max / y_scale) * y_scale - affine_transform = Affine.translation(grid_x_min, grid_y_max) * Affine.scale(x_scale, -y_scale) + affine_transform = ( + affine.Affine.translation(grid_x_min, grid_y_max) + * affine.Affine.scale(x_scale, -y_scale) + ) + crs_transform = list(affine_transform)[:6] return dict( From 4c0a799037db7521ba50a694ed700612981d3931 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 25 Sep 2025 23:49:51 +0000 Subject: [PATCH 25/56] refactor: Make `shapely` a require dependency --- pyproject.toml | 2 +- xee/helpers.py | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index ebbb940..6c956fe 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -28,6 +28,7 @@ dependencies = [ "earthengine-api>=0.1.374", "pyproj", "affine", + "shapely", ] [project.entry-points."xarray.backends"] @@ -40,7 +41,6 @@ tests = [ "pyink", "rasterio", "rioxarray", - "shapely", ] dataflow = [ "absl-py", diff --git a/xee/helpers.py b/xee/helpers.py index 6ee1b43..b10e162 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -20,7 +20,6 @@ from pyproj import Transformer import shapely from shapely.ops import transform -from shapely.geometry import box from typing import TypedDict, Tuple, Union @@ -124,7 +123,7 @@ def extract_grid_params( ee_obj: Union[ee.Image, ee.ImageCollection] ) -> PixelGridParams: # Extract the pixel grid parameters from an ee.Image or ee.ImageCollection object - + if isinstance(ee_obj, ee.Image): img_obj = ee_obj elif isinstance(ee_obj, ee.ImageCollection): From e32843e7e090115bc500219dcdc6fc6c6653074b Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Fri, 26 Sep 2025 03:35:15 +0000 Subject: [PATCH 26/56] refactor: Add support for accepting `affine.Affine` object as `crs_transform` --- xee/ext.py | 17 +++++++++++- xee/ext_test.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/xee/ext.py b/xee/ext.py index 8dd02d3..5ec8e2b 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -61,7 +61,9 @@ # Types for type hints CrsType = str -TransformType = Tuple[float, float, float, float, float, float] +TransformType = Union[ + Tuple[float, float, float, float, float, float], affine.Affine +] ShapeType = Tuple[int, int] _BUILTIN_DTYPES = { @@ -206,6 +208,19 @@ def __init__( getitem_kwargs: Optional[Dict[str, int]] = None, fast_time_slicing: bool = False, ): + # Allow affine.Affine objects to be passed in for crs_transform. + if isinstance(crs_transform, affine.Affine): + crs_transform = ( + crs_transform.a, + crs_transform.b, + crs_transform.c, + crs_transform.d, + crs_transform.e, + crs_transform.f, + ) + elif not isinstance(crs_transform, tuple): + raise TypeError('crs_transform must be an affine.Affine object or a tuple.') + self.ee_init_kwargs = ee_init_kwargs self.ee_init_if_necessary = ee_init_if_necessary self.fast_time_slicing = fast_time_slicing diff --git a/xee/ext_test.py b/xee/ext_test.py index 88159d8..f668164 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -3,7 +3,9 @@ from absl.testing import absltest from absl.testing import parameterized import numpy as np +import affine import shapely +from unittest import mock import xee from xee import ext from xee import helpers @@ -98,6 +100,74 @@ def test_exceeding_byte_limit__raises_error(self): with self.assertRaises(ValueError): ext._check_request_limit(chunks, dtype_size, xee.REQUEST_BYTE_LIMIT) + @mock.patch( + 'xee.ext.EarthEngineStore.get_info', + new_callable=mock.PropertyMock, + ) + def test_init_with_affine_transform(self, mock_get_info): + """Test that an affine.Affine object can be passed for crs_transform.""" + mock_get_info.return_value = { + 'size': 1, + 'props': {}, + 'first': { + 'bands': [{ + 'id': 'b1', + 'data_type': {'type': 'PixelType', 'precision': 'float'} + }] + }, + } + transform_tuple = (1.0, 0.0, -180.0, 0.0, -1.0, 90.0) + transform_affine = affine.Affine(*transform_tuple) + + store = xee.EarthEngineStore( + image_collection=mock.MagicMock(), + crs='EPSG:4326', + crs_transform=transform_affine, + shape_2d=(360, 180), + ) + + self.assertIsInstance(store.crs_transform, tuple) + self.assertEqual(store.crs_transform, transform_tuple) + self.assertEqual(store.scale_x, 1.0) + self.assertEqual(store.scale_y, -1.0) + self.assertEqual(store.scale, 1.0) + + @mock.patch( + 'xee.ext.EarthEngineStore.get_info', + new_callable=mock.PropertyMock, + ) + def test_init_with_tuple_transform(self, mock_get_info): + """Test that a tuple object can be passed for crs_transform.""" + # (Setup the mock_get_info.return_value just like in the other test) + mock_get_info.return_value = { + 'size': 1, 'props': {}, + 'first': {'bands': [{'id': 'b1', 'data_type': {'type': 'PixelType', 'precision': 'float'}}]} + } + transform_tuple = (1.0, 0.0, -180.0, 0.0, -1.0, 90.0) + + # Pass the tuple directly + store = xee.EarthEngineStore( + image_collection=mock.MagicMock(), + crs='EPSG:4326', + crs_transform=transform_tuple, + shape_2d=(360, 180), + ) + + # Assert that the tuple was stored correctly + self.assertEqual(store.crs_transform, transform_tuple) + + def test_init_with_invalid_transform_type(self): + """Test that a TypeError is raised for invalid crs_transform types.""" + with self.assertRaises(TypeError): + # Pass a list, which is an invalid type + invalid_transform = [1.0, 0.0, -180.0, 0.0, -1.0, 90.0] + xee.EarthEngineStore( + image_collection=mock.MagicMock(), + crs='EPSG:4326', + crs_transform=invalid_transform, + shape_2d=(360, 180), + ) + class ParseEEInitKwargsTest(absltest.TestCase): From 1d866b85821bbffd9ae31dc00d8eab42eaff6210 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Fri, 26 Sep 2025 04:06:53 +0000 Subject: [PATCH 27/56] refactor: Make `crs_transform` an attribute of `self` for reuse --- xee/ext.py | 11 +++++------ xee/ext_test.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index 5ec8e2b..90af6a4 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -251,8 +251,8 @@ def __init__( self.dimension_names = ('x', 'y') self._props = self._make_attrs_valid(self._props) self.scale_x, self.scale_y = crs_transform[0], crs_transform[4] - affine_transform = affine.Affine(*crs_transform) - self.scale = np.sqrt(np.abs(affine_transform.determinant)) + self.affine_transform = affine.Affine(*crs_transform) + self.scale = np.sqrt(np.abs(self.affine_transform.determinant)) max_dtype = self._max_itemsize() @@ -412,11 +412,10 @@ def project(self, bbox: types.BBox) -> types.Grid: x_start, y_start, x_end, y_end = bbox # Translate the crs_transform to the origin of the bounding box - transform_image = affine.Affine(*self.crs_transform) transform_grid_cell = affine.Affine.translation( - xoff=x_start * transform_image.a, - yoff=y_start * transform_image.e - ) * transform_image + xoff=x_start * self.affine_transform.a, + yoff=y_start * self.affine_transform.e + ) * self.affine_transform return { # The size of the bounding box. The affine transform and project will be diff --git a/xee/ext_test.py b/xee/ext_test.py index f668164..f7b57f3 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -132,6 +132,40 @@ def test_init_with_affine_transform(self, mock_get_info): self.assertEqual(store.scale_y, -1.0) self.assertEqual(store.scale, 1.0) + @mock.patch( + 'xee.ext.EarthEngineStore.get_info', + new_callable=mock.PropertyMock, + ) + def test_project(self, mock_get_info): + """Test that the project method correctly calculates the grid.""" + mock_get_info.return_value = { + 'size': 1, + 'props': {}, + 'first': { + 'bands': [{ + 'id': 'b1', + 'data_type': {'type': 'PixelType', 'precision': 'float'} + }] + }, + } + transform_tuple = (0.25, 0.0, -180.0, 0.0, -0.5, 90.0) + store = xee.EarthEngineStore( + image_collection=mock.MagicMock(), + crs='EPSG:4326', + crs_transform=transform_tuple, + shape_2d=(1440, 720), + ) + + bbox = (10, 20, 30, 40) # x_start, y_start, x_end, y_end + grid = store.project(bbox) + + self.assertEqual(grid['dimensions']['width'], 20) + self.assertEqual(grid['dimensions']['height'], 20) + self.assertEqual(grid['crsCode'], 'EPSG:4326') + # Check that the translation is correct: c + (x_start * a), f + (y_start * e) + self.assertAlmostEqual(grid['affineTransform']['translateX'], -180.0 + (10 * 0.25)) + self.assertAlmostEqual(grid['affineTransform']['translateY'], 90.0 + (20 * -0.5)) + @mock.patch( 'xee.ext.EarthEngineStore.get_info', new_callable=mock.PropertyMock, From cf4866176a3ad065b7efad39462b763120c31a59 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Fri, 26 Sep 2025 16:38:00 +0000 Subject: [PATCH 28/56] fix: Handle negative and positive y scale in `fit_geometry` --- xee/ext_test.py | 85 +++++++++++++++++++++++++++++++++++++++++++++---- xee/helpers.py | 48 +++++++++++----------------- 2 files changed, 97 insertions(+), 36 deletions(-) diff --git a/xee/ext_test.py b/xee/ext_test.py index f7b57f3..c90084b 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -268,11 +268,11 @@ def test_fit_geometry_specify_scale(self): (10.1, 10.9), (11.9, 10.1)]), grid_crs='EPSG:4326', - grid_scale=0.5 + grid_scale=(0.5, -0.5), ) self.assertEqual( grid_dict['crs_transform'], - [0.5, 0, 10, 0, -0.5, 11.0] + [0.5, 0.0, 10.0, 0.0, -0.5, 11.0], ) self.assertEqual( grid_dict['shape_2d'], @@ -280,16 +280,42 @@ def test_fit_geometry_specify_scale(self): ) + def test_fit_geometry_specify_scale_scalar_fails(self): + """Test that a scalar grid_scale raises a TypeError.""" + with self.assertRaises(TypeError): + helpers.fit_geometry( + geometry=shapely.Polygon( + [(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)] + ), + grid_crs='EPSG:4326', + grid_scale=0.5, # A scalar should fail + ) + + def test_fit_geometry_specify_scale_positive_y(self): + """Test fit_geometry with an explicit positive y-scale.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Polygon( + [(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)] + ), + grid_crs='EPSG:4326', + grid_scale=(0.5, 0.5), # Note the positive y-scale + ) + # The transform should now reflect the positive y-scale. + self.assertEqual( + grid_dict['crs_transform'], [0.5, 0.0, 10.0, 0.0, 0.5, 11.0] + ) + self.assertEqual( + grid_dict['shape_2d'], (4, 2) + ) + + def test_fit_geometry_specify_scale_utm(self): """Test generating grid parameters to match a UTM geometry, specifying the scale.""" grid_dict = helpers.fit_geometry( - geometry=shapely.Polygon([(551000, 4179000), - (551000, 4179000), - (552000, 4180000), - (552000, 4180000)]), # over San Francisco + geometry=shapely.geometry.box(551000, 4179000, 552000, 4180000), # over San Francisco geometry_crs='EPSG:32610', grid_crs='EPSG:4326', - grid_scale=0.01 + grid_scale=(0.01, -0.01), ) self.assertEqual( grid_dict['crs_transform'], @@ -316,6 +342,51 @@ def test_fit_geometry_specify_shape(self): rtol=1e-4, ) + def test_fit_geometry_value_error(self): + """Test that a ValueError is raised for invalid scale/shape combinations.""" + geom = shapely.geometry.box(0, 0, 1, 1) # Use a valid polygon + # Test when both grid_scale and grid_shape are provided + with self.assertRaisesRegex( + ValueError, "Exactly one of 'grid_scale' or 'grid_shape' must be" + ): + helpers.fit_geometry( + geometry=geom, grid_scale=(0.1, -0.1), grid_shape=(10, 10) + ) + + # Test when neither grid_scale nor grid_shape are provided + with self.assertRaisesRegex( + ValueError, "Exactly one of 'grid_scale' or 'grid_shape' must be" + ): + helpers.fit_geometry(geometry=geom) + + def test_fit_geometry_with_buffer(self): + """Test that the buffer parameter correctly expands the grid.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Point(10.5, 10.5), + buffer=0.5, # Creates a 1x1 degree box around the point + grid_crs='EPSG:4326', + grid_shape=(10, 10), + ) + # The origin should be at (10.0, 11.0) for a 1x1 box centered at 10.5, 10.5 + self.assertAlmostEqual(grid_dict['crs_transform'][2], 10.0) + self.assertAlmostEqual(grid_dict['crs_transform'][5], 11.0) + self.assertEqual(grid_dict['shape_2d'], (10, 10)) + + def test_fit_geometry_with_rounding(self): + """Test that grid_scale_digits correctly rounds the scale.""" + grid_dict = helpers.fit_geometry( + geometry=shapely.Polygon( + [(0, 0), (0, 1.001), (1.001, 1.001), (1.001, 0)] + ), + grid_crs='EPSG:4326', + grid_shape=(10, 10), + grid_scale_digits=2, # Round scale to 2 decimal places + ) + # x_scale = 1.001 / 10 = 0.1001, rounded to 0.1 + # y_scale = -1.001 / 10 = -0.1001, rounded to -0.1 + self.assertAlmostEqual(grid_dict['crs_transform'][0], 0.1) + self.assertAlmostEqual(grid_dict['crs_transform'][4], -0.1) + if __name__ == '__main__': absltest.main() diff --git a/xee/helpers.py b/xee/helpers.py index b10e162..7cc5642 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -25,7 +25,7 @@ TransformType = Tuple[float, float, float, float, float, float] ShapeType = Tuple[int, int] -ScalingType = Union[float, Tuple[float, float]] +ScalingType = Tuple[float, float] class PixelGridParams(TypedDict): @@ -39,7 +39,6 @@ def set_scale( scaling: ScalingType, ) -> list: """Update the CRS transform's scale parameters.""" - print(f'{type(scaling)=}') if isinstance(scaling, tuple) and len(scaling) == 2: x_scale, y_scale = scaling crs_transform[0] = x_scale @@ -56,22 +55,17 @@ def fit_geometry( geometry_crs: str = 'EPSG:4326', buffer: float = 0, grid_crs: str = 'EPSG:4326', - grid_scale: float = None, + grid_scale: ScalingType = None, grid_scale_digits: int = None, grid_shape: ShapeType = None, -) -> PixelGridParams: +) -> PixelGridParams: """Return grid parameters that fit the geometry.""" - - # Check that exactly one of the arguments is specified + if (grid_scale is None) == (grid_shape is None): raise ValueError("Exactly one of 'grid_scale' or 'grid_shape' must be specified.") - # Reproject geometry to the grid CRS. If the grids are the same this - # is a no-op. transformer = Transformer.from_crs( - crs_from=geometry_crs, - crs_to=grid_crs, - always_xy=True + crs_from=geometry_crs, crs_to=grid_crs, always_xy=True ) reprojected_geometry = transform(transformer.transform, geometry) if buffer and buffer > 0: @@ -81,33 +75,29 @@ def fit_geometry( x_min, y_min, x_max, y_max = buffered_geom.bounds if grid_scale: - # Given scale & geometry, determine the translation & shape parameters. - x_scale = y_scale = grid_scale - - x_shape = math.ceil( - (x_max / x_scale - math.floor(x_min / x_scale)) - ) - y_shape = math.ceil( - (-y_min / y_scale + math.ceil(y_max / y_scale)) - ) - - if grid_shape: - # Given shape & geometry, determine the translation & scale parameters. + if isinstance(grid_scale, tuple) and len(grid_scale) == 2: + x_scale, y_scale = grid_scale + else: + raise TypeError(f'Expected a tuple of length 2 for grid_scale, got {grid_scale}') + + # REVERTED to the more direct and robust shape calculation. + x_shape = int(math.ceil(x_max / x_scale) - math.floor(x_min / x_scale)) + y_shape = int(math.ceil(y_max / abs(y_scale)) - math.floor(y_min / abs(y_scale))) + else: # grid_shape is not None x_shape, y_shape = grid_shape - x_scale = (x_max - x_min) / x_shape - y_scale = (y_max - y_min) / y_shape + y_scale = -(y_max - y_min) / y_shape if grid_scale_digits: x_scale = round(x_scale, grid_scale_digits) y_scale = round(y_scale, grid_scale_digits) - + grid_x_min = math.floor(x_min / x_scale) * x_scale - grid_y_max = math.ceil(y_max / y_scale) * y_scale - + grid_y_max = math.ceil(y_max / abs(y_scale)) * abs(y_scale) + affine_transform = ( affine.Affine.translation(grid_x_min, grid_y_max) - * affine.Affine.scale(x_scale, -y_scale) + * affine.Affine.scale(x_scale, y_scale) ) crs_transform = list(affine_transform)[:6] From 0a54b455e50649e05d6a53f533144c5a259f5d08 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Fri, 26 Sep 2025 19:42:05 +0000 Subject: [PATCH 29/56] fix: Fix tests so that tuple is used (requried type for crs_transform now) --- xee/ext.py | 7 ++++--- xee/ext_integration_test.py | 18 +++++++++--------- xee/ext_test.py | 8 ++++---- xee/helpers.py | 4 ++-- 4 files changed, 19 insertions(+), 18 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index 90af6a4..1187b1a 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -208,8 +208,9 @@ def __init__( getitem_kwargs: Optional[Dict[str, int]] = None, fast_time_slicing: bool = False, ): - # Allow affine.Affine objects to be passed in for crs_transform. + # Ensure crs_transform is a tuple and create the affine.Affine object. if isinstance(crs_transform, affine.Affine): + self.affine_transform = crs_transform crs_transform = ( crs_transform.a, crs_transform.b, @@ -220,7 +221,8 @@ def __init__( ) elif not isinstance(crs_transform, tuple): raise TypeError('crs_transform must be an affine.Affine object or a tuple.') - + else: + self.affine_transform = affine.Affine(*crs_transform) self.ee_init_kwargs = ee_init_kwargs self.ee_init_if_necessary = ee_init_if_necessary self.fast_time_slicing = fast_time_slicing @@ -251,7 +253,6 @@ def __init__( self.dimension_names = ('x', 'y') self._props = self._make_attrs_valid(self._props) self.scale_x, self.scale_y = crs_transform[0], crs_transform[4] - self.affine_transform = affine.Affine(*crs_transform) self.scale = np.sqrt(np.abs(self.affine_transform.determinant)) max_dtype = self._max_itemsize() diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 7105a53..d9eca92 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -45,7 +45,7 @@ # Define grid parameters for tests _TEST_GRID_PARAMS = { 'crs': 'EPSG:4326', - 'crs_transform': [1.0, 0, -180.0, 0, -1.0, 90.0], + 'crs_transform': (1.0, 0, -180.0, 0, -1.0, 90.0), 'shape_2d': (360, 180) } @@ -330,7 +330,7 @@ def test_open_dataset__sanity_check(self): pathlib.Path('ECMWF') / 'ERA5' / 'MONTHLY', n_images=n_images, crs='EPSG:4326', - crs_transform=[12.0, 0, -180.0, 0, -25.0, 90.0], + crs_transform=(12.0, 0, -180.0, 0, -25.0, 90.0), shape_2d=(width, height), ) self.assertEqual(dict(ds.sizes), {'time': 3, 'x': width, 'y': height}) @@ -399,8 +399,8 @@ def test_honors_geometry_simple_utm(self): ds = xr.open_dataset( ic, engine=xee.EarthEngineBackendEntrypoint, - crs='EPSG:32610', - crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # Origin over SF + crs='EPSG:32610', + crs_transform=(30, 0, 448485+103000, 0, -30, 4263915-84000), # Origin over SF shape_2d=(width, height), ) @@ -472,7 +472,7 @@ def test_parses_ee_url(self): test_params = { 'n_images': n_images, 'crs': 'EPSG:4326', - 'crs_transform': [12.0, 0, -180.0, 0, -25.0, 90.0], + 'crs_transform': (12.0, 0, -180.0, 0, -25.0, 90.0), 'shape_2d': (width, height) } ds1 = self.entry.open_dataset('ee://LANDSAT/LC08/C02/T1', **test_params) @@ -535,7 +535,7 @@ def test_fast_time_slicing(self): filename_or_obj=fake_collection, engine=xee.EarthEngineBackendEntrypoint, crs='EPSG:4326', - crs_transform=[1, 0, -100, 0, 1, 50], + crs_transform=(1, 0, -100, 0, 1, 50), shape_2d=(3, 4), ) @@ -571,7 +571,7 @@ def test_write_projected_dataset_to_raster(self): grid_dict = helpers.fit_geometry( geometry=point.buffer(0.1), grid_crs=crs, - grid_scale=100 + grid_scale=(100, -100) ) ds = xr.open_dataset( @@ -644,7 +644,7 @@ def test_extract_projection_from_image(self): 'ee://ECMWF/ERA5_LAND/HOURLY', engine='ee', crs='EPSG:32610', - crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + crs_transform=(30, 0, 448485 + 103000, 0, -30, 4263915 - 84000), # In San Francisco, California shape_2d=(64, 64), ) @@ -653,7 +653,7 @@ def test_extract_projection_from_image(self): ic, engine='ee', crs='EPSG:32610', - crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California + crs_transform=(30, 0, 448485 + 103000, 0, -30, 4263915 - 84000), # In San Francisco, California shape_2d=(64, 64), ) diff --git a/xee/ext_test.py b/xee/ext_test.py index c90084b..32bda17 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -272,7 +272,7 @@ def test_fit_geometry_specify_scale(self): ) self.assertEqual( grid_dict['crs_transform'], - [0.5, 0.0, 10.0, 0.0, -0.5, 11.0], + (0.5, 0.0, 10.0, 0.0, -0.5, 11.0), ) self.assertEqual( grid_dict['shape_2d'], @@ -302,7 +302,7 @@ def test_fit_geometry_specify_scale_positive_y(self): ) # The transform should now reflect the positive y-scale. self.assertEqual( - grid_dict['crs_transform'], [0.5, 0.0, 10.0, 0.0, 0.5, 11.0] + grid_dict['crs_transform'], (0.5, 0.0, 10.0, 0.0, 0.5, 11.0) ) self.assertEqual( grid_dict['shape_2d'], (4, 2) @@ -319,7 +319,7 @@ def test_fit_geometry_specify_scale_utm(self): ) self.assertEqual( grid_dict['crs_transform'], - [0.01, 0.0, -122.43, 0.0, -0.01, 37.77] + (0.01, 0.0, -122.43, 0.0, -0.01, 37.77) ) self.assertEqual( grid_dict['shape_2d'], @@ -338,7 +338,7 @@ def test_fit_geometry_specify_shape(self): ) np.testing.assert_allclose( grid_dict['crs_transform'], - [0.5, 0, 10, 0, -0.5, 3], + (0.5, 0, 10, 0, -0.5, 3), rtol=1e-4, ) diff --git a/xee/helpers.py b/xee/helpers.py index 7cc5642..1249756 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -100,7 +100,7 @@ def fit_geometry( * affine.Affine.scale(x_scale, y_scale) ) - crs_transform = list(affine_transform)[:6] + crs_transform = affine_transform[:6] return dict( crs=grid_crs, @@ -125,6 +125,6 @@ def extract_grid_params( return dict( crs=first_band_info['crs'], - crs_transform=first_band_info['crs_transform'], + crs_transform=tuple(first_band_info['crs_transform']), shape_2d=tuple(first_band_info['dimensions']) ) From c215facbd2001f7323468b832f98eef53ec50b4b Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 29 Sep 2025 23:03:22 +0000 Subject: [PATCH 30/56] refactor: Update readme to use tuple for shape and transform, add detail and examples --- README.md | 204 ++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 161 insertions(+), 43 deletions(-) diff --git a/README.md b/README.md index 3feb7d2..4948e83 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ _An Xarray extension for Google Earth Engine._ +Xee bridges the gap between Google Earth Engine's massive data catalog and the scientific Python ecosystem. It provides a custom Xarray backend that allows you to open any `ee.ImageCollection` as if it were a local `xarray.Dataset`. Data is loaded lazily and in parallel, enabling you to work with petabyte-scale archives of satellite and climate data using the power and flexibility of Xarray and its integrations with libraries like Dask. + [![image](https://img.shields.io/pypi/v/xee.svg)](https://pypi.python.org/pypi/xee) [![image](https://static.pepy.tech/badge/xee)](https://pepy.tech/project/xee) [![Conda @@ -32,90 +34,206 @@ Then, authenticate Earth Engine: earthengine authenticate --quiet ``` -Now, in your Python environment, make the following imports: +Now, in your Python environment, make the following imports and initialize the Earth Engine client with your project ID. Using the high-volume API endpoint is recommended. ```python import ee import xarray as xr +from xee import helpers +import shapely + +ee.Initialize( + project='PROJECT-ID', # Replace with your project ID + opt_url='https://earthengine-highvolume.googleapis.com' +) ``` -Next, specify your EE-registered cloud project ID and initialize the EE client -with the high volume API: +### Specifying the Output Grid + +To open a dataset, you must specify the desired output pixel grid. The `xee.helpers` module simplifies this process by providing several convenient workflows, summarized below. + +| Goal | Method | When to Use | +| :--- | :--- | :--- | +| **Match Source Grid** | Use `helpers.extract_grid_params()` to get the parameters from an EE object. | When you want the data in its original, default projection and scale. | +| **Fit Area to a Shape** | Use `helpers.fit_geometry()` with the `geometry` and `grid_shape` arguments. | When you need a consistent output array size (e.g., for ML models) and the exact pixel size is less important. | +| **Fit Area to a Scale** | Use `helpers.fit_geometry()` with the `geometry` and `grid_scale` arguments. | When the specific resolution (e.g., 30 meters, 0.01 degrees) is critical for your analysis. | +| **Manual Override** | Pass `crs`, `crs_transform`, and `shape_2d` directly to `xr.open_dataset`. | For advanced cases where you already have an exact grid definition. | + +> **Important Note on Units:** All grid parameter values must be in the units of the specified Coordinate Reference System (`crs`). +> * For a geographic CRS like `'EPSG:4326'`, the units are in **degrees**. +> * For a projected CRS like `'EPSG:32610'` (UTM), the units are in **meters**. +> This applies to the translation values in `crs_transform` and the pixel sizes in `grid_scale`. + +### Usage Examples + +Here are common workflows for opening datasets with `xee`, corresponding to the methods in the table above. + +#### Match Source Grid + +This is the simplest case, using `helpers.extract_grid_params` to match the dataset's default grid. ```python -ee.Initialize( - project='my-project-id' - opt_url='https://earthengine-highvolume.googleapis.com') +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) ``` -We specify the desired pixel grid using three parameters: `crs`, `crs_transform`, and `shape_2d`. Xee contains a helper function `extract_grid_params` that can extract these parameters from an Earth Engine Image or ImageCollection object. +#### Fit Area to a Shape + +Define a grid over an area of interest by specifying the number of pixels. `helpers.fit_geometry` will calculate the correct `crs_transform`. + ```python -ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY') -grid_params = helpers.extract_grid_params(ic) +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) +) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) ``` -Open any Earth Engine ImageCollection by specifying the Xarray engine as `'ee'`: +#### Fit Area to a Scale (Resolution) + +> **A Note on `grid_scale` and Y-Scale Orientation** +> When using `fit_geometry` with `grid_scale`, you are defining both the pixel size and the grid's orientation via the sign of the y-scale. +> * A **negative `y_scale`** (e.g., `(10000, -10000)`) is the standard for "north-up" satellite and aerial imagery, creating a grid with a **top-left** origin. +> * A **positive `y_scale`** (e.g., `(10000, 10000)`) is used by some datasets and creates a grid with a **bottom-left** origin. +> You may need to inspect your source dataset's projection information to determine the correct sign to use. If you use `grid_shape`, a standard negative y-scale is assumed. + +The following example defines a grid over an area by specifying the pixel size in meters. `fit_geometry` will reproject the geometry and calculate the correct `shape_2d`. ```python -ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/HOURLY', - engine='ee', - **grid_params +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', # CRS of the input geometry + grid_crs='EPSG:32662', # Target CRS in meters (Plate Carrée) + grid_scale=(10000, -10000) # Define a 10km pixel size ) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) ``` -Open all bands in a specific projection: +#### Open a Custom Region at Source Resolution + +This workflow is ideal for analyzing a specific area while maintaining the dataset's original resolution. ```python -ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/HOURLY', - engine='ee', - crs='EPSG:32610', - crs_transform=[30, 0, 448485+103000, 0, -30, 4263915-84000], # In San Francisco, California - shape_2d=(64, 64), +# 1. Get the original grid parameters from the target ImageCollection +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +source_params = helpers.extract_grid_params(ic) + +# 2. Extract the source CRS and scale +source_crs = source_params['crs'] +source_transform = source_params['crs_transform'] +source_scale = (source_transform[0], source_transform[4]) # (x_scale, y_scale) + +# 3. Use the source parameters to fit the grid to a specific geometry +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +final_grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', + grid_crs=source_crs, + grid_scale=source_scale ) + +# 4. Open the dataset with the final, combined parameters +ds = xr.open_dataset(ic, engine='ee', **final_grid_params) ``` -Open an ImageCollection (maybe, with EE-side filtering or processing): +#### Manual Override + +For use cases where you know the exact grid parameters, you can provide them directly. ```python +# Manually define a 512x512 pixel grid with 1-degree pixels in EPSG:4326 +manual_crs = 'EPSG:4326' +manual_transform = (0.1, 0, -180.05, 0, -0.1, 90.05) # Values are in degrees +manual_shape = (512, 512) + ds = xr.open_dataset( - ic, + 'ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', - crs='EPSG:32610', - crs_transform=[30, 0, 551485, 0, -30, 4179915], # In San Francisco, California - shape_2d=(64, 64), + crs=manual_crs, + crs_transform=manual_transform, + shape_2d=manual_shape, ) ``` -Open an ImageCollection with a specific EE projection or geometry: +#### Open a Pre-Processed ImageCollection -```python -import shapely +A key feature of Xee is its ability to open a computed `ee.ImageCollection`. This allows you to leverage Earth Engine's powerful server-side processing for tasks like filtering, band selection, and calculations before loading the data into Xarray. +```python +# Define an AOI as a shapely object for the helper function +sf_aoi_shapely = shapely.geometry.Point(-122.4, 37.7).buffer(0.2) +# Create an ee.Geometry from the shapely object for server-side filtering +coords = list(sf_aoi_shapely.exterior.coords) +sf_aoi_ee = ee.Geometry.Polygon(coords) + +# Define a function to calculate NDVI and add it as a band +def add_ndvi(image): + # Landsat 9 SR bands: NIR = B5, Red = B4 + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +# Build the pre-processed collection +processed_collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-06-01', '2024-09-01') + .filterBounds(sf_aoi_ee) + .map(add_ndvi) + .select(['NDVI'])) + +# Define the output grid using a helper grid_params = helpers.fit_geometry( - geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), - grid_crs='EPSG:4326', - grid_shape=(256, 256) + geometry=sf_aoi_shapely, + grid_crs='EPSG:32610', # Target CRS in meters (UTM Zone 10N) + grid_scale=(30, -30) # Use Landsat's 30m resolution ) -ds = xr.open_dataset( - ic, - engine='ee', - **grid_params -) +# Open the fully processed collection +ds = xr.open_dataset(processed_collection, engine='ee', **grid_params) ``` -Open a single Image: +#### Open a single Image + +The `helpers` work the same way for a single `ee.Image`. ```python -img = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') +img = ee.Image('ECMWF/ERA5_LAND/MONTHLY_AGGR/202501') grid_params = helpers.extract_grid_params(img) -ds = xr.open_dataset( - img, - engine='ee', - **grid_params +ds = xr.open_dataset(img, engine='ee', **grid_params) +``` + +#### Visualize a Single Time Slice + +Once you have your `xarray.Dataset`, you can visualize a single time slice of a variable to verify the results. This requires the `matplotlib` library, which is an optional dependency. + +If you don't have it installed, you can add it with pip: + +```shell +pip install matplotlib +``` + +Xarray's plotting functions expect dimensions in `(y, x)` order for 2D plots. Since the data is in `(x, y)` order, we use `.transpose()` to swap the axes for correct visualization. + +```python + +# First, open a dataset using one of the methods above +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) ) +ds = xr.open_dataset('ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) + +# Select the 2m air temperature for the first time step +temp_slice = ds['temperature_2m'].isel(time=0) + +# Transpose from (x, y) to (y, x) for correct plotting orientation and plot +temp_slice.transpose('y', 'x').plot() ``` See [examples](https://github.com/google/Xee/tree/main/examples) or From edde4690d23ae9c9a8af3b38caa4be214915c118 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 7 Oct 2025 20:06:54 +0000 Subject: [PATCH 31/56] `pyupgrade --py39-plus` following commit 625cbba --- xee/ext.py | 2 +- xee/helpers.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index c2fffc8..1caac94 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -885,7 +885,7 @@ def guess_can_open( def open_dataset( self, - filename_or_obj: Union[str, os.PathLike[Any], ee.ImageCollection], + filename_or_obj: str | os.PathLike[Any] | ee.ImageCollection, crs: CrsType, crs_transform: TransformType, shape_2d: ShapeType, diff --git a/xee/helpers.py b/xee/helpers.py index 1249756..72f38b0 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -20,12 +20,12 @@ from pyproj import Transformer import shapely from shapely.ops import transform -from typing import TypedDict, Tuple, Union +from typing import TypedDict, Union -TransformType = Tuple[float, float, float, float, float, float] -ShapeType = Tuple[int, int] -ScalingType = Tuple[float, float] +TransformType = tuple[float, float, float, float, float, float] +ShapeType = tuple[int, int] +ScalingType = tuple[float, float] class PixelGridParams(TypedDict): From 0daf9583f46e67a750ca3001be151106098429b3 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 7 Oct 2025 20:18:22 +0000 Subject: [PATCH 32/56] Drop Python 3.8 following commit 34adc13 --- xee/ext.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/ext.py b/xee/ext.py index 1caac94..f0f84c9 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -46,7 +46,7 @@ import ee -assert sys.version_info >= (3, 8) +assert sys.version_info >= (3, 9) try: __version__ = importlib.metadata.version('xee') or 'unknown' except importlib.metadata.PackageNotFoundError: From ca9691a034949a6b6ffc76db4096f46d2c2d7756 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 7 Oct 2025 20:51:31 +0000 Subject: [PATCH 33/56] Fix additional typing that pyupgrade missed (?) --- xee/ext.py | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index f0f84c9..04a865e 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -62,10 +62,8 @@ # Types for type hints CrsType = str -TransformType = Union[ - Tuple[float, float, float, float, float, float], affine.Affine -] -ShapeType = Tuple[int, int] +TransformType = Union[tuple[float, float, float, float, float, float], affine.Affine] +ShapeType = tuple[int, int] _BUILTIN_DTYPES = { 'int': np.int32, @@ -158,9 +156,9 @@ def open( mode: Literal['r'] = 'r', chunk_store: Chunks = None, n_images: int = -1, - primary_dim_name: Optional[str] = None, - primary_dim_property: Optional[str] = None, - mask_value: Optional[float] = None, + primary_dim_name: str | None = None, + primary_dim_property: str | None = None, + mask_value: float | None = None, request_byte_limit: int = REQUEST_BYTE_LIMIT, ee_init_kwargs: dict[str, Any] | None = None, ee_init_if_necessary: bool = False, @@ -199,9 +197,9 @@ def __init__( shape_2d: ShapeType, chunks: Chunks = None, n_images: int = -1, - primary_dim_name: Optional[str] = None, - primary_dim_property: Optional[str] = None, - mask_value: Optional[float] = None, + primary_dim_name: str | None = None, + primary_dim_property: str | None = None, + mask_value: float | None = None, request_byte_limit: int = REQUEST_BYTE_LIMIT, ee_init_kwargs: dict[str, Any] | None = None, ee_init_if_necessary: bool = False, @@ -888,9 +886,9 @@ def open_dataset( filename_or_obj: str | os.PathLike[Any] | ee.ImageCollection, crs: CrsType, crs_transform: TransformType, - shape_2d: ShapeType, - drop_variables: Optional[Tuple[str, ...]] = None, - io_chunks: Optional[Any] = None, + shape_2d: ShapeType, + drop_variables: tuple[str, ...] | None = None, + io_chunks: Any | None = None, n_images: int = -1, mask_and_scale: bool = True, decode_times: bool = True, @@ -898,9 +896,9 @@ def open_dataset( use_cftime: bool | None = None, concat_characters: bool = True, decode_coords: bool = True, - primary_dim_name: Optional[str] = None, - primary_dim_property: Optional[str] = None, - ee_mask_value: Optional[float] = None, + primary_dim_name: str | None = None, + primary_dim_property: str | None = None, + ee_mask_value: float | None = None, request_byte_limit: int = REQUEST_BYTE_LIMIT, ee_init_if_necessary: bool = False, ee_init_kwargs: dict[str, Any] | None = None, From 55bb162dc3b54e127fe4769c920f820af24a776f Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 11 Nov 2025 23:03:50 -0800 Subject: [PATCH 34/56] Change dimension ordering from (time, x, y) to (time, y, x) (#274) --- README.md | 6 +++--- xee/ext.py | 28 +++++++++++++-------------- xee/ext_integration_test.py | 38 +++++++++++++++++++++---------------- 3 files changed, 39 insertions(+), 33 deletions(-) diff --git a/README.md b/README.md index 4948e83..3f9b9c3 100644 --- a/README.md +++ b/README.md @@ -216,7 +216,7 @@ If you don't have it installed, you can add it with pip: pip install matplotlib ``` -Xarray's plotting functions expect dimensions in `(y, x)` order for 2D plots. Since the data is in `(x, y)` order, we use `.transpose()` to swap the axes for correct visualization. +Then you can use Xarray's plotting functions to visualize the data. ```python @@ -232,8 +232,8 @@ ds = xr.open_dataset('ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) # Select the 2m air temperature for the first time step temp_slice = ds['temperature_2m'].isel(time=0) -# Transpose from (x, y) to (y, x) for correct plotting orientation and plot -temp_slice.transpose('y', 'x').plot() +# Plot the data +temp_slice.plot() ``` See [examples](https://github.com/google/Xee/tree/main/examples) or diff --git a/xee/ext.py b/xee/ext.py index 04a865e..2aae9c9 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -249,7 +249,7 @@ def __init__( # Metadata should apply to all imgs. self._img_info: types.ImageInfo = self.get_info['first'] - self.dimension_names = ('x', 'y') + self.dimension_names = ('y', 'x') self._props = self._make_attrs_valid(self._props) self.scale_x, self.scale_y = crs_transform[0], crs_transform[4] self.scale = np.sqrt(np.abs(self.affine_transform.determinant)) @@ -368,7 +368,7 @@ def _assign_index_chunks( dict: A dictionary containing 'index', 'width', and 'height' values. """ chunks = {} - x_dim_name, y_dim_name = self.dimension_names + y_dim_name, x_dim_name = self.dimension_names for key, dim_name in [ ('index', self.primary_dim_name), ('width', x_dim_name), @@ -383,7 +383,7 @@ def _assign_index_chunks( def _assign_preferred_chunks(self) -> Chunks: chunks = {} - x_dim_name, y_dim_name = self.dimension_names + y_dim_name, x_dim_name = self.dimension_names if self.chunks == -1: chunks[self.primary_dim_name] = self.PREFERRED_CHUNKS['index'] chunks[x_dim_name] = self.PREFERRED_CHUNKS['width'] @@ -488,7 +488,7 @@ def image_to_array( f'falling back to returned dtype from EE {np.dtype(raw.dtype[0])}' ) - data = arr.T + data = arr.transpose(2, 0, 1) current_mask_value = np.array(self.mask_value, dtype=data.dtype) # Sets EE nodata masked value to NaNs. data = np.where(data == current_mask_value, np.nan, data) @@ -531,8 +531,8 @@ def open_store_variable(self, name: str) -> xarray.Variable: arr = EarthEngineBackendArray(name, self) data = indexing.LazilyIndexedArray(arr) - x_dim_name, y_dim_name = self.dimension_names - dimensions = [self.primary_dim_name, x_dim_name, y_dim_name] + y_dim_name, x_dim_name = self.dimension_names + dimensions = [self.primary_dim_name, y_dim_name, x_dim_name] attrs = self._make_attrs_valid(self._band_attrs(name)) attrs['crs'] = str(self.crs) encoding = { @@ -593,15 +593,15 @@ def get_variables(self) -> utils.Frozen[str, xarray.Variable]: if height_coord.ndim == 0: height_coord = height_coord[None, ...] - x_dim_name, y_dim_name = self.dimension_names + y_dim_name, x_dim_name = self.dimension_names coords = [ ( self.primary_dim_name, xarray.Variable(self.primary_dim_name, primary_coord), ), - (x_dim_name, xarray.Variable(x_dim_name, width_coord)), (y_dim_name, xarray.Variable(y_dim_name, height_coord)), + (x_dim_name, xarray.Variable(x_dim_name, width_coord)), ] return utils.FrozenDict(vars_ + coords) @@ -664,7 +664,7 @@ def __init__(self, variable_name: str, ee_store: EarthEngineStore): self._info = ee_store._band_attrs(variable_name) self.dtype = np.dtype(np.float32) - self.shape = (ee_store.n_images, ) + ee_store.shape_2d + self.shape = (ee_store.n_images, ) + (ee_store.shape_2d[1], ee_store.shape_2d[0]) self._apparent_chunks = {k: 1 for k in self.store.PREFERRED_CHUNKS.keys()} if isinstance(self.store.chunks, dict): self._apparent_chunks = self.store.chunks.copy() @@ -765,8 +765,8 @@ def _raw_indexing_method( # TODO(#13): honor step increments strt, stop, _ = key[0].indices(self.shape[0]) - wmin, wmax, _ = key[1].indices(self.shape[1]) - hmin, hmax, _ = key[2].indices(self.shape[2]) + hmin, hmax, _ = key[1].indices(self.shape[1]) + wmin, wmax, _ = key[2].indices(self.shape[2]) bbox = wmin, hmin, wmax, hmax i_range = stop - strt h_range = hmax - hmin @@ -801,8 +801,8 @@ def _raw_indexing_method( # TODO(#10): can this be a np.array of objects? shape = ( math.ceil(i_range / self._apparent_chunks['index']), - math.ceil(w_range / self._apparent_chunks['width']), math.ceil(h_range / self._apparent_chunks['height']), + math.ceil(w_range / self._apparent_chunks['width']), ) tiles = [ [[None for _ in range(shape[2])] for _ in range(shape[1])] @@ -846,8 +846,8 @@ def _tile_indexes( wmin, hmin, wmax, hmax = bbox for i, t0 in enumerate(range(start, stop + 1, tstep)): - for j, w0 in enumerate(range(wmin, wmax + 1, wstep)): - for k, h0 in enumerate(range(hmin, hmax + 1, hstep)): + for j, h0 in enumerate(range(hmin, hmax + 1, hstep)): + for k, w0 in enumerate(range(wmin, wmax + 1, wstep)): t1 = min(t0 + tstep, stop) w1 = min(w0 + wstep, wmax) h1 = min(h0 + hstep, hmax) diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index d9eca92..9e28e57 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -113,14 +113,14 @@ def setUp(self): def test_creates_lat_long_array(self): arr = xee.EarthEngineBackendArray('longitude', self.lnglat_store) - self.assertEqual((1, 360, 180), arr.shape) + self.assertEqual((1, 180, 360), arr.shape) def test_can_create_object(self): arr = xee.EarthEngineBackendArray('B4', self.store) self.assertIsNotNone(arr) - self.assertEqual((64, 360, 180), arr.shape) + self.assertEqual((64, 180, 360), arr.shape) self.assertEqual(np.float32, arr.dtype) self.assertEqual('B4', arr.variable_name) @@ -180,8 +180,8 @@ def test_chunk_bboxes(self): self.assertEqual( [ ((0, 0, 0), (0, 1, 500, 500, 1012, 1012)), - ((0, 0, 1), (0, 1, 500, 1012, 1012, 1025)), - ((0, 1, 0), (0, 1, 1012, 500, 1025, 1012)), + ((0, 0, 1), (0, 1, 1012, 500, 1025, 1012)), + ((0, 1, 0), (0, 1, 500, 1012, 1012, 1025)), ((0, 1, 1), (0, 1, 1012, 1012, 1025, 1025)), ], actual, @@ -333,7 +333,7 @@ def test_open_dataset__sanity_check(self): crs_transform=(12.0, 0, -180.0, 0, -25.0, 90.0), shape_2d=(width, height), ) - self.assertEqual(dict(ds.sizes), {'time': 3, 'x': width, 'y': height}) + self.assertEqual(dict(ds.sizes), {'time': 3, 'y': height, 'x': width}) self.assertNotEmpty(dict(ds.coords)) self.assertEqual( list(ds.data_vars.keys()), @@ -353,7 +353,7 @@ def test_open_dataset__sanity_check(self): for v in ds.values(): self.assertIsNotNone(v.data) self.assertFalse(v.isnull().all(), 'All values are null!') - self.assertEqual(v.shape, (n_images, width, height)) + self.assertEqual(v.shape, (n_images, height, width)) def test_open_dataset__n_images(self): @@ -404,26 +404,32 @@ def test_honors_geometry_simple_utm(self): shape_2d=(width, height), ) - self.assertEqual(ds.sizes, {'time': 1, 'x': width, 'y': height}) + self.assertEqual(ds.sizes, {'time': 1, 'y': height, 'x': width}) np.testing.assert_allclose( ds['latitude'].values, np.array([[ - [37.764977, 37.764706, 37.764435, 37.764164], - [37.764973, 37.7647 , 37.76443 , 37.764164] + [37.764977, 37.764973], + [37.764706, 37.7647 ], + [37.764435, 37.76443 ], + [37.764164, 37.764164] ]]) ) np.testing.assert_allclose( ds['longitude'].values, np.array([[ - [-122.41528, -122.41529, -122.41529, -122.41529], - [-122.41495, -122.41495, -122.41495, -122.41495] + [-122.41528, -122.41495], + [-122.41529, -122.41495], + [-122.41529, -122.41495], + [-122.41529, -122.41495] ]]) ) np.testing.assert_allclose( ds['SR_B1'].values, np.array([[ - [14332., 13622., 12058., 11264.], - [12254., 10379., 10701., 11150.] + [14332., 12254.], + [13622., 10379.], + [12058., 10701.], + [11264., 11150.] ]]) ) @@ -477,8 +483,8 @@ def test_parses_ee_url(self): } ds1 = self.entry.open_dataset('ee://LANDSAT/LC08/C02/T1', **test_params) ds2 = self.entry.open_dataset('ee:LANDSAT/LC08/C02/T1', **test_params) - self.assertEqual(dict(ds1.sizes), {'time': n_images, 'x': width, 'y': height}) - self.assertEqual(dict(ds2.sizes), {'time': n_images, 'x': width, 'y': height}) + self.assertEqual(dict(ds1.sizes), {'time': n_images, 'y': height, 'x': width}) + self.assertEqual(dict(ds2.sizes), {'time': n_images, 'y': height, 'x': width}) np.testing.assert_allclose( ds1['B1'].compute().values, ds2['B1'].compute().values @@ -580,7 +586,7 @@ def test_write_projected_dataset_to_raster(self): **grid_dict ) - ds = ds.isel(time=0).transpose('y', 'x') + ds = ds.isel(time=0) ds.rio.write_crs(crs, inplace=True) ds.rio.reproject(crs, inplace=True) ds.rio.to_raster(temp_file) From be0df9d421f1bb15e1c7abcbc25b7522eca1707c Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Wed, 12 Nov 2025 20:39:08 +0000 Subject: [PATCH 35/56] Update examples to new API for grid parameters and remove unnecessary transpose --- docs/client-vs-server.ipynb | 558 ++++++++++++----------- examples/dataflow/ee_to_zarr_dataflow.py | 18 +- examples/ee_to_zarr.py | 18 +- 3 files changed, 325 insertions(+), 269 deletions(-) diff --git a/docs/client-vs-server.ipynb b/docs/client-vs-server.ipynb index e488a63..9fae7c9 100644 --- a/docs/client-vs-server.ipynb +++ b/docs/client-vs-server.ipynb @@ -1,39 +1,28 @@ { - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, "cells": [ { "cell_type": "markdown", - "source": [ - "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google/Xee/blob/main/docs/client-vs-server.ipynb)\n" - ], "metadata": { "id": "j8QLhp3nysJm" - } + }, + "source": [ + "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/google/Xee/blob/main/docs/client-vs-server.ipynb)\n" + ] }, { "cell_type": "markdown", - "source": [ - "# Client vs. Server" - ], "metadata": { "id": "jdvAVJR5yyoj" - } + }, + "source": [ + "# Client vs. Server" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "5PzX5Sbmy1EU" + }, "source": [ "**When you use Xee, you have to decide where to run your computations: on the Earth Engine servers or locally on the client**. Your decision will depend on the relative importance of performance, flexibility, code readability, and process control (and if you're a commercial EE user, cost). If you're unfamiliar with Earth Engine, a helpful analogy is working with a relational database and pandas: just as you might choose between SQL operations in the database versus pandas operations in your application, with Xee you can perform calculations either on Earth Engine's servers or locally with Xarray.\n", "\n", @@ -57,96 +46,80 @@ "- Publication-quality visualization\n", "\n", "This approach minimizes data transfer while maximizing flexibility. Think of it like using SQL to filter and aggregate your data before pulling it into pandas for final analysis." - ], - "metadata": { - "id": "5PzX5Sbmy1EU" - } + ] }, { "cell_type": "markdown", + "metadata": { + "id": "3_xLftUPy7nc" + }, "source": [ "## Examples\n", "\n", "When working with Earth Engine via Xee, deciding where to run computations—on Earth Engine's servers or locally—involves considering performance, flexibility, and code readability. To illustrate these trade-offs, let's consider analyzing 60 years of monthly aggregated ERA5 temperature data (1-degree pixels), calculating the following metrics: the time series mean, the slope of July temperature over the time series, and the monthly mean difference across the time series." - ], - "metadata": { - "id": "3_xLftUPy7nc" - } + ] }, { "cell_type": "code", - "source": [ - "# Install Xee if using Colab.\n", - "# !pip install -q xee" - ], + "execution_count": null, "metadata": { "id": "oQG-WoXtDZS5" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "# Install Xee if using Colab.\n", + "# !pip install -q xee" + ] }, { "cell_type": "code", - "source": [ - "import ee\n", - "import xarray" - ], + "execution_count": null, "metadata": { "id": "X5wSEqYIJCbo" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "import ee\n", + "import xarray\n", + "from xee import helpers\n", + "import shapely" + ] }, { "cell_type": "code", - "source": [ - "ee.Authenticate()\n", - "ee.Initialize(project='project-id') # Edit for your Cloud project ID" - ], + "execution_count": null, "metadata": { "id": "j3-IHkpjJInL" }, - "execution_count": null, - "outputs": [] + "outputs": [], + "source": [ + "ee.Authenticate()\n", + "ee.Initialize(project='project-id') # Edit for your Cloud project ID" + ] }, { "cell_type": "markdown", - "source": [ - "### Time series mean" - ], "metadata": { "id": "8oHik9bsarWh" - } + }, + "source": [ + "### Time series mean" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "rkjztFvd7Q2u" + }, "source": [ "#### Client-side computation (using Xarray)\n", "\n", "To perform this client-side, we first retrieve all 720 monthly images from the ERA5 dataset using Xee. Then, using Xarray, we calculate the mean across the time dimension. This approach offers the full flexibility of the Python ecosystem; however, it requires transferring a substantial amount of data (720 images) to the client. The Xarray code for this is concise and readable, leveraging Xarray's built-in `mean()` function." - ], - "metadata": { - "id": "rkjztFvd7Q2u" - } + ] }, { "cell_type": "code", - "source": [ - "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", - " .filterDate('1960', '2020'))\n", - "\n", - "ds = xarray.open_dataset(\n", - " climate,\n", - " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", - ")\n", - "\n", - "deg_c = ds['temperature_2m'] - 273.15\n", - "mean_deg_c = deg_c.mean(dim='time', skipna=True)\n", - "mean_deg_c.transpose().plot()" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -155,61 +128,65 @@ "id": "mZP4ehwBywJs", "outputId": "6dece377-f227-4824-fcfd-60c9ae407fc5" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 4, "metadata": {}, - "execution_count": 4 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAGwCAYAAACuIrGMAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA4gpJREFUeJzsvXmcJEWd/v9ERGZWVVdfc/bMwAwzIPchigeHugqssOIqP1nX3WVXRX7Czx0Oh0vGRQ5fIyMsinI4CIt89bsgrouyHiseIHgB4iAKcigwMGcf03R3ddeVmRHx+yMyIo+qnunpY6Z7Ot6vV810ZWVGZWVVdWc8+XyeD5FSSlgsFovFYrHMMuie3gGLxWKxWCyWPYE9CbJYLBaLxTIrsSdBFovFYrFYZiX2JMhisVgsFsusxJ4EWSwWi8VimZXYkyCLxWKxWCyzEnsSZLFYLBaLZVbi7OkdmG4IIbB161a0tbWBELKnd8disVgs0xQpJYaHh7FkyRJQOnWaQq1Wg+/7kzKW53nI5/OTMtbegD0JyrB161YsXbp0T++GxWKxWGYImzZtwr777jslY9dqNcwrtKICPinjLVq0CBs2bLAnQhH2JChDW1sbAPWhbm9v38N7Y7FYLJbpSqlUwtKlS83fjanA931UwHEm9oE3QQeLD4G7u7fA9317EhRhT4Iy6Etg7e3t9iTIYrFYLDtld1gnCqDwyMROgphtktWAPQmyWCwWi2WawwgBm+DJFgMB7IlQCnsSZLFYLBbLNIcSgE1QcKKAPQnKYEvkLRaLxWKxzEqsEmSxWCwWyzRn0i6HWVLYkyCLxWKxWKY5bBIuh7HJ2ZW9Cns5zGKxWCwWy6zEKkEWi8VisUxz7OWwqcGeBFksFovFMs2xl8OmBns5zGKxWCwWy6zEKkGWvYb/+uNW/P1RS/Bff9wKIeMwDCHSwRiUqukUTUjLf3/UkknfFwCoBhwBF+CJXXCZkrX18yf3FQB44r6Wv5P7ygjgMDol+22xWKYn9nLY1GBPgiwWi8VimeYQTPzSjT0FasSeBFmmNff+YQuEkOAS+Jc37ov/+O2rCIQElxIuVb8S3MSF8q/9biMCLsEI4DKKgAuj/Bg44FIKRmTqeWhmlsUIcMaRSmnRyo5WbYSQZlytNHGp9iWp8LhU/erioTDjBlxCJJ6bS7UulxI8o1p5jMKlBC6jRiEKADAhQQnBPb/fDEApQ3p/f/BcDwDgvYd2jeUQWywWy6zFngRZLBaLxTLNsZfDpgZ7EmSxWCwWyzTHVodNDTPmJIhzjquvvhr/+Z//ie7ubixZsgQf/ehHccUVV4BEZ8dSSlx11VW44447MDg4iBNOOAHr1q3DgQceuIf33rIzvvdsN7iQYNElpoALBEKiEnBzOeyrj78KlxG0JC4NafQ6+rKSIARcCjAC5BltuCQWcIkgcemJSgBQl9FyjrrMRgnBfU9vRSAkhIjX51KCEQLO1SUubXJmRI2rx6GUoOAyUJ68FCZQDrjaLtonvb1LCXiTi/5cAojM1fqXIGMkujQXHa+Am8tjlBKz70ncyEytL6+dfOCCnb8xs5wnNg4gEOr905df37xsDgDgsVdfAwAcu9/cPbNzllmFOgmaqBJkyTJjSuSvu+46rFu3Drfccguee+45XHfddbj++utx8803m3Wuv/563HTTTbjtttvw+OOPo1gs4pRTTkGtVtuDe26xWCwWi2U6MmOUoN/85jd4//vfj9NOOw0AsHz5cnzzm9/Eb3/7WwBKBfrSl76EK664Au9///sBAN/4xjfQ1dWF+++/H//wD/+wx/bdMjrffWZbpN4AYcLE7FKCFpdBCIkaBNxILck51Kgh2oAcCJkwIQMjPldqUKTcVAJuVBC9jRojei6m1Se1H5VAmOVCSNS4UGbmSGXSJGdlyXGzRmcuJPzIGK1/1gZoRgm8SHnK/s9oXEpPKQFF2pCd3BetRBmzdqQSMaIecyODtWa6qEDPdpdw2KJ2PN9TwiFd7VP6XE9vGwIAZERE1ENh3r9jlnbiqS2DkaIXH2Ml5glwATzy0vb4/abAb17pB6CO83hUIb09ABy/fN6Ytvnly2qbOo8/S3Uu4EYqIKNk2rzHlsnBXg6bGmaMEnT88cfjwQcfxJ///GcAwB/+8Af86le/wt/8zd8AADZs2IDu7m6cfPLJZpuOjg689a1vxaOPPjrquPV6HaVSKXWzWCwWi2U6oY3RE71Z0swYJejyyy9HqVTCIYccAsYYOOf43Oc+hzPPPBMA0N3dDQDo6kqXBXd1dZnHmrF27Vpcc801U7fjsxRdpp0NAnzfYYtS9/+fIxab8vOcQ1PqThBwcAm0eg7yTny+rsMHY68GQcglKlFpfKvHjPqhlZlsufiPX+g1+8YlUA+Vp0ZkFCStAPnRjFvPupv9nLyF0WN+ojRePVejkmS8QZTASShDWiVilKA170Rl/bGHKHm8GFHHTHuL8g5FzqE48XV7Rg34S+8wAKCWUCr0vtZDgUAI5BgDo0qh4ULiiY0DkYoRr3vUkg4AwAu9anJy8MLxq0VHLu4Y03pH79M57ufYFZ7YOABg7OpPkrfvr7b5zSv9GK4rj1nABUbqsXfs3j9sQY5R/D9HLMYPnuuBkDL1efmbQ2yEgsUyY5Sg//qv/8Ldd9+Ne+65B08++SS+/vWv44YbbsDXv/71CY27evVqDA0NmdumTZsmaY8tFovFYpkcKIkviY33lo1Ms8wgJejSSy/F5Zdfbrw9Rx55JF599VWsXbsWH/nIR7BokVIYenp6sHjxYrNdT08Pjj766FHHzeVyyOVyU7rvextJFSVJcmapFZgkXEh879nu1H0hZcq3kmp3IYEcU0pIrCJwM672uNRDgVpUgRVAKSI5R43VkXcxx2PGQzFUD43qo71EqlJMmAowrdZo7w7PqDpJBSj7f5hQgwA0DUA0rx9RNZxQqo/xCSX8QsmKObOdroCTxFSyMULQ6jlo85hZZ0+pQADQ4uoKPgpOJQiJvTiMMARCvackUrZch6DgAhQEBy5sM+P8pXcYBy5sm5ACNF3RVWYTYUcq0g+e60Heoeb7GnBhvHEAwc/+0qfeJxErS5bpi80JmhpmjBJUqVRAaXp3GWMQ0SWRFStWYNGiRXjwwQfN46VSCY8//jiOO+643bqvFovFYrFYpj8zRgn627/9W3zuc5/DsmXLcPjhh+P3v/89vvjFL+JjH/sYAIAQgk9+8pNYs2YNDjzwQKxYsQKf+cxnsGTJEpx++ul7dudnKM0UH+2bAdJKT7MWDYwA7z009gD96Pkek7VDCQFlJKP8yJRn6EfP9+BvDunCD57rMblB2rOjqqDiWY32y1BKTLUPJXGFzPpNg2o9RlAPGWqRqhOrQXEuka4Mqgre4PXRZD1BAHaoAjVTg4z6QwEkrENJ5clzKPxQoOpzcEfCYxRUAm0eQ8Flxiul3xddCedSgl++3L/HZvj7zCmm7r+8fRh+dFwJUe+Xw2KPz196h6N8J4m/9A5DCxZJVciieOzV18ZUhfbeQ7vw0It9oIzglIMX4Wd/6Us9TolSkpLVaZbpi60OmxpmzEnQzTffjM985jP413/9V/T29mLJkiU499xzceWVV5p1LrvsMpTLZZxzzjkYHBzE2972NjzwwAPI5/N7cM8tFovFYpkY9iRoaiBSNjF3zGJKpRI6OjowNDSE9va9z4ewM370vKrqyvp5ABjvzikHLxx1O+0L+vELveYxvX5WCXrvoV0mKRpAyvuivTDJ/7PosbSvB1BelI68O2pGyvpNgwiESFV+qWwgblQm/dqTuUBJv5D2ClV9bvZV3+oJH9HOlCBzXClJpUdnq8V0lVjyVnQZcg5Da+QBanFZ6nhRgj3qCcqy8bURUzEHKL/X6xbsXSrPH7cOmco3l1K4jExJpdmOlKDfvNLf1OPzs7/0IeDpSkXlw4u/c/rtoZFP668OmD+5Oz6JPPLSdgDY4/u4O/5e6Oe4ufN1KJCJncZUJcf5gy/O2r9vzZgxSpDFYrFYLLMVa4yeGqwSlGG2K0FJtJqjU2m1aqIVoaRyQzNfTjehbvCEYgPEicq5yPiRHFcTiOZVVVrtCIREGM1scw5Fi8vQ4rIpnRk+9uprCLjy3VQCjlI9BADUotm/HwqM1MJUKrRRhmSsCGW9Rfp1JV9j6n9C0OIxeA5FwWMoeAztOSdR6aOO99KOAhhVfptkArJl/LzaP4JASFRDgXKk/JlecVGekc4ymkoee/W1+PsjEj3yEl+RHamNQGNmFwDzvUt+//R3W38kp1JR1FWbgRBGzVX3ZSrhnFFi7ht1VqrP/Z5Ug3anEvTVOQeiQCeoBAmOcwf+Yv++JbBKkMVisVgs0xw6CUpQdrJqsSdBFgAPvdgHIRtnklqJyIGCuarSSnsLssrNeNJnf/aXPpx84IJIcZKpL6hL435YWjkyjzGKjnysglQCgZxDU/6GqaDNc8ClhMuUlyLpb6qHSiHQKhCjxOQK1UMRV39Fu91MAWqG9gh1tLhozTvIOwwuU33VcowaNYgRGGWCR8nA010FGqlUAQCtLYU9vCeNvNinEq+5lKiHStFrcRn0R3Ss6dPj4aktg+ZnbeNppgIByr+jv7ZZ5TW5TK2XyZsS0qg9lKTX3V3tFbSY+fb9F+ChF1X1mhtFoehE+GZK1EMv9oGSPe8Jssx87EmQxWKxWCzTnEmpDrNCUAP2JMgSzfokONKKi+Dpnk86Z2RHqk9SVcp2sv7ZX/qMtyg5rvYE6ZkfANP/CgCoUN4HLoG8Q2OvTSI5WkhgeyXAD57rQYs7NT2zDl/cjme7Syh6DEJKtLjq+rz+5VTjAj5X+5ysCss51FRGcSHhI9NPbAdeDs+h6Gxx0dHiIs8ocg5DzqHYtz2XzmwSsRdouitAmumoAGn0+6VzpHIOHZf359lu1fPssEXtDcuzy57aMtig9GRhFECUtq3fe/2HzahDo/yly4qOyfW0z0k/N5fSqEFaoUmu20yB0f6eZI8yYMdp1MmcohNftyA1hn7+R17a3vB806nycXcxKcZoezmsgRmTGG2xWCwWi8UymVglaJbzm1f6jY+EUWJKKLM9q5JqhVZ0NNkeV9lsn+xMUs84GSWpFFs3M1XVfiE943UpMcnOafVE9RfryDkY9jkqgcCPnu+By+ioeUETgYKgLeeY1GmtZLkS8CKTg/YFNfP8MEEAioYqsWZVYTonyHScJ8pjNFQL4TJqZvcupZPSi2q2o/OMtBdH9zU7pGvXK2m0CpT9OcmftpUgkFZ9mqlASWWFskgpyZQ7U7HjWX6z6rDkuLGyREZVovT+Zb/TGpZQdzU7Sy7P9j/TSlJyjEde2g5KyKzucWYvh00N9iTIYrFYLJZpjr0cNjXYk6BRWL9pAHM6xZQkvj69bQjZidbuyBpphp6F6aRZA4uv5f/y5X4ERKsejR6WrGqUVTSy1+9/9pc+MMTVZjTyJOUcar6k2gOgKr6IeV6lfkgImt6HgAtwoarJAqESpGuhwPee7TZVZoCa+eYdOu6qksMWteMvvcMQAJa2q3YsOq9lsBZgeyVAJeAqOZgLlOpxbpA+VlWfG18TAPjRgdevvSVKgfYcita8g46Ci3ktHjpyjvJESYn5LR4cSox3hRDg+Z7SLisWlWoNXEq0TSN/Tn14UMkdEZKqX1P5wtTuY/dQGS4loACYF3+eCVEK0bK5rTsdQ302JKRMV27pn5Pf+z9tS6tDqp8e4DnMrJf0fO0U1lzt0QRCjDqOUVsZARfIeI7IDkur4/yv5l4mSgie2Diw0+dPPmfydejlQspRfUeat+/fvBdaVm2aDNZvGkSpNDTp41p2L/YkyGKxWCyWaQ7dycnoWMewpLEnQaNwzNI5k5KomZztJa/9E5KeFf5x6+gzCkLiXJKntw2NO6Pk6W2Nz3Hk4g48vW1ohzOlvEPhyvQ1el3FAqAhuVZDSdoPpJWOpE+HEoBHPwdcmg5/D73YhxNftyDlT2CRJyj7yyClQoHAZemU6kAk90+izgV+9pc+Nesfh8/gwIVtpus5EHVFJwQLWjwzi6aEgxKCYlT1pvfRT/QWS/qm9ONO1CcMgOkT1uIyzG9x0eIyuJSCUcBjSh3zWFqx2FVaCnuuubA/2AsQqpQeQiCcnFK2WM64XaT5BwgqVbhk6hShRR1FAEDvUBlBpFgkA/U3vzYCANh3B4oQIQCVBIJElVqJxyiJ46KS330KAgFp3j8Kgmx3Ay2M6XWkbFR9sgoOoL6bQbNGgBHJiky1AeK8LaEV3ebbZlUd/f3WadrJdRqeB/H+J7/Po/2Rzi4fbb1fvtzfdH8fe/U1ABi159p4OGZpJ0ql3VdbRBgB2Umu2E7HsCdBDdjqMIvFYrFYLLMSqwRNES/0lhp8P3rGp0nO6kZDr6NVHAqCP20rNWxLSJxFMlolip6pGb8BpBlX/5/0+1BC1Mw2M3vI5vxkZ58AUjkjzdDX9l1KwUhzL4GuCEn6d7SylPQpiCjF2VT0UJjZLyUEI36I5GSYEUSKkkqZ3lFX7tGIbEzRa1CGRSEl2nIsld8ipATj8bHX6k/yluwSX/AYip5jXheXqldZ93AdrTkHLS4DJcD8Fg8ei42ShEz/ruz+a1vNz9IrQuTbEeoMKCEhAwGHEkgpUzNWmhBGBAgq1RooJCAFRNRVe7yK1uBIBQDQ2dpili2MFKEsWwbKkFJi82sjEIi/KzSzrwJKDQIAkFgBPnhhO57vKcXLk2qQbP5dafYdElD+mErAUyqP/h5S81lD6v/sviqfTeP4XKht9HY6wTm1jpQJ21Z6jFR1GVVKFANJKUepPLLMd7+ZypNVlvR22dc62jj6OK7fNLjT52v2XNnn0+tVRoYbn3iKoIyATlAJspfDGrEnQRaLxWKxTHcYBWlyQrpLkB032Z2N2JOgUfhT9xCOG4cn6IVeNdNT1+zVsqT6kxU8CEl7OWg0q9Lb6Gv/AY/UDt1jK6EASam8MHqWqScLzU76uYi3SSpTyecx+0KUP4DRyGtjMoQAQdPqTWpWq5Nns56B6Pv7m1fUdXv9uMvU2AGPxxQyVlIeeWk7AFUxlvT26FmNywiOXz4PT2wcMM/lUu1VkujIO+Z1Jf1LcfbOrs+OXregzXhEdG8zCaX05Bxq+oqpCjAKLqMKsEj1SXaT12pQwWPoLLhY3lkw+1ULRaR0UVUd5lK4lKDgUOw3b+fVStMFf7AX0osUFkIhCUU1UJ8+/X5ofxMhcQdzgrTnK1YxCUBi1a1SrZmZejNVaKRSTaXxJKvh9PP3D1fM/QXtShnqHiqb9SiB8i5JpL7ISWWBQH1uZaIaTH+n/9I7HOfoQJqKRSlhxJTRwsOT1WWMEEgCtLgMFcRqUJ2LVKVmDtT0kwNg/GQa5SFKZF0llNTm+xArr82+M8nH9Xuhv9NUNKrFSRWnsSdaWnFp+jOaG4Wz+9YwViZPKbtfIvJFaW9U8vdiOlEfO/RbTTaEEpAJBv2QrNnMYj1BFovFYrFYZidWCdoB2ntDI7UmmWi8//zm/ouDFyr16NV+pRIohSCa4cIIOFEvrPQsgiVmwIFQM0hC1MzSpQSEKL+EAOAnZiBJX5CppIrGSj4noBQSPduUMl2tIiSBmzktFpCAjH0CABqUIU1SARJSGjVmVBJZP1w0rht3aVez2F++3J/qf2SyTYjaMZ2YvH7ToNkfRoGj9+k0nbmz1SpCSgz7IX78Qi9aXAZGYw/EzhKY9f5pNUPvm5oFp9eNC24I2vMuXEaQZxQOowi5QI2rLuWLW3N43VylUuwzp7k3ZSYicm0Io7e3zpUK5lBVDceIUnvIaJ8VKSEJSX3O9bq6Wkbl8qifh6Pu9ARIKUPZObBeD1DeIP04I6pCDFCzxGbRNowQUKoe0/ulPw+MxIqQHlRC/c54ebvykBCp/XSN6k+zw6DVWwFp1FwKghaXgTP9/KIhX0erIkrRbfS+eFE5ZjaXKOnzSyo8ABqSqpPPJ6Rs6G2mv0/JqrHk/ml/UcDVMpeRlA8p6cUZLR8o+ZpG2zfzcxxBZZK3s94qLgCOzLFsMrY7QWVmV6CMjNoXbsxjTEAJ+vznP4/Vq1fjwgsvxJe+9CUAQK1Ww8UXX4x7770X9Xodp5xyCr7yla+gq2v0/pLTDasEWSwWi8UyzSGUTsptPDzxxBP46le/iqOOOiq1fNWqVfj+97+Pb3/723jkkUewdetWfOADH5iMl7vbsErQKCQrqQS0PyWqigDBi31qRpesyNkyEPsHPEYQCAmP0lTWiEY5RdJn5VrpAYBcoi9UZiUkJjLwuWzwFGmfj54JZzaPX5eU4JKkZqPZXRUAZNSlXc9EsxklWiVqllabvD6f9hClt2/0CzSOoWZi1MwG9cwsW9mV7aKezGDSHglGqVGFWlyG7ZUAdTX9Q4urlo81kykQ6phwESsSwhzf9OvORbk/OUbRlnMwJ++i6Kl9cRjgUbJLClC9rD6HklDkW+Lt6iNDaYlQSuTaOpuMMLX4r22F9IqowTUVegSI0sETCpDgILJRc5GRykf0t0UKECEAvW6UJk0AQK9LSepzXK3VwDLLRipV4zfSXlEKab6D6eypyI+jv1fRQyFPf1+8HczSpVTqcFJt0laghu/5aMMQpSBJoraU0b7E29NRfTfK/5P2CUqZUJjMdyo+TmPN5jG7R2IFWql9SHl8XJZWlwIeJ79zEauzdQ64VKA1qpLMOTTli2y2T81ed7YCLelBHI2kzzC5r6P5Bp0JVmvtKUqldAVxLpdDLpdruu7IyAjOPPNM3HHHHVizZo1ZPjQ0hDvvvBP33HMPTjzxRADAXXfdhUMPPRSPPfYYjj322Kl7AZOIVYIsFovFYpnm6MthE70BwNKlS9HR0WFua9euHfV5V65cidNOOw0nn3xyavn69esRBEFq+SGHHIJly5bh0UcfnZqDMAVYJWgU8g5RqbyZDs9upIpkJwC6UkjPZbmMzzCzKZ0uRcrfo2coTRUjCbNecjaSPXtNbkqhZmMSSqVIVtq4RHmLQNQ+JlUlLqTJoYhnUcSoGVJGM1FkEq8zfbyaVWBk0V4A1U1+9PVdlq4AyUWmpdGu/QPp3mzZCVxyZqzHJwSY3+KaSpYWVx2VnalAumO8RNQTiUoEoZqx6uqvuCeTWjfnUOzTlkdnwUHRVb3SCk7kGSPEVCXtKpIyowoJ5sInHjwn4ZeBVD25gN2qCEknD8k8sMRnzSgwggMCSgESvOn2hAhVTabvy4QKBICIEACQa02/V7VK2ShDEkpt0h8FGc3stQKiVRn9YREgcIxiGquqHOo7q1Q/aRRi/f3O+ntS32fSXP0djdEUHQLljwKkUYaSQ2b9RaMmMEep1DqpWh+PZt+bne2z/h1pKltJ5NuhKoeIy7gvmP7e8SjrSH/v455hcf5SnavPRJBYh0YVgfr3AiPE+BaTrzn5mvS2+ndGs0ovrSybvock/r2j/VcC0rxG/fvP342eIMImrzps06ZNqY4Io6lA9957L5588kk88cQTDY91d3fD8zx0dnamlnd1daG7u3tC+7k7sSdBFovFYrHMItrb23faFmrTpk248MIL8dOf/hT5/J5rrzPV2JOgUVg+rw3t7crvs2H7sPEzMEKw//zGfJZ957Zi22A59hdEJ+w6ARfQ/h2SUoYYIWBMb5NcHlccCUlQDWWsxpBYFfKiPlkcsWeHRumsupIkrloCfCrN8+YTFSNCAozF1Wnqen78WqiMPVFcqAoRMzvP+AzURk1KXJqoPXG/Ie2Q0Puavh6fPDaBEAjE6Pk+TWeziTvEHA+JelSylHMo8q6aOR61ZOc+ICCu3toyUEZI1Hurq/YCoXqWcSkhhIQb9QNzKcHiNg+tnsr7mdc2PuXHvJZAVThRHkA6OYSgkEJCSokRX6mAjCjVijXx3EwVQe8rkI4HuOr1afUHAIjgIDxSdLTSIkJ4HSoZXPcUA3QHedHoF0oaWhB5o5IKEWDyiLL5cAQUMlILKGLvR9avA0R5RFBKWigkqqE066iKzfTYLPVdICllhiH2Fe2I5n5BPWjm+Wj8eVe/a7SalVA5EupFllSlFxntu7ODfZWN1WIMBHmHohaK1A5nM3W0+qIVWH2s3CgJ3eSMRanTlBAERJjHOCSIE4+l9if9HIRECjdJvldaHopUH5pOxSYk7e/SQyavAhCoLKjdKARFStDEHCykaa1jc9avX4/e3l688Y1vNMs45/jFL36BW265BT/+8Y/h+z4GBwdTalBPTw8WLVo0of3cndiTIIvFYrFYpjm7u0T+pJNOwtNPP51adtZZZ+GQQw7Bpz71KSxduhSu6+LBBx/EGWecAQB44YUXsHHjRhx33HET2s/diT0JslgsFovFkqKtrQ1HHHFEalmxWMS8efPM8rPPPhsXXXQR5s6di/b2dpx//vk47rjjZkxlGGBPgsbEikwwYl+pYi5xaYl/XlsLFncWVeiaKa+XCERsnGxxdQmqKp1OtgfgUl0uUxJyY6sAU35K06ZkSoiRbinUmPqymZaXdZkqFxL1SJIOpURVqstpDm0MAnMYMR8OtTkxJm3dJiJWt4m5FKfX140Zk+o0ozKzLH35K9vckRKSujT1p20lCEh4YKlLYdlSdoeq43pIV+M172e7VWNb5X0mcChBaELuCA5bvOutUvaZU8RrwxX4QrUTyB5Ll1HMKai6+8WtOXTkVBPUiV4KAwCvc2Hqvv/aVkhHXb/vbM80hR1nk9GxEPRtBABI5qjnz7cDzIVgLojgcMO6Wddc2opMzd6cRfC3b1YNVglVt2gdwn1zaQyISub1/aSZWqBJR2KhzNeEmEtj6nFhLpEREkdRSNLkM5u4lBwI9R1OXypJlmHH28nEMr1O9IrMczTsboQzymRdyujyOY0NxjLxvMnL3lI2XqrLMtplrmatO8ayrjEhQyJPqCocyMWPZYtMzPKo/D0Qwlz2ypJz4s8Al9I0aFaX++PXqpWOuCVNtDyyHCj7QfT7MvoFR0i6CbJMbDfaawXU75n8BC9P7QqEEBMOOu4xdlKwsqvceOONoJTijDPOSIUlziTsSZDFYrFYLNMcyijoBE+6qJzY9g8//HDqfj6fx6233opbb711QuPuSexJ0DjYURnzaOXwWXRprZQSNa6UmxwjJiCsHAj4XIICcBxlYq6GkdlWSOSjmZGZqUbPzSLFKExMW/TMikIpTnpWJqCVKmVmTLbtSM5gtWDDiDKKMhkFJOrxo+fnIp6ZJoMVzbGRJNUsUu13rMKkjhuhDTPZwxMqzfM9JTMzO3Jxh2lce/DCdkgJBFKatidSxiX1hy1qxwu9JbDItKpnlDmH7NAAujPmRqpOPRwB4KrjQ4CQC+QcivlRAmNX0Rl3GfxY8OYuGdd24ba/QBIKd9EBu7wdAIjiPEi3gCAqcVZqXLpdo1GAojJ3b86i1GMSsVKDhGqTvE8Qqywps7QUaZUISJunJVfl9uYJI2UoaaaWarkyvaY/DBQELpWmsS/0fiQN9zKtDJn91aXWMv1A9vu1MwQB3Oi7GkbLuNSxiTGMIBV1kVVYzWvKvEYTmEhGL9HX65n6BxIrJHoVXTShfl/E6q9uFaLv69eutwtE+nmSDUybFUro/RVSNvW66DJ9j6kihGyYZfJ3p94nGinpyWiRuHgjDqDdnYZozaSUyMs9sOPTHBuWaLFYLBaLZVYyo5SgLVu24FOf+hR+9KMfoVKp4HWvex3uuusuvOlNbwKgZlZXXXUV7rjjDgwODuKEE07AunXrcOCBB+72faUETWtSuVCR/HpGGwgYxcfzKJxoXpJnSjXxVVIhAqL8K7ocfqiu/BA5RuLQPiLBiWq94FCCIJSpqHxGCbxoH7gkpsSXIj4bZiT+n0ezBr2vQgJUShDaOBMKRDyIvs7PoyC3eFIpVUBbqmw4PdBhi8bmyWnm99GzQR2+qEPUpIQph32+p9Sw7Yt9w5M2s2v1KBxK4DCgI3SwT3seQ7XQKHfNVMHpgLP4QIRbX9jl7aSjTB/SLaAugDChAlFIQAgQEUaBiJF+IQUIDxsHEyL+IDaUxAvjFSJAWvGJIFJEJfV6QVQ/brZNqhuJsvuk58iMhfRjOtoioUg0a/VCSFqXSapDDe/8aBEPmfv6+6KVVwblcREASJwykGrmqr/XSYU1G7hq9tvsTvxYcr2kf0n7DlMhhE1ehiTp8nkJgBCZUoDM74FIWXYpBSWy6T6a5q2JuIxkAKNudpq8WqS8jgQFh5rydp8L8/uSUSDkSR9jrHAlVSMaqeseI1jcmW5pU3J2X+yEVYKmhhmjBA0MDOCEE06A67r40Y9+hGeffRZf+MIXMGfOHLPO9ddfj5tuugm33XYbHn/8cRSLRZxyyimo1Wp7cM8tFovFYpkY2hM00ZslzYxRgq677josXboUd911l1m2YsUK87OUEl/60pdwxRVX4P3vfz8A4Bvf+Aa6urpw//334x/+4R8mvA8jlSpaWwo7XCfZosLsW/S/DgtjSCgr0Yyt4FK4MgR4oLZnBbR5BA4EJGUY8YWakVAChxGMBGom3VcO4DKCNs/B3IKaK4aR2uTqIpro+YVUChOncYibDltjkbqTnA0mq1SkmfHphfEYElFIow6HI3FLDikTDUQjNUbPCJNVboQoP8940du+2DesPE5UzUJV48sYIZUa5LHYr5JsgjtR5rW1YKhcRcEh5n1ocamZWe6oyeaexllycNPlfJPKCmFLj2x8UFdoSSUFekypkNSvpD073FdKD9C8TYbgyFh0miAAHWqXaaCq0c+Z9fs0kFGF1Ma0IZTRrEXUd4tprxNpVFWSQ8YeFhgZJRvaqLaJm7bG26bXafaRCRPf3+Rvm2RVqHl+/RKaPH/qedDoaQIQNaSVcXsQKSFIoyqk9j1WvdKhk+mAVYGoXYmMfldE6q1utKorttSYcfPXkMdew2YNm9UxUVVbHiPYb54Ktu0dUs2t8w5NNT2VFBBCmt99FHFlrq4wY7RRAbLsPcyY08Lvfe97eNOb3oQPfvCDWLhwId7whjfgjjvuMI9v2LAB3d3dqWZuHR0deOtb37rDZm71eh2lUil1s1gsFotlWhFdDpvIbY84uqc5M0YJevnll7Fu3TpcdNFF+PSnP40nnngCF1xwATzPw0c+8hHTsK2rqyu13c6aua1duxbXXHPNmPZhZyoQALRl1qlUa2bGkneo8knI2I8gHBcFwpErtqBees14LDoy42QjXhZ1xD/72zdDFOdhoC7gRn4gnytvhkTsJdCzOYeoqjURzcJcBuNTGq1ihMt4ZpScSQFqtqeXySj+nsu4QayO8tdNJ1U7gbE0ENh1XKqq18yMM/MkWoHSr1XPFF/ePgyfKz+CjiTJ5kONlY5i+r2bN3lC025lhwpQBOG++l+EyBMKEtSBoAaSyQWSCd+N/uyH2/4CZ7Hy67ldK1Slma7wauaXITQV4KKqwZp4h6Dyf1Lbycx2qW30OpE6lar4itUrRhw4BCAiSG+eqFzTz9cse8jJ2pJSW6U9Rjv7brhMqZyhkOnPuPbukHjkZt8F/d3U6ApPgJiftV+mEujsMv39IHBJ7BHU0TO6ukorvEJK8z3LvnYeKVYyenIKAo/F/htGgYKTfp8CIc1fLCmVqqqfiydenFqebkaccyhCIVELpVG7HEpQ8OiYfq9PByghpupvImNY0swYJUgIgTe+8Y249tpr8YY3vAHnnHMOPv7xj+O2226b0LirV6/G0NCQuW3atGmS9thisVgsFst0ZsYoQYsXL8Zhhx2WWnbooYfivvvuAwDTsK2npweLFy826/T09ODoo48eddxcLodcLjf5OxxBJUdLi7qebJo8RnKEcHKquR8P4G/fjNz8fcf1HF60XYuoohCWISVFnrmoSoYgMd3zGFGzKQCcqxlXPRTgjKBAVLUY1fPGaAZMCQWgKsJUg8bmk3QuZOQNiseQhKjqGD0mJdB9UlWOUHp2+Gr/iFFmJorexaQvAYh8SIhnrJtfGwEQz5IFZPSaZx9809Oqukq/fuqAiCZVXAm0j0hGidEQHESEDdVmqY9M9Nlq5kEyqlFWMiEk7fFJ5gjtIqNWhWUzhlIIpRDq3KLkeNknSChfBAmVSGLUijBg532dsh4YRlTTY53cnvTzJL19Jt2exE2Rkw2hzXiJ9UMeJ8IzGr9GLqXKCZMwzaBlRm5V1aexGsWljH4PNEd7+ISMf3Ym0YczXKmqpPtoP3X6tMdISkGa7hBGJ95AVczO3207YsYckRNOOAEvvJAu4f3zn/+M/fbbD4AySS9atAgPPvigebxUKuHxxx+fUc3cLBaLxWLJohuoTvRmSTNjlKBVq1bh+OOPx7XXXou///u/x29/+1vcfvvtuP322wGoWcknP/lJrFmzBgceeCBWrFiBz3zmM1iyZAlOP/30Pbbf+ZZ4NpMrKnNIfXgQAEB5ABbW1ezb8Sb8XB3FAvzt/SCUAmENuZa5qNY4cizO6mDGo6D67yh1SHkLVKVaZrat/UuRV4NIAQEGIeWoPY5IlBGj03WTiblJn1CsCsX+hI2RMrNs7vgUof3mtZoxkr6EJKxJ4qvez9l6yZy/8hRACKTrpSqkJB3brwhSHwYAOPsersbb9LT6zETKksxWXokQ4eY/mfXDLc8BhMJZcjCC7pcac4CaKDMg1FScNZDcvInyk/IJ6X0zKlT2xSllqkEVS/Qoy2I+Rlk/1I7mnTv58I1WjRbbREhciZkZVyfA61W1X1Dvq65W9bls8AtpX49OUo7Fk1hhAuLcnlAoRTXUhzfy+ST7h+nXwqjKrom04+i7Scb9/c8yUqkqL6JUWWYeS3/3Z4ofyDJ1zJiToDe/+c347ne/i9WrV+Ozn/0sVqxYgS996Us488wzzTqXXXYZyuUyzjnnHAwODuJtb3sbHnjgAeTzU9c40mKxWCyWqWZSwhInuYHq3gCRzYIhZjGlUgkdHR0YGhpCe/v4c2ua4Q9tVzNryiAJNSqRP9jb0A18IgR9GyGZOr8NC3ONl8Dnyp2jZ34A4hRqCeQdAlfXiCR9DSJM+yf0cp3JQp1UFUy6w3yMvv6uZ53p7tqZ6pHEtXqBsStDWwbK2GdOEZtfG2k6rknPzvRJ4wnPgM4J8RjBoo7Zkw/CNzwJUeiIW24DIDwwFVxjGuPVP6gsHyHA9nu9UXhSykvCV2OUoK0vxOskO74382cR0lxdimio/tLQzPJsr7Emz5faj6QSs6Nfm3q9JvvRsG/j9J9le5vpXUpmbyUrMI0SlFCCdXWW8u0AI76qjtPLkkoOJaowz+cSLCrS8xgxXh6N/k4FIt030KFKSdLLWKS66nEDIdHq0UlTgAClAkkAtVCp3m6UhWYSo0Vg1PnxMpV/L7LP8avTT0arOzHdYiQI8bb7fzal+zvTmDFKkMVisVgssxXKMGFPD919XT5mDPYkaArwh7arH7SXRnsJeNi0AmwyVSAAcBcsAwAE3S/BDbaZmanneJC5NqVGmRk3UZNRGbWT154FEYLo9OpkCi+hIEjnqRARRtUvIspIocovFI2vkTSbD5RIndaqkH6QKZ+AVme2DZZTrzE5+9xnTqzWMKrWZboSDYnqtAQyoVaRqDJO9xcyYxGC14YrZnbb2Tp13d/3JPyVp9QPlIHWhiEd1fFeqxT8lafAlh899gEjnw5/9Q/qcxEpMKPlDaX8QwBMfzA0qSgylWMJr1p2lax3J1qnQTTSn3uRSKLOjEf0MkKjyjnS3B+k9zflKeKN42VzjTL72HQ8wPRFE1AKCkkmTCdcbySSg3QKPKAOFyOJXB4of4xWZClRSmhHjuG1Go/uJ1XTKKmephPPdX+yeD/iFOkWN6lIAXUuVD5YIrZa9y70KDDXZZjXNnnfr2rUKqkWqjTovEOVIiQkOlu1PSK2SdRLryHXPnfSnt8yc7AnQRaLxWKxTHMIJSATDEuc6PZ7I/YkaArQM0bil+HNXbLH9kOn+epZJgnr4Lk2EO5DODkQwUHDIJVgHXrqmrygHhymxjAzaEJBRBj7Gkx5SWLaGM3iYz9R3COKEBr1IUrsI4wco7wIiceklGBRMi5D7N0B1Ow0O3fuHioj2UqJEaQSqzV69qtVH92XSG+TRa8/lt5xMw2+4cm030UKlfoMKO8aU5/lMatBySAp/XPkD+Kv/iEal6a9MePxxRgDTEZZyWb96HUS/iHz3CL+3KvWZ032Q/uXmAfJXKUAJb1NGZplBqWe03xnss/V/HUkPU9EhODEASSMd09SZsYsByLuWE9U70CHkqYpwfrzr//XXdLbPYpqpJ7oFPjk382kl8/0EosedxJvO4XKMAK0mkshqXYbRRWkBKZnFwEwOFIx+9TZ2oKRShXA+Cq4iOCghEFGCrfPZXQ8mn/WiBTwh7bD65i/y8+1u6B04g1QKZ8xqTi7DXtELBaLxWKxzEqsEjQJ+IO9gAghnTxy7XORa+uMHunYk7sVzzYT/gVSH4Z0EpEBmYodGvVPEqCohBKUuChQxD6IjNITj9OoBjWk62pPkfZoRJkgyWoWrcSoBN84X0g9hQSTTaSaiEUdRfQPVxpm4zxTiab3PDnD1V4G/TyAmqW60Q4FXPVQ016Dwt4UuyCFURPYijdCvPw7s9h4T6QA3/Ak2Io3Nh2Cb3gycU/7a+IDbKrGsIMKqaTHR/fsitaPk6SzHa/0GCS13Y6qt7K9zMxnOvnhyFSnSZ2eLbhSZ5KeoMxYZllSxclmFWUVItDM9pn9j16fw5SqQSDifYlghKEeVXAFQqDoUjCiegiqSq6ECksBRPk5LlWeHx5l6TCinieZKSYSmxFKUt+XrHqarLqU0GOr3w9JUWrEV/vokFggo5EyNFypNuQi7SqExK9LV77mW5r7jqazAqSZlBJ5G5bYgD0JslgsFotlmjMpbTMmuP3eiD0JGif+9s0Aohmem9+j3p/RcJYcHOevAHD2ORThtr9AcjWLlU4O0smpmTGiKq/EjNWNeuuUpYsWhwCBMMm6JDNrN1UxZmbbvM9TakasfQ/6/4xfCEirQ9o3lKWvVAEALGhvMR4DjZQy8j1E/gSpqsWS1S96VqtnsGaGGy0QMlaEyA4UhplIgyqChDrhuKrJXGJd8fLvQPd/EwBAvPTbBsVEDaCrIjPVUdFYpkJKK0Nj2Efzf7bfl2GUX+7NvEPJfCHdy0/XWPHoeCT/WOjkdJFRNvX+NFE7ZfLzrRXRZh6iZv3Q9Nj6R0LV66MMJMq7kXCAqFpM++QkJHKMmJ5YJV/3/1Md2TvzzHzmnciHo+EyzgByM74ZAQIvIyCM9p5REn9vtI9PSrVfXKpkekD5hLQXjyWUIzfyAAoZ+wXH48XLtxRRLw8jxxwwSkD5+DOBdLXvTFCLLLuOPQmyWCwWi2WaQyhVLZEmOIYljT0JGifeODu+726ynbqdxQci3PwnsKAKkW8Db5mLQFDAceBQAlYrAQC8aIYrqQPutiCQEgHJo8WToLUhNZiIZ/RmophQBkxHchFE67F0xkomjZcQ2qBKjKWju+Opdaq1GnIOzahJ6WwiJrU4EFeuJL1BSUVIV8eQyHshQVV2EiEA9pIqMSlARAj6umPNIvP+BKJhXSBSgDLLCADJXEjmxOqGILEaREhcfSUi9SXK50n1KmuyfymFJJFebjJ8zI5nfDWZ5fFni4+Sgs7jcbOeH71u9o+IzhnSMCeVc5TaL+rE4ya3o+nXIJ08hKs8Z6FQ/b58LgEBVH2BUEjMKzDTz0uTi7K1Aq48PMl0ZCGBwRo3SlA+kl/090VCIu8Qo5gCsbdHe3OSqeqEKLVJIu5In/weOYk7UhL4XIDLRM4QI3CEhEcJXEZMarWuDiOAqWoT41RfJXXgAFHbpPF7+EZTgPztm+EPD4973F2FskmoDrOXwxqwR8RisVgsFsusxCpBsxDCVdYP8atw/C1ghQ4Ir6hm7RruqxwV+KBODiAMLhMIQJHnYWZdINnPCZTG/p9EF3IpYNYxKdPRA8pDIRsTdZv1iMqqA4mZerNO8DRSg4DIf0Di7BSdhkukjPaZxzN0bRwyuSgidX9vgB7wltR98eJjqfesqZclUTEVD6T6jRHtN2OO8tU4nvLgBLV4fUaNAtWs/1ez6q3kY9nO7M3Wa1je7DOUHDfxukBoKhsrmcmsKuaaK2RAQslq1qcMSB9bEjZXhKQwiovPlSeOEqAc6FR1iZFAoOBQ5BErVpy6qIYC5UCAQiUySylNZZiQ6Uouj1GQRHK67iGoj4fO+aGIKysZjb1ENPIeadVH7Wf8/SMJFVD5hOIO9BJIVIUqhciPlEfKCFpbCiYnaDzftnp5GEQK5FqnrkLXm78vPK80ZeM3MAnGaFglqAF7EmSxWCwWyzSH0EmoDrOeoAbsSdAshO33etWvCQCoA1raBuK1Qro5gHnRSh4gaoCbBw2qIE4OJKzDdQtKBcpUtaRUAd2LSQqlKEWP7WgGrSt/GpKEJW/ebykzi0+GV2chhKb8CtEAICIEA4BQzRhNz7eIrBegPjyoUrilgL9984zxhe0KMgzADjk2tUz8+dfqB8pSCpzuZ6U2jNQyEapMnTAAGFPvi0x8HswTCUjmxX3sEl6ZZGVVU3VHCJWTAzRNed6ZStSs83x2O6Jfl6n0kqo6K+kVSqqh0bpECqWCRfup9jG9jnku5kX74jfsp8tVardLCALqob/KEUT+NUYIWl2KSiCQ8xyzTSCUalRwKLiUoFDeHO25cUisaen+YzJSNgMeV215jKSTpqPsMIfEvQBllN5OCDHqkkOidSUgKYur4ggFIwyg8fdTV6xRyOj9BwBiXp9aJ/7S1qpV5Atj8+HVhwcTWW17D9YYPTXYI2KxWCwWi2VWYpWgWYru6B1u/hMkdUBrJaDCwecuA6AqfUhQA/FVBg+CGkApqBSQuaJanvDGkLCe8FQQQCYqb7LVM8kk62xyb9KXYZYjvV6WZmpR1lPCg3jcqAcUiZZJ5qI+MgQCpf74g70NT+EPdMf7pmfefRsBAO6CZaPv2wyDHfJ28Od/CSAxa8woQMl8HK2MpFKdAeieYQRKGUl5f6LeZDLnmPeZAAB11HvDA6UgoolqIzL3dY5RQjUg2T5clKa3SzWva76dWUMnnOvPYzLrKkPkOjP7me5LhkbFNNqGMC9WwiK/nL4vnTwoIyg4BCJQnh2PKq9QW46B8EB99wDkvCLqgkBKYWa3EokeYUj7dYgUCImDOo+rvgouBSPpTvXJTCUCxL0Ro4Oke4aZXoX6ubWiJwUopGoAmkggJyIel7McAKEyfSLlSf8GyBcKqJfHXoW1N6pAAKKwRDbBMfjOV5pl2JMgi8VisVimOTYxemqwJ0GzHGffw1XfJ+13iGZzrDIAWh1SPdHcAqSbh3QLAA8hcq2AmwfxVfUGKAMJQyCsxQMnPBVxZQxrTNxFtsoo4ctIzqaTOS3UaVSGktU+qWqxTA4NUVk/2tsDfT9SvIK+jfASyk7Qt1EpPTzRfy3pCwEQ9L4Cd+HyJkd3ZsIOebv5mT/7MEAz1VuUKmWDxn4UuDlV8UMopNsC0TpfqW+UqR5XfgW0rmbzBOr4k0qkHETeGukWQChTn7WcSvcllQEQHqTfx9GqwHaSE2Rotn12He330RlHgFIxk5tkq9oASOGBBInnoE6UD0QA+CBiOLWteV3aE+fkIL0W480jUoCJAJ3BEOZEx1N4HdhSUxVi8wuu2S3ql5F3cvByLobqHCGXIAKQUsBhBB05FisxWqEhSmUCYp+Q9vWkjkWkgKnqT8dUkuUo4twwrRASCtCoMowySEJB/XKqqlNGj4FQcJZDLRRoYTLV24sE0e+XQmGnac821dkyXuxJkMVisVgs0xxKKegEjc0T3X5vxJ4EWcBWvBF8w5OqqidSPEhtGNKvAqEPuAXlUeABZK6oNqKOqiYD1KyVByBIzHBF2FgVpvsyUe2b4LEHQpOdpGdzgrgAopyjVAKxJlOFRAgFeGiegxCqqnei5altolly0P1StFzNVIPul+AtOqDhuAU9GwAAbteKHR3eGQ077J3gzzyojoV+38z7F79v0smDty6IVEHlUSF+RfnI6mWA+yCRF4hwP1VZJYUAoRTSKyjFQSuMgHpveEJ9M2nUaW9D0nemlCqWfLDR07QTkj3utApJgJ1mRBFRiz1INPI7JXuMJf012mOj1RMRgoY1yKBq1FGZbwMt98f+NSlAKwNY3L4I1UBgxOdg0WttEyFIIADmoiPHUmnTvlC+H+3f0fvBRNBQ6ZlSVBNIo+yoirIcjbyAPKmMijhB3vi9ePOxBYd0HIgoy4gGFQDFxLFU4/oD3fDmLNrhcZ8NCpC9HDY12CNisVgsFotlVmKVIIuCUBDug1YG1F0RqllcSwd4vl3d9wpK3WEuEFTTM8VkBU1yxtckDdh4gSIVyMy0U9VF+v9oRpioKgG0wpN5DZSpSX9SWYqSoJPjaRVIz65N4nV2fwVH45PE7M0KUBIZBADlIK4H4rjKG6Z7wEXHmrcvAngAp/dl5eVwcirzp15Rx7Ftfvy+aA+QiFUdkyeks4OSn61IWQIAetAJ6vm0OtVsfwFVnZWsbpOiQX1KMmp+CmVxdZgWMbKf7ayfiEeqieAghEP3TZOEqvykLI4aX+TaIHOtIGEtVlGrQ6C1YYAQ1Zct8mGx6iBaeQg4HiRV+TnSyUdVW+q7kgvKgAjhEQrJPJAgbL7PydejXyuhZoqsqyn1d5DyACR6LSSsxd+jKDUeXKj3gDog3E9kSSXUOhFCMpUmTqEqwrJqjte5sOlb4r+21eznaOvsjVglaGqwJ0EWi8VisUxzCJmEsMQdRY3MUuwRsVgsFovFMiuxSpAFQGPZt3RykPk2CCcftThwI7k9KnFlnrkcIQlVWXCVECLfBuJXlaQfXfrKlqiboD1dBpwwvaZmKoRC6u0z5bXpS17CGEt12XbDNnpfWfR4WB819C65r24TQ/SsQ1++CiJDc6FdXeLwRdxeQgo4/a8A9TJAKcTwa0AYQAoO983vg3jpt+ozA6jLJNF7kDI0h4ExRZtLpEE1Nk4nLiWxI04Cf+ZBkLwy0spaOd7f5GUy5safjQgZBup1ROX7QPz5MPviuPFr11dSs/EOeoyGS6iRiTo5ZlRaTrKXngDw/HxUC/NQDwXaGdRxzHYBBlTRAleXpagOGq3HIYLSLUB6LaDl1yC9AqRXBLi6zE2CirpEmAhlTLUXSQZKRpfdpIwvUyMKV5TUgaRRrERQUWZ38/opgMSl56g1SuqYJQ3nzFWX9njQEHAYdL8E6ajCi2R7Gn/7ZlMQMZsuhQH2cthUYU+CLBaLxWKZ5tiToKnBngRZIF58zAS1iVwrABglh/ojQBhEpulBVSIvlMFS5DvUALlWNasD4vJmKUy5faq9RtJozENjGG0gUUKcxcTt00TwGtRM2axPaTRrdVItMkhQVY1To7YhmnDzn+Dse/jOD9ZeRvj7B0BcF8TLA8xNmZKJX1YqTLHdKCMyDIChXshqGSIMzHLavxXsze8z4/Invgfi5UFZHvzZh8EOe2fqOZHLQ3YuNioNCeqx+iFCEG1ipgwQQjV2TYwBKDVoNPgzD0J0LoJ0WxC0L4ZTfQ2s3B89yEHCGkS5pNQPregAqrybMUg/en7Hi9cB0uZqzlNtDCTngFarHBckV4gVJahoAK2MyFxRNZAtdADcR6E+gALzgAAI5y2Hz5QKUg0Ealwizwg6WAin/xXVtiasgQR1SOZCFNT3UFIHzmsbIbyCUmlKPYCUEPm2OPTRKLlRHIYODtUtPRKqmVZlpeOpSAzqAJSBjfSp71NCVdL/Jw3VDfEX0fddHWdHhWfysKERcdD9khrTUcfK377ZGLO9WVKM0AzKKOgET2Imuv3eiD0iFovFYrFYZiVWCbLEUfeCxzO3qKmjhPJHqNllHaQ2DDjKH2SCEaUAJCDcQipkrqFxZRSyZpBSzcqzzU+T7CicLpp1x01XVRlx6qVpX5Ju7sh507C82agCAYiUDVfFC0SqmUa6qvQa9TKkk4d0XOVreW0zZBjAO+6MhuGCx+8HybdA+lELFccD7ehAuP6HcI45TS16w6nwf3kvHC9vyqSVR4ZB5IoqXFHvg18DBB9V9QnX/1CNGY2t0euH63+I3MIRiFwbePvieAXug+X6IbdvUc8T+iCRR0iGAaAVHB4HNxLGlNoDGHUoW2pvfEuCA0KALz9aqShODoK55uPMeF350uojGMwvRDUU4IEEowRzXYaonylaPYackCj4Q0AQKo/Ua9sA11VtSuo1EKcHAEA7FkLk26LQU9/EGLDKQNTOJBe3s+FaIfXTkQTR+7DjhsWZ2Imkz0m/n8aLFz1P9J6685WSY9rRZAi3PKf8SISqoFaoQEbrzYNqQDvR6jDaTFuf3diTIIvFYrFYpjnWEzQ1zNiToM9//vNYvXo1LrzwQnzpS18CANRqNVx88cW49957Ua/Xccopp+ArX/kKurq69uzOTnNkUAdyRRUMFykmenZIQt+0mRAtnYDgoLVhEF6OfUBhTfkLdBNI5gDMy1SOAECmpUW2aiyDDk9stl4qdFHPZGmi8kw/LkLlaWrSuNWCWPUIA8CvRSF3yudCHAFQB6JahhyOQjS9fFxd1Ww8vwbiuPBO+HsAgP/r/1I+m1we/qP3qZXCAN7b/0H9uP6HIAuXqdYYQVV5WLyCUYNkvQbiugh//wCkX4P71tPBn31YhTZ6RdA56rstXnwMslaGrNdSqhDtmIewMEf9PNKn/q8OgbcuAG9fDCeoQwz0xMcCgBQcNFnZFb1W4deUWhSto1TOINW+RSarwwCIfAeoXwYd2Q7iFYy6JpmHknAxTAvIcYkuj0f7uB3stb6UopQTXB13twDJPNC2zvhzno/bTEjGVFWn4wGB+u5GO6s+/wGgurvCtPKQuWLcoiP6PkO3lcm2DpECpF5Je7ekMGqv/j2hv6OSearCi/sNlVzNVCAAcPY5VKlB3IfbpdTZcMtzTde1WCaDGXla+MQTT+CrX/0qjjrqqNTyVatW4fvf/z6+/e1v45FHHsHWrVvxgQ98YA/tpcVisVgsk4NWgiZ6s6SZcUrQyMgIzjzzTNxxxx1Ys2aNWT40NIQ777wT99xzD0488UQAwF133YVDDz0Ujz32GI499tg9tcvTHqIbiIZRawy93K/GzS6dRONHv6zyVyKDg/SKINUhs530imYWmlJgMllEDY1OM8uAeEaNpALUbJkUKlOIJjJNdHUKj/NldNsFi8J96+nKVxP5XWghVha0P4a2z4WsVyDKJYjKcFMvkCGT56MVoXD9D8GiLBhRLcP/5b3w3v4PEH4Njq8ahvKBXqW0OC5EQpVR3huuvGl//jXQ0gkReXZIPVI7qAPS0gEU5yjlQPtKOpYAbh7gvqmiAgBs+hNY2xzIQjtIoQg5PGhUHAgee5oyrwdUpNYDZca7AkRKmV8z67iv/g5iqB/EcUEXLsNrHcrbIrmAzyVyjGJh0Ac6+JrKWAp9CN6ossnyMEDLypcEGG8SySW+r7QOGil7Ro1JVmjpCjFA+X6i7z31R9S6Th7CLagqLifO91GNcB3lYQprcdWX9tdp1Yx5JoNLunnVbiOsg9ZKQGvi2O+EbGaZs8+hY952b8YmRk8NM+6IrFy5EqeddhpOPvnk1PL169cjCILU8kMOOQTLli3Do48+Oup49XodpVIpdbNYLBaLxbL3M6OUoHvvvRdPPvkknnjiiYbHuru74XkeOjs7U8u7urrQ3d096phr167FNddcM9m7OqOgB50A/syDkPWamfWSfQ4EAMjqMOScJXF+SLLBaaTKsMHNIGEA6RUgCh0QTg7Ea4H0yyB+3GTTeEl0Sm8mZ2XnO8rilN9E2i8oUzMkr6hmodVhNZsWApJSOK9/9yQcpT1H/aFvIHfih6dkbP/X/6U8HZVhSM4hRgZVZlAEoQySMoiRQXhv/wfUHrgd9Z/dBQDInXxWw3gyCNIVgRFJn45c/0Pomj9ZLYO/1g1abAeEgKhVIAPfvF7/0ftAPAZaKCr/C3VA/DKID1WZ5ao8HZVo7kWPVyAdqCojwUErA5BODiRqxErLrwFzF6nP9vbNENFrT72OulaClNKjq8AIpbHy0cQXRVs7gWVHgrcthCAMXEqM+AIDNY5QSCyK1NO5w68A/VtMhWM2sbopYaCUubZOiM59oBsWS68FAMBzrRiqc4RcVZm1ehT5ch9IlCpNwiBdbck5CK8qFZA6gAhBa0Oqia0URkGlQQUoD0LWq+r76ngglIIedILKGJPqzwhbrH5niJd/ByFCsKAGtt/rgUwa9I4QLz4GOHlgV34vzBIIY6ATPC679Pt2ljBjlKBNmzbhwgsvxN133418Pr/zDcbI6tWrMTQ0ZG6bNm2atLEtFovFYpkMrCdoapgxStD69evR29uLN77xjWYZ5xy/+MUvcMstt+DHP/4xfN/H4OBgSg3q6enBokWLRh03l8shl8tN5a7PKLQXglUGEc7dD4wQVeUFxJkizFUptFE1CR3pS/UIIoKD+BXQellVniW9FsmcFUApAk2UA0MyOTiqxCGMpcYirqeSrAGAB2YWLwU31TwzGa2K1B++G7l3njmpypAMgsZlfqyCkLwHUSkBlKL+s7uQP/WcHe/rO89M3a//7C6lHLhuqpeWrg7Lnfhh1B/6BmStApJvMc9r9qVegxBcfaYC5U8Cc5VKEfrx+w4odZL7QHnAJE5TLw+Za1Xp4U78PReFDiDfpqofNzyT8vWAslgRdQDaNgegFLy/O/L6BGklMrEdbe2ErJXAhnsAQlFbchRqoUA1EGAUGKirbfyW/bCIeUDvBqUGJcdKfmYjDwgtFCFaOhHOXY4KJyiSwChbSR9dPZQIhIQMJaqhgMfmomPuAni8Dmf7y+n9NWoui304QkC4LSpJOoy+R69tS39feRVMq6uCg74u47eUAsSvQjou+KanG9LZR4M/86DydRECUrW2BMvuYcacBJ100kl4+umnU8vOOussHHLIIfjUpz6FpUuXwnVdPPjggzjjDGXcfOGFF7Bx40Ycd9xxe2KXLRaLxWKZFGxO0NQwY06C2tracMQRR6SWFYtFzJs3zyw/++yzcdFFF2Hu3Llob2/H+eefj+OOO85Who0BdsRJCP/wE3M/7NkEVmiHKHSAvrYp7uItOGRxDiR1QCsqO0bWyiAtDoSTg8i1pfsQJWbYKdVBV/xQFmeraM9PglQlDgDieMqfkaiSIF5epVsHdZVpk6jmcRL9rGY6WmXR6slkqEG5d56J+sN3m/dJ+DXjCaLFvKqOqtcg/dpOVSBN7YHbzbpSCFDG1PsWKUwy8NMbCK78Jl4esq66xmvfEQCTXUQcTylATk6pQTSIPy/lAZP4zAd6U0oN2+cgVRWVVFukUL23HBe02AY+0JfYn7hXGHGLIPkW5UlyPIR9W1K+tlQvsTBAsOkv6lhSBuJ6wJKjwCiB5xBQkLQlp30RHL8SKS1ZVSmqfHQ9kHwr+ucfhhGfIxwRaMtRcOKiNZ8Dqw6aSkwmBRa0dKIWCnAJhEKCENV/bES6mNexCDSq4jQZXslqoeh1E+6D1MsqYRqI+6Hp10sZwj/8RL0+APzZh9Xz695uXOVyEe4rn+DLv4MY2g7nDadiNMLfP6Cq9KjTNInbovxoE0+MtidBWWbMSdBYuPHGG0EpxRlnnJEKS7RYLBaLZSZjlaCpgUi5o+ZMs49SqYSOjg4MDQ2hvb19T+/Obid4/H4AAB/qB/HyYAe9Cfz5x9WsL1IF2JyFoG2dkLW4x5PyfeTUzC/fAUkoWHUApF5W3bqh+0BF3oImlTXEcVMeHhkGaZUIUJ6gKEtGVzqQfBHSj7uC62wZULbjTBsL6g99A0BcuUeL7bEPpaUdEDxV2VX7yZ1qNpn1+YQBZL0adV3nDcpR/aFvGIUu/+6zm+6Lzg6qPXB7YlxfPZeXB+uYB1EpgeZVUrSsjUAMDwIA+ECv2XcxPJhSE4jjgrZ1qtcDgMxZFPexI8RUFPKBPvUaALAF+6h1cwXI6PNL5i4G6mWEWzeoz77jqS7xutpRiLh6THClbLz+FGyqUlQCAUKA4bry3riUYl6Lg4JDMZcFYKVtykNXGQI6FkLkVa5OuTAf26scPpegBGCEgFEgEBIFh2Jhgalu7FBJ2KqLu+r9FbQuBIXq8yUpA+WBUW9pbcgkRRMRqjwhHmY8eArR+6r5mej8IEqNEqQxShBgUr2Nb/CAtzR9zwEoVSlXAIqdakFZvX/J8aYru+PvhX6OzbddjvbCxPyrpWod+/5/n5+1f9+asVcpQRaLxWKx7I0QSiauBNkGqg3YkyBLCq280LZOyHIJYsMfIMPA5MdIXylB0q+BFNoAAKL0Gmi+CBn1C6PDL6t03+FBk/xrxo56LsVVYomZZxjE+TE8VnMIY5A07QmihaLZNuzZGCtMnDf6KyyjkvUV+b+818z2xYjKhuGRWgTKQItt6lhTCpnwX7F5i1R1lxANvqxmz9MM7+3/gPpD3wAtthvfkAz9pspR7Sd3qnTlqlIjaaEIGfhx/68wqhIUHEJwBL1bQd0oz6ZjHryDj0llX4XbuyH9mhqHc4TbXjHjAADNt4CGAUi+BWzeIvV9cFQfL9mputOLQgdEvkMlK3NfqViEYj/eC5kvQHpFvFZQfqtaKDASCPyhewSL23LozO8Dn0hUGEen58CJstJpTX2W8466z4W6AUA1FNhalvCoqqrz3QKEBCiJktbLAVxKML/AwIVUuUmuen4RJTsT7qtkeEKBsA5RHgaJvlvGu5X055iMLrFjpUZwSMEAX2Uw6T/d4e8fAAAQ101lM8l6FQSAGOqHDH2TNG6JsZ6gqcEeEYvFYrFYLLMSqwRZUmgPTfD4/UBRXTOmxTYIAGKgFyIMQLZtAJ2zENSLZuE6EVb38KrXIAPfdN02/p/IN2K8ExrdmTvwm6o4Us8+ATUrdVzwof441XeUSp2xVjNZFLUHbgcAkGR6MmXq/U10SDeqXRikPTmFYpw2PU41bqwVb7rSrOWMSwAoBQuOCxIGEFHHe40IQkguEAZqG17bBmefwcjnFvnKGIPwa+C1cvpzFB0LIbjyO0X+IFAGZ8E+EMW5EF6UVaRzdyiDlA6cag/Cp36KsFYB8fJwupZi3jLV9LmbtqLoUhy6oIi+coBaKOAxis68A4cSsOiqBU84NgkAh+psLQKPqfVYdImDSYBAmm08RsAlMOgL5BkBKIET7SsFVM5Q1P9LjAwCYQASfedltWze75R/LwQQqbLB4/fDfevpzd+fIADqqoearFXg//q/QLy8+XzIeg2iVjY+LVEpATvrSzfLIZRNOPdsV7Zfu3YtvvOd7+D5559HoVDA8ccfj+uuuw4HH3ywWadWq+Hiiy/GvffemypG6urqmtB+7k6sEmSxWCwWy3RHR4hM9DZGHnnkEaxcuRKPPfYYfvrTnyIIArz73e9GuRwXxKxatQrf//738e1vfxuPPPIItm7dig984ANT8eqnDKsEWXZMGBifjQgD8JoPDPQBA31gReUJYvMWgy09RK0vRTTDa1Pb0sSsOoh6MIW+yX4BAFABIGiuHlDds0mpQSqxVnuL4qqc5LZWAdo1dDUWcVzQjnnxbL1WUf8nE6QpgxgeUJ3SE0nHhDI1u6+W1Yx/insUFd67Mr0gqiwU9VL0WhClilPIShUiCMH92KckKsMgkcpFvDzYnAWgLW0I+7ak/UxBWVXLUQaSy4M4rsoUEur1k9AHpaqiTIZ1sHoZMlcEqUX9uortkEP9kOUSgloZ3lzlH+rqzGNDhYIRggVFFzlGUHQpAgFwKc3stMgIfC5BCEEoJISUEBIQkPA50OLG81ifSzCKWEUSEh6jkFI95jEtI0H5lUSolFsnD9LuqSoxnfDuuJCVjNKqVd0xJLHL0IebyOgKHr9f+cUqUSVbvmjWgxDWAzQNeeCBB1L3/8//+T9YuHAh1q9fj3e84x0YGhrCnXfeiXvuuQcnnngiAOCuu+7CoYceiscee2zG5PNZJchisVgslukOpZNzgyq7T97q9fpOn35oSAVtzp07F4BqZRUEAU4++WSzziGHHIJly5bh0UcfnYIDMDVYJcjSlOS1/vrDd6sZcM2H8JW/groOJFdfCjgegOdV3yTBlVenpS2VGwMgpRwo9Sah8oxGlLmifEEChPIG5Wc0RWi2U3/4bshKCfn3fGLUdbQPCIJDQvXJ0rk4Mpv2HZYhIi8Qovc5m+NEHE+9r4yhct8NqefS/p0s1R/cqtSn0N/hvjbd9v4b1fPmlR8p+RkDZapTOqNAAJMbJLlA7fk/wGltBcnl4e5zAGjnAvDhQdCOeZDlEvhQvxrXVTk3slqGLJdA5y0G8fIQpX74L/8JrGMe2DzVm1AOD4LscyBodQjELwPMhf/ynyC5UPswPAh//c8AAO5+h2L5IX+FPw/4KDgUjBIIAC4FOlxmfD1cxKYg5f1RMo/PJUIhUQkEHKofj3KEElXQMspCcigBlxIimvfmpAD1q5B+1aiqgnMgDCD8WlwFliTplYoe9x+9r6mPR6tAOvmbdsxTamEtSiYfGTT94yxjgzA2YYVVb7906dLU8quuugpXX331qNsJIfDJT34SJ5xwgunQ0N3dDc/zUr06AaCrqwvd3d0T2s/diT0JslgsFotlFrFp06ZUWOLOmoivXLkSzzzzDH71q19N9a7tduxJkGWn6M7l+f0OQNCzCbzmgzAKp12l2tJI9eGBb/wjvC+e8cV9v9x0T6BIaTBz3ezMkzJAz0qj+82SpiE4CqevmoyXuleR7ejeDOK4IMV25eESAv6LfzRKkOqm7ke92dK9nGToQwRhYkmoYv2p9ou4ILmC6jknBGS1jMq3r4/GVWqEVoZktQxZVd6b6v03Nho4I6VCedMSap/jmtRiUS6BUhanmOveYWFglEsWBeyEvI5ydz8ApfawP7+EuSf9DdiiFUC1hLBaBuuYp8atVUBbO8F7NqLylxeQG+hTHeXLI5BcqGT1zS+qY+nl4fg10Pa5EH4NojyMWv8QZPS8hFE4ZfX98Pv7wZ79LQ593VHYduDJxrdTDyVqXMKNKr5aPapyf0gs71AC5JlEIIB6KOBHahEjBCRat+gSMEpQC2Wqiszt36Be18ZnEUQZSzoNnuaLIIUiiOAQ5RoIi99z4xPza5Ccq+yuIJ0F1YzcyWcBiBUhfd8yDnbR2DzqGADa29vHnBh93nnn4Qc/+AF+8YtfYN999zXLFy1aBN/3MTg4mFKDenp6sGjRoont527EeoIsFovFYpnu6JYsE7qN/U++lBLnnXcevvvd7+Khhx7CihUrUo8fc8wxcF0XDz74oFn2wgsvYOPGjTjuuOMm7WVPNVYJsowNnSTt5Y0viJdVpQcoiyps5kBEfaOkz0G8vFKJdPdwv5aaySQTYwHtdmh8ztHux6nTtuP0eBG1CihUDg4f6FP5SwnlAgBIJv1ZCm6yd5Ix/no7KQRo5MdBsr9U8v2jNFaG9GO631fCI0Zcz6hAhDHTT444nuo3pYfTCeJRlRooN9lGhNHUvmpViEdKlhQC/svPwNv/CJBcHmzOQuMJoi1KUWJdy+C/+hio58BbsBAiCJXKxROZV0KoCki/ptLSK8OQXKTW1doZc1217cvPYJ+2TvAlh6FPFuExpQhpL5DPJXIOgUth0qC1TSgUEoGQ5n6Lq7rUcyERRDlClCgliPIAdLAXYuOz6jVX4zwkGfgqJdpxVb5XeTj24UXvTfK7SnJ5tW0Qe8Z2hqhVGiv6LLvE7k6MXrlyJe655x78z//8D9ra2ozPp6OjA4VCAR0dHTj77LNx0UUXYe7cuWhvb8f555+P4447bsZUhgH2JMhisVgsFkuGdevWAQDe+c53ppbfdddd+OhHPwoAuPHGG0EpxRlnnJEKS5xJ2JMgy5jInXyW6iCeywMjI5BCQPjRvHZ4EKzYptSgeYshamXw/m6IoX4zkweiCiPdfTrqIZZENlN0BEfLh1abuyn1QG8Xjn1GaklDvDxEZRjBpg1KsUg2aAxgFAwgVnqaoZUWs05SZRitooVSpZ5E7x/RPp4EolxSypLjQgJGBTKyfsIfJMMg9gIl9yGz35QxSE/96pNCoOuym9F/y6VqmIX7qqpGk2HFwOYsMK8hKFeRW+zCbS1ChAFovgWIlDLh18AoQ/WZ34HXfHidrQhrPiijJiVd7wtHAMIp5OAIyHO/A+veiIXFdmC/I9HjdcUp0ASocQlGCPIOiX0/UgIgGCSAjJSgTo+CBFX0CQ+hkGBhDTmWM4+zygDCpLoT7RPJ5UG9vEkBT2ZwqYPiGf+eSQvncV+/sfh9rAo0CZBJ8ASRsW8vpdzpOvl8HrfeeituvfXWiezVHsWeBFksFovFMt2ZRGO0JcaeBFnGTP7dZ6P2v+tAPQfCD1V6NFRvJppvUV24i22gKCKsV5VnI6PS8PJI7DXJXJ8u/uMVqfvlb65pUIdaPnhZ6nFAzeZLd12J9rM+OzkvdC+i9r/rTPZO9Xs3AQAK77tA/UwZZLkEfyhKN04qORGSC5WxwwUE56CMgeW9BmVDChErC0k1KQya5zols3yi7ckov+SJNoSGAUQQgkUGTzE8ECcXU6YUHD1mFAxHBANhYep1EUZBePqzJ4IQ9d7t6nHXA3FcMxbv8wHHQ66zDUG5ChkGoG2d8DdvAsq11Ov1GEOtfwhBuabW5QI88dwsUqAIp+p7BKDeux2k/zU4xTzYtg1Y+LYPYsRVgXT1SAVSFV4EFBKQgACBkBLtHgOPZuze1qchckUs6NwXPvVUf7GgDMlclQPkFcDmLFRvS30jIISqDPTyKt8rm+Olj5f+LGhPX6LfmuTcVnxZZjT2JMhisVgslmnO7jZGzxbsSZBl16AMNJolayVIcqFms64HZ/FyVbnjKh+BDALlIwIg/GFVVVQTUaYM3aF6k1WGsujnB5DJrLFokgnMMqrmqd5/IySPqvhElP4thFIt/ObZL/pYcyhfDGEU1HVAmVYFlAIkgtAoR9TTv17irB4NcTwIv2bSwoUfVVBF/hr9y1orPUnfF6/XQaMKtbYPq8/I9psuBnNd5BbOj/1CUSWZrtAyx4FHqlWk4PRcfz66LrsZANB34yr1OiK/G898riijGHlpA/LzOuAU8+A137wuVmhBfcPzCMrquPrDFaOMEUZBo2MGwBxzEYTGixXW6kD/EHDPjeb15xmD294Cb//DVW+3YjtQaAfqZaOyhr1bAADDG/4Mp0VVt+U65oHtexAkdUD8Kgj3Va+z6LvrLjsIMgxUHzjtz8v69LQqVFH92OB4ar8EB3E9yMBH7sQPN/28aIa/cTXaPnz1DtexjBF7OWxKsKeFFovFYrFYZiVWCbLsEvlTzzFeHD3T7zh7DfpvuRR+Xy9Ivgh33wNAW9pU5kxiBs+KbSC0jLBSg/DDhFIwPrSKNHRnrBjpKp955/37hMbe26jef6OZ5WuPjq7wS6pASXVNKxj6ZxGEEFyYSjDGBZBXOUDZ2ZQeM0lKrYvUD+09Sf4MIO31SXyGqOuA13wEtUpq/PkXfEGpOJG3hlBqsoz0/2Y/OE/5mQCg94YLwYMQi1ffim1rVzbsO2EULKHihFHyM2EUOv3HL/U1vJbkMRztWDSrutPLRBAirNVRH3gMzHMb1tP7AwDegoVRl/teiHIJTtd+AAkgB3shQl8d00Ix2ipQlXvZFHatxqWWMX3goGrSAFEtN/j9spTuurLpa7eME+2Nm+gYlhT2JMhisVgslmnOZDZQnak88cQT+PnPf47e3l6ITNHMF7/4xXGNaU+CLBaLxWKxTGuuvfZaXHHFFTj44IPR1dWV6qeX/HlXsSdBll2m+I9XoPzNNUaGL911JQBlmGV9W0DbOkFyBdCCCpQTUdsMp60TLF9EWNkIYMfhe7uCCW2EugzWf8ul2H7TxZh/wRcmZfy9Acl56rKSuQRWa7ykIROXzQinqdJ5GV0OY54Dr71otnGK+dgwX6+byz36M5K9zJZsY5GsWDHPExmmCWUglIHX6+ntAoAHQeryp+QCfqmM+uAwvLYiWN4Dr/ngQdC0KiZ5qSZpgF68Og5+27rmE2CeA+6HCHxVDs8TLUOY65hxRBCCug7cYl6Zo7Mhk5kWI9qUnlpnFATC+BIbpfDai3A650IGPnh5RC3PFxH2KZO0rFUgK0Pp9123FAHUZa9aBaJaNqXuptExpeqyV3TMdNsbE2cQBpB+DYX3XYDyN9eMWsBgIysmmSj2YcJjzFC+/OUv42tf+5pJq54s7EmQxWKxWCzTnVleHUYpxQknnDD54076iJZZAXHixphSCMw7799BKEV9YBjBK8+BtnaCeHkVxpZvUbdiO2jHPLidnaCeg85zrp2UfRGcQyQaPIogtCpQlii0UAqBsFJDWFY3HgTmpky4PrgfgvvKBA3EqoXIqBXcD1SZvOvESgZlYIUWs5w4XmxyjkgqJCr7hBmjsr5piBubgZMBnZKLlAIIAAsv+XL8cmt11AeHU5+L1D40MW4n72+55lxsuebcyDAeYskV67DPVV/FkivWYfHqW0EYxeLVt2LhJV82+9x12c2pcnytXGnlzGnJN92XpPm82c/JdfR7EZZrqG3ZCr//NbMu79+m3tOar24DfRAjgyoKoVaBqJWj5sY1iMqwakni1yCqZchKSTV8rZVjJVC30dDHx68Boa+2C3yM3P1Z0LY5Da9n8PZPN32dlomhVdGJ3mYqq1atmpL2HFYJslgsFovFMq255JJLcNppp+GAAw7AYYcdBtdNV0t+5zvfGde4RI6lS9osolQqoaOjA0NDQ2hvb9/TuzNj6L/lUlOWPrDucrQceLCZJRpPAVRDTADwt22ekGdg+00Xm5/1DH7Bqhsb1uu7cVXT5bOFyrfWQoSq9F0rJ4LH5fHaC9PQABVoWt6sH2eeA0IpcnPa1P3If2N8JEKA5T1QxwWv1xGWa3DbW8wYumydRSX22edOBivqQEG1v7pZaWjadGi0ErTlmnNBPQdeW4sJIkyVyEfenWTJf4MqJNJ+HqeoAz9D7HPVV3d63HuuPx8AEFZ94/1Jltk3O9bqcfWLXcdHEKrK7f1Suen6brEAb4FqhVF+5VVILtSyOZ0grgvS0q5K2SlTQYmJ6AGEPkStotqNZFubABCRCkSj7bS3SHuAyt9cA6dr2U4DE/dmdsffC/0c2x/6JtpbWyY21kgF80/8xxn59+28887Df/zHf+Bd73pXgzEaUN3tx4NVgiwWi8VimeZMxuWsmXw57Otf/zruu+8+nHbaaZM6rj0J2o3sqJJippMMJ5zzic+jdNeV8LpqIPmiaqEBVaEEALJWnlCbC93aIAlhFP23XAoRhCnlR//ce8OFANK+kdmACAPl/6nVjRJkVAZGQQWFSKhA2nMCAAjQ2BBVj8sFKICwWlerlqsglIIypvwpfpAKxORBACepZER9kEz7CD/20QDpBp4NoYt+mHpcvyYdeJgcT2+fVV5UQ9jR1R8TVqifp1xTytYYAz67LrsZ29auNM2GRRCqpqlNXp/Tko89Sq7yM5Eg3b4k9b5kjoVpbxEpbIRRpdpQCmgVNqro0m0zpF9TlWKURcGZSh3UFX663QgACAQAArSeeWX6uYMQfKB3TMfDYpkoc+fOxQEHHDDp41pjtMVisVgs0x2dGD2h28z9k3/11VfjqquuQqVSmdRxZ4wStHbtWnznO9/B888/j0KhgOOPPx7XXXcdDj74YLNOrVbDxRdfjHvvvRf1eh2nnHIKvvKVr6Crq2sP7rnyyACxr2BvRzezFOVhUMpMhQkttgEoQoYBWN7DwLrLMecTn9/hWNpbkfSaEEqxYNWN5rGuy27G4O2fRlirQ3KB3hsuhBTCNMXctnalyX5JNsvc2yl/cw14zVd+kkx1F/WUR4VwamZCfBS1oVkLCRo1wNXVWkZJirKFeM1HmPDC8JqP+uAwAMBrKyr/S7FVeVL0djQegyJWq5rtC8t7CMo1QFeaRa8v2W4CAJx8DkG5msol0usnFZ9ktZjkoiGNVm9Pm6hiY0Eravo9oNHPTuSl0q/fHy6n36dE09XU/iQawOrsH61uCT8EWpTaoxOCZb0GOK5poktcD2GlCqelEB+/qPoum100WgPUtg9fjf5bLsXEXCqWMTPLc4JuuukmvPTSS+jq6sLy5csbjNFPPvnkuMadMSdBjzzyCFauXIk3v/nNCMMQn/70p/Hud78bzz77LIpFFdq2atUq/PCHP8S3v/1tdHR04LzzzsMHPvAB/PrXv97De2+xWCwWi2W8nH766VMy7oytDuvr68PChQvxyCOP4B3veAeGhoawYMEC3HPPPfi7v/s7AMDzzz+PQw89FI8++iiOPfbYMY27O9z+g7d/Gl5HG1o+tHpKxp8ODH/jajjtHZCcg+TUbJM4Loin1DAZBqi98tJOs4J6rj/fzKIlFzv19CSVI8IonHwOtcHhVArwbKH8zTWo9g2Y9GJT6VTwUsc0qRJls3cANKhDLO81KCKCC6NaaOVHj8lcJ5XI3LJwDtzOTgBAMDhomp2SSF1KZuQklR3hh/CHy0YVDMq1hiwdyii6LrsZG1efhfy8dhQWzkG1d6BpzlHKN5RRhrQSRBOeKK+9ZZdVxGQz1pQSlfEpSS5SfqPkNlo1avYZ3n7TxXDyOQCAXyoDAPLzOuC0tyMsleC0tkL4NeP1Ibno+8c5RK1iKvp0peZY1FlLzO6sDnvt0f9Be2tx5xvsaKyRMuYe9/4ZWR02VcwYJSjL0NAQAGWWAoD169cjCAKcfPLJZp1DDjkEy5Yt2+FJUL1eR71eN/dLpdIU7rXFYrFYLONglidGTxUz8iRICIFPfvKTOOGEE3DEEUcAALq7u+F5HjqjGaamq6sL3d3do461du1aXHPNNVO5uw1o9aP+8N0Qg70onL5qtz7/7sAvqQowlvcgohNLd84cyDCAt/wQyHoNxTkLjJcnm/CsZ9BOXleWja4CbV3zCSy5Yh0ANJ2pb1u70vSYYp4Lt60F1b4BSC726gyh4j9egcqNqyC5ShjW6obOyXEKXsM2WTUi5ZtJqBdhpkJLr+O1t8DLF1VlWGJc/T4CQK1/CJXeAfP+aoXEyefA8l4qdVk/Pw9U1lFQrpnsHMkFeEWtx1wHuc5Ws0/L1qrMkFc+9RHMO3yFev1RdaJOxk4pYX6YUqCcRE4PYRTMc8blJdPqzba1K42PCgAkU0nU5vhFr8ct5uHkcwhr8cQsrPmjKpnzL/gCtq1dCQBwi3kIP1SVetFrCUolCD+EU8yDFVtT2wo/RMfZawDEitJoCduj0XvDhbOu4nKPMYtPgr7yla/gO9/5DubOnYtzzz0XJ510knls+/bteMtb3oKXX355XGPPSJfUypUr8cwzz+Dee++d8FirV6/G0NCQuW3atGkS9tBisVgsFstEuemmm3DppZfikEMOQS6Xw3ve8x6sXbvWPM45x6uvvjru8WecEnTeeefhBz/4AX7xi19g3333NcsXLVoE3/cxODiYUoN6enqwaNGiUcfL5XLI5XJTucujP/c7z9wjzzvZNPMR6NygoTuvgBtdx65s3goRhCgM9YPXfORXHGQUhIF1lzdUxujZ7GgZKRqtAiX3B4DZJyfvgUZVMtR1VDVOQuFIpl3vbejXSD0H8BPqChMIq3Fn92Z+lORx18t4JoE566HhfqhybhLvXdbfw/0wNR4CpeQIzkEzKdDcD0AZa+hin91XDqXuOHkPr3zqI1h+3dfNOk57B1guh/pr6hK6FMq/pKvh9D4m91PvA/Uck/I8ERavvhV9N65K5WM5ec90pAdihSrX2YZaVEmntx0LWiHjNR+yWIjGU4oSqVGE5e1mXbe9BU5LAdtvuhjzL/hCqkpurPTecCG89ol5VCxjR2drTXSMmcZXv/pV3HHHHfinf/onAMAnPvEJnH766ahWq/jsZ8ffdUAzY46IlBLnnXcevvvd7+Khhx7CihUrUo8fc8wxcF0XDz74oFn2wgsvYOPGjTjuuON29+5aLBaLxTJ5kIlmBDE1xgxjw4YNOP744839448/Hg899BBuv/12rF498eKiGaMErVy5Evfccw/+53/+B21tbcbn09HRgUKhgI6ODpx99tm46KKLMHfuXLS3t+P888/HcccdN+bKMMv42FE1ifYcAIC4+7OgXh4QHLQ9D+J6KOy3H2qbNyGs1VNdtk12SjQ73xXfQVCuwi0WzP2k76f3hgvhFgupZTrrJrnOrj7ndCWpbiQrtEbrp5VSeRIVUyKhmGRVoOzPzZ5fBKHxwOhKr2THdI4QbrHQMFOVQiBMqCXJZOvUelyY7ulJ5Wb5dV9H7w0Xou2gA0BYpK4E8b4Rrp6P5T0wnV4deXMAmP2cDO9YUmEKyjVQz1FVdoljKvwQtf4hcz+rcjZDK0V9N64ySd71wWG4xUJcARflJWl4EMBrK5peZeN5fdRzTO83i2WqmD9/PjZt2oTly5ebZUcccQQeeughnHjiidi6deuExp8xJ0Hr1qlfBu985ztTy++66y589KMfBQDceOONoJTijDPOSIUlWiwWi8UyoyEEIBO8eJNpOjoTeNvb3obvfOc7ePvb355afthhh+HBBx/Eu971rgmNP2NOgsYSZ5TP53Hrrbfi1ltnXybMTKD1zCvRf8uloIypWeScKoiXh9ehOpG7bS1gc1RHbFEuobqtR3l53B2N2siOFJxmj2WXaV/EdE6XHv7G1RBBmFLamqErrZT3JOoxJQR4xq8DRCqLaPTciEwVGEcImlFsmOsYtUirSqkxMupN1oOT7Cif3AfmuuAIjJdGp0prRUhEPbYIpeBBCOY68NpbsOGSf8GKG/4vAKDSN4jWpWXzOZNRqjLTvh9G4bTkY9+Y55jn78xULU4E3U0++Rw8ei3JnKSgXBtTp/os+hgJLiC4DyefS6l/MuG3klzAHy7DyefQd+OqcSlBbrEAlsth+00XA0BDhadlkiF0Ek6CZowDxnD55Zdj/fr1TR87/PDD8dBDD+G+++4b9/gz5iTIYrFYLBbL7OKoo47CUUcdNerjRxxxhInKAYB//dd/xWc/+1nMnz9/TOPP2MToqWJ3JIBamtN34yoUlyglyF1+KMTwAOqbNphO3Czqs+QPl1Wfo2iWO1Vp0LpyZrqi1SBAeUmy3qztN12senhVfVN5BMAoQoSxppVP2bTkZAWT2o6mHgdg/EQ7SkVOLgeUcpGsXisumtfwHEpF4sYjpl8LD0IIPzC9sfQ2bksecw47AOXN2zC8sQf733gPNlzyL5hz0FLkly0HANQ2voKgXDWVTZILcD+AFAJBuTal6eK6cpEHAYSv3hNdhSe5wNI1d07ac5XuuhK1/iH4wxWTv5R8fyijyM/rgNtaRDBSRn1geMw+uK1rPmF8U3tz1tbO2K2J0X94BO1trTvfYEdjDY9g7uv/aq/++9be3o6nnnoK+++//5jWt0qQxWKxWCzTnVl6OWxX2VVdx54EWaYNyc7wuaFheHM6wfIeiJcHzauu2CIITYrv4kum1vvVrI/WdGK07t4a7cVpRlZBMeuL5opPcpSkH8ioPG5jtZgUwlRiNds3/Xw0yj8RnEMKAea6Ziydc6OrtrR6NFo1ms47al2xDEMvbcErn/oIAJVgno/ScnMLF4D095txwlp9t6kZOpGZUKp8cSKd1zSZ8Jpv1FJdhZbsYg+oSkrJBdy2llT12M5YcsU69Fx/PqjrmO/sVPvnksnwFstkYU+CLBaLxWKZ7hAy8equGVgdNtXYkyDLtELPJrdccy7qg8Oq91iU1eK1F00F0+5gdz3PVLFg1Y2mrxSAVC4PEHt6Uj6RJuMQRs1ysYNjkqr2SqynFbVscrTeB7NeEPfv0qqECMKGFPGst0UvZ64Dr61F3feUXyUsV+G1FRHWfPD+bQCUQlLpHTD7sjvVBX1cdIYPoRTUdRCUa+B8fIrQ1jWfANA8U4gyCg4grPopf5aMjrMo1yD8cFRlbVeYynytrWs+0fCezzooVbeJjmFJYU+CLBaLxWKZ5khCISfo6Zno9nsj9iTIMi1J5qRsXfMJiCCEX6qguHjeDraaXHSmynTOCxorhFFQnlaCdC5NtoLLpDxnUp0lFw35QMltmik9yQqxVEK1iMfS6p4IQjDmpfZH+2X0+Hp/0USRcop5VfElIm9RPof64DC8tiJ4zcfQS1vUcwch9r3mjlGPVc/155v3frJVDZ1O7hYLKhep5huf03iUjh0pJDwIwPKeSadmkeIERAnhiCv6kunZY0VwAa8tBz/yHU1lvpb1AlnGyj//8z/vUuWbPS20WCwWi2W6o6vDJnqbwfzyl7/EP//zP+O4447Dli1qUvN//+//xa9+9Suzzrp168acEQRYJcgyA0jOAntvuHCX+hVtXfMJtC3rQqW7H4BSFqQQxjuiZ/rb1q4EjZQGvWzhJV+e8SoQZRSI0on1a3aLBfAgAK/5JsnZqAF5ajw8OtU46cPJdoXX1VhO3jPrS9cx+TfU1cnIab8LjaqjkuoQ91V/sfrASEP3eiKo6jaf91TyMlf+CP38bjGPlkXz4C3ZDzIMQPJF5DpVporOl0p+jjZf9XF4bS1geQ9hpZZ636fy/dZj91x/PvLzOhDW6vBLFYggHHdG0Gi5RlrJ06qX6vquPgMiCI1PSL+v2R56O2Lb2pXmebUXSL9nM7FT+YxglpfI33ffffiXf/kXnHnmmfj973+Pel1Vjg4NDeHaa6/F//7v/45r3Jl7RCwWi8ViscwK1qxZg9tuuw133HEHXDfupXTCCSfgySefHPe4VgmyzCio58BrVx6PnfUs0lUz1HXgtal04LDqw2trMWnBpbuuBKB6X7nFAgij6LtxFQClQsxkFQhIKw9aweFBHN6TzY9JeYMSfaY0yf5eSXhU2UVdB3DVfV3t5RS8VDq0JtkZXt83HqTMc+v/eaQwafLz2lPri8owIDhoW6d67ryH3JxWBOUatlxzbmq7lq754PU6pBDwS5Xdqvp1XXYzem+4ELk5bagPjkzZ84QJdUcrm4Dy85jPQ80Hr/ljfu1a+dHozwKNFECnSQq5ZRKY5UrQCy+8gHe84x0Nyzs6OjA4ODjucWfuEbFYLBaLZZYgCTEVYuO/zdycoEWLFuHFF19sWP6rX/1qzC0ymmFP2S0zCp1pkl+2HHygN/VYUhlKVs3o/kmAUpJ0H6VkQm4Ypes60WOame4J0mjlAVCvlbmO6WguuYhzgBLbEEZTGTJG1dFpz0h0KNfVXy7gtRdR7RsEoFQGrQhlaZb106zCrNl9vV5hwRzzPCb/qHMhZKR2tSyai8LiLkAIhCMjZlu/VEa17zUwzwVzXTh5b0rybcaCVsA2X/XxHVatNWNHVVOEKR9VMmk5+VnWGVLj+XwnfUipzxGjpp+dxTKZfPzjH8eFF16Ir33tayCEYOvWrXj00UdxySWX4DOf+cy4x7UnQRaLxWKxTHdm+eWwyy+/HEIInHTSSahUKnjHO96BXC6HSy65BOeff/64x7UnQZYZhZ6tD97+aXhzOgEAI3d/FkGpYtSC/lsuBfMco1io2b76qHvtRbQcfjS2//znKYVDz8aTHgrmOiCU7jVqkPFuRIoLdR0wzzWqmKnuSSZIe45RcmjC68E8lTGjK4rM/0EIf7gC4YdwinkIxBk4WeUn6wFy8l6cURSpCYEQqfX0/pn3LuoH5uhcEMpAGEO4dQPaly8G8fKQfs2sBwBhWfWgE0GIsFJTFWx7IB2cByH8UlntdnRst1xzbioja2do3xvQXBVirgOO5srMeNKyk1VhyXEA9fmikbfOMgXM4rYZnHP8+te/xsqVK3HppZfixRdfxMjICA477DC0trZOaGx7EmSxWCwWi2XawhjDu9/9bjz33HPo7OzEYYcdNmljE7mrfef3ckqlEjo6OjA0NLRLqZOWPUffjatAGDVVYttvuhi5zjY4nXPh9/XC7eyEu+/rAAClJ36NsFIDz3hdmOeYCqNmOTiSi93WaXyq6b3hwpQyQ2iU2OyHpls7EHcajxU1x9ynkTKkx/BLFeMhAlT1lVYE9Ni6Ks1PqHZA4/FPEiaqwbJqjeTCZAG1H3YIQBmkXwObsxC0tRO8fxtqr74Ev1Q2adOAUq2Sih9hdNSsnd3FtrUr4bW1QAoxarXjrrJ1zSdS79lEX+O2tSubqkfJ/nRO3jOq1rzz/n2n+zfTk6B3x98L/RzbX3oG7W1tExtreBjzDzhiRv59e9Ob3oTrrrsOJ5100qSOO3MvEFosFovFMkuYeGXYxHuP7UnWrFmDSy65BD/4wQ+wbds2lEql1G282MthFovFYrFMd8gkdJGfwSdB73nPewAA73vf+0AS3iYpJQgh4JyPa1x7EmSZ8WQvUxFKwQotoK2dYMODoG1zQNs6AQCUKYNs0mjrFvNwiwUE5aq6NBOlkfIgAHNd8CAAYXuPQXrhJV825fK6eWlsNKZGHtaXjxilJgCRMhpfJgtC03QzeTy99hYUuhaAVyvGME29+NKZujQWteZIBDVmG7kCSBncNc1MzMH2HogghNveDpJvAR/qR9CzCWFVtaVI7mOz55ku6MuJk8GSK9aZS2LMdSZ8+Snf2YawVjf3dQxF8jLbwLrLITjf6aUwvX8Wy1j5+c9/PiXj2pMgi8VisVimO7O8RP6v/uqvpmRcexJk2eugjIFXK2BQJtjCkuUINr8EAPCHy2Y9Eqkauc421WTTD8A81xg7c/PnglcrIDWKsFYHoRS9N1wIKQQIjY3FM9EwraMGtt90ccoQni1H12jlJGuw1W0YWFRmzop5VTpfrSAs11Lba2O0MZtHJmzKmpe/AwllKlKMJBep5qpaURre2AOvvUWt37cFojyMsFxTzVGjAD9ddp8s9W9Wur8nWLz6VvRcf75RxcZL342rILkw7++SK9ah5/rzTUuY8dJz/floWTQPgvMd7icPAttAdaqY5SdBv/jFL3b4eLOWGmPBngRZLBaLxWKZ1rzzne9sWJb0BllPkMUSITgHy+VAcnm4rUX4rzyP4ef/nFpHhydqr0pYqSE3p80E6QGADH0TEigjv5DkoqGUPjv7nkk0a09hQhMTM/qxvDbjIXJdpbxEv5QoY+Znsy6jxmOkt80GIur9Me0wXHU/jJazvGeaj1JKTZNWlvdMGw3qOgjKNdPYFYi8TJSqFiquM23et8nwm3ntRbC8h9JdV6L9rM+a5dRzQDk3XrBdec29N1yIwoI5EEEI5rmqiW3kXcqW3U9Web+lCbNcCRoYGEjdD4IAv//97/GZz3wGn/vc58Y9rj0JslgsFotlmqMbqE50jJlKR0dHw7K//uu/hud5uOiii7B+/fpxjWtPgix7HW6xADZvEUR5GHBcjPzlxVRlUFJlkFyg1j8EJ58Di4LedEVT6ZVtqv1DIQ6Ao57TtJknYcovNF1UhbEyUT9TVr0YuvMK87NbLJjKM+XrUZV5gnNVwZeoCtNhhlKIVIUe3EwbD9dBfXDYrKN9RpVtryGs+Qi7XzNj6io0yQVY0Ymr0LhSgfZ0QOJU0HH2GgBA5VtrMXTnFagPDENwgUrvQMp71Yxk9VjP9ecbZS83pw1Oayv8gUH4pfJOP+N7SxWlZWbQ1dWFF154Ydzb25Mgi8VisVimO7P8ctgf//jH1H0pJbZt24bPf/7zOProo8c9rj0JsuxV9N24Cq0rloHNWYiwbwsgmlc7AelKJB4EoDUfLO8hKFcBqAwbWvBS20guTMPNbOuH6VBltKfRSkTprisbjpH2BTVr1JqtCNPrMs81KhFhFKzYCn+4rFQmLuB6qjWHU8wjLNfgFPMIyrVUJhF1nYY2KXujCgSkW1h0HLQCkgvUB5UalPRdNWuEmlSBkhV0TkseMvRTbVJ2hFbc9DgzsXpyWjKLG6gCwNFHHw1CCLKdvo499lh87WtfG/e44/qt/bGPfQzDw8MNy8vlMj72sY+Ne2csFovFYrFYsmzYsAEvv/wyNmzYgA0bNuDVV19FpVLBb37zGxxyyCHjHndcJ0Ff//rXUa1WG5ZXq1V84xvfGPfOTBa33norli9fjnw+j7e+9a347W9/u6d3ybKboK4D0tIOGQYQQ/2obOtRM+DMLYtu9lnrHzKZMnpdlmgKCcBUj2XVn+maQry70JVHfTeuSi1vdlzGeqy0b0sTDA6a94owCqclD6clj+LieXDbW9CyUFUx8ZpvblqRMt6jvVixW7z6VixefSsoowgGB81yGlXjJfOSsvTecKHxAlHXgZPPwcnnjHJHPQfUdVLvb/a93n7TxXCLebX+GJUjyxjRl8MmettFpsvf00ceeQSLFi3Cfvvth/322w9Lly5FPp+H7/sTOu/YpSNSKpUwNDQEKSWGh4dTzcsGBgbwv//7v1i4cOG4d2Yy+Na3voWLLroIV111FZ588km8/vWvxymnnILe3t49ul8Wi8VisYyXPdFAdTr9PT3rrLMwNDTUsHx4eBhnnXXWuMfdJU9QZ2cnCCEghOCggw5qeJwQgmuuuWbcOzMZfPGLX8THP/5xc1Buu+02/PCHP8TXvvY1XH755Xt03yy7xuDtn0bnOdeOef2BdZernJQ5C1B95nepdOhmpPpRcWF6h+1ovR1tP9vJVg1lVZxmpLKBouowncjd8DijcNw8CGWQgkMKAWfBPgAAWqvAacmbcZJqh/bC6LH2Vj9QFr9UNmnowg8BLsB30JtMHyPJBXjNB40UN17zQSgFr/mp4zp4+6fhFgtGDfLai0o54o2eL8sksAeM0dPp76lulJpl8+bNTcvnx8ounQT9/Oc/h5QSJ554Iu677z7MnTvXPOZ5Hvbbbz8sWbJk3DszUXzfx/r167F69WqzjFKKk08+GY8++mjTber1Our1uClgqVSa8v20WCwWi2VPkf07l8vlkMvlUsvG8/d0KnjDG95gxJeTTjoJjhOftnDOsWHDBpx66qnjHn+XToJ0A7MNGzZg6dKloNOsR8z27dvBOUdXV1dqeVdXF55//vmm26xdu3aPq1eWRoa/cTUIoxi68wpTcbQjBtZdDsIoCq8/HpUnf2UqvIDmXceBdHVYUK42KBdZv89oM9zk7Fj30tLM1ryUoFxV6cJRjk9WnZFcpDKXdDd7vW4S6jpwWgqAE2UHhQHCiupLxkYG1f/zFoPNWQAxPAi32IegXIMUwvhSZlvH8q7LbkbvDRei/azPonTXlRBBCL9UhmRxD7gsIghT/jddoReW6sZTJYIQXZfdjIF1l5v3T3u0/FI5VQkm/NC8p7pSLNfZBgBwWlsx9OKrJrtotn5PdgUVljix6i69/dKlS1PLr7rqKlx99dWpZeP5ezoVnH766QCAp556CqeccgpaW1vNY57nYfny5TjjjDPGPf64SuT3228/AEClUsHGjRvh+37q8aOOOmrcO7S7Wb16NS666CJzv1QqNXxALBaLxWLZk0ipbhMdAwA2bdqE9vZ2szyrAk0nrrrqKgDA8uXL8aEPfQj5fH5Sxx/XSVBfXx/OOuss/OhHP2r6+HgbmU2U+fPngzGGnp6e1PKenh4sWrSo6TbNZEDLnqftw1ePaztabI+rtyhtqgKN5lPJKjx6Pa0o6J91z6sddfzWM1ytDM2mmS5hFJQxUNeBFyVwC85T2T2jdawftQM5ZWAd88AH+lKLZaQ0iXIJfKAXtG1OSlHaW5Ohx0rP9ecj19kGr6MNfin2yFFGG7KCBBeg0WdaZLxD2aR0t70FNN8C6ddQ61dmVRGEGFh3OcJaHQtW3QjqOalxJBcpn97i1bcahUhXpc20xPWZSnt7e+okqBnj+Xs6lXzkIx+ZknHHdT3rk5/8JAYHB/H444+jUCjggQcewNe//nUceOCB+N73vjfZ+zhmPM/DMcccgwcffNAsE0LgwQcfxHHHHbfH9stisVgslokgpJyU21iZbn9POee44YYb8Ja3vAWLFi3C3LlzU7fxMi4l6KGHHsL//M//4E1vehMopdhvv/3w13/912hvb8fatWtx2mmnjXuHJspFF12Ej3zkI3jTm96Et7zlLfjSl76Ecrk8oRI6y/RG96uirgMIPqZcmqQfaGfVLIRS011dRN6gMOopphlNFdLLk0m+s0WZ4FECN/UcEB4f76w6oBOhNU27zufykL7yAYkwiCvJQnUpXgwPRlVMyvBJPRuGv/CSL2Pb2pWm11ozeq4/33xGF6++Fb03XGg+61kkF+i67Gb033IpCl0LAABhpYZ55/07APUZ94fLRvVMdpTXy3SWVLVvAP5NF6PrspvRd+MqOC15MM/F9psuNs/VLGla76/+Dul+Z1vXfAIA9mrvl4xuEx1jV5hOf0+vueYa/Md//AcuvvhiXHHFFfi3f/s3vPLKK7j//vtx5ZVXjnvccf2mKJfLJg9ozpw56Ovrw0EHHYQjjzwSTz755Lh3ZjL40Ic+hL6+Plx55ZXo7u7G0UcfjQceeKDB3GWxWCwWi2V0ptPf07vvvht33HEHTjvtNFx99dX4x3/8RxxwwAE46qij8Nhjj+GCCy4Y17jjOgk6+OCD8cILL2D58uV4/etfj69+9atYvnw5brvtNixevHhcOzKZnHfeeTjvvPP29G5YdhMdZ69RGUH77Afp1xpUhGYVX9lqL30/qRABSPl/KKNgrmMqbLR6IYUwHiA9q9brN1Ol9Kx1b82tmX/BFzCwTmWI6CqxJEk/0K5kyWh1IuklIo5S40ihCEdw0LZOsPx2oKYUotnkxWqG9t0E5Sq89iLqg3G7o+TnWn9ueeSnSy7Tn219/JnnApQiLJWMn0c/l0Z3sHeLBRBGEdbqmH/BF0wlWVirg7muUpUWzkFYrsXfxyipvf+WSwEor5FWhZq9n703XGhSqvdmhFS3iY6xq0yXv6fd3d048sgjAQCtra0mOPG9730vPvOZz4x73HGdBF144YXYtm0bAOXcPvXUU/Gf//mf8DwPX//618e9MxaLxWKxWBqRUjY0Dx3PGDOVfffdF9u2bcOyZctwwAEH4Cc/+Qne+MY34oknnphQcRORk3BUKpUKnn/+eSxbtgzz58+f6HB7lFKphI6ODgwNDe3UPW+ZHugclJZDj4KollH+8/MN/ZGSCtCOyD6eza5JVYo1GUsrR3p9HoSp9XQ+jl4n+fje1t28/5ZLQRlrUNcApQQAjYnRmqQnhbmu8hVFyc/J6j9HZ4ZQCoQBpOAIhivwS2VbaZSh/5ZLjRKjc4PGe4z6b7kUIggR1vyUCrqrn1/tASKUqrT3QgvYnAXgQ/3g5RGzr8IPwYMg5TPSfqDB2z9tPl/Uc1De1r/bvEG74++Ffo5Xt2yb8HOUSiXst8/iGfn37fLLL0d7ezs+/elP41vf+hb++Z//GcuXL8fGjRuxatUqfP7znx/XuGNWgpJZOjvji1/84rh2xmKxWCwWSyN76nLYdCF5kvOhD30I++23H37zm9/gwAMPxN/+7d+Oe9wxnwT9/ve/H9N6zXp7WCxTCct7qnJreABSCBS6FqDa05fq9q5ppkoAY+v9lexplRw36VGhIvJSRF4LyiiSI6dUIaF6NAGqso0yit4bLtxrFIx55/27UoOAlP9H+CGcfCxf80BVe+mqMMqYOWaqIo+DRr+qqOukk6ej6jBe8+G0t4PARVgbGDUlfDajq7iAOGF9NLTKMhpSCKNc6oovjOE7pKskmyVFq3EGQLf1wC0WUDjoCLVuayfCno0QQ/0of3MNKt39AACvvQWDt38aTjGPsKwqBzvOXgOx7vK96nuUZAafw0yIIAhw7rnn4jOf+QxWrFgBADj22GNx7LHHTnjsMZ8E/fznP5/wk1ksFovFYtl1ZrMS5Lou7rvvvgkZoEfDhmlYZjyEMtUpu1qGs2gZZGsn3JER+MPlpgrPaGpQ87HTnpVdqWYSSTUo8XxJP5DOu9HVLXtjN3rBOdy8l1qmlaGwWk8tQ1TZRxkDAISR6iO58mJpNU4rPVoVEkEIUauYTCfLjpnzic9j29qV2H7TxZHfJjSqDg/CnXpq5l/wBaPq7IrikvQMZfvsaYQfou4Pw9n8IgDVFw6Ugc1bBDEyiOK+Hlo+eBn6blwFyQVaz0xnxBBGwfIeeq4/f9ZXB+5NnH766bj//vuxatWqSR3XngRZLBaLxTLNme3VYQceeCA++9nP4te//jWOOeYYFIvF1OO7NSfIYplOtHxoNQCg8q21II4HGQSQQoC5LjiCXR4vWxE2Wp8rTXJ5VvHR95N9yLgfwmtvAfUcBKgptUh37ka6qm1vQKs6OsWZ13yEtTq8tiKcQg7CD022E/PcdA5QIsOJFVoQlErKP5Sp0ON+AK+jDcGI6k01ag8yi4EyCrdYgLMgj7BSQ/8tl6q+b0L1FdPHVicyZ9WhXVHctq1dCcpoSpnJqjTJ750UAtW+AXW/f8hUGeYWLYI/0IcWoGmiNAB0nnOtUZn2Jm+QiG4THWOmcuedd6KzsxPr16/H+vXrU48RQuxJkMVisVgslr2TDRs2TMm4k5ITtDcx03KC9DX8vSlfZiJU778R3htORPiXJ+FvfTWVkAukO8tn83uAdD5NthJMKxTam9JsJhyUa3Gl2I56kUV9yCijcFrycIsFiCBEUK6OOsOdqfTduAq5zjY4LVFacKVqEowB5efRnh9N8n1w29vBqxWIyEPlzpsPUS6BUAZSiCRxwVHb1gMeBEY52lsUgD3B9psuNpk8fTeuipU5Ss375bUXIblAUK4CiN+zXGcbwlodwg/H9R5o1SiZzaVVo6E7r4DXtRj1rVsQlKsIaz4Wr741VXWWVJh6rj8f3A/V9zbyCiWzhibK7swJeuHVrWib4HMMl0o4eL8lM+bvWzN838eGDRtwwAEHwHEmruNYzdhisVgslmmOrg6b6G2mUqlUcPbZZ6OlpQWHH344Nm7cCAA4//zzxx2UCNjLYTMePdPam659TxRR6IC74nCIyjB4zQf3x+4LGs1LkvSpiCBM+YCSPceyviGt+iRntRrmOqCeY7KCpGjeOXumo1OeeV1VglHPgSNyEEEI6jqmV1Ty2OhO8257CyC4WZcVWyEDH8TxQApF0JY2AADv2wIWVaCNxwdmSZNUS7KfyZ7rzwd1HdMPTLP9povh5HPgfjAhtUX3O9Ofh6SyU+sfUknhxTxY3jNK72iqq952+00Xg1CKsFIb935Z9iyrV6/GH/7wBzz88MM49dRTzfKTTz4ZV199NS6//PJxjWtPgiwWi8VimebM9uqw+++/H9/61rdw7LHHpkKZDz/8cLz00kvjHteeBO0lWBVIUTh9FfgrT4G3LoC3/+Hgw4PgfmAqlATnsTqTyQsarb9YVvVphuTCdOA220W5QimFgwu0zOtQ60f7JbkwPou9EUIpvI42gEbvgV8z/h/qOpBMeXiSipkT5SZpRYi6jtomjFQeyiDLJQRD/eY5dD6Mfo+tOjo1JNWVZBUZ8xxIPjlqZtdlNzfNEeq67Gb03nChUhPzOUgusP2mi3eaB6SVqdGyiWYCs706rK+vDwsXLmxYXi6XJ9SpwnqCLBaLxWKxTGve9KY34Yc//KG5r098/uM//gPHHXfcuMe1SpDFYrFYLNMcCWCiV7Nm7sUw4Nprr8Xf/M3f4Nlnn0UYhvjyl7+MZ599Fr/5zW/wyCOPjHtcexJk2esIX/kTyBF/BXQshLt4OYLSs+YxfVmMj9Jgk7pOKrAwFYToNxqiNTwIU48zzzHhgKImTHNJFhmBgSg4MbosN5llu9ONeef9Oyr33QASHXvmuhBVHWqolukSecIoqOOmthdhEJvSwwCs2AZeHm76foggBK/5KnIg8Viy5NsyOejjueWacwGoS71dlzW/FLZ1zScalunwxdGatY5WpLCjS5w7apWxbe3KGR0lIqSEmOBZ0ES335O87W1vw1NPPYXPf/7zOPLII/GTn/wEb3zjG/Hoo4/iyCOPHPe49iTIYrFYLJZpjsTElZyZewqkOOCAA3DHHXdM6pg2LDHDTAtLtDSn/vDdoIceDwCQLz8JmlehenyoH/UNLyAoV1OBh81MydRzGkrb9XpJU7U2RQs/BPUcU65LqGpLAAD+cNzOoWXxPASlCgij4H6Aeef9+5Qcg+nC4O2fRm7hAsBRJeyEUki/Bsk5IIQqgQ+DVGCiPt5JVUgKDlpsR9C/HUG5isKCuaZNhtvZCV4egV8qJ9YXTdWfrGG6/5ZL9/r3YE+z5Zpz0/EQea8hUiKr0vTecCEA9T2crire7gxLfOrlzWhrm2BY4nAJR++/74z9+8Y5x3e/+10899xzAIDDDjsM73//+ycUmmiVIIvFYrFYpjmTEXY4k8MS//SnP+F973sfuru7cfDBBwMArrvuOixYsADf//73ccQRR4xrXFsdtouU7roS22+6eE/vhmUniMFe4JU/QDIXTtd+wIKlwIKlYAe9CS1//SHk53XAyeeaNkUljMaNO4UA81ww1zVl2DtqpKqj+b22olKSGAUP4vA+HejH8h5Y3jMepb2V4W9crY4XZYDggOCQYRCrQBlEEBqFTh1/DilUc1XieAgHXzOeH0D5tIQfAtE2Xntxp8dUq0B9N67CwLrLTfsOy+TRzAOkG99S11HeuOj7srPtd1czXK08TVukMkZP5DaTr4f9v//v/4vDDz8cmzdvxpNPPoknn3wSmzZtwlFHHYVzzjln3ONaJchisVgsFsu05qmnnsLvfvc7zJkzxyybM2cOPve5z+HNb37zuMe1StAu0n7WZ02Am2UaQxnCno1g2zeAt86HyHdA5DsgqQNRnIfCW96N/L5LjRo02o25rgo19EZvmppcrmet2vOg0a0hKGMIShVQz4EIZs/nSFbL8S3w4+Whb5Qeo/5EXpEGxU1whOUa3PYWU3mnFTVerQAAeM2H4ByUMRBK0XfjqtH3iQu47S1wFy6Z5Fc7u9Eqzra1K7F1zSew5ZpzG95LHSwqRgkIXXLFOvW9Eqrir/eGC3f4Xk6UZJPY6YqAnJTbTOWggw5CT09Pw/Le3l687nWvG/e40/tdt1gsFovFMuFLYeaS2Axl7dq1uOCCC/Df//3f2Lx5MzZv3oz//u//xic/+Ulcd911KJVK5rYr2Mth48BG8U9/Cu+7ANXv3YTglefgtC+EaI0qIRwPECF420LQjnnwhgdBGEVQrgJI+w+kEOCBqloSjKUUQCefQ8jrZhuTD5T3wDxV0eS1F5WqkRiTeo7xBQGY9rPPiaIrvnT1FwDQSPkx64yisOnH9PETYWAUIF7zEfKaascBIKyo989tawGp1BBW66lqpCzb1q4EZRRBqQLWVsPg7Z9G5znXTuzFWrDlmnNNhST3Q9VsOHr/mjUdBlTz02y2z9Y1n0isHxo/0VThFgvgfmBbrUxj3vve9wIA/v7v/96kRevi9r/927819wkh4Jw3H6QJ9iTIYrFYLJZpzmyvDvv5z38+JePak6BphJ2FTC6F910AAKg9cLtp3kkKRbBlh0J6LSArXo/cvgcjXx/ByK9/bJqYimgWwVzXKEE65wdQ6kQImAolyQV0mg31nFTWDfcDOIWcqUBqyBfy48qxvY3yN9eoY1oTRsEBYNSBrDKQVG70MXLa2yFqFfiDI2B5D257u8oVoiGCctXkAmkFLpn/lG3kqat/dFVSfl4HvHnzAMGtCjQBtAcoqeYJrfQE0fstIk+c1/gnR3CB3hsuNO+/VoX0eAKAm/eQm9M2Za+h85xr0X/LpU33bzT6b7kUw9X6lO1Tlsm4nDWTL4f91V/91ZSMa0+CLBaLxWKxTHtqtRr++Mc/ore3FyJzuft973vfuMa0J0HTiKQKNLDucsz5xOf34N7sPeRPjTMkaj+5E/KlP4Ae+U6QoArJHMiWTrQc9VaEPRsRDvQhKEWVRkEAQlXuD6/5ZqYquAB1Y49DUvmRXEAgNMucQq7BzyAir8RoPpi9BeJ4IKwGp5hHWK41+J925AMyP/s1hOWamaGTXB4A4FAGlvdQ7Rsw63I/GDUlGki/X157UalKlEFWy03Xt4wNo9hEn2kp4j5wuirS5G4lKyYTnqAkPdefn1JMaTROtqfcZDPvvH9H/y2Xjmnd/lsuBWUMItx9FZ6TUd01k6vDHnjgAXz4wx/G9u3bGx7bVR9Qkr3blWmxWCwWy17AbK8OO//88/HBD34Q27ZtgxAidRvvCRAwQ06CXnnlFZx99tlYsWIFCoUCDjjgAFx11VXwfT+13h//+Ee8/e1vRz6fx9KlS3H99dfvoT2eOFYFmhry7z5b9a0iUcWKFAChEH4NJF8E65jXsI0UaU8LTcxqG2bBiZlusgqMFoqghSKIEy8DsFf3rCIFpbbobu/JYyaFSOUxaUxOUKQghBWlJDkteXM8iZcH7ZgH4uXNesCOq8yAOAmceS68BQtB2zpBHNfkFFnGh87zkVz9QQprfuq70Oz9zfqHpBAQXID7IbivvkvMc9Qt78Ep5HbL+zTvvH/H4O2fHtO6gvPdWt2pu8hP9DZT6enpwUUXXYSurq5JHXdGXA57/vnnIYTAV7/6Vbzuda/DM888g49//OMol8u44YYbAKgmc+9+97tx8skn47bbbsPTTz+Nj33sY+js7JxQpLbFYrFYLJY9y9/93d/h4YcfxgEHHDCp486Ik6BTTz0Vp556qrm///7744UXXsC6devMSdDdd98N3/fxta99DZ7n4fDDD8dTTz2FL37xi/YkyJIif+o5CLc8B5B4Fsc65kFQBj7Qa2Z3hNNUHytCqfGrJFUerQLxIICTz5n+SIQyCBqpILp/mOBGBdnbPUGF965E7X/XgYU+RBBC1dQhlZ2kjwNhNO0FanKciZdXyk0YAGEZECLVJ4yLxoqwJPp4cz8AcVyQfBFiZBC85o+6jWXHbLnmXPMz9RwQ3ljhl3yPm6E9P+Dp74X+jDj5HFjegwhClO66Erzm73GlXPuH5v1/1wKfunW3PCcX6jbRMWYqt9xyCz74wQ/il7/8JY488ki4btojdsEFF4xr3BlxEtSMoaEhzJ0719x/9NFH8Y53vAOeF//SPOWUU3DddddhYGAg1W8kSb1eR70elznuatqkxWKxWCxTzWRczprJl8O++c1v4ic/+Qny+TwefvhhE5gIKGP0rDoJevHFF3HzzTcbFQgAuru7sWLFitR6+tphd3f3qCdBa9euxTXXXDN1O2uZloiNz4IccIy6I6PcntAHYcxUcoW1esq/QD0HzHVNbyrjB4pMeSbZOOqLxAoenNZWU9EEALJeg9taBK/X0XH2mql/oXuY/Hs+gdoDt4Nv22yOj9taNF3ltc9D+GHK35OEenkQ14XkHHyoP1WFpI/9zrxVvTdcmFYiHA+yVgYf6kf7WZ8ddbvKfTeg5YxLMHTnFbPi/RqNvhtXNXh9gMbE82yqs0lS95yGbKhsxRhzHdVTzw9TqmBQriqPUKQGsbxnMqjaPnz1hF5X6a4rwfIegmFVEdp5zrVjzoyad96/20nzbuTf/u3fcM011+Dyyy8HbfJ7YrzsUWP05ZdfDkLIDm/PP/98apstW7bg1FNPxQc/+EF8/OMfn/A+rF69GkNDQ+a2adOmCY9psVgsFstkIqQEn+BtJitBvu/jQx/60KSeAAF7+CTo4osvxnPPPbfD2/7772/W37p1K971rnfh+OOPx+23354aa9GiRQ0dZvX9RYsWjboPuVwO7e3tqZtlFhAGgJQQ+TZItwCSawFxPMggUP6VRKox9RKZJ4yq7J/EjJYyBsoYmOem1gMA4romrRpQapM/NDzhGexMIn/qOXBaW03Hdw3J5VWll+OC5b1UtRj1lCpAHRcy9CGqZYhaRXWJD0LVO6xaN8d+YN3lO92PZCWa9GtKCdqJH4jkVCr4bFaBeq4/36hAAFLvUfJ+8juhK7tolM5NI5VH++WcfA7MdZWHLvp+afR6yXEF50Zh1SrRZPQSaz/rs5BCwJvTCcIohu68YsJjThWqbcZEq8P29KsYPx/5yEfwrW99a9LH3aOXwxYsWIAFCxaMad0tW7bgXe96F4455hjcddddDWeDxx13HP7t3/4NQRAYw9RPf/pTHHzwwaNeCrNYLBaLxTL94Zzj+uuvx49//GMcddRRDcboL37xi+Mad0bkBG3ZsgXvfOc7sWzZMtxwww3o6+tDd3c3uru7zTr/9E//BM/zcPbZZ+NPf/oTvvWtb+HLX/4yLrrooj2455bpigx80OoQZK4NIt8O6eQgyiXIMFYGKGOpxFuzPDNLNcqFqzJNtIIBqIomAJDVMmS13JATNFtI+qIAlSEkIz9PNv8lmTQMylSVXRBC+HF1mdpONCgQo0E9B26xALdYMH3ceHl4p9sV3rty5y9uFqCru7z2FrjFvFF5WCI/K6sIme9OlJjOXBfMUzet9CWV06xfyPysc6CifSCUKl+YEBj+xtUTfm2tZ14JRJ/B6az46eqwid5mKk8//TTe8IY3gFKKZ555Br///e/N7amnnhr3uDPCGP3Tn/4UL774Il588UXsu+++qcdkdI2zo6MDP/nJT7By5Uocc8wxmD9/Pq688kpbHm+xWCyWGc9srw6b1V3kP/rRj+KjH/3oTtc76qij8Mtf/nLqd8gyo6n95E7QYhtk/xaQziVmuRgZRFippdY1OTTR/7qihbqOyb3RyhCgKplAKSCEqmgKA0BwhJWqGXO2dywnuTwQ+sqXBYBEninarDWU4BBhoI5xMa+8PE2SoXemBrGMdE6oeh+n88x/upBUQoNyDV5bi/LpREngo22TTFnXfrnsmAKh6sHVZIxmnh/9XRNRqjT1HAx/4+oJe+xaPrR6Qttbdh8vvvgiXnrpJbzjHe9AoVCAlDJVLr+rzIjLYRaLxWKxzGYmWhmmbzOV/v5+nHTSSTjooIPwnve8B9u2bQMAnH322bj44ovHPe6MUIIslsmEOC6cxfsjnLsMtDIA6eTANz4HUJZSeJLeBiDyoCT8C25BVRIS1zXeH1AG6deMv6j4j6rapLCbX+O0I/L2aGQQNO0FRShT60bKjQwCsGJe5frUq2BzFkIK5QXclb5NgnMQHuU4IQQf6p+U6qK9mdJdVwKA8bklcfI5IJ8DoBK4s9CEckpdJ/Xd0ei8J8IoKAARbaezn5Jp4KbvW6EFxHVB81wpiZH3rvKttWrMMFAen70QAUy4umsGW4KwatUquK6LjRs34tBDDzXLP/ShD+Giiy7CF77whXGNa38LWCwWi8UyzeFCgk/wLGii2+9JfvKTn+DHP/5xgy/4wAMPxKuvvjruce1JkGVW8v+3d+5hUlR33v/WqUv39DADKDMMKCAYlogRUHidd7Ka1wsLuJhXVx83m7gqWRdXQ5LNarywJt4SxYiPrvExMW7eoDE+0eTxSeIaUVA0Gp14IaCCSABFCMyAXIa5dXddznn/qDrVp6q7Z4a5dc/M7/M8/UxX1alTv1PV3XPqW78LT1ZB6Ba4VQkEEVsi6/vtxLMWh4pQ7C9kO8PKKUEAeFsLAIQqEBEQ3LX7Sg8ikXghTPfPq/QTqkyGKgIbfSxgWGCGCc58ta6nPj3x6uB0bbpHqj8so4cqDYC8SC7dyvlbqdnVVdVUrbsnkcpc2GewHNf31L78KC4Tmmkh/HfOee7zQv/Rhi0dHR1IpVJ56w8dOoREItHrfskniCAIgiDKHNHnRIkijKYeipx55pn4+c9/Hi5rmgbOOe655x6cffbZve6X5s3EyIPpvh+QkYTV/im4VHR4LiOupJDfSZgDKMgmrBmmryZxD8L2o8tIaYiiGaYfEQYodcN4RHXTAhVIS1TkqswnK6ExHZquh8qblkhCU4oe95SRHpV3tITXQGfQ42ooY3ntAEDoUd+fMA+QYUGN3/Hr9OV/t2TEVzE7wHQ/v5Ss16frgGmFSpBUc4cjnvBffe1jqHLPPffg3HPPxTvvvAPbtnHDDTdg8+bNOHToEF5//fVe90tKEEEQBEEQZU11dTW2bNmCM844AxdccAE6Ojpw0UUXYcOGDXnZo48GUoKIEQmvGIOMy2EJDv1IM+wjB0MflUJ3u3lElA0GYWeUCDG6t4iTXHQVMs/9OFwWAPTKKohsBoJ7vtoT1BKL1lpzoBkATNOv7RYobTJfEzFwSDWz/Yk7wmrveX5xiClBUk2V6o1yLQGEmZnDfZX+uO0W/M5Fvo/xiEJdh2aYuePqenz3YcNIT5Y4depUNDU14eabb46sP3jwII4//nh4Xn60aU+gSRBBEARBlDkjPTqsmD9Te3s7kslkwW09gSZBxIjCfu1JaLoObiQwpmkzROcReIc/De8wmWlE717jd7KA77ei6znlx7ACPwgd3HVC3yIiSvLvrwEAZNf5zo083RHJHyRVIF/9ydVeYxWVfmQY9+Du/Tjsr/qrdwzyCEYmemWV74fj+rmdtMD/LUReK10P68H5EVsxVSf2vdCViB7BPejJIEozpibFfcciGFboNwYAorO1V2MkyhdZ/1PTNNxyyy2RCDHP8/Dmm29izpw5ve6fJkEEQRAEUeaM1MdhGzZsAOArQe+//z4sK1eE2rIszJ49G9/+9rd73T9NgoiRBWNgqWog2wbv078CgJ/dOd3h+6VUVkOkO8K2kjxfA1Uhcm0I+HesVHW8exLnXB7UbwuixIL6aoJzv+YaYzklyDShJVNAohKa4H7dMGf4ZgUuR4Tn+Z9/XQccJ8jjpHw3zNw/JY3pEI4dqqVqH+p+Go9+n8LIMaZDi/sNFVJmZT9WEqyyOvTn48NYhR2p0WGycOpXv/pVPPDAA6iuru7X/mkSRBAEQRBEWbNq1aoB6ZcmQQRBEARR5ozUx2EDDU2CiBGFcPxij6zzMLyOVl/Kl07RgfOtkFK7si0nw+sFSwAA5JR5NGiGCXAGwXVogP9XPgIzzOj51nVoTho83QFhZ5C65IbSGT4C0XQ9LC2T92hKfXQVLPuJLXPXz9+vQPhysK98VCa/byK/HqtyDBlS7x+DVVT6j0vt3OOx4QrnAryP0V193X84QpMggiAIgihzeD/4BNEcKB+aBBEjClZRCVZ9DJA+Ao/lQnrZ2FqwqjHgRw6G5TByO8m72aCwZ+C8KZULwbmfxK9QOD1RkMQ5lyPz/CP+ObSS0OCXIRGeB83MKUEsWQkwHbyjDby9hRzPS0DFhf/hJ7pkOsBjoeqx0HUBhGopgvc+Zs75HQjU1KhKpBkmhO0VdqoG8hQmlkyF22QSzbxkigTRDZTaliAIgiDKnL4WT+0Pn6Ji7Ny5E1deeSWmTp2KiooKnHjiibj11lth23ak3XvvvYczzzwTyWQSkyZNwj333DMg9hwNpAQRIw7e8inE8TMBd3Oo4LCqMYDr+Hex6reCswL+DQwwzNzdJ0AKRS+Qvj+aafmlR7L++RRpOzzX3HUgDtsQmY4w2SJRAgwr399Gqi6K+iJD3RPzv9ptl5k1/8/fJ/CxYxWVEI7tf69U1Sj4Pvrfu8A3KUiiKewMvE/3+GkW4JdnGa54QsDr4ySmr/sX48MPPwTnHD/5yU/wmc98Bps2bcLSpUvR0dGBe++9FwDQ2tqKBQsWYP78+Xj44Yfx/vvv41/+5V8wZswYXHVV6a4bTYIIgiAIYgTR2hoN4kgkEkgoGbyPlkWLFmHRokXh8rRp07B161b8+Mc/DidBTzzxBGzbxs9+9jNYloWTTz4ZGzduxH333VfSSRA9DiNGFoz5qf89G1pFZag4iGwGIpsO2gR+P4bp33kqy/F14Ys4epjuXwPD9JMkVlQGy0FUHvfAO1rBO9tIBSoh2XU/h2Yl/cSV8qUrn33Dyr2Y3iMVCEDk++SrgtECqRpjYeLMUDWU69SyNfAVoOGsAgG56LC+vgBg0qRJGD16dPhasWJFv9t75MgRHHPMMeFyY2MjvvCFL0QyPi9cuBBbt27F4cOH+/34PYWUIIIgCIIoczz0Q8bo4O/u3bsjmZf7ogIVYvv27XjwwQdDFQgAmpubMXXq1Ei78ePHh9vGjh3brzb0FFKCiJGF9D1ghl8IUt7NujkHPnm3qao/8QKOmp67K00uuHKwRzEs0EzLL8qZzUB4XqDG5fxBBOdILrqK/K1KTZCrSVU9hechcdalkRe4h8Q5l/e428Q5l+erqFIViqlL6ktLVCjFi80eK099QRb9HS5UV1dHXsUmQTfddBM0Tevy9eGHH0b22bNnDxYtWoRLLrkES5cuHYzh9AlSggiCIAiizClFxujrrrsOS5Ys6bLNtGnTwvd79+7F2Wefjc9//vN45JFHIu3q6uqwb9++yDq5XFdXd1R29Sc0CSJGBO763+cWqsZB7zwMbiVz2Z/DyK8ihVLlXyXL7WDcgQ5nrDP/Cdl1Pz8q9YAYfBJnXQoAsF//FQDA+tt/LNyuF9dR5gMK8wvpHAJWXhHVEKYDhl9UVzMtoL3lqI/ZG7REEvbrvyo69sGgFNFhNTU1qKmp6VHbPXv24Oyzz8bcuXOxatUqsJh63tDQgJtvvhmO48A0/Rxra9euxYwZM0r2KAygx2EEQRAEQfSBPXv24KyzzsLkyZNx77334tNPP0VzczOam5vDNl/5yldgWRauvPJKbN68GU899RQeeOABXHvttSW0nJQgYgTgvrsmVHL0cTXwUmOhH9kLwM9SjGwammn52YqVTLUIMkKHcA+AWdK7weEGqUBDh4H43Ftn/lNk2W58OvDBU2uUMYBzgDGwqrHQzASgMYC7efsPFNbf/iPsxqfhvPlbmPUXDsox43Au4JVp7bC1a9di+/bt2L59O44//vjINhGoT6NHj8aaNWuwbNkyzJ07F+PGjcMtt9xS0vB4gCZBBEEQBFH2eP0wCerr/sVYsmRJt75DADBr1iy89tprA2JDb6FJEDHs0RIVYQ4gYSSguVnwtpZcxmfpDyRVIFnNnOmR2kjCBayGiwfPcIIYYcjvnBb4/oTrdb/On2aYEOm2XM2/wbQtUKjcDc9DyGjSGWcN2vHLeRI0lCGfIIIgCIIgRiRDbhKUzWYxZ84caJqGjRs3RraVY3E2ovRojPnV4ysqIcwgvwj3cndz8YiwIFux/56Hr7zIMYIg+pWIv43y3ePpDgg7A97WAp7ugDF7AYzZCwbVNlZRCa2yGqyyCvroY2H+r/87qMf3eE4N6v1rUE0eEgy5SdANN9yAiRMn5q2XxdmmTJmC9evXY+XKlbjtttvychUQBEEQxFCj7xOgvj9OG44MKZ+g1atXY82aNXj66aexevXqyLZyLc5GlB7BeSTjs58t2oRmJSHsTFj5OiSoXi3cXDVz8gUiiMEhrrC4G54P17nrfz/oCkyIYQGJSj+nUbq1u9bEEGHIKEH79u3D0qVL8fjjjyOVSuVt721xtmw2i9bW1siLIAiCIMoJUoIGhiGhBAkhsGTJElx99dWYN28edu7cmdemt8XZVqxYgdtvv73fbSbKB81MQBh+bRxhJKA5aWhjxvtZabMdEOkO8M5g8sv00PenVPlACILIYZy6CO67a6CZFrREEt6mlyAcB8apiwbl+PyjdwDuAtyD5qQhXAf6zLMG5dgRO8o4T9BQpqRKUE+Lsz344INoa2vD8uXL+92G5cuX48iRI+Fr9+7d/X4MgiAIgiDKj5IqQT0tzrZu3To0NjbmVbqdN28eLr30Ujz22GO9Ls6WSCSKVtAlhgmCQxj+Y1LBDEC3oHHX31ZRDWZVQNgZUn4IokzRdB1aIuX78wkOzc0O+DH5jrcAAMKqAJAA7EzJVCAgqB3W1zxBfaw9Nhwp6SSop8XZfvjDH+L73/9+uLx3714sXLgQTz31FOrr6wGUb3E2giAIgugrlCxxYBgSPkGTJ0+OLI8aNQoAcOKJJ4Z1Sr7yla/g9ttvx5VXXokbb7wRmzZtwgMPPID7779/0O0lygyNQei+EqQJDs2zA0WIQct2gLcdAgA4bz8DID86hSCI0qJ/7lzwv7wOGAnAdXPZ3gcIvv1PEIafU4ybKWieDaNEChAxsAyJSVBPKNfibARBEATRV0gJGhiG5CTohBNOCCvTqpRjcTai9Ahm+FWnJcyAZnf6NcTagxpisl4RZYUmiPKFe4DnDPhhvKrx4XuWaYXmpAf8mN3hcgG9j5MYlyZBeQzJSRBBEARBjCRICRoYaBJEDGv4R+9AJKsgzCACkBmRyBItUQHNtADuQf/cuSWykiCI7mB/87cD1rf3ybsQZhLcqoTmOWB2OzTH/51g0+YN2HGJ0kOTIIIgCIIocyhZ4sBAkyBiWMOtCj9btPQJkpXjgyrxmpmAyHaSCkQQIxih+36DTPr+cF52CpAnRJ/z/FCeoHyGTO0wgiAIgiCI/oSUIGLY4u1+H2AGeLIamvArw2tOBgje+40ciggjAADOp7sAAGbN5G5aEsMNzXMB1/F/G5gOfcrsUpuUBzlGDww0CSIIgiCIMocmQQMDPQ4jhjWaawO66d/hCQ5hpSCMBESi0vcTYjo0wyy1mUQZYNZMJhVohKJPmQ2Nu9AEL0sViBg4SAkiCIIgiDKHlKCBgSZBxLBFGEkI3YSjGTCNIE+QENBEBzQnA6ExaMyI+ggRRD9hHzkAeDasYyaW2hSiB5RbNFgcT3B4vG+/VR791uVBj8MIgiAIghiRkBJEEARBEGUOJUscGGgSRAxfBIdgBgQQFkDUnAw07gJB0jChMehlLoMTQxOhm9A8u9RmEMMEjwsw8gnqd2gSRBAEQRBljssBrc9V5PvJmGEETYKIYY3GXZgaAOZ/1IWZ9FUgw/QTpFEaeWKASIwaDWB0qc0gCKILaBJEEARBEGUOPQ4bGGgSRAxbjIkz4Oz72PfLiIeGaqxHSdHcpm25/iZM728TCYIgegRNggYGCpEnCIIgCGJEQkoQMbwR3I8M04L5vuf6q40knOYdMOtO7HJ3Un+I/qIznUGqIllqM4ghCilBAwNNggiCIAiizKE8QQMDPQ4jhjVm3Yl+EdWggCp0A0I3AaYDTIez7+NSm0iMEEgFIojyg5QggiAIgihzPC76nCeIHoflQ5MgYvjjOdCCt0I3AN0ANysA7kHzbNiH9kJzbZi1J5TEvM50BrbHoTMNVamKkthAEER5I4SA6OMkRlBetDzocRhBEARBECMSUoKIYU88Asw+8FfAYgA8P5M0dwGNwdm/syRqUKoiCa8zHapVBEEQcTgXfXZsJsfofGgSRBAEQRBljhCiz4+z6HFYPjQJIkYc1rjjS21CHuQLRBBEVwjeDz5BpATlQT5BBEEQBEGMSEgJIgiCIIgyh3yCBgaaBBEEQRBEmSPzvfa1DyIKPQ4jCIIgCGJEMqQmQb///e9RX1+PiooKjB07FhdeeGFk+65du7B48WKkUinU1tbi+uuvh+u6pTGWIAiCIPoJGR3W1xcRZcg8Dnv66aexdOlS3HXXXTjnnHPgui42bdoUbvc8D4sXL0ZdXR3eeOMNNDU14fLLL4dpmrjrrrtKaDlBEARB9A3yCRoYhsQkyHVd/Pu//ztWrlyJK6+8Mlw/c+bM8P2aNWvwwQcf4MUXX8T48eMxZ84cfO9738ONN96I2267DZZlFew7m80im82Gy62trQM3EIIgCIIgyoYh8Tjsz3/+M/bs2QPGGE499VRMmDAB5513XkQJamxsxCmnnILx48eH6xYuXIjW1lZs3ry5aN8rVqzA6NGjw9ekSZMGdCzE0OdgWycOtnX2qG3zkY4BtoYgiJGAzBPU1xcRZUhMgj766CMAwG233YbvfOc7ePbZZzF27FicddZZOHToEACgubk5MgECEC43NzcX7Xv58uU4cuRI+Nq9e/cAjYIgCIIgekl/TIBoEpRHSSdBN910EzRN6/L14YcfgnM/ru/mm2/GxRdfjLlz52LVqlXQNA2//vWv+2RDIpFAdXV15EUQ/UXd6MpSm0AQBEEUoaQ+Qddddx2WLFnSZZtp06ahqakJQNQHKJFIYNq0adi1axcAoK6uDm+99VZk33379oXbCIIgCGKowoWA1sfoLk7RYXmUdBJUU1ODmpqabtvNnTsXiUQCW7duxRlnnAEAcBwHO3fuxJQpUwAADQ0NuPPOO7F//37U1tYCANauXYvq6urI5IkgjoaDbZ3QAAgAx1alAOUvQRDEYCFEP9QOo0lQHkMiOqy6uhpXX301br31VkyaNAlTpkzBypUrAQCXXHIJAGDBggWYOXMmLrvsMtxzzz1obm7Gd77zHSxbtgyJRKKU5hMEQRBEn6ACqgPDkJgEAcDKlSthGAYuu+wypNNp1NfXY926dRg7diwAQNd1PPvss7jmmmvQ0NCAyspKXHHFFbjjjjtKbDkxVGlp7wxVn48OtKE12waTaeDwnemOP2ZUSe0jCIIg+saQmQSZpol7770X9957b9E2U6ZMwXPPPTeIVhEEQRDEwMM5oPU5WWI/GTOMGDKTIIIYaJpaOpBxOdKu/0PjcoHdbUdgMg26pkFnpP4Q5c3mJj/Z68kTKMp1uNEfZS/IJyifIZEniCAIgiAIor8hJYggAtptjrTL0el4AICkwaBrGgBgem1VKU0jBpE3dh4M33/+hGNLaEn3bG5qjag+bbYLLgTe2HkQHvdDolmgYiZ0PbLv3Eljiva7cU8LHM9XDf7X5LEDYjtxdAjuv/rax0CTzWZRX1+Pd999Fxs2bMCcOXPCbe+99x6WLVuGt99+GzU1NfjGN76BG264YeCN6gJSggiCIAiizJEFVPv6GmhuuOEGTJw4MW99a2srFixYgClTpmD9+vVYuXIlbrvtNjzyyCMDblNXkBJEjGj+eqgdOtPwaaeLdtuFyXL3BRmXI2kwnDJhdAktJAaD1z46iE7HQ9bzlUCpguxrb4KpM3Ah8H9nDk7S1fW7W0KV5rWPDkJngMcBnQEmYzB1DZ2OB4/nbFdxFO9XLgCmCXQ6ArsyGZjMVzaZpmHboQ6MTZqoSuhI6DrmThqDP31yCEcy/ndB0rnDg6lrYJqG/z3lmMixNu5pgR706QX/YKUCZeoa5hznj+PFbZ/C8TiC0wrH40iZemCjv9LU/e/e/Ond547rC9v2twEY2epuvFB4IpHol1Qyq1evxpo1a/D0009j9erVkW1PPPEEbNvGz372M1iWhZNPPhkbN27Efffdh6uuuqrPx+4tpAQRBEEQRJnTnwVUJ02aFCkcvmLFij7bt2/fPixduhSPP/44Uqn8hLKNjY34whe+AMuywnULFy7E1q1bcfjw4T4fv7eQEkSMSD460AaHCwjh37m22y6YpoX+QACQMnWwwCeIGF5IhcXxBDwh0OlwtGYcdDoeWrMu0rb/ORhflUDK1GHoDKs/3AemaaGfzcIZtVj94T6c99nx3Ryt57y96zAczkO/JC4EHFeACyCT5aFqciTjRhQfFccTcDiHrmlImTocj6PD8dCecWG7/j4eF9CZhprqBKosAwmDYcfhTphMg8MF0sr3IGF4SJm+f9wfdhyIfCe4EOF3xuECjsfhcIGEzpAy9fCcNbdn0el4sAP5ynY5dKaF6pHONFiBD97Ow50wdRYex9S18Lt4/kl9P9dSAdq6vxWuB2gaMLOu/KPp+jNZ4u7duyN1MvuqAgkhsGTJElx99dWYN28edu7cmdemubkZU6dOjaxTi5zLnH+DDSlBBEEQBDGCiBcNLzYJ6mmR8wcffBBtbW1Yvnz5II+k75ASRBAEQRBlTikKqPa0yPm6devQ2NiYN5maN28eLr30Ujz22GOoq6sLi5pLyqHIOU2CiLJl16F2TO6n5IQfHfCdITOugO3x0GFz2/42ZLiHjJt7tCCdYpmmwaPkYmXFnz45BMD/MZeO6xI1nP3tXYdxKO2g3XZxOO2gw/HCR1y2yyOPYTwu0NLp4EjaQVvGCdvJ7YD/+KgqafiPbBiDzjT89v0mVJg6Xt1xMGxbYemwDIZRCSPyONXUNSR0hn/43IS8Ma3+cB8OdDo4kvWPnba90D5pa2dgkycEPC6Qtl143H+fdXOPmGyXwwuWK5JGaD8ApG0vfBwio4QsS889imIaUpYOywjWBY7KOtMi/Ug87n+X5PnyuH98lwsYsfYuF6F9AGDbHuxMzvla0zSYCR1WcP5Slo5jRvn/UKUdCYNhx6GOcBnIPbLWg8MZOoOu+d/dpMG6fFQ5o7b8H4GplKJ2WE+LnP/whz/E97///XB57969WLhwIZ566inU19cD8Iuc33zzzXAcB6ZpAvCLnM+YMaNkj8IAmgQRBEEQRNlTzlXkJ0+eHFkeNcq/eT3xxBNx/PHHAwC+8pWv4Pbbb8eVV16JG2+8EZs2bcIDDzyA+++/f0Bs6ik0CSLKlr6qQNs/bYMnBHRNg/zuC+GHvm/c0wKTMTjcD4lubsvC4QLVCQNVCf9r0el4WDittq/DGPL8YccBOMGPr8k0/J8TxxVt+8bOg3kJBmV4tMQTfj9JI+f8eua04kkJ1eM7HgfTNJi6Bi6AQ2k3tOvFbZ/C4wJJg8HhAu22iwOdDva2pNGWcdGe9dumbRdtigqhMw1p20PW9uA6HjxXwFUcgyVHDAama9ANBl1nqEqZSBgMo5L+Xe3oChOjkgYqLB2JQKFyOAfnAg73x7lu+6cA/ND1jMuRdT00tWfRnnHRnnHRaXs4knZgu1Jdiao94bLt+XlfPB6qOq7Dw3+SGtNgZ1xoihOzEPl5YmQbjQGMaTBMHVqg/Ej1pyslyAsUHsBXGTgX4T9r9ViC+8eXKpXncbi2Bxb0qzENTpYhzTT/+DrDgdYsAMAwGKzgtb8tG9pj6UxR5/x+LIOhIlC3PC6wo/FjVFkGRlk6EobeL47VRO8YPXo01qxZg2XLlmHu3LkYN24cbrnllpKGxwM0CSIIgiCIsic+sextH4PBCSecUFB1mjVrFl577bVBsaGn0CSIGPZkXQGO3Bey0tLRlnVRlfDvHv2QYj+8t932wrtKk2l4Yet+LJwxfNWgF7buBxcCngB0zVdppPOkx0VBR8rfbGqCzvzkeTL5ngwb50Jg9Ye+s6MaSi23SWRotTzuC1v35yXdk+3Uvjzhqyvtth+KfTjtAABsL+fnM6bCBOcCHY6HQ+02mo5k0J5xQr+atO0hk3bCfyiC+8oEdzk8z1dTPI+H28Ix6BqYolS4jodkhQkrUH08bmBU0kBSZ37fDGH4eIrpcDyBrQc6Qnulj8yRTgdtQVi+7XpoU0LZXZfnqSuqvVx5ROK50ZB5pqg34VhFVJ0BAI35PjmMaWCByqUxLafSaFrYLr5vXF2SfiuqXapCpO5f6B86Y1p4np1AucvZBBwydV+xCtSfqsDvKadaRf2Y9KD4cVXSwHHHVOCx9btDPz+TsfDzdWzKKnuViAqoDgwUIk8QBEEQxIiElCBiWLJ1fys87vsAcYhISn+Hc3gcyDgcSZMhYTBUmHqQNC/nCzK2wgQw/O6cpO+MjLCSKo4TbA+VIJFb5lyEkTdcCGQdX6GIqw1SSZI+QKYS2aMS31eqSlJhktE+uf48ZF2OI1k3oqKoEV9Zl0cUIb+Nh5ZOB1nbC9Ud1+a+70+g+ggu4AbjiasrEl1nMJM6AF8Jki81cssyXBzpdJAMEixmgsipUQkDnAt0eh4OddgAEKg+HJ22h0MdWXQGy1nbg51185QW1a64UiUVFR5TgtRrGY8sUpUZqQJpik+Qv4xwezEKKUvSXvX40gYVTbn+ggv/uJpyboMxqvZJlUra2Kaoc3ltpe9QEG0GAHVjknljsF2Og502fvpWBp7wv/fHVJgDXr7jaClFdNhIgCZBBEEQBFHmcC58j/q+9kFEoEkQMSBsbmrFyROqsXFPS5h3xxO++iADhWS6j7i/CAAowUSRdvECjpKNe1rCfTodLyw6Cfi5RGSJAXl8GZkkFRGu+DbItp2OB5NpeOaD5kErntkfPLtlX+hzIxUXeQ0AhMUwAeBgp42044XKyv7WbFgyIW27GJU0MSphwHY52rMuWjpttGdceK6vpvCgXzdQQ8I7cqZF7lwNS4/4ljCmIVnhR1XJO/Z0GJ3F4Tr+NTBMBithQFNy2cjcOb6CE0RRBRFdqroTj5oKc+SIQFlRfG08V8lZw3TogXKl6wzMYKEKYSYMGKYOM6HjmOoEqpImKgKVYUwQHXY47WDHpx3wuEDdmCTSjocjwfk92O4rQUfSDlo67dA/yXNF6OfjBtcNALhXXAmSdgvunwPu+H3L5a6It9GYnres6XrR7er+wvPCdXK9/Cv3K9S/nqiAxvSIIqgqOiqyDQuui6oYRfdHZH/Vz2lXUzsqq6xIJBngq5R1oysAAGNSJg532vjHs6eDGBnQJIggCIIgyhx1ktmXPogoNAkaoazf3YJ2O4i+0LRQbVGzJftRQwLnfKYGf9hxAP/nxHEF88AUY3OT75cjozEcTyj+JgKO9CEQfv6XTFBUEUAYdSTzw0g/ERnN5BdYzB0r6/LQf8RkGkydwQx8DLKeF6pCckzZrH+8TsdDu+36kUpcIGnk7lhdjwNgeSpVufKr9/ZC1/xzkQnyx6RMfzy6BmSCk+DwnP/OoQ5fjei0PaQdD/tbM0oGYIGD7TayWTdyHCfrqzVSuQAQ+tTEFRcg6u8BILyD1418XxPp46Lmu9GNqC+I7FNVe/wcNFF1SG5Xc+n4672C/1A0poMZFlig+gC5yCTdyClCUm0wlHw1gK9oHWq3Ybs8zEMkl2XG5CNpX61pC/ICuY4HO+tFItPkuQQQKkBSuZJj8ew0hBcdB3ft3PvY2FhMiYnDYwpOMaSioyo9Xe0j2zOmR9SgUCHSdXiIKka5fRR/s+AQmscjKo/6mQCiCpHE4AKccWTTDlzHw6jAL2hMykRNVRIpS8fkY1NImX5+p3J9ZESToIGBosMIgiAIghiRkBI0DPnDjgNhpmSmaaGPCwDoYb6V3N1OXJXxyeWKkXlfVn+4D57w1RgVnWlhJMWfPjkELkRBtUjaBfhqRZvtwfVyCo5qk1Qq/EiunC3yeDL/B5DLueJxEdZv0oNoo4Th3925oQriH8fPDcTDOk0yisSPRJLnSoAxgX+cdVzPT/4g8cwHzfC4CJWybJB9WM3zkzCYH+ElVYXgr6yjdaTTQUva8f19Mg6yLsfhI5nQH8eVPjrB3be8M8/50iCSAVhVZ1T1pZj/iXqnH0fuG97ta9EooHgNLDWPjlRE4kqJpJgCFKoazAiPk1MWonmPhBBoy7jIuhzpQFFtzxqoMKOKy/62bJhZ2eM5hUj6P8lINdVHSapscpyey8E9Hvr/CO7By6Zz711fXeKuHfrnxPGAiI9P5Hwo+3A3369I8PyoMy3Ix6PFFB71nKrH8zVV5ZiKkiRfgnvhfhrTET9q3L/IzynEQr8fiWGxiHJoJQywINxQNxim1fqZ6I8fW+HXeUsauOZ/n1Dw3JQTgvN+UILyr+VIhyZBBEEQBFHmCM8rOsk9mj6IKDQJGiL8YceB8L2jPLNO6H79K5n1WOZokZl41bYyF4vMEFzI10XeWas5YlSFxmR+Xh1duYn3BEK1SOaFUXPRqMdX98m6PKytVMgeT4hQqVErfxdD+hOpVcDlnZ4eizaR1bhlhIj06/CECKOjOmy/zwde/wgAUGnq+NfTp3Rpw2DwzAfNOJJxwzw/QC6iTap/pq7laqMFqtenQS0mWTE9HuklOELlB0BOneB+hfBIBmDF3wfwFaG4GuNvzykycY7mrrZQlFEhhUdwD9y1wQtEKnXVn2FVgLs2mGFBcAtMj3sK+BmiDQAufN+lTjhIaxralIg4+XlSa22pSqYb+lB5cB2/fpZre3k+TeF5lX5CdtYfm2OHYxTci4xTbourOFK1KTT++PmT+0SXFaWIexH/orgSJI/FDKvLYwG+6qQqQap/kfC8POVKKkXh/tDBdET8zZjBYJg6DNOP8DNMhspKC1VJAxWWX9dt1vGjASD4HctlPS93hOgHnyBBk6A45BNEEARBEMSIhJSgEvDMB81hRt2LT5kYrn/6/b2hAuMqag7gP//mPFfjqjWI2JEKicye64b+B1EFR5JTVRQ/oVi9nTgyAkZnWhgRo7bTi9wBFzp2sXUeF6H98W3yuGr/0o8HQFhhWtqlKkftGTeiDBWypSuFSR3PpwBufeHDvDFLpB1fb5hatL+j5en396LT8f19HO6rVPJcqRW8ZaVx28sty+ssPw+dSnZlN/A7cW0eZiVW88+oaAxg0CI+GowXVhJz++h5PipxZUGqRQAiioaKqgzI5WIKT1zBKNQmbqP/YnADnyBN9/2DnA4/bwxT1utWRVhBnhkyf1E0p43qNwXkMiqr2ZT95WgmZTUCzPcRyilp3LFD5ceTCpBj551H7joFo8PkuVPPtxw/M61Q2Smm2KgKTaG2sl/Vryf0+dG7jg5T3/cov1GgEMljuLB8fykZzef4+al0wwPTNegGg5310JHwM2FXVVqYPt73CRoKfkAqFB02MNAkiCAIgiDKHJoEDQw0CSrCXS/+BXdfNK/f+338z38NfXU8IfDTtz7x85JoWsRnRhJGTinRNqqfj6qGSBUEyCkBUhkK+9MELJ2FPjGqopJ3bGU/Gxw612Ajl2nVUPaTikS8r7jK4nERqj2hiiFEXjsZ/WUZLKIC1VQnQtUrYp+SYygeTab6E7mxbd1R6NzEVanQ3iAy7YHXP0JVwvdD8oTAv8yb3KNjPfnuHjBNQ2vGr+LlCSDj5rI556KM8q+trJmV2+6F9agKXQM1F48K0zRwReBiADgHwAQYcudXY5qvBgVtdYP5ioYmoDEBz/VVFMGKKzyqGsCAUGk6mozHarRLntKkqEjF+gxVHsMJosTMiMriZ4+2Qh8X7urwDAu6x8BdHslHI7NkR+2MRrFFtil+Vf718CLKjxyL4B5cOx36V3HXBncd5Rgya7YdjrcQqp8OVxQlmP56hsJqUKEIsKifkRlpK48lVTUW8/uJty10vGLEs1irEYMSqWZqTItkCzcTOlKWjkNB1u77XtuB6kTuX6DDBdoDhV1mJgdUVTX/tzLb0V7UVmJoQJMggiAIgihzSAkaGGgSVISWtIN//837kXXqHXVcBZBUJY1wnXo3IfcPc9wEPiWWwcLIpDiqWuPxmKITs0WqM3F1JL6fqiB4mgD0WM6gAmMMlRWZOyhor0Zc9dQXSO6r2lVIlVH9jmz4Soel+5Feo1N+vaYjnU6enapvUVc+SJF1XWWEjv1m6JqvhqnHle8NpmFU0oDHBVrSTnisu1/eFrmrjO87Kmmg0jJg6n6Nr44g70xc+VGXszGFR9e0MMxBfs4SsVpb0gZVrdAYAK6BMYTRfGoUWJy4oiHVSw+BOgRfOWJMA0fOd4Mj3x9FVTs0pgf7Rn1KVOKZnuN5U1QFSFV/CuW+iUSHuTlfExZELKlKkBf4zuh2OucjFKzribKhblPVqnguIzXvTzziy7MzkbHLMcbPT6FjAvk5ghis6HKB2l659yxvfVH/Hj2a+VmqQFKFiu9fLHdRIVQlSapALMjmLdUgw9RhJXSwoDagxjSYCT9aTAj/e7O/zY+SlL8xSUNHa8ZBugvlFEC+qs4F7M7o53ogoTxBA8OQiQ77y1/+ggsuuADjxo1DdXU1zjjjDLz88suRNrt27cLixYuRSqVQW1uL66+/Hq7rFumRIAiCIIiRzJBRgs4//3xMnz4d69atQ0VFBf7rv/4L559/Pnbs2IG6ujp4nofFixejrq4Ob7zxBpqamnD55ZfDNE3cddddR328jOOBO15B5UAlroDYLodlsPAuXN61A8hTZeSdSMrSI+oQgDxlJ+8OxOWRfgCgwtIj+1kGyzsmAOjBOlnPSPquFBqPXBdXk3pCznYeWy58Tgv5E6nRYvKctmfcPP8ntY94jpZikXLxNsVsK3ZOpEqkMw0615AIVCD1FT93APKUqoPtdsHIu0I+R/LaJwwWOTeA76vkcgHPFLA9jiPyLjX4HMQVM4+zMBuxf4kCvx7l1iiuGskosUIqkYQxDUJo4R2WVIRUNUR4XpCTJ6f8CCUHjfoJEzw/Z4y6LW9dgYi07vbjrg24AA+O7ymRVDk1w4z4tjAzqm4UPhfFt/EiqpDq8yNzAal+Sl35N8XtUc9bxJYivj/yb1z9iWyL+eUUGj9jUUUofKn2GFE1qlgOKHW9brCCFeKlEqQbmp8nyNJhmAxMZxiVMpGydIxOWRhT4avIAMLfkna4eUprPEo1/H2IqeYyGnMw4NzLFVHrSx9EhCGhBB04cADbtm3DTTfdhFmzZmH69Om4++670dnZiU2bNgEA1qxZgw8++AC/+MUvMGfOHJx33nn43ve+h4ceegi2XVyyzGazaG1tjbwIgiAIopyIPzbt7YuIMiSUoGOPPRYzZszAz3/+c5x22mlIJBL4yU9+gtraWsydOxcA0NjYiFNOOQXjx48P91u4cCGuueYabN68GaeeemrBvlesWIHbb789b31cbfHX5c/6explpOLf1efy6hxJO3lqQ0QF0DRlv+DZd0wtkCpBoVw/6rK8C5K2x1WQ+Hji0VQeF/BYvo+S7ea+XOo2l+erLD3NyyPHoiokaccLMzqHYzL1iA+MHKO8hm0ZF56XHzHmLxfPRJ1TTuLro2od4N8hHuywQ3+DrlBrn8n3CSXPkrRN9fuJ+4elbTdybuO5lDwuItFh+RXXOQTPRSgVil6StZc0rlSG1wQ0BggezYcTRkYFHy8WRIuF+yk1teQxPTea14cr0U1x3xn1fTxLstqH4B50Kwk1Z1Cx3DmFjiFt8Ox0gfNR3G+mK7pqVyjvUXdRU93Zofrb5CsyxRWeovbrcV+cmDLUA3vVPtT9ZF4ltT6cv2yiUHV43WBguhYoPToSFQZ0ncGI5SmzDIaUpaPCMjC6wsSYwI9QZ1roSygjTAv9RqnEVeRivpnE0GRITII0TcOLL76ICy+8EFVVVWCMoba2Fs8//zzGjh0LAGhubo5MgACEy83NzUX7Xr58Oa699tpwubW1FZMmTRqAURAEQRBE76DosIGhpJOgm266CT/4wQ+6bLNlyxbMmDEDy5YtQ21tLV577TVUVFTgpz/9Kb74xS/i7bffxoQJE3ptQyKRQCKRyFtvGX7UAaDO9gs9PYxGfxWi8HoOy/B9eMZUmAV9WeRf6VdkezznhxJThwplcpbb4+/Vvz2J6opHNmVjUWfRiK+gNhLPV4sKKU1xW7u7s5L5gKyg7o/cr1DOokh+DxnJFlzCUQkjsFsP8g65EfVKYhQ4fx738myN+3SpFe7VivcpS8cxo3K+EB73s1qrd6Rq1mf5V9oX9wNSr1825tdghzWpfNUnUhMsiAKL+/ZwLrqs7h5vK5FZj4tFlkX7DK6bzoI+Al8hy4zkzPH7if7wq8qP4B6ElWvHFck/HnUFAExRcsMsy7FIsvjxCr2P+Db18J9KV+pNXsRUbxWnLpSfompRgSitro4fz/zc0z4Loeb4kSpQXP3x+8v9lVmgw6hE+V0PPtuyn6ztIW17qLA8XxVyc35AqoIbV/vjEbEAoCO6TlcKJ3rGIHqUeB4E6+Mkhgqo5lHSSdB1112HJUuWdNlm2rRpWLduHZ599lkcPnwY1dXVAIAf/ehHWLt2LR577DHcdNNNqKurw1tvvRXZd98+v6hnXV3dgNhPEARBEIOBEH13jKYCqvmUdBJUU1ODmpqabtt1dnYCAFisGjJjDDy4u2toaMCdd96J/fv3o7a2FgCwdu1aVFdXY+bMmUdtW9LUkUgYBZ//RiMEikdx+cs8T21R/TpsVwvVDVUxKHhH0oVvkNpvfP9Cfalt1PfqXZKlRBWp45PLqnJi6SyMwvLvrtxIVFwhvJgS4QKIZ38NM2HHoqYi4xKioH+NbJuy9IKZouUdntw3p6L4dscj8Cosw7+TDOqoqceR/SeUOmYA0J7xfXdUf532jItO2/dtsl2O9owTrflWwIeqq8zDQDT7sGzHpR+U62fNlXfLodoi/ArxceR+8WPFK5sXWperjdUzlSSe9wUIVCNmBDboUTUniMhSa4nJv3rwV60iL2JKj2zLDNP/y6U6VlgZUo/RG3qj7hxN7pxiFd01xrpVmArZGvf5ORrUSD+N6ZFK8D3NFq0S1qbzRKj8uA4H9wQ8nYM5GlwnGh0GBAqTpsE1NGSzLtozLpqSBmqrkzi20sLolJ/hWvoIqRRSq7uMHHWHhEcJ0QVDIjqsoaEBY8eOxRVXXIF3330Xf/nLX3D99dfj448/xuLFiwEACxYswMyZM3HZZZfh3XffxQsvvIDvfOc7WLZsWcHHXQRBEAQxVJDJEvv2omSJcYbENHbcuHF4/vnncfPNN+Occ86B4zg4+eST8bvf/Q6zZ88GAOi6jmeffRbXXHMNGhoaUFlZiSuuuAJ33HFHr45ZlTCQSOZOT1cRAYUiodT1XWYkBvLUH/V93N8lTqFcMWofcb+frnyG4kglRM2iqv7Ny6VRoAaYuo/txtQCxYdERocgWJaqQKFz7atAamRaNNou7pdTaMyqMhP3xZIKVns25ycUV+psj+NQRzYcl8y5BPh+P342cD2MXJO43K9PlLbdMHorbXt55wXIrztVSLWRCOUzJtvzwJ64/4+q8PiRXtH9Cqk8cjmnIIlIP/GszMXqV6loejQzsxxeXCWIKzGF+o6rDGotsng/hf1xgs9M2Da/Jlmx5UK5V1Qbu/eNKZ6zpxhxu6Pruled4japbTj3InfHXfkvFetfVYMKHUdwDxx6UK9MgxDCz1VVxCeNMwCegA6WqzGnfE90Xfo+aUDQXzbtwfM4UqMstHGBtk4HHzEN02r9KvLSF7Mt46K2OoHx1UnoGtDheHm1CQHkZZPWmQbmHL1i1ltEP+QJIsfofIbEJAgA5s2bhxdeeKHLNlOmTMFzzz03SBYRBEEQBDGUGTKToMHmL/taMbHWCmuBedzPwCyfI0u1oTphhHcucR+KsAK8yFdRIu0KPWuO+cDEq8zrxQUcBC4d4TP1QrXBCuUG8v2UvMh6l4vQd8WPtvKrk+fnCSqsFqjnRa3oLO1TxxSvyM2CaBC1RpAdywfSHXGlx2D5vkVq2+i+DGq2a1X9kpFnhc6rPIeFUM+Pupzbnp+7J37O5Dr1L6AqNohUiY9Hbqn7dW1LgVw9MV+ceNtiyyqhcuDmKwqqOhRpq7ZhioIUKBqq4iAzETPlMYCaWwjwo8yK1SiLH1fwuNeAGVkqpgX0No9Qb/xxivbdhQrV1XFUdUsdfdzvp1i/8azVqgIk2wjuweM5O+TvqBBBNBiP+vmEeLm8QcLw1UxP9d8zFFUIQKbDARdSqRT486cd4XbD1KHrDIkKA0bw+16VNKAzhnRQw0/+3snf/KqkgdEVFnSm4VBLfj6pgUJwDvTxcRY9DsuHJkEEQRAEUebQ47CBgSZBRdi1uxVNh6PPp9W7ZLneMP3IBF1nSFg6poyrRFXCCOt4WQXySOT8WnI+O/HIoEK1wQrlEVLfx9WZQlFc4XEC/532jBP6wcRVoUKZhoH8HDCFfFb8Z/z5Cpeq9ujQogqHp5xfrkEwDZqmg0MA4KG6pBU4H8WUITWKDAAKFVCJn3t1fF2NPT96qqAJEX8dlWI+OF2pPRGlRqiqTdfqT7HrqEZzqX8j67qoxdWdktLdj25cUZDHChWe7vbvpk5YqDIAkXpZcfsi4y7gc9TXfx79qe4UPcZRRJUBhcdUyG/KU64RU6O/ujgnha6rap+6PbwGMX+jyG+v5/92yM+rzCnkeTxUhfx9NXDPz2oeZqAOfoOZpgF6NBeR4AKO6yKbccA0DS0AmpmG+G+cSlPwV2Ma3M72ou2IoQFNggiCIAiizCElaGCgSRBBEARBlDmce9BoEtTv0CSoCFwIuE7+B0Y68ooCztAZpmHjoXSYrEs3fIfeOOpjDL8dizwWAwDX5UHCOx485sjtr4Y1q33GH8+ExQjD9PM5p0Eg/jjEX+d5PLJd/auem8ixedTptqgdgYQt5Wv5AvzHFcXKNQjuP7LSWDSk3lXaaFoRJ8oi5IV989w5LPZ4Sh1vTyn26BBQH0sV3rdYYsRC/RZ6lJYXYh95fNb9GEIHWMX5OOowXNw5trtioN1tiz8W6wla7FFNV/2H3wKm+/9c1LZGz/5ZlPIfSsFHdl2kJejqUWFkXYHHkOr55NwLH4l1a2PssZnGixd6LWSriD++5Dn3BPl4TH7v1e985Hcl9qjMf4ym2KDsz5X9o3ZGl8NH8p7I+20ghh40CSIIgiCIMkd4HND6qAR5FB0WhyZBRUi3OzA8J1xW7yBChztEi/sB/p2H/Jg52Z4fL363UYz+UCeK7deV061KVwpFIeLKjHoe4216eh7iFBt/IVvjjso9GV9357fo8Xtxp9ibYxW/dsUVOn971z+qqvNqXoI9Pd+huS8UUo9622/E7lhYfRxVq+WFbOjCgbgYPbG7O8fivnI0KlxXBVTj66QaJCmkGqnb4tcivq1gEssiqRJE3O7YclwRyhuHlr8u//epwH5qWQ6lDy9bKNRiYKDaYQMDTYIIgiAIoswR3Ou7EkQ+QXnQJKgILU1NYGZF0e2DEfJayuP1laMN1yXKg/5QdIDSfV4LJR7szj9J/cegF1hXjKH+D6W/7I+UDRngc1KoxIhKb33QetuWO4OXLJEYGGgSRBAEQRBlDilBAwNNgnrJYH+YhtyH1+2+SU8oJwWsnGwZ6gymUjjQx+ov9azb4xzlb0BvfjN6s09+/Gvf+usN/f3djNtdDt99mgQNDDQJihHWbXIyJbaEAMrjx0eiaeVjy1BnOD0uHbRJ0FE6tQ7WJGgw+yvGQP9OFOtf/p8olhW+X/Ec9PkoSrAP4UOToBhtbW0AgP3P3FRiSwiCIIihQFtbG0aPHj0gfVuWhbq6OjR/8Kt+6a+urg6WZfVLX8MBTQzKFHbowDnH3r17UVVVVTCccjBobW3FpEmTsHv3blRXV5fEhoGCxjY0obENTWhsA4sQAm1tbZg4cSIY6+rBYN/IZDKw7f4Jx7csC8lksl/6Gg6QEhSDMYbjjz++1GYAAKqrq4fdD5eExjY0obENTWhsA8dAKUAqyWSSJi4DxMBNXQmCIAiCIMoYmgQRBEEQBDEioUlQGZJIJHDrrbcikUiU2pR+h8Y2NKGxDU1obATRNeQYTRAEQRDEiISUIIIgCIIgRiQ0CSIIgiAIYkRCkyCCIAiCIEYkNAkiCIIgCGJEQpOgEnLnnXfi85//PFKpFMaMGVOwjaZpea8nn3wy0uaVV17BaaedhkQigc985jN49NFHB974bujJ2Hbt2oXFixcjlUqhtrYW119/PVw3Wnm1HMdWiBNOOCHvOt19992RNu+99x7OPPNMJJNJTJo0Cffcc0+JrD06HnroIZxwwglIJpOor6/HW2+9VWqTjprbbrst7/p89rOfDbdnMhksW7YMxx57LEaNGoWLL74Y+/btK6HFXfPqq6/ii1/8IiZOnAhN0/Db3/42sl0IgVtuuQUTJkxARUUF5s+fj23btkXaHDp0CJdeeimqq6sxZswYXHnllWhvbx/EURSmu7EtWbIk71ouWrQo0qZcx0aUHzQJKiG2beOSSy7BNddc02W7VatWoampKXxdeOGF4baPP/4Yixcvxtlnn42NGzfiW9/6Fv71X/8VL7zwwgBb3zXdjc3zPCxevBi2beONN97AY489hkcffRS33HJL2KZcx1aMO+64I3KdvvGNb4TbWltbsWDBAkyZMgXr16/HypUrcdttt+GRRx4pocXd89RTT+Haa6/Frbfeij//+c+YPXs2Fi5ciP3795fatKPm5JNPjlyfP/7xj+G2//iP/8D//M//4Ne//jX+8Ic/YO/evbjoootKaG3XdHR0YPbs2XjooYcKbr/nnnvwwx/+EA8//DDefPNNVFZWYuHChchkcoWhL730UmzevBlr167Fs88+i1dffRVXXXXVYA2hKN2NDQAWLVoUuZa//OUvI9vLdWxEGSKIkrNq1SoxevTogtsAiN/85jdF973hhhvEySefHFn3pS99SSxcuLAfLew9xcb23HPPCcaYaG5uDtf9+Mc/FtXV1SKbzQohyn9sKlOmTBH3339/0e0/+tGPxNixY8OxCSHEjTfeKGbMmDEI1vWe008/XSxbtixc9jxPTJw4UaxYsaKEVh09t956q5g9e3bBbS0tLcI0TfHrX/86XLdlyxYBQDQ2Ng6Shb0n/hvBORd1dXVi5cqV4bqWlhaRSCTEL3/5SyGEEB988IEAIN5+++2wzerVq4WmaWLPnj2DZnt3FPr9u+KKK8QFF1xQdJ+hMjaiPCAlaAiwbNkyjBs3Dqeffjp+9rOfQSipnRobGzF//vxI+4ULF6KxsXGwzTwqGhsbccopp2D8+PHhuoULF6K1tRWbN28O2wylsd1999049thjceqpp2LlypWRR3uNjY34whe+EKnevHDhQmzduhWHDx8uhbndYts21q9fH7kGjDHMnz+/bK9BV2zbtg0TJ07EtGnTcOmll2LXrl0AgPXr18NxnMg4P/vZz2Ly5MlDcpwff/wxmpubI+MZPXo06uvrw/E0NjZizJgxmDdvXthm/vz5YIzhzTffHHSb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", "text/plain": [ "
" - ], - "image/png": "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VWqTjprbbrst7/p89rOfDbdnMhksW7YMxx57LEaNGoWLL74Y+/btK6HFXfPqq6/ii1/8IiZOnAhN0/Db3/42sl0IgVtuuQUTJkxARUUF5s+fj23btkXaHDp0CJdeeimqq6sxZswYXHnllWhvbx/EURSmu7EtWbIk71ouWrQo0qZcx0aUHzQJKiG2beOSSy7BNddc02W7VatWoampKXxdeOGF4baPP/4Yixcvxtlnn42NGzfiW9/6Fv71X/8VL7zwwgBb3zXdjc3zPCxevBi2beONN97AY489hkcffRS33HJL2KZcx1aMO+64I3KdvvGNb4TbWltbsWDBAkyZMgXr16/HypUrcdttt+GRRx4pocXd89RTT+Haa6/Frbfeij//+c+YPXs2Fi5ciP3795fatKPm5JNPjlyfP/7xj+G2//iP/8D//M//4Ne//jX+8Ic/YO/evbjoootKaG3XdHR0YPbs2XjooYcKbr/nnnvwwx/+EA8//DDefPNNVFZWYuHChchkcoWhL730UmzevBlr167Fs88+i1dffRVXXXXVYA2hKN2NDQAWLVoUuZa//OUvI9vLdWxEGSKIkrNq1SoxevTogtsAiN/85jdF973hhhvEySefHFn3pS99SSxcuLAfLew9xcb23HPPCcaYaG5uDtf9+Mc/FtXV1SKbzQohyn9sKlOmTBH3339/0e0/+tGPxNixY8OxCSHEjTfeKGbMmDEI1vWe008/XSxbtixc9jxPTJw4UaxYsaKEVh09t956q5g9e3bBbS0tLcI0TfHrX/86XLdlyxYBQDQ2Ng6Shb0n/hvBORd1dXVi5cqV4bqWlhaRSCTEL3/5SyGEEB988IEAIN5+++2wzerVq4WmaWLPnj2DZnt3FPr9u+KKK8QFF1xQdJ+hMjaiPCAlaAiwbNkyjBs3Dqeffjp+9rOfQSipnRobGzF//vxI+4ULF6KxsXGwzTwqGhsbccopp2D8+PHhuoULF6K1tRWbN28O2wylsd1999049thjceqpp2LlypWRR3uNjY34whe+EKnevHDhQmzduhWHDx8uhbndYts21q9fH7kGjDHMnz+/bK9BV2zbtg0TJ07EtGnTcOmll2LXrl0AgPXr18NxnMg4P/vZz2Ly5MlDcpwff/wxmpubI+MZPXo06uvrw/E0NjZizJgxmDdvXthm/vz5YIzhzTffHHSb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\n" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", + " .filterDate('1960', '2020'))\n", + "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", + "ds = xarray.open_dataset(\n", + " climate,\n", + " engine='ee',\n", + " **grid_params\n", + ")\n", + "\n", + "deg_c = ds['temperature_2m'] - 273.15\n", + "mean_deg_c = deg_c.mean(dim='time', skipna=True)\n", + "mean_deg_c.plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "r2R0sOw57s6-" + }, "source": [ "#### Server-side computation (using Earth Engine)\n", "\n", "Alternatively, we can perform the entire calculation on Earth Engine's servers. This involves a single call to Earth Engine's `mean()` reducer. The result is a single image representing the mean temperature over the entire time series, which is then downloaded. This dramatically reduces data transfer, leading to potentially significant performance gains, especially for larger datasets or higher spatial resolutions. The Earth Engine code is also quite readable, expressing the calculation in a clear and concise manner.\n", "\n" - ], - "metadata": { - "id": "r2R0sOw57s6-" - } + ] }, { "cell_type": "code", - "source": [ - "mean_deg_c = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", - " .filterDate('1960', '2020')\n", - " .select('temperature_2m')\n", - " .mean()\n", - " .subtract(273.15))\n", - "\n", - "ds = xarray.open_dataset(\n", - " ee.ImageCollection([mean_deg_c]),\n", - " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", - ")\n", - "\n", - "ds['temperature_2m'].transpose().plot()" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -218,82 +195,85 @@ "id": "mKL_EM5C73TI", "outputId": "709208d2-87c0-4b16-e859-97489e047040" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 5, "metadata": {}, - "execution_count": 5 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { + "image/png": "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mDZtGk499VS8/PLLuOCCC4poGTEYoUlQH7N06VIsXLiw0zaTJ0/ucf+zZ8/GHXfcgUwmg0Qigbq6upwoloMHD6K6urrPf9z7cmx1dXU5UUZyHHV1deHfgRpbPnoz3tmzZ8N1XXz44YeYMmVKwbEA2fGWGqNHj4au63ntLlWbu0tNTQ0+/elPY/fu3fj7v/972LaNY8eORdSgwTpOafPBgwdx4oknhusPHjyIGTNmhG3izu2u6+LIkSODbsyTJ0/G6NGjsXv3blxwwQVDamxE/0OToD6mtrYWtbW1/db/li1bMHLkyFBdqK+vxzPPPBNps2HDBtTX1/f5sftybPX19bjzzjtx6NChULresGEDqqurMXXq1LDNQI0tH70Z75YtW8AYC8dWX1+PW265BY7jwDRNAP5YpkyZUpKPwgDAsizMnDkTL774YhiRyDnHiy++iG9961vFNa6XtLW1Yc+ePbjqqqswc+ZMmKaJF198EZdddhkAYOfOndi7d++Afdf6kkmTJqGurg4vvvhiOOlpaWnBG2+8EUZr1tfX49ixY9i0aRNmzpwJANi4cSM455g9e3axTO8Rf/vb33D48OFwwjeUxkYMAMX2zB7OfPTRR2Lz5s1i1apVorKyUmzevFls3rxZtLa2CiGEeOqpp8TPfvYz8e6774pdu3aJhx56SJSXl4sVK1aEfbz//vuivLxc3HjjjWL79u3iRz/6kdB1XTz33HPFGpYQouuxua4rPvvZz4p58+aJLVu2iOeee07U1taK5cuXh32U6tjivP766+L+++8XW7ZsEXv27BH/+Z//KWpra8XVV18dtjl27JgYO3asuOqqq8TWrVvF448/LsrLy8VPfvKTIlreNY8//rhIJBLikUceEe+995649tprRU1NTSSqbzCwdOlS8fLLL4sPPvhAvPbaa2Lu3Lli9OjR4tChQ0IIIa677joxYcIEsXHjRvHWW2+J+vp6UV9fX2SrC9Pa2hpeUwDEfffdJzZv3iw++ugjIYQQd999t6ipqRG///3vxTvvvCMuueQSMWnSJJFKpcI+FixYIM466yzxxhtviFdffVWcdtpp4itf+UqxhhTS2dhaW1vF9773PdHQ0CA++OAD8cILL4jPfe5z4rTTThPpdDrso1THRpQeNAkqItdcc40AkPN66aWXhBB+WOeMGTNEZWWlqKioENOnTxcPP/yw8Dwv0s9LL70kZsyYISzLEpMnTxbr1q0b+MHE6GpsQgjx4YcfigsvvFCUlZWJ0aNHi6VLlwrHcSL9lOLY4mzatEnMnj1bjBgxQiSTSXH66aeLu+66K/KjLIQQb7/9tvjCF74gEomEOOmkk8Tdd99dJIuPjwcffFBMmDBBWJYlPv/5z4s//elPxTbpuLniiivEiSeeKCzLEieddJK44oorxO7du8PtqVRKfPOb3xQjR44U5eXl4h/+4R9EY2NjES3unJdeeinv9XXNNdcIIfww+e9///ti7NixIpFIiAsuuEDs3Lkz0sfhw4fFV77yFVFZWSmqq6vF17/+9fAmpZh0NraOjg4xb948UVtbK0zTFBMnThSLFy/OmZSX6tiI0kMTQom3JgiCIAiCGCZQniCCIAiCIIYlNAkiCIIgCGJYQpMggiAIgiCGJTQJIgiCIAhiWEKTIIIgCIIghiU0CSIIgiAIYlhCkyCCIAiCIIYlNAkiCALnnXcevvOd7xTbDIIgiAGFJkEEQRAEQQxLaBJEEARBEMSwhCZBBEFEOHr0KK6++mqMHDkS5eXluPDCC7Fr165w+yOPPIKamho8//zzOP3001FZWYkFCxagsbGxiFYTBEEcPzQJIggiwsKFC/HWW2/hqaeeQkNDA4QQ+OIXvwjHccI2HR0duPfee/GrX/0Kf/zjH7F3715873vfK6LVBEEQx49RbAMIgigddu3ahaeeegqvvfYazj77bADAY489hvHjx+N3v/sdLr/8cgCA4zh4+OGHceqppwIAvvWtb+H2228vmt0EQRA9gZQggiBCtm/fDsMwMHv27HDdCSecgClTpmD79u3huvLy8nACBAAnnngiDh06NKC2EgRB9BaaBBEEcdyYphlZ1jQNQogiWUMQBNEzaBJEEETI6aefDtd18cYbb4TrDh8+jJ07d2Lq1KlFtIwgCKLvoUkQQRAhp512Gi655BIsXrwYr776Kt5++2187Wtfw0knnYRLLrmk2OYRBEH0KTQJIggiwrp16zBz5kxcfPHFqK+vhxACzzzzTM4jMIIgiMGOJuhBPkEQBEEQwxBSggiCIAiCGJbQJIggCIIgiGEJTYIIgiAIghiW0CSIIAiCIIhhCU2CCIIgCIIYltAkiCAIgiCIYQlNggiCIAiCGJbQJIggCIIgiGEJTYIIgiAIghiW0CSIIAiCIIhhCU2CCIIgCIIYltAkiCAIgiCIYcn/ByzIEaOPyY4eAAAAAElFTkSuQmCC", "text/plain": [ "
" - ], - "image/png": "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mDZtGk499VS8/PLLuOCCC4poGTEYoUlQH7N06VIsXLiw0zaTJ0/ucf+zZ8/GHXfcgUwmg0Qigbq6upwoloMHD6K6urrPf9z7cmx1dXU5UUZyHHV1deHfgRpbPnoz3tmzZ8N1XXz44YeYMmVKwbEA2fGWGqNHj4au63ntLlWbu0tNTQ0+/elPY/fu3fj7v/972LaNY8eORdSgwTpOafPBgwdx4oknhusPHjyIGTNmhG3izu2u6+LIkSODbsyTJ0/G6NGjsXv3blxwwQVDamxE/0OToD6mtrYWtbW1/db/li1bMHLkyFBdqK+vxzPPPBNps2HDBtTX1/f5sftybPX19bjzzjtx6NChULresGEDqqurMXXq1LDNQI0tH70Z75YtW8AYC8dWX1+PW265BY7jwDRNAP5YpkyZUpKPwgDAsizMnDkTL774YhiRyDnHiy++iG9961vFNa6XtLW1Yc+ePbjqqqswc+ZMmKaJF198EZdddhkAYOfOndi7d++Afdf6kkmTJqGurg4vvvhiOOlpaWnBG2+8EUZr1tfX49ixY9i0aRNmzpwJANi4cSM455g9e3axTO8Rf/vb33D48OFwwjeUxkYMAMX2zB7OfPTRR2Lz5s1i1apVorKyUmzevFls3rxZtLa2CiGEeOqpp8TPfvYz8e6774pdu3aJhx56SJSXl4sVK1aEfbz//vuivLxc3HjjjWL79u3iRz/6kdB1XTz33HPFGpYQouuxua4rPvvZz4p58+aJLVu2iOeee07U1taK5cuXh32U6tjivP766+L+++8XW7ZsEXv27BH/+Z//KWpra8XVV18dtjl27JgYO3asuOqqq8TWrVvF448/LsrLy8VPfvKTIlreNY8//rhIJBLikUceEe+995649tprRU1NTSSqbzCwdOlS8fLLL4sPPvhAvPbaa2Lu3Lli9OjR4tChQ0IIIa677joxYcIEsXHjRvHWW2+J+vp6UV9fX2SrC9Pa2hpeUwDEfffdJzZv3iw++ugjIYQQd999t6ipqRG///3vxTvvvCMuueQSMWnSJJFKpcI+FixYIM466yzxxhtviFdffVWcdtpp4itf+UqxhhTS2dhaW1vF9773PdHQ0CA++OAD8cILL4jPfe5z4rTTThPpdDrso1THRpQeNAkqItdcc40AkPN66aWXhBB+WOeMGTNEZWWlqKioENOnTxcPP/yw8Dwv0s9LL70kZsyYISzLEpMnTxbr1q0b+MHE6GpsQgjx4YcfigsvvFCUlZWJ0aNHi6VLlwrHcSL9lOLY4mzatEnMnj1bjBgxQiSTSXH66aeLu+66K/KjLIQQb7/9tvjCF74gEomEOOmkk8Tdd99dJIuPjwcffFBMmDBBWJYlPv/5z4s//elPxTbpuLniiivEiSeeKCzLEieddJK44oorxO7du8PtqVRKfPOb3xQjR44U5eXl4h/+4R9EY2NjES3unJdeeinv9XXNNdcIIfww+e9///ti7NixIpFIiAsuuEDs3Lkz0sfhw4fFV77yFVFZWSmqq6vF17/+9fAmpZh0NraOjg4xb948UVtbK0zTFBMnThSLFy/OmZSX6tiI0kMTQom3JgiCIAiCGCZQniCCIAiCIIYlNAkiCIIgCGJYQpMggiAIgiCGJTQJIgiCIAhiWEKTIIIgCIIghiU0CSIIgiAIYlhCkyCCIAiCIIYlNAkiCALnnXcevvOd7xTbDIIgiAGFJkEEQRAEQQxLaBJEEARBEMSwhCZBBEFEOHr0KK6++mqMHDkS5eXluPDCC7Fr165w+yOPPIKamho8//zzOP3001FZWYkFCxagsbGxiFYTBEEcPzQJIggiwsKFC/HWW2/hqaeeQkNDA4QQ+OIXvwjHccI2HR0duPfee/GrX/0Kf/zjH7F3715873vfK6LVBEEQx49RbAMIgigddu3ahaeeegqvvfYazj77bADAY489hvHjx+N3v/sdLr/8cgCA4zh4+OGHceqppwIAvvWtb+H2228vmt0EQRA9gZQggiBCtm/fDsMwMHv27HDdCSecgClTpmD79u3huvLy8nACBAAnnngiDh06NKC2EgRB9BaaBBEEcdyYphlZ1jQNQogiWUMQBNEzaBJEEETI6aefDtd18cYbb4TrDh8+jJ07d2Lq1KlFtIwgCKLvoUkQQRAhp512Gi655BIsXrwYr776Kt5++2187Wtfw0knnYRLLrmk2OYRBEH0KTQJIggiwrp16zBz5kxcfPHFqK+vhxACzzzzTM4jMIIgiMGOJuhBPkEQBEEQwxBSggiCIAiCGJbQJIggCIIgiGEJTYIIgiAIghiW0CSIIAiCIIhhCU2CCIIgCIIYltAkiCAIgiCIYQlNggiCIAiCGJbQJIggCIIgiGEJTYIIgiAIghiW0CSIIAiCIIhhCU2CCIIgCIIYltAkiCAIgiCIYcn/ByzIEaOPyY4eAAAAAElFTkSuQmCC\n" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "mean_deg_c = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", + " .filterDate('1960', '2020')\n", + " .select('temperature_2m')\n", + " .mean()\n", + " .subtract(273.15))\n", + "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", + "ds = xarray.open_dataset(\n", + " ee.ImageCollection([mean_deg_c]),\n", + " engine='ee',\n", + " **grid_params\n", + ")\n", + "\n", + "ds['temperature_2m'].plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "s1QqTwtz8AAd" + }, "source": [ "#### Comparison\n", "\n", "In this specific case, the performance advantage of server-side computation, due to minimal data transfer, likely outweighs any potential benefits of client-side flexibility. Readability is comparable in both approaches." - ], - "metadata": { - "id": "s1QqTwtz8AAd" - } + ] }, { "cell_type": "markdown", - "source": [ - "### Simple linear regression (July trend)" - ], "metadata": { "id": "0db40xh3aw0H" - } + }, + "source": [ + "### Simple linear regression (July trend)" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "5qE_2DWWAVbJ" + }, "source": [ "#### Client-side computation (using Xarray)\n", "\n", "To calculate the slope of July temperature over the time series client-side, we first download all 720 monthly images. We then filter for July data using Xarray's time accessor and calculate the slope using `polyfit`. This approach gives us the full flexibility of the Python ecosystem, allowing for complex pre- and post-processing. However, it requires transferring all 720 images, a substantial amount of data." - ], - "metadata": { - "id": "5qE_2DWWAVbJ" - } + ] }, { "cell_type": "code", - "source": [ - "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", - " .filterDate('1960', '2020'))\n", - "\n", - "ds = xarray.open_dataset(\n", - " climate,\n", - " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", - ")\n", - "\n", - "deg_c = ds['temperature_2m'] - 273.15\n", - "july_deg_c = deg_c.sel(time=deg_c.time.dt.month == 7)\n", - "july_deg_c['time_years'] = july_deg_c.time.dt.year - july_deg_c.time[0].dt.year\n", - "coeff = july_deg_c.polyfit(dim='time_years', deg=1)\n", - "slope = coeff['polyfit_coefficients'].sel(degree=1)\n", - "slope.transpose().plot()" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -302,43 +282,97 @@ "id": "HOkVFALKAU9j", "outputId": "ab3d0133-2ca1-4c32-e491-3e5a0706f3af" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 6, "metadata": {}, - "execution_count": 6 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHHCAYAAABJDtd4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8KFJREFUeJzs/XmcXFWd/4+/zrlLVfXe6STdSchO2CFhwr6IQMbg19HJB0bA0QGRD34+AipkGAccdlEYF0SUEXEUcUZG5OPIOCooE4EfYATZwiYRYjaSdDpJp/equss5vz/Ocs+tpdNbku70eT4eBV237j1169aSe1739X69Ceecw2KxWCwWi8WyR+j+3gGLxWKxWCyWiYI9cbJYLBaLxWIZIvbEyWKxWCwWi2WI2BMni8VisVgsliFiT5wsFovFYrFYhog9cbJYLBaLxWIZIvbEyWKxWCwWi2WI2BMni8VisVgsliFiT5wsFovFYrFYhog9cbJYxgk333wzCCH7ezcsFovFMgj2xMlisUxYnn/+eVx++eVYunQpPM+zJ54Wi2WvY0+cLBbLhOVXv/oV/vVf/xWEECxYsGB/747FYpkE2BMni2WSUygUwBjb37sxIj71qU+hu7sbL7zwAv7yL/9yf++OxWKZBNgTJ4tlP/DMM8/g+OOPRzabxcKFC/Gd73yn6rr//u//jqVLlyKXy2HKlCm48MILsXnz5rL17rnnHixYsAC5XA4nnHACnn76abz3ve/Fe9/7Xr3Ok08+CUIIfvzjH+P666/HrFmzUFNTg56eHgDAc889h3POOQeNjY2oqanBGWecgWeffbbsubZs2YJPfOITaG1tRSaTwZFHHonvf//7oz8ww6S1tRW5XG6fP6/FYpm8uPt7ByyWycZrr72G973vfZg2bRpuvvlmRFGEm266Ca2trWXrfvGLX8QNN9yA888/H//7f/9v7NixA9/85jfxnve8By+//DKampoAAN/+9rdx5ZVX4vTTT8fVV1+NDRs2YMWKFWhubsZBBx1UNu4XvvAF+L6Pa665BsViEb7v47e//S3e//73Y+nSpbjppptAKcX999+Ps846C08//TROOOEEAMD27dtx0kkngRCCK6+8EtOmTcOjjz6KSy+9FD09PbjqqqsGff3d3d0Iw3CPxymbzaKurm7PB9RisVj2JdxisexTVqxYwbPZLN+4caNe9uabb3LHcbj5ldywYQN3HId/8YtfTG3/2muvcdd19fJischbWlr48ccfz8Mw1Ov94Ac/4AD4GWecoZc98cQTHABfsGABHxgY0MsZY3zRokV8+fLlnDGmlw8MDPD58+fzv/zLv9TLLr30Uj5jxgy+c+fO1H5deOGFvLGxMTVuJc444wwOYI+3iy++eNBxSrniiiu4/UmzWCx7G6s4WSz7kDiO8etf/xorVqzAnDlz9PLDDz8cy5cvx69+9Su97D//8z/BGMP555+PnTt36uVtbW1YtGgRnnjiCXz+85/HCy+8gF27duH222+H6yZf6Y9+9KO4+uqrK+7HxRdfnLrE9corr+Dtt9/G9ddfj127dqXWPfvss/Fv//ZvYIyBEIKf/vSnOP/888E5T+3X8uXL8eMf/xgvvfQSTj311KrH4Gtf+xp27969x2M1c+bMPa5jsVgs+xp74mSx7EN27NiBfD6PRYsWlT126KGHpk6c3n77bXDOK64LAJ7nAQA2btwIADj44INTj7uui3nz5lXcdv78+an7b7/9NgBxQlUNdYmtq6sL9913H+67776K63V0dFQdAwCWLl066OMWi8UynrEnThbLOEUpPI8++igcxyl7fDT+n1JDtaqq+8pXvoIlS5ZU3Kaurk6rUR/72MeqnmQdc8wxgz53Z2cngiAY0j42NjbucT2LxWLZl9gTJ4tlHzJt2jTkcjmt8JisXbs2dX/hwoXgnGP+/Pk45JBDqo45d+5cAMA777yDM888Uy+PoggbNmzY44mMei4AaGhowLJlywbd//r6esRxPOh6g3Huuefiqaee2uN6F198MX7wgx+M6DksFotlb2FPnCyWfYjjOFi+fDkeeeQRbNq0Sfuc/vjHP+LXv/51at1zzz0X1113HW655Rb8+7//eyoVm3OOzs5OtLS04LjjjkNLSwu++93v4pJLLtE+px/96EdD8hIB4vLZwoUL8dWvfhV/+7d/W6Zm7dixA9OmTYPjODjvvPPw4IMP4vXXX8dRRx1Vcb3BsB4ni8UykbEnThbLPuaWW27BY489htNPPx2XX345oijCN7/5TRx55JF49dVX9XoLFy7Ebbfdhuuuu07HC9TX12P9+vX42c9+hk9+8pO45ppr4Ps+br75Znz605/GWWedhfPPPx8bNmzAD37wAyxcuHBIbUgopfjXf/1XvP/9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QRAEkSY0ccohd999N0455RQUFhaivLw84TaMsbjHM88849rmtddew0knnYRgMIijjz4aTz75ZO93vgvSGdvu3bsxe/ZsFBYWYvjw4bjpppug67prm3wcWyLGjRsX9z7de++9rm0+/PBDnHbaaQiFQhg9ejTuv//+HPW2ezz66KMYN24cQqEQqqur8c477+S6S93mjjvuiHt/Jk2apNZ3dnZiwYIFGDp0KIqLi3HRRRfhwIEDOexxal5//XV861vfwqhRo8AYw7PPPutaL4TA0qVLMXLkSBQUFGDmzJnYvn27a5uGhgbMmTMHpaWlKC8vx7x589Da2ndFa5PR1djmzp0b917W1ta6tsnXsREDA5o45ZBIJIKLL74Y11xzTcrt1qxZg/3796vHhRdeqNbt3LkTs2fPxplnnonNmzfj+uuvxw9+8AP89a9/7eXep6arsRmGgdmzZyMSieCtt97CU089hSeffBJLly5V2+Tr2JKxbNky1/t07bXXqnXNzc04++yzMXbsWGzatAkrVqzAHXfcgdWrV+ewx13zu9/9DjfeeCNuv/12vPfeezjhhBMwa9YsHDx4MNdd6zbHHnus6/1544031LobbrgBf/nLX/CHP/wBf/vb37Bv3z585zvfyWFvU9PW1oYTTjgBjz76aML1999/Px5++GGsWrUKGzduRFFREWbNmoXOzk61zZw5c/Dxxx9j/fr1WLt2LV5//XVcddVVfTWEpHQ1NgCora11vZe//e1vXevzdWzEAEEQOWfNmjWirKws4ToA4k9/+lPSfX/605+KY4891rXsu9/9rpg1a1YWe9hzko3thRdeEJxzUV9fr5Y9/vjjorS0VITDYSFE/o/NydixY8WDDz6YdP1jjz0mKioq1NiEEOLmm28WEydO7IPe9ZyTTz5ZLFiwQL02DEOMGjVKLF++PIe96j633367OOGEExKua2xsFH6/X/zhD39Qy7Zu3SoAiLq6uj7qYc/x/kaYpimqqqrEihUr1LLGxkYRDAbFb3/7WyGEEJ988okAIN599121zYsvvigYY2Lv3r191veuSPT7d8UVV4gLLrgg6T79ZWxE/4UUp37AggULMGzYMJx88sn45S9/CeGw3qqrq8PMmTNd28+aNQt1dXV93c1uUVdXh+OOOw4jRoxQy2bNmoXm5mZ8/PHHapv+NLZ7770XQ4cOxdSp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", "text/plain": [ "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHHCAYAAABJDtd4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8KFJREFUeJzs/XmcXFWd/4+/zrlLVfXe6STdSchO2CFhwr6IQMbg19HJB0bA0QGRD34+AipkGAccdlEYF0SUEXEUcUZG5OPIOCooE4EfYATZwiYRYjaSdDpJp/equss5vz/Ocs+tpdNbku70eT4eBV237j1169aSe1739X69Ceecw2KxWCwWi8WyR+j+3gGLxWKxWCyWiYI9cbJYLBaLxWIZIvbEyWKxWCwWi2WI2BMni8VisVgsliFiT5wsFovFYrFYhog9cbJYLBaLxWIZIvbEyWKxWCwWi2WI2BMni8VisVgsliFiT5wsFovFYrFYhog9cbJYxgk333wzCCH7ezcsFovFMgj2xMlisUxYnn/+eVx++eVYunQpPM+zJ54Wi2WvY0+cLBbLhOVXv/oV/vVf/xWEECxYsGB/747FYpkE2BMni2WSUygUwBjb37sxIj71qU+hu7sbL7zwAv7yL/9yf++OxWKZBNgTJ4tlP/DMM8/g+OOPRzabxcKFC/Gd73yn6rr//u//jqVLlyKXy2HKlCm48MILsXnz5rL17rnnHixYsAC5XA4nnHACnn76abz3ve/Fe9/7Xr3Ok08+CUIIfvzjH+P666/HrFmzUFNTg56eHgDAc889h3POOQeNjY2oqanBGWecgWeffbbsubZs2YJPfOITaG1tRSaTwZFHHonvf//7oz8ww6S1tRW5XG6fP6/FYpm8uPt7ByyWycZrr72G973vfZg2bRpuvvlmRFGEm266Ca2trWXrfvGLX8QNN9yA888/H//7f/9v7NixA9/85jfxnve8By+//DKampoAAN/+9rdx5ZVX4vTTT8fVV1+NDRs2YMWKFWhubsZBBx1UNu4XvvAF+L6Pa665BsViEb7v47e//S3e//73Y+nSpbjppptAKcX999+Ps846C08//TROOOEEAMD27dtx0kkngRCCK6+8EtOmTcOjjz6KSy+9FD09PbjqqqsGff3d3d0Iw3CPxymbzaKurm7PB9RisVj2JdxisexTVqxYwbPZLN+4caNe9uabb3LHcbj5ldywYQN3HId/8YtfTG3/2muvcdd19fJischbWlr48ccfz8Mw1Ov94Ac/4AD4GWecoZc98cQTHABfsGABHxgY0MsZY3zRokV8+fLlnDGmlw8MDPD58+fzv/zLv9TLLr30Uj5jxgy+c+fO1H5deOGFvLGxMTVuJc444wwOYI+3iy++eNBxSrniiiu4/UmzWCx7G6s4WSz7kDiO8etf/xorVqzAnDlz9PLDDz8cy5cvx69+9Su97D//8z/BGMP555+PnTt36uVtbW1YtGgRnnjiCXz+85/HCy+8gF27duH222+H6yZf6Y9+9KO4+uqrK+7HxRdfnLrE9corr+Dtt9/G9ddfj127dqXWPfvss/Fv//ZvYIyBEIKf/vSnOP/888E5T+3X8uXL8eMf/xgvvfQSTj311KrH4Gtf+xp27969x2M1c+bMPa5jsVgs+xp74mSx7EN27NiBfD6PRYsWlT126KGHpk6c3n77bXDOK64LAJ7nAQA2btwIADj44INTj7uui3nz5lXcdv78+an7b7/9NgBxQlUNdYmtq6sL9913H+67776K63V0dFQdAwCWLl066OMWi8UynrEnThbLOEUpPI8++igcxyl7fDT+n1JDtaqq+8pXvoIlS5ZU3Kaurk6rUR/72MeqnmQdc8wxgz53Z2cngiAY0j42NjbucT2LxWLZl9gTJ4tlHzJt2jTkcjmt8JisXbs2dX/hwoXgnGP+/Pk45JBDqo45d+5cAMA777yDM888Uy+PoggbNmzY44mMei4AaGhowLJlywbd//r6esRxPOh6g3Huuefiqaee2uN6F198MX7wgx+M6DksFotlb2FPnCyWfYjjOFi+fDkeeeQRbNq0Sfuc/vjHP+LXv/51at1zzz0X1113HW655Rb8+7//eyoVm3OOzs5OtLS04LjjjkNLSwu++93v4pJLLtE+px/96EdD8hIB4vLZwoUL8dWvfhV/+7d/W6Zm7dixA9OmTYPjODjvvPPw4IMP4vXXX8dRRx1Vcb3BsB4ni8UykbEnThbLPuaWW27BY489htNPPx2XX345oijCN7/5TRx55JF49dVX9XoLFy7Ebbfdhuuuu07HC9TX12P9+vX42c9+hk9+8pO45ppr4Ps+br75Znz605/GWWedhfPPPx8bNmzAD37wAyxcuHBIbUgopfjXf/1XvP/9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QRAEkSY0ccohd999N0455RQUFhaivLw84TaMsbjHM88849rmtddew0knnYRgMIijjz4aTz75ZO93vgvSGdvu3bsxe/ZsFBYWYvjw4bjpppug67prm3wcWyLGjRsX9z7de++9rm0+/PBDnHbaaQiFQhg9ejTuv//+HPW2ezz66KMYN24cQqEQqqur8c477+S6S93mjjvuiHt/Jk2apNZ3dnZiwYIFGDp0KIqLi3HRRRfhwIEDOexxal5//XV861vfwqhRo8AYw7PPPutaL4TA0qVLMXLkSBQUFGDmzJnYvn27a5uGhgbMmTMHpaWlKC8vx7x589Da2ndFa5PR1djmzp0b917W1ta6tsnXsREDA5o45ZBIJIKLL74Y11xzTcrt1qxZg/3796vHhRdeqNbt3LkTs2fPxplnnonNmzfj+uuvxw9+8AP89a9/7eXep6arsRmGgdmzZyMSieCtt97CU089hSeffBJLly5V2+Tr2JKxbNky1/t07bXXqnXNzc04++yzMXbsWGzatAkrVqzAHXfcgdWrV+ewx13zu9/9DjfeeCNuv/12vPfeezjhhBMwa9YsHDx4MNdd6zbHHnus6/1544031LobbrgBf/nLX/CHP/wBf/vb37Bv3z585zvfyWFvU9PW1oYTTjgBjz76aML1999/Px5++GGsWrUKGzduRFFREWbNmoXOzk61zZw5c/Dxxx9j/fr1WLt2LV5//XVcddVVfTWEpHQ1NgCora11vZe//e1vXevzdWzEAEEQOWfNmjWirKws4ToA4k9/+lPSfX/605+KY4891rXsu9/9rpg1a1YWe9hzko3thRdeEJxzUV9fr5Y9/vjjorS0VITDYSFE/o/NydixY8WDDz6YdP1jjz0mKioq1NiEEOLmm28WEydO7IPe9ZyTTz5ZLFiwQL02DEOMGjVKLF++PIe96j633367OOGEExKua2xsFH6/X/zhD39Qy7Zu3SoAiLq6uj7qYc/x/kaYpimqqqrEihUr1LLGxkYRDAbFb3/7WyGEEJ988okAIN599121zYsvvigYY2Lv3r191veuSPT7d8UVV4gLLrgg6T79ZWxE/4UUp37AggULMGzYMJx88sn45S9/CeGw3qqrq8PMmTNd28+aNQt1dXV93c1uUVdXh+OOOw4jRoxQy2bNmoXm5mZ8/PHHapv+NLZ7770XQ4cOxdSp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\n" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", + " .filterDate('1960', '2020'))\n", + "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", + "ds = xarray.open_dataset(\n", + " climate,\n", + " engine='ee',\n", + " **grid_params\n", + ")\n", + "\n", + "deg_c = ds['temperature_2m'] - 273.15\n", + "july_deg_c = deg_c.sel(time=deg_c.time.dt.month == 7)\n", + "july_deg_c['time_years'] = july_deg_c.time.dt.year - july_deg_c.time[0].dt.year\n", + "coeff = july_deg_c.polyfit(dim='time_years', deg=1)\n", + "slope = coeff['polyfit_coefficients'].sel(degree=1)\n", + "slope.plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "sYFfHL2qAr8c" + }, "source": [ "#### Server-side computation (using Earth Engine)\n", "\n", "With Earth Engine, we perform all computations on the server. We filter the collection for July, convert to Celsius, add a year band, and use `ee.Reducer.linearFit()` to efficiently calculate the slope. Only the resulting slope image is then downloaded. This drastically reduces data transfer compared to the client-side approach." - ], - "metadata": { - "id": "sYFfHL2qAr8c" - } + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 544 + }, + "id": "qnb3ni6yAuJ4", + "outputId": "d8734e40-5506-4687-ad89-da91231cf536" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHHCAYAAABJDtd4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA5h5JREFUeJzsvXmcXVWZ7v+stYdzTs2VsZKQkECYZAgYBhFo1E4bWtuWFm21sYHIR/3ZoA202tK3AVFbHGjEgRbpqwj3ajve5tptd5ROi1clgjIpIAiYkJCkUplqrnP2sNbvjzXstfc5VakpSVXyfj+fA1X77L3OPvvsU9nr2c/7vExKKUEQBEEQBEHsF36od4AgCIIgCGK2QBdOBEEQBEEQ44QunAiCIAiCIMYJXTgRBEEQBEGME7pwIgiCIAiCGCd04UQQBEEQBDFO6MKJIAiCIAhinNCFE0EQBEEQxDihCyeCIAiCIIhxQhdOBDFLWb58Oa644opDvRsEQRBHFHThRBAzmAcffBAf+chH0Nvbe6h35aBTq9Xwt3/7t1i8eDEqlQrOOecc3H///Yd6twiCOMKhCyeCmME8+OCDuPnmmxteOD377LP453/+54O/UweJK664ArfddhsuvfRSfO5zn4PneXjd616Hn/3sZ4d61wiCOILxD/UOEAQxOUql0qHehQPGww8/jG9+85v4zGc+gw984AMAgMsuuwynnHIKPvShD+HBBx88xHtIEMSRCilOBDFD+chHPoIPfvCDAIAVK1aAMQbGGDZv3gyg3uP0ta99DYwx/OxnP8P73/9+zJ8/Hx0dHXjPe96DKIrQ29uLyy67DJ2dnejs7MSHPvQhSClzrymEwO23346TTz4Z5XIZCxcuxHve8x7s27fvYL1tAMB3v/tdeJ6Hd7/73XZZuVzGlVdeiY0bN2Lr1q0HdX8IgiAMpDgRxAzlTW96E373u9/hX/7lX/DZz34W8+bNAwDMnz9/zO3e9773oaurCzfffDN+8Ytf4K677kJHRwcefPBBLFu2DJ/4xCfwH//xH/jMZz6DU045BZdddpnd9j3veQ++9rWvYd26dXj/+9+PTZs24Ytf/CIee+wx/PznP0cQBKO+bq1Ww8DAwLjem3kvo/HYY4/h+OOPR1tbW2752WefDQB4/PHHsXTp0nG9FkEQxLQiCYKYsXzmM5+RAOSmTZvqnjv66KPl5Zdfbn+/++67JQC5du1aKYSwy88991zJGJP/3//3/9llSZLIo446Sl544YV22U9/+lMJQH7961/Pvc769esbLi9iXn88j/1x8skny9e85jV1y5966ikJQN555537HYMgCOJAQIoTQRxmXHnllWCM2d/POeccbNy4EVdeeaVd5nkezjzzTDzyyCN22Xe+8x20t7fjj/7oj7B79267fPXq1WhpacGPf/xj/MVf/MWor7t27dppq3obGRlp6OEql8v2eYIgiEMBXTgRxGHGsmXLcr+3t7cDQN2trfb29px36bnnnkNfXx8WLFjQcNyenp4xX3fRokVYtGjRZHa5jkqlglqtVre8Wq3a5wmCIA4FdOFEEIcZnueNe7l0zOFCCCxYsABf//rXG26/P2/VyMgI+vr6xrWPXV1dYz6/aNEibNu2rW75jh07AACLFy8e1+sQBEFMN3ThRBAzGPeW24Hm2GOPxX/913/hvPPOm5Si861vfQvr1q0b17qyUM1X5PTTT8ePf/xj9Pf35wziDz30kH2eIAjiUEAXTgQxg2lubgaAg5Ic/ud//uf4p3/6J3zsYx/DJz7xidxzSZJgcHAQHR0do24/nR6nN7/5zbj11ltx11132RynWq2Gu+++G+eccw5V1BEEccigCyeCmMGsXr0aAPA//sf/wNve9jYEQYA3vOEN9oJqOrnwwgvxnve8B7fccgsef/xxvPa1r0UQBHjuuefwne98B5/73Ofw5je/edTtp9PjdM455+Atb3kLrr/+evT09GDlypW45557sHnzZnzlK1+ZltcgCIKYDHThRBAzmLPOOgsf+9jHcOedd2L9+vUQQmDTpk0H5MIJAO68806sXr0aX/7yl/F3f/d38H0fy5cvxzve8Q6cd955B+Q1R+Pee+/FDTfcgP/1v/4X9u3bh9NOOw3//u//jj/4gz84qPtBEAThwuT+zAYEQRAEQRAEAGq5QhAEQRAEMW7owokgCIIgCGKc0IUTQRAEQRDEOKELJ4IgCIIgiHFCF04EQRAEQRDjhC6cCIIgCIIgxgnlOBUQQmD79u1obW09qO0uCIIgiNmFlBIDAwNYvHgxOD9wOkS1WkUURdMyVhiGKJfL0zLWkQpdOBXYvn07tXMgCIIgxs3WrVtx1FFHHZCxq9Uq5lZaMIx0Wsbr6urCpk2b6OJpCtCFU4HW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7969OOaYYwAAbW1t2LtXhfSef/75eO973zupMSd1r+2aa65Bb28vHnroIVQqFaxfvx733HMPjjvuOHz/+9+f1I5MB/PmzYPnedi5c2du+c6dO9HV1bgPVKlUQltbW+5BHHrCOYsRdiyYvFIwni7trtK0n79Ieb8TQwKVF6QygzylkpiMJ0e1inp79l+tdJgiGbfH1XprcivITK1LI7AkAkSif4/Vw2ZBaTUqrGhvk698TdGweqQxWDSSbWM4UlU/Ta1/b+FY6n99pRjb02T8YaaSUYj8OmYTnfpuHlHf7obne51BWatMRpUabTviwFD8N6/RhdNk/j3t6uoac33z/4mMOVWOOeYYbNqk+omeeOKJ+Pa3vw1AKVEdHR2TGnNSF07//d//jdtuuw1nnnkmOOc4+uij8Y53vAOf/vSnccstt0xqR6aDMAyxevVqbNiwwS4TQmDDhg0499xzD9l+EQRBEMRUEFJOy2O8TObf03PPPTe3PgDcf//9dv0VK1agq6srt05/fz8eeuihA/Zv9Lp16/DEE08AAD784Q/jjjvuQLlcxrXXXosPfvCDkxpzUrfqhoaGbF5TZ2cndu3aheOPPx6nnnoqHn300UntyHRx3XXX4fLLL8eZZ56Js88+G7fffjuGhoawbt26Q7pfxIEj3rUFLChnqo/JC3KqicZklD8mbiVdPuE6hZ/zTXGAyXwvO6M8aaJ92f17N/fmsEarQtbPolUnFg0pn5M5PlrVsKnivsiq4aCPvxfYajy3d6A01XdeAOmHal3uqzyug/1+ZxillnalOOlqupwQ5yiiAFQlnPEujeHxCzu7cucy0xV0dizGrUrs+pbMz6aXoeQ+agO9NvfL7EPUtztTpBpUPxq/lkl+d7PDgMO7gk/qx1THmAj7+/f0sssuw5IlS6xg8td//de48MIL8Y//+I94/etfj29+85v41a9+hbvuugsAwBjDNddcg49//OM47rjjsGLFCtxwww1YvHgxLr744im+u8Zce+219uc1a9bgmWeewSOPPIKVK1dO2o89qQunE044Ac8++yyWL1+OVatW4ctf/jKWL1+OO++8E4sWLZrUjkwXb33rW7Fr1y7ceOON6O7uxumnn47169fXmdEIgiAIghid/f17umXLllx1/Stf+Up84xvfwN///d/j7/7u73DcccfhvvvuwymnnGLX+dCH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4YkTwzAMwzBMgfDEqYzceuut+PznP4/q6mo0NDRk3UYIkfF47LHHfNs8++yzOPnkkxGNRvGZz3wGDz/88NB3vh8KGduuXbuwZMkSVFdXY+LEibj++uthmqZvm0ocWzZmzJiR8T7dfvvtvm3++te/4rTTTkMsFsPUqVNx5513lqm3A+P+++/HjBkzEIvF0NLSgpdeeqncXRowq1evznh/jj32WHd9X18fVqxYgfHjx6O2thYXXHAB9u3bV8Ye5+e5557DF7/4RUyZMgVCCPzmN7/xrSci3HjjjZg8eTKqqqqwcOFCvPPOO75tDhw4gKVLlyIej6OhoQGXXnopDh8evqK1uehvbMuWLct4LxcvXuzbplLHxowOeOJURpLJJL785S/j8ssvz7vdQw89hL1797qP888/3123c+dOLFmyBF/4whewbds2XH311fg//+f/4A9/+MMQ9z4//Y3NsiwsWbIEyWQSL774Ih555BE8/PDDuPHGG91tKnVsuVizZo3vfbryyivddZ2dnTjrrLMwffp0bN26FevWrcPq1avx4IMPlrHH/fOLX/wC1157LW666Sa88sorOPHEE7Fo0SLs37+/3F0bMMcdd5zv/Xn++efddddccw1+97vf4Ve/+hX+53/+Bx999BG+9KUvlbG3+enu7saJJ56I+++/P+v6O++8E/feey/Wr1+PLVu2oKamBosWLUJfX5+7zdKlS/Hmm29i06ZN2LBhA5577jlcdtllwzWEnPQ3NgBYvHix7738+c9/7ltfqWNjRgnElJ2HHnqI6uvrs64DQP/93/+dc99vf/vbdNxxx/mWfeUrX6FFixaVsIeDJ9fYnnjiCZJSUnt7u7vsP/7jPygej1MikSCiyh+bl+nTp9M999yTc/0DDzxAjY2N7tiIiG644QaaNWvWMPRu8Jxyyim0YsUK97VlWTRlyhRau3ZtGXs1cG666SY68cQTs67r6OigcDhMv/rVr9xl27dvJwDU1tY2TD0cPMHfCKUUNTc307p169xlHR0dFI1G6ec//zkREb311lsEgF5++WV3myeffJKEELRnz55h63t/ZPv9u+SSS+i8887Luc9IGRszcmHFaQSwYsUKTJgwAaeccgp+/OMfgzzWW21tbVi4cKFv+0WLFqGtrW24uzkg2tracPzxx2PSpEnuskWLFqGzsxNvvvmmu81IGtvt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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def k_to_c(image):\n", " return image.select().addBands(image.subtract(273.15))\n", @@ -357,97 +391,57 @@ "coeff = july_deg_c.select(['year', 'temperature_2m']).reduce(\n", " ee.Reducer.linearFit())\n", "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", "ds = xarray.open_dataset(\n", " ee.ImageCollection([coeff]),\n", " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", + " **grid_params\n", ")\n", "\n", "slope = ds['scale']\n", - "slope.transpose().plot()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 544 - }, - "id": "qnb3ni6yAuJ4", - "outputId": "d8734e40-5506-4687-ad89-da91231cf536" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 7 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk4AAAHHCAYAAABJDtd4AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA5h5JREFUeJzsvXmcXVWZ7v+stYdzTs2VsZKQkECYZAgYBhFo1E4bWtuWFm21sYHIR/3ZoA202tK3AVFbHGjEgRbpqwj3ajve5tptd5ROi1clgjIpIAiYkJCkUplqrnP2sNbvjzXstfc5VakpSVXyfj+fA1X77L3OPvvsU9nr2c/7vExKKUEQBEEQBEHsF36od4AgCIIgCGK2QBdOBEEQBEEQ44QunAiCIAiCIMYJXTgRBEEQBEGME7pwIgiCIAiCGCd04UQQBEEQBDFO6MKJIAiCIAhinNCFE0EQBEEQxDihCyeCIAiCIIhxQhdOBDFLWb58Oa644opDvRsEQRBHFHThRBAzmAcffBAf+chH0Nvbe6h35aBTq9Xwt3/7t1i8eDEqlQrOOecc3H///Yd6twiCOMKhCyeCmME8+OCDuPnmmxteOD377LP453/+54O/UweJK664ArfddhsuvfRSfO5zn4PneXjd616Hn/3sZ4d61wiCOILxD/UOEAQxOUql0qHehQPGww8/jG9+85v4zGc+gw984AMAgMsuuwynnHIKPvShD+HBBx88xHtIEMSRCilOBDFD+chHPoIPfvCDAIAVK1aAMQbGGDZv3gyg3uP0ta99DYwx/OxnP8P73/9+zJ8/Hx0dHXjPe96DKIrQ29uLyy67DJ2dnejs7MSHPvQhSClzrymEwO23346TTz4Z5XIZCxcuxHve8x7s27fvYL1tAMB3v/tdeJ6Hd7/73XZZuVzGlVdeiY0bN2Lr1q0HdX8IgiAMpDgRxAzlTW96E373u9/hX/7lX/DZz34W8+bNAwDMnz9/zO3e9773oaurCzfffDN+8Ytf4K677kJHRwcefPBBLFu2DJ/4xCfwH//xH/jMZz6DU045BZdddpnd9j3veQ++9rWvYd26dXj/+9+PTZs24Ytf/CIee+wx/PznP0cQBKO+bq1Ww8DAwLjem3kvo/HYY4/h+OOPR1tbW2752WefDQB4/PHHsXTp0nG9FkEQxLQiCYKYsXzmM5+RAOSmTZvqnjv66KPl5Zdfbn+/++67JQC5du1aKYSwy88991zJGJP/3//3/9llSZLIo446Sl544YV22U9/+lMJQH7961/Pvc769esbLi9iXn88j/1x8skny9e85jV1y5966ikJQN555537HYMgCOJAQIoTQRxmXHnllWCM2d/POeccbNy4EVdeeaVd5nkezjzzTDzyyCN22Xe+8x20t7fjj/7oj7B79267fPXq1WhpacGPf/xj/MVf/MWor7t27dppq3obGRlp6OEql8v2eYIgiEMBXTgRxGHGsmXLcr+3t7cDQN2trfb29px36bnnnkNfXx8WLFjQcNyenp4xX3fRokVYtGjRZHa5jkqlglqtVre8Wq3a5wmCIA4FdOFEEIcZnueNe7l0zOFCCCxYsABf//rXG26/P2/VyMgI+vr6xrWPXV1dYz6/aNEibNu2rW75jh07AACLFy8e1+sQBEFMN3ThRBAzGPeW24Hm2GOPxX/913/hvPPOm5Si861vfQvr1q0b17qyUM1X5PTTT8ePf/xj9Pf35wziDz30kH2eIAjiUEAXTgQxg2lubgaAg5Ic/ud//uf4p3/6J3zsYx/DJz7xidxzSZJgcHAQHR0do24/nR6nN7/5zbj11ltx11132RynWq2Gu+++G+eccw5V1BEEccigCyeCmMGsXr0aAPA//sf/wNve9jYEQYA3vOEN9oJqOrnwwgvxnve8B7fccgsef/xxvPa1r0UQBHjuuefwne98B5/73Ofw5je/edTtp9PjdM455+Atb3kLrr/+evT09GDlypW45557sHnzZnzlK1+ZltcgCIKYDHThRBAzmLPOOgsf+9jHcOedd2L9+vUQQmDTpk0H5MIJAO68806sXr0aX/7yl/F3f/d38H0fy5cvxzve8Q6cd955B+Q1R+Pee+/FDTfcgP/1v/4X9u3bh9NOOw3//u//jj/4gz84qPtBEAThwuT+zAYEQRAEQRAEAGq5QhAEQRAEMW7owokgCIIgCGKc0IUTQRAEQRDEOKELJ4IgCIIgiHFCF04EQRAEQRDjhC6cCIIgCIIgxgnlOBUQQmD79u1obW09qO0uCIIgiNmFlBIDAwNYvHgxOD9wOkS1WkUURdMyVhiGKJfL0zLWkQpdOBXYvn07tXMgCIIgxs3WrVtx1FFHHZCxq9Uq5lZaMIx0Wsbr6urCpk2b6OJpCtCFU4HW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7969OOaYYwAAbW1t2LtXhfSef/75eO973zupMSd1r+2aa65Bb28vHnroIVQqFaxfvx733HMPjjvuOHz/+9+f1I5MB/PmzYPnedi5c2du+c6dO9HV1bgPVKlUQltbW+5BHHrCOYsRdiyYvFIwni7trtK0n79Ieb8TQwKVF6QygzylkpiMJ0e1inp79l+tdJgiGbfH1XprcivITK1LI7AkAkSif4/Vw2ZBaTUqrGhvk698TdGweqQxWDSSbWM4UlU/Ta1/b+FY6n99pRjb02T8YaaSUYj8OmYTnfpuHlHf7obne51BWatMRpUabTviwFD8N6/RhdNk/j3t6uoac33z/4mMOVWOOeYYbNqk+omeeOKJ+Pa3vw1AKVEdHR2TGnNSF07//d//jdtuuw1nnnkmOOc4+uij8Y53vAOf/vSnccstt0xqR6aDMAyxevVqbNiwwS4TQmDDhg0499xzD9l+EQRBEMRUEFJOy2O8TObf03PPPTe3PgDcf//9dv0VK1agq6srt05/fz8eeuihA/Zv9Lp16/DEE08AAD784Q/jjjvuQLlcxrXXXosPfvCDkxpzUrfqhoaGbF5TZ2cndu3aheOPPx6nnnoqHn300UntyHRx3XXX4fLLL8eZZ56Js88+G7fffjuGhoawbt26Q7pfxIEj3rUFLChnqo/JC3KqicZklD8mbiVdPuE6hZ/zTXGAyXwvO6M8aaJ92f17N/fmsEarQtbPolUnFg0pn5M5PlrVsKnivsiq4aCPvxfYajy3d6A01XdeAOmHal3uqzyug/1+ZxillnalOOlqupwQ5yiiAFQlnPEujeHxCzu7cucy0xV0dizGrUrs+pbMz6aXoeQ+agO9NvfL7EPUtztTpBpUPxq/lkl+d7PDgMO7gk/qx1THmAj7+/f0sssuw5IlS6xg8td//de48MIL8Y//+I94/etfj29+85v41a9+hbvuugsAwBjDNddcg49//OM47rjjsGLFCtxwww1YvHgxLr744im+u8Zce+219uc1a9bgmWeewSOPPIKVK1dO2o89qQunE044Ac8++yyWL1+OVatW4ctf/jKWL1+OO++8E4sWLZrUjkwXb33rW7Fr1y7ceOON6O7uxumnn47169fXmdEIgiAIghid/f17umXLllx1/Stf+Up84xvfwN///d/j7/7u73DcccfhvvvuwymnnGLX+dCH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4YkTwzAMwzBMgfDEqYzceuut+PznP4/q6mo0NDRk3UYIkfF47LHHfNs8++yzOPnkkxGNRvGZz3wGDz/88NB3vh8KGduuXbuwZMkSVFdXY+LEibj++uthmqZvm0ocWzZmzJiR8T7dfvvtvm3++te/4rTTTkMsFsPUqVNx5513lqm3A+P+++/HjBkzEIvF0NLSgpdeeqncXRowq1evznh/jj32WHd9X18fVqxYgfHjx6O2thYXXHAB9u3bV8Ye5+e5557DF7/4RUyZMgVCCPzmN7/xrSci3HjjjZg8eTKqqqqwcOFCvPPOO75tDhw4gKVLlyIej6OhoQGXXnopDh8evqK1uehvbMuWLct4LxcvXuzbplLHxowOeOJURpLJJL785S/j8ssvz7vdQw89hL1797qP888/3123c+dOLFmyBF/4whewbds2XH311fg//+f/4A9/+MMQ9z4//Y3NsiwsWbIEyWQSL774Ih555BE8/PDDuPHGG91tKnVsuVizZo3vfbryyivddZ2dnTjrrLMwffp0bN26FevWrcPq1avx4IMPlrHH/fOLX/wC1157LW666Sa88sorOPHEE7Fo0SLs37+/3F0bMMcdd5zv/Xn++efddddccw1+97vf4Ve/+hX+53/+Bx999BG+9KUvlbG3+enu7saJJ56I+++/P+v6O++8E/feey/Wr1+PLVu2oKamBosWLUJfX5+7zdKlS/Hmm29i06ZN2LBhA5577jlcdtllwzWEnPQ3NgBYvHix7738+c9/7ltfqWNjRgnElJ2HHnqI6uvrs64DQP/93/+dc99vf/vbdNxxx/mWfeUrX6FFixaVsIeDJ9fYnnjiCZJSUnt7u7vsP/7jPygej1MikSCiyh+bl+nTp9M999yTc/0DDzxAjY2N7tiIiG644QaaNWvWMPRu8Jxyyim0YsUK97VlWTRlyhRau3ZtGXs1cG666SY68cQTs67r6OigcDhMv/rVr9xl27dvJwDU1tY2TD0cPMHfCKUUNTc307p169xlHR0dFI1G6ec//zkREb311lsEgF5++WV3myeffJKEELRnz55h63t/ZPv9u+SSS+i8887Luc9IGRszcmHFaQSwYsUKTJgwAaeccgp+/OMfgzzWW21tbVi4cKFv+0WLFqGtrW24uzkg2tracPzxx2PSpEnuskWLFqGzsxNvvvmmu81IGtvt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\n" - }, - "metadata": {} - } + "slope.plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "fSn5efPUA3-S" + }, "source": [ "#### Comparison\n", "\n", "For calculating the July temperature trend slope, the server-side approach generally offers better performance due to the reduced data transfer (downloading one image vs. 720). While the client-side approach offers more flexibility with the full Python ecosystem and Xarray, this flexibility isn't necessary for this specific task. Code readability is comparable between the two approaches, with Xarray's `polyfit` being concise but Earth Engine's built-in functions also expressing the calculation clearly. Therefore, server-side computation is probably preferable in this case." - ], - "metadata": { - "id": "fSn5efPUA3-S" - } + ] }, { "cell_type": "markdown", - "source": [ - "### Monthly mean temperature difference (July - January)" - ], "metadata": { "id": "DkkYQ3QNa0fL" - } + }, + "source": [ + "### Monthly mean temperature difference (July - January)" + ] }, { "cell_type": "markdown", + "metadata": { + "id": "cgW4s7fnFBxA" + }, "source": [ "#### Client-side computation (using Xarray)\n", "\n", "The client-side approach leverages the intuitive grouping capabilities of Xarray. We download the entire collection and use `groupby('time.month').mean(dim='time')` to efficiently calculate the monthly mean temperature. This approach provides a very clear and concise expression of the calculation." - ], - "metadata": { - "id": "cgW4s7fnFBxA" - } + ] }, { "cell_type": "code", - "source": [ - "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", - " .filterDate('1960', '2020'))\n", - "\n", - "ds = xarray.open_dataset(\n", - " climate,\n", - " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", - ")\n", - "\n", - "mean_deg_c = ds['temperature_2m'].groupby('time.month').mean(dim='time') - 273.15\n", - "(mean_deg_c[6] - mean_deg_c[0]).transpose().plot()" - ], + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -456,43 +450,93 @@ "id": "kC4pfLPYFOnX", "outputId": "b080d5d0-a758-485c-e5a2-0e26da495b42" }, - "execution_count": null, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "" ] }, + "execution_count": 8, "metadata": {}, - "execution_count": 8 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { + "image/png": "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", "text/plain": [ "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAG0CAYAAAA1s/OaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA3pBJREFUeJzs/Xm85FSd/4+/zjlJKlV1t967gQZaRFZXRGhxlxEVdfiIojM4KjLiz2ETRKUdlOWHtDCMKIqt8GF6YARXlEFRPs6AoCIiNogLggItNEuv3LWqUknOOd8/zpKkqu7tu3bf232ej0c97q1U6iSVqlQlr7zerzeRUko4HA6Hw+Fw7GbQnb0CDofD4XA4HDsDdxDkcDgcDodjt8QdBDkcDofD4dgtcQdBDofD4XA4dkvcQZDD4XA4HI7dEncQ5HA4HA6HY7fEHQQ5HA6Hw+HYLXEHQQ6Hw+FwOHZL3EGQw+FwOByO3RJ3EORwOBwOh2O3xB0EORwOh8PhaOPpp5/G+973PixYsADlchkvfOEL8dvf/tY+LqXEZz/7WSxbtgzlchlHH300/vrXv+7ENZ443s5egdmGEALPPPMMuru7QQjZ2avjcDgcjlmKlBLDw8PYY489QOnMaQpRFCGO42kZKwgChGG43fn6+/tx1FFH4fWvfz1+8pOfYNGiRfjrX/+KefPm2Xkuu+wyXHnllbjuuuuwYsUKfOYzn8ExxxyDhx56aFzLmBVIR4ENGzZIAO7mbu7mbu7mbuO6bdiwYcZ+kxqNhqyATdu6Ll26VDYaje0u91Of+pR81ateNerjQgi5dOlS+W//9m922sDAgCyVSvKb3/zmtLz2HYFTglro7u4GAGzYsAE9PT07eW0cDofDMVsZGhrC8uXL7e/GTBDHMergOBF7IpiigyWGwA0bn8bWrVsLv2+lUgmlUqkw7y233IJjjjkG7373u3HXXXdhzz33xL/8y7/gwx/+MABg/fr12LhxI44++mj7nN7eXhxxxBG455578N73vndK67qjcAdBLZhLYD09Pe4gyOFwOBzbZUdYJ8qgCMjUDoKYVH+XL19emH7++efjggsuKEx7/PHHsWbNGpx99tn49Kc/jfvuuw9nnHEGgiDABz7wAWzcuBEAsGTJksLzlixZYh+bC7iDIIfD4XA4ZjmMELApHmwxEEC2X+loVYEA5Y99+ctfjksuuQQA8NKXvhR//OMf8bWvfQ0f+MAHprQeswlXHeZwOBwOxyyHEoBN8Ub1MZS50mFunQ6Cli1bhoMPPrgw7aCDDsKTTz4JAFi6dCkAYNOmTYV5Nm3aZB+bC7iDIIfD4XA4HAWOOuooPPLII4Vpf/nLX7DPPvsAAFasWIGlS5fi9ttvt48PDQ3h3nvvxcqVK3fouk4FdznM4XA4HI5ZzrRdDhsnZ511Fl75ylfikksuwQknnIDf/OY3uPrqq3H11VcDUD6oj33sY7j44oux//772xL5PfbYA8cdd9yU1nNH4g6CHA6Hw+GY5ZhLWlMaYwLzHn744fjBD36AVatW4aKLLsKKFSvwxS9+ESeeeKKd55Of/CRqtRpOOeUUDAwM4FWvehVuu+22uZMRBIBIKeXOXonZxNDQEHp7ezE4OOiqwxwOh8MxKjvi98Is40xvH5SmWB3WlAJfSp9wv285nBLkcDgcDscsZ0dfDttdcAdBDofD4XDMcnb05bDdBVcd5nA4HA6HY7fEKUGOXYYN552M5Rdfi8fP+kcQps55JOeQQhTmI5SCBn6h4eHeq9dO67qsP+efAAAiSUByyxFJCskFaODZ9Qi6K2OORVj2fMlFYdqyVVdN63o7HI7ZibscNjO4gyCHw+FwOGY5BFO/dOMOgdpxB0GOWc2jp50AAEijGAf+35vx14++y6ogPE4BAEFPFcz3QAMPz1z8UXTtuQhSCPA4tfNS/ZdQCikEmv0jSKOmVYn++tF3QfCiYkQZxf5rvmcf51rF4TEHTwREzAEAgktQRlDqKYEnHMxnYKEPrxzYsYwy5QU+mO/paRTU90AYhYhTSCEguSioPYRREE7tWAJQ83IBwiieXX2qXVdCKRaf8yU7zalEDofDMTbuIMjhcDgcjlmOuxw2M7iDIIfD4XA4ZjmuOmxmmDNhiZxzXHDBBfjGN76BjRs3Yo899sAHP/hBnHfeeSD66FhKifPPPx/XXHMNBgYGcNRRR2HNmjXYf//9x70cF5a4c3jm4o9a0zCgLgVJLhAP1+ylH0IpvLAEGnigvgcWqGN4qi8vSS7AkxQ8itUYVF1OiofrSGsNAOqyWtpIwJPiZafKgipo4IGFJYg4AQDwKAZPUoiY20tllFEILpBGKVigvlK4vixGGAVlBIQSSKF2q8riHpT6uq35mYUBKCt+FfEksZfB1PLUZT6RpHZc83rMJTPzupN6pP7Xr9Wuh+9ZAzbTl9zMdvLKJVDfQ/f7L5jSe7Y7MHz9BfZ98CohpBDoOvGzAIChtepvz0kX7azVc+xkdmRY4kWV5yEkUzuMiSTHZ+uPu9+3HHOmRP7SSy/FmjVr8JWvfAV//vOfcemll+Kyyy7Dl7/8ZTvPZZddhiuvvBJf+9rXcO+996JareKYY45BFEU7cc0dDofD4XDMRuaMEvS2t70NS5YswbXXXmunHX/88SiXy/jGN74BKSX22GMPfPzjH8c555wDABgcHMSSJUvwn//5n3jve987ruU4JWjH8tT5H4aIU/AW1cOoHfFQDUmtiTRKwWOBysIyvDCwJeYAQANfqShRE5IL+MYorc3SzPfs+HkDcqoVI5EkEHEKGnhWhTHr4lXV8gil8KuqH44Uos1EbfDCQC1Xqz358vb86xKcj2v75FUjrtdTCoG0ERdK/6nvqfXMLc+oZ5Qxa7IGlKI0W9SL5v+uRenok+zfmaTxI20UF1zdqI5RaEYApSCMoXzcWah982K7bVsN64JzUMbAQmVUz29XAFYlmghGUQLGryoNXnseCKVoDgwXpuff4wWn/duE18UxMXakEvS56vQoQf9ac0pQnjmjBL3yla/E7bffjr/85S8AgAcffBC//OUv8Za3vAUAsH79emzcuBFHH320fU5vby+OOOII3HPPPaOO22w2MTQ0VLg5HA6HwzGbMMboqd4cReaMMfrcc8/F0NAQDjzwQDDGwDnH5z73OdvRduPGjQCAJUuWFJ63ZMkS+1gnVq9ejQsvvHDmVnw35W+f+gAA6DNo45lhWHH5fxXm2+vCa/DIKe8E0z4fMy/VpeR+NUQ8VENzYATNoSae+2s/BBdgAUNQ9QEA4bwQ4bwqSn3dygM0VIOIExVEyCqIozr2uvCawnJNmKFRj6p7LrLrYM6mme/r9R7fuYJsUYcE50CHsMZO8+bJL48LYdUc5vt2nYLuqvVNAUol4pFSh6hWwbxyCb0nXzyudZ9u4ntuAgSHbEaQaQIZ5y5Jp7FVYQCt0KQxGjdfAXhBIVwyfOtHAQDNO64HAJTe8P5Jr1P5baeOa77qP5w36WVMhOHrLwAwOU+ReV+3feUTaA6MAMg8bOYzEV34EXjlAEs++WU8feFHIPVnCYCd7nDs7swZJeg73/kObrjhBtx44424//77cd111+Hyyy/HddddN6VxV61ahcHBQXvbsGHDNK2xw+FwOBzTAyVZhdhkb9QJQW3MGU/Q8uXLce655+LUU7OzuYsvvhjf+MY38PDDD+Pxxx/HfvvthwceeAAveclL7Dyvfe1r8ZKXvARf+tKXxrUc5wnaPsbHI3IKhxcGBbVlw3kna99N01Zr8SS1lUq2+muoAcIICKMIF/S2KSQ8agJQVV0mnDCuxeCxANX1ootevA9KfV2gvgeRpEijGJILeGEAv1pGlPNNtFZeUa02+dVyobrKYCrTWslPb13n/P1W789oqlCnZVjPk/b0bA/jWfHKJQDYaSoQAKQP3AYIDhHVIJMEMqpBpqrqzvhxSBCq/zXEUypX3hvUvPMGlF534g5d912FzZefiaQWFRRDqisqTbgo4PxDU2FHeoL+vef5KE/RE9SQHB8fetT9vuWYM0pQvV4v9HoCAMaY/SFesWIFli5dittvv90+PjQ0hHvvvRcrV67coevqcDgcDodj9jNnPEFvf/vb8bnPfQ577703DjnkEDzwwAP4whe+gA996EMAAEIIPvaxj+Hiiy/G/vvvjxUrVuAzn/kM9thjDxx33HE7d+XnKE+uOglCCIg4sW0fSn1dtppLJImdd99Li5cljbrxvCtuLIwXD9d0Zo0PgQR+VakWggs0NvfjoLW32PkfPe0EPP8r38FD7387Gv0R4lpsc3oklyj1lOyy0iiGrEW6SiwGCwPwJMXij34eADBw9aftuKlWl5jvgwaeXVeTo1N4DfrAO++nANDxf6PyFM68W7ZpXgcy87cutzVHqLWyq5NiJeIUSdyw/9PAQ/3bq1F5zyrsDLyXvrlwv3nnDSCipSKOMqvyNO+4XqlCXoD4F9+yszgVqJ3+Nedinv5cj8Xic76EZy5Wnqo9z/+69cEZmO9h79Vrsemy02dkPR3TiwtLnBnmzEHQl7/8ZXzmM5/Bv/zLv2Dz5s3YY4898JGPfASf/WxWXvrJT34StVoNp5xyCgYGBvCqV70Kt912G8Iw3Ilr7nA4HA7H1HAHQTPDnPEE7Sh2d0/QY2eqPKVEqyoGk80TdFex/OJr2573+Fn/WKj+enLVSVZlMfOvP+efEG0bBI85KKM4+Pof4uF/Ps42JaWMgidZU1LmU7CA6dwdChp48CtlpFETSS0Cj5QS5VdLNrfFC0uoLJuPhWf8e8fXt/nyM1XD0pwniDAKv1q2ikxedRmLVn9PfnuZ/808nR7bHnmlh+a8VICqBMo3W817gQCVTD2ZzJqZIrnvluIEIeAfcdxOWZeZov7dywDBwZtN+z7NxHswlhK05YqzAACLzrqiMP3hfz6ucN+on6W+bsRDNTVNCOvZY2GprZJzNrHpstNtw+CdyY70BH25b3o8QacPOE9QnjmjBDkcDofDsbviGqjODE4JamF3V4LyPH7WP0IKgfrmIaSNFIQRsIAhHkkK81FG4JWz42lCCfxqCUFPFQBs9k9zYAQ85khqCQSXqCwsq+lDTUgu4Vd9pJFSaHgswBMOSknWk4sRdC3rtSnORv1Ry1CKyB7nrZmx7VH/7mU2WTiPeX0wypD2vkj7t6gCjaUSmZTnPEYBIpSCUKYydsw8Ntk4y+GhQQhSroJQanN2HJOj+b9rIeMIolGDjCObHp1/n3ZErtDfPvUBiDhRaeVxWkgsN6omjznSKIXkEoKrr/V8fzzKiJ0OoLB/eWXPKq+SSxBGrDJ6wNXfn7HXZTxLaS1Cc2BYZ4DpzLDc/kF9D0FP1foRpc7fGk2Z3lHsSCXo6/P2R5lOUQkSHB/p/6v7fcvhlCCHw+FwOGY5dBqUIOoSo9twB0EO/PWj70JSUxVTJOe8M76G8oIuAMDzv/IdPHraCWB+AzzhIDp5y/h7JsrfPvUB7HvpddYXBMB2ZpdcIolSUEbAYw4WMAguEfXXQIcaoAGzvbxYWALzZ/6jnI6MKPXJC0BKmdmeUKbUH8aUKkQpIISdTiizqhChFJIVFSBJix6h1uovQimIFxTmQZoUUpepztgRaWJVotmuAvH19wMA2IqX7eQ1aadxy5UAAJnEBQUIUO/LTPqttlxxVi4JXKk8yVBN519JCC7AEzGqt4wwAgog0aoqpQSUEcS1pK3nnanXS6PUKkF+1QdjrGOm1XRjXsPeq9fi8bP+EQwqLR6A3ac7KT3rz/knEMZ2qgrk2DVwB0EOh8PhcMxypqU6zAlBbThPUAu7oyfozye9A82hJnicqzYSss0v4JVVt/Z8lk8rf/3ou+BVy4iHaqCMYv8137OPPXjCWyBibn0JQZePF37zx1j39r9rU4JKPSWU5lUx8uygVYMkl6gs7oJIUqsOAcoLUV0233aL98Jgxs4QTfdur1IGqbZ8PkwOTi4PR3KeeYVa5pOtuTkaYhQe7f0hjKkeXCLrQ2b9QXk8H8QPUH7HGZN7cQ7LyA2qn5dJGJdCTCqBe+uVH4fkoq1aa+DqT6PvlEsK09af80/WX2Z8PoBSS6KBOrhOTJdcgsccQnT+6uYxh4jHp+KYfdvvCpA2VN8xngjl//PV58vkcxmVuDwvxAu/+eO2sX53/DEgjCJtpGABtftnp3nzPH3hR7Dn+V+32yCtNZBGMTzt+SOM4vlf+c64Xs+OZkd6gq5beAAqU/QE1QXHB7Y+slv9vm2POZMY7XA4HA6HwzGdOCWohd1NCXrklHeCRwka/RF4wu3ZJrWd1CkSXXFiqsOYzyB1J3dAqTZxLbb300aqzzAZDr7+h3jklHcCAOqbR5BEqVV1vLKHyoIy6tsa6n6YXZ1lAcVLbvp/WPf2v7NVLH5XoBUrXkiMNvOXF1ThlTPvDPX9ac862faVT0DoTt1d++wJAMofRJny+7RUiFnVJ99DbBRlKFvx7GyP+D5AGWQSA2kC3lS92Gy1WC5LqPv9F0zLa9ydadx8BXhtuJACLrmY1LbddNnp4FpJYoEHrxLaNPA0amLRWVfgqfM/bD838VDN9r4zffJ4opRTo6BmXiGTD5WrEotF4b7MKUX5qrA8zM/1yRNy1PnGek7eGwhA9wJU0/zQg98V4MXf+cl2xwWAP/zDWxGPJAi6fDT6VcVjqacE5lOUesoFZXk2sCOVoG8smh4l6H1bnBKUx3mCHA6Hw+GY5UxLTpCrDmvDKUEtmKPuP5/7QSxdsaztuv108PSFH4EUwuZw+NWwzTOwo/nd8cfYiixAVZS8/MeqGe1v3/pGNIdi1bNLn10KLm0Xd3MmmD+TDKo+yvNCvPTmn7Yt696/ez280MNhP/wfe+aXRikqC8vWh2CqzczjzaEm0igtnBUbvLIHqj0MJq/IVLp4ZQ+VxdkZD6EUNPDbep1NhIGrPw0eJygvWaRedxqDeAGI74NUetpVoNGUn04qEVDMIaIMxPNVhZLu1UZKoZrW2s8sCAsd2McD3/AHAABb/sIJPW8mSR+4DSKq5Sao1x28+r0zutzox2sg0wQyiZEODQHIuq6PVw3afPmZiIfrWs1J7HtkMrMam/sBqKov897Fw0rxMPtU0B3aas2klhT8P6Y6THIJyc2+mKlDUj9mxjOYjCC7zzJiVUTKiN2HAVUpZvY1s8xOqJR3ktvntEcv4Wo/04/5VR/dy7ow+MSQXdeklli1yCzLD722dTaYeY1azAIGwgj80INX9sC1B+qwH/4PHnr/223yPPMZyov7ZiT9+ukLP4KBwREcesWNO0QJ+ubiA6dFCfqHzQ87JSiHU4IcDofD4ZjlUEKmnPPjcoLacUpQC9N9jTffuVkkSS7xNMscMf16klpkz86Y74EGnvZ9ZD25tl758VH7Ym2PDeedDBYGqG/cZju5r7j8v7DhvJPHrKb67VvfWKhEkVwiHolturPxCxlMOq1RZvL+gAUH7Ym9V6+18z54wltQ31pXrzlgoPqM1PgI/njisWgOxYhrsapeGcO3YJJ8KwvLoFT5l0o9JZQX94HrzvEAUOrrRlJr2AqcyVSe1L55sX0+K1fURMHBFixt9wW1/F9QhjpViOmzPUKprhBjkEYZMXlDlZ6CB8n8H77p5Am/lp2FePTXgOA2kVkMbgMf3AYAIL72dgmuFDDBQUoh2KI9ERx1woyuV/N/1yLd8jQAWP8VK5UAzwfSBJX3rBr1uUYJMv4eQ9BdRXlxH7b+/jEAOUVHSOtxA5R645W9zBOkVSDzOGEElGbqS94T1hxq6gqvvBdIII1Sm8BeGIcREEptJRfzGQQXSGqJrRa140gJSpTXp1UZEh1+QphHEXT5CPtCBF3qvaxvraM5FOvXL0B1OrUhX5Emhei4n3daZ/Pc7HVl3iRKCUq9JfjVAEF3Bc+74sb2N20K7EhP0Hf2OHhalKATnnnIKUE5XHWYw+FwOByO3RKnBLUwXUf2G847GfFwrdCNPX/2Zyo9RrveTnWllfG2lPq6QBhTKgulNkmWR019VuVhvy99C4DqBJ/UIjSHmoXr/ZRRxDV1JmbOoppDTRBGwGOBoMsv+HsA5feRQiJtqKoungikjbTgD8qfyea9BmqZxFZxlXoCBNUAB1//Q/zhH94KHnOUekqQXGJkcw1Rf2TP7GhAEVQD9O4zr6DUPHDcm8Bj3raMcF6I2qaaTbytb2sAUN6k6uLuLHm3FoP5DJVl8yFi7bHJKW3jZeSGi2xKM3QyNG82Eez1PKVedFKDDB1UIevtMb3BctNkmoCYZWUv2i7XjDlRP9CORjz6a/t/uuVp8G0bgTTOsnGiulW0WvupGWioVDdSKoMEIcSw8thUjj9nUusU/VQpoONR0OrfXg2RJuBRjNgmOKteV4Dxm3lo9o8gem6w0OMr6KlixeX/hT+eeCwAFL4DWvO5gM4+HOarakAW5HxgOpcHyHqBGeUobaS2uixtpPb7AFA+OuOvSaPUenjimton8vt0IgTM6nAptUE3W6+GfpDrnxJGCBYtLKusr54SgqqP4WdHUNtUQ9LMPvuxfq3VsqeUmtz3j/meUdtK6G0lrQ+JBgx+6Gk1SbQpSq1qtHmtPOH2O8Z4CQ085qgu7kaprxuNbYNWyVMqfQwec3ihB79aglcO4FfKqAM46PP/uUOUoO8tP2RalKB3bfiTU4JyOE+Qw+FwOByznQ7NlScMcZpHK+4gaBSe+v+fioP/beIVBabyS3JVFeJXQ/vBVUnHKXiUQPDU5urkr32bDA7zGPU9sMADj2LbNb05VEM0UC88lzKCh//5OKSNBDwRSEbijomy5uwqj8n/afRnZ0mmazthFMmI9kUESoniMc+aDkH7mgICT1dqmLPR1uTa6uJu+D1VPHqa8nTUtzYQ1xIEVR/zn78Qz6572lZ1mDPobY9swebXvgZe2cMrbrvDqlFIsnG90MNBa2/B3z71AUgu0Ng8gK7FVeuRGHpqsPB6WcAR1BrWFzUZuk78rOoqD4A36tY7gnyPMCGKao0hnwNEWyrB8l9yXqAqxXIJ0uq+mmemvTHTSXLfLRDDAwAAqTvey0ZNq2bcdkcfDauUxEN6ylDm1QFQv+lyABg1Mbt55w2Q9SF7P99XzaxP7ZsXg1AGkSa2N1j/mnMBqFwf6nvwq2VE2waR1CKkUVxYBtVKEKEUfqWMBA2kQ3W1z0RNbDjvZPhVtb5GZUijVCmrLQpQa48v43ORXKC+tWm9L0SnqQNZPpfQ/h+jwKaNJhKtABufT9JsAlA+uVhIq+IY8kKUEUu4NGqPRECJvR/nvmcYIWraSKL8QFXfrpvg2byDCUeDS/T6FHEtQTlKUY4CsED90POEoz6UrV++tDugBDTOlCLa4kc0fidAq6n9+n3WqmvYl/X9C7oClHoC/b0mMPTUINjmYcS1pKBuM5+BMqWKiyRFIgSSWoQG3XFGY0Kz/KVJjwFnjG7FeYIcDofD4XDsljglaBTqm57DY2e+V/WJCktgYWC7lhNGR831MT1wnr7wIxBCqD44DV0RIQTShrrmrlJQPaRRjPrWhn2+5NlxaVJLEA01IWIBGpgzQWnTloHsjNEoLpWFZQgudQK0KHiCpJC2AgRQZ5fG22OqNjolyJqMEQD6Ojy1yzfrZGgONm2arX0duors2fufsdMIJeCJQFxLkIwkGH5mxFab5Zev1klVkdzzhtfa12nUK0D1IANgs38eOeWdaGyrgWiv0KE33IoHT3iL3k7K61DbPIyg6iNc0IvK4j5sueIsxEN1JPUIfiUsvJejkegsmXgo836Vlq8oqjmjVH+Zyi/iB7brvFF4aKgyZbzDjh1z+XMJvuVpq7gYdSzuH7AVfQDAtUeLstF9DzbbxvcguUA8ONz2WHzteaC+p27d81B+26kQQ9vAjRLFBUIolYfris3+331UeUu0WtB/3sl2XiFM/k7m9VJenuLnlTLl1RMx11k5xn+j1mv5xdcWPofGE2Q8PGIUj6DkEgICPM6qs+pbGzaDyKgePOGIn0r0Mj3rCYpHdM5Sl99WcdUcjhFQAkApOFxCqzzSqkGM5FUgpczk1Z+RNK8EKZWo1FMCCxjiWoJ4JMaTTw9jMBEYNPk9hCCgBCNpaj1GRzx/PmhA0djaQHMoRbmqlO9580JILtAcivHcUBMhoyj1ql5nQ/UErZvMrL9ZBvN0ZljoQQqBoafUZ4YFDPVtDTCfoWd5t02tJ4yie1lXprBFxYo7ySWoT5U6pz+zOwKaU7gmPYZTgtpwB0EOh8PhcMxyVNPkqV28Ia4Oqg13EDQKlSXz4XsehDnzEwLxsPLhEEqx6bLTAQBLPvll+5yBqz9tVQHCKOa9YDme+/MT9vGkFtlr+2kjQdSvFCCT36EqwZSq0RyKbUqyOaMDYKsdSj3qLCmoqrO7GErJSaIUQdVHoPtsCXUKZ9chbTSt18coQyQgVlnp3bvPvt7aphp4whHpHj52fOar6pHc2aCpIjNVJZ2uXccN0XYmwxNuu04DRVXJVGMInl3/z+eUGL9Ba5fqA67+fuH+gye8Jas00T3PRMzR5AKSD4BHTVSWLgAA+JXQKn7D118wZkqw8WiFvodSX3dWEdbJB2TQCdBWAerw2EQUIP6336l/pABb8bLCdMJjQAq1Ll4J9HkvH/e400W67lbwwW2FbCTZjCDiSPs3qPUCjaUAAUrpMZWQBvMe5HO37P+UQTYbGLnhIqS5Ks00aqJ+2elaeREFBcisi8gpPvnO7tabxIVVUo2/Jx5OrXpAGAWjBF5ZfUbjoQb+8A9vtfk/rSrQaOQ9QjIpJkFbr2EuY4jlqqWa2lNDdfWnqbACsuov5lH1N6AIGEWjFlsVyCg/DS6t18d8neQfz/5m/qE0SnXlqapeKzOCwQQo6++/gBKUmbqp8YHhZ0dQWVhGOC+E4BLbttT0tiTo2asb3cu6UO2PUN/WwEh/hEbOY2SWywhBWecPmfwiySUatRisnsAvMascm7wh5XtM4Hf5oIwo/1LM7XeY2WZ+1c+8WUKAlgMwb2rVWo6djzsIcjgcDodjluMuh80M7iBoFLxKCEYpaO4MVsSpqv7oUKo4eO154HGCeLhuzyaH1j8LALZHWNBTgYhTW9nFAqYd/2osP/Ss4pNqRadnr25QRtHoj6wiQ3VaKqDOTtRYah4ec9S16tGzV3fhzFhlhWQVLUZVMTdfXzMH1FmSV1a+C+MLMh4H493JV6ZlY1LlncidnebHNGOZ/BIAQK53lhnLKFilHtUjSMTCKmCEUVQWVOHrfkytPHbme63XpL55SPuAshwWEaW2M3XQUwb1PTQHRuCFAcqL+1Dq6waw/a7s/pLlasyortQWwdvzfLIXZrcBKYUgQagqwyiDTGNACNBqN9ihbxxzma2QVFdaRTWIR3+tel/VhtS4gmvfkUo6Fn+5W63KC46a0DKmAh8esGnXtkeaVsmMr4eFQVt/tSxbK1N4Co9rn44XKNWu9b0avv4CxIPDkFwg1VlaJiuqVf0BOitA+XW26eBaeWIA4uG6zY9R88pCRg1PBHjSzC1z7C7tlFGAwY6nXrcpzVJqK2UUhApITu14mYrF7f4lubCZPEbBYS35WokQiLWfh3GBMPcYI1mzzbwHqFUlakVVmgFPPtfA/JEYfQsrKh9sWx1lRgqVZkbJCYxnUSu+hBIEXT6q/WqfSRspnvtrP1jAUF1cwbzn9aFb5x498eSQ9f/kEVJVvAU+A08FAl+lxwddvv3ONNs8qCplO9HeH+ZTgDFbSWfUolJPGUmtmaVTUwqyA0vOCXPVYTOBqw5zOBwOh8OxW+KUoFFY+vF/t4maW644y55JemHQsTKs9+SL0b/mXPjVENzPvAOlMMiqX3TSLKGNzI/DMi9NXIvtvEHVt0f9NGCoLCyja5lSKKQQaOh+WzwRqC7uBvU9BNVh0ICB+dnbmvdPEErRHBgBoNQcoy4xn9nqs+f++hwApVLlvTh5r0O+WsyQ7yNmu0+3dDk3KhdPMmk3rwyp56jXbHsI5bI6Sj0BapvqtreSpxW1Vpr9taxqTj/fKGclW1UnQRlVWS9RjN799lQejzgdV7dwADahOfrxGnCdXEx7FnScN58ITYIQtNoDUqqA7veKcS1rNKSnKxbLFGLoOdXJvhQWkqcBWF/QjoL/8XblBYojwAuAqKYq4DT5zwVhFNTzbU+ufF82HmW9pgyd8oSin16LdMvTKqU5SW2lGY/iQq8+M1ZrKnWevA8IyKV6syzvyySy5+mUlj6W8gNAZWrZ5WafdbRMU+OpDBzGWLa/CWEVCxowEO01AlSzTJP2zKVE0uRgXuaTUR4e4/WRGEq4rQQDYBUapbIUq8VMNVn2eLF6zKg8UX+ketqFHlbMC3PfJwIsoNg6EmMkVWrQM0NN8MEm5gfMVnipDQ6EoVKBWcDQHGxab062LrDrsKWegBG9/glHpadkO9SnjRS9+/QCQCFR2yt7YAGz33NJlNo+hgDV1WkNUEZBfQ+led2gVPmodhStn69JjYHOn/ndGXcQ5HA4HA7HLMd5gmYGdznM4XA4HA7HbolroNrCeBqoNm6+AjLRzTd9H/AClN92qnr+2s8WDJem0SIApLXISvOSc4gkzUzRlTK6916C0sL5AIDBR59Qxs8wgF8tq1LTqImh9c+itnEAzcFMiueJAGHEloyzgFnZOd880NOX5gijYGEJPGpi6InnbCAjUIzrz4cl8piDx8K20zCm7vw6AJkBVE3jhTC36pIqaptquee0l5GbyyRe2UNlYRmvuO0O+9hD7387BBdIagkqi7vsJRPqe4Wy+M2XnzlqoOVfP/ou8CQF8z141TK8MEBSayBc0Iugp4KFZ/x723PGQ3LfLRCD24qNTXU7CEKpuiQE1ayVVrpBqj1gB756UssaC/H4byGJCmJk+7x42scfDf7Qner1NiOI+jBkU8U/SKFK9GVUyxmjTdm++rxWjj8HjR9dBVkbgkjVfmWN7LlLWYVLYpyDMgbBuV1Ofj5rFubt7Tha51WrJFoumbWPa/ZjE4bYijCmWqAQH2EvDxfGL0ZBAMXy/taWN/mGpiZYsZWkloAn3F4ea9RiFUSowwLjelIoZ2+9nAWgeBkqv3zZborOX4IyxELdfy7mSHRLDWWCFm3jlZkOMyQEVUZxxIo+lOeFaA41Mbi5hvW6mWuXR7H3/DK80ENzqKkbswb29TKf2cDZWspR9VSMCNHNmysLy6A0M6zng14NJrwVKAbGAtmldC8MwELVyob5HsIFPYh8D/t87As7pIHqT17+ClS9qV28qaUp3vLb37gGqjnc5TCHw+FwOGY5lFHrhZr0GNJd/GnFHQRNgvJxZ436GGHUnr0KrfaYM1HCKDwWgPqeNWxSSlFZNh/hgl7VdDNVZ5tBdwVeuYR4qIaRp7eo5S7uQ8+KZaguW4Btf/wbACCuxfC7KEo9JRBKkdSUQlReWLFNPE1AW3OogVJP2Z5xBt1VVBbHIIygvrWBNEqtuhN0BbY5Y1JL1LqXKfzQQ6LnqyysAFDXqutbG2o6oyBMhxKCFcING/1RIYCsNWbAK3soz1NG3+riCsoLuwuPH3z9D+3/fz7pHXbcA9Z+H+vP+ScQRrHvpddh6+8fB2EEm048FqWeMgQX8MpKidl/zfew6bLTUXt2m1XFuvdegvLieaMaZceDf/g71Da+8walDgoGyTlIvkwdAAnCGW2HMdlAxGTz3wDB4S/db0LP4+vvV3/7N0M2I1WiH0dAGlv1C4IXjMYAAM9H5fhzsvv6c28bz2rMZ8REHrSqQYZOKlCeTtNaaR2/bfn6f8IECCf2B8moMkwHhuYV0lYVqFMw4njMrkaNsCpQXAxsBNT+Y8q/eaKMxyYgUXKhggJbowZ0BAZPBShRKq/fwdBtwgeVGtTZV6LK3dXjjBBbWp9XgfIqUoMrA3VACUJKEPVH8MoeqkuqWHDgAnT9YbPdhtIo0qnAwNY6uhMOP/Qw0h8VlCxGCEq9AXzdcqM8TzVx9UIPfrVk1WNARZZQ3wePmoj6a2A+hVf2EXSr7zXZEpfgVcs2TNWvlgEAyY5soDodJfKjvHe7M+6w0OFwOBwOx27JnFKCnn76aXzqU5/CT37yE9TrdTz/+c/H2rVr8fKXq7NfKSXOP/98XHPNNRgYGMBRRx2FNWvWYP/9999p60woLZSpA7ABcdT3EPRUUOrrBuvuQzrwHNKaCr/zq2V4XV0IFixAdW+OkfUbEHRXESzbCxDcBvrVnt2G5sCwvU7tV5vgkSq1r+65CGktQlLLNWgVAn5FqUHRtkGIJEV5QRU8FjaUEEAhAA5QQY7Gp2P8QcYXEdc4aEDhw7NnpbJwNtkefEcYQHL+IcIIyvNCHPE/PxvXdj1o7S0t25RDaJ+WCj3TryOpIaj6SPRZ3WNnvhf7felbhedu+8onwLr7xrXc8SCbEUi5qoITTfsME5Zo1JFZhr94X6UGTZSm9ngZn4/gkI0aRByBer71/RDGMjWIUtByS9ClDZMcuw2B312BSFKktQiCc9tmxq+WEQ9nfjNzFk8ZhdSKn1Vj8kpTi/pjVJm8cpX51AKrNFFWLF03CIiCH8iGf9rzzXZFKn8mauajHeYzPiHKKBAAhGuvXlLcv0xMhRd6bZEVhfG4BEDBWLae5vWP1sHEKEf5thQGVV6feYoCCsSC2HJ1LoEkV0ZvPEY9HsXS0IOQEkkttq+jZ68evZ4CIhaIazG6l1YR1xKImCPmEr2LqwXVqqQ9QkHVt96h8sJuhPN7dbRBA1R/ZsoLelDfrJr4+tUSWKCa7nphSfsms5YshFFUly1A78kXF1/z0BDw//t85401zTglaGaYM0pQf38/jjrqKPi+j5/85Cd46KGH8O///u+YN2+eneeyyy7DlVdeia997Wu49957Ua1WccwxxyCKojFGdjgcDodjdmM8QVO9TZbPf/7zIITgYx/7mJ0WRRFOPfVULFiwAF1dXTj++OOxadOmaXi1O445owRdeumlWL58OdauXWunrVixwv4vpcQXv/hFnHfeefj7v/97AMD111+PJUuW4Oabb8Z73/veKa9Duu7W7fo5WLlim0ISff3ZXD9mYQAexUijZsEH4PX0QiYxWLULrNoFAKDd88B6VfCeTGN0l8qq4oYyyDRB+QWHAADKL9AtEwa3YdsfHlUKUqhC8Uw1WpBrL1F7dlvbmS8LPNVAEQGCJdpTkFN7fKhplBLEIwniWlzwNtgYeUZAQa0PiOl0eqsOiWLbAKMIUUbAfDZuFagTz7viRgDA0xd+BMynSHMekbzXSXKBR087AX0vWG7P+Bac9m+TXm4rpdediOTem9WyBIdMEtUmwygcozVWnQX4i/ftOD3ZtF49vmRF+4PCKIb6b5oAgoN6PqTgIILZRrHEyAuUtakSJKxCJqp9SKdzVaPYEC8A060y4qFaFoqo/3bCPneMH4CCGiNEtq76tRmvkmm5UdwE2X3KKASyz7v53Nnx9bh5r1D+7J7pfUeg3bujXguxLW6EMI2KdXBiruUMMY2C9f+tY6p9Ll+huf0fR8ElCMsCGQnv1PxVtbDIN1zt8ghGUuUNCrQSEVKJoVQgoFl1WlDxdWWbCnI1VVosYCj1BPC7VHuLoBogiVSTU6/s2XYi5r0IugLrKTSq75YrzkIaxdoHpH72kloELwzghYH1Z9LAg18N4VVC+4q8cqlNAdrduO+++/D1r38dL3rRiwrTzzrrLNx666347ne/i97eXpx22ml45zvfibvvvnsnrenEmTNK0C233IKXv/zlePe7343FixfjpS99Ka655hr7+Pr167Fx40YcffTRdlpvby+OOOII3HPPPaOO22w2MTQ0VLg5HA6HwzGr0JfDpnLDJC6njYyM4MQTT8Q111xTuPIyODiIa6+9Fl/4whfwhje8AYcddhjWrl2LX/3qV/j1r389na98RpkzStDjjz+ONWvW4Oyzz8anP/1p3HfffTjjjDMQBAE+8IEPYOPGjQCAJUuWFJ63ZMkS+1gnVq9ejQsvvHBc6zCeqp7Kuz9ZuN+4+YpCPgoLY5RoL+D5IKUySBCC9S6Af8RxSB+4zVaHmWqj8ZA++FPwsIole+0H2ahBpgmI56Px+F9t80iDqUxLag143SUk9YY+I/LghUCpR6lW+VYDaZTCrwbwqyEkFxh8or9YpSMkSj0lpA1dFSc6nSFm1/bN/3adGO2Y3TFZWMCs6mQ8DLC+CAnJGxj4ywaU+rqx/OJrAQBPrlItMMyZIAAs+eSXJ7V8/4jjpv4iZgFjKkAGrXDRchWiARAaAdWeLBspr3y1qGDNO65H6Q3vBwCEbzoZ0U+vtZlCpqkuSRNIyq1ylI6MWEWGBX6Wq9NSfdZWZZbz/uQVISnaFSLGKDjaW3MQxlTTzHyeDxeFJsuSC7AOhprW/YFQ/RyfdsgUEmCtrTMYA8vNI7kApQQ09ODrHDCeCPCYW7WIxxyMEruMfNWaUU6MEpRXpvKNYNW8SqlNohRpI0XKUztdIPMTMQBMq0NMSqCg6XEEuWpQRgh6dWsN89s8ONxEV0m1x/BDD/P3Vz+45vsnbSRoDsVg89R7EPapbDUAaGzp19s1q/bsOvGzufcuX8mn1j/oqaCy/962XctshxKSa+Ux+TEAtJ3sl0ollEqd2+qceuqpOPbYY3H00Ufj4oszRWzdunVIkqQgPBx44IHYe++9cc899+DII4+c0rruKOaMEiSEwMte9jJccskleOlLX4pTTjkFH/7wh/G1r31tSuOuWrUKg4OD9rZhw4ZpWmOHw+FwOGYfy5cvR29vr72tXr2643zf+ta3cP/993d8fOPGjQiCAH19fYXp2xMeZhtzRglatmwZDj744MK0gw46CDfddBMAYOnSpQCATZs2YdmyZXaeTZs24SUvecmo4451BDwd0J4F9my38aOrQGm3OkM2uShBCFrthvjL3fBe+uZJLcN78ZvgARB/uRsyjiAaNRDKUFo6DL82hGRYNRpNag0EPRXIaohSXxd4kqK8uA+SC9Q2Pod4KGs8SiiFFwb2zDBtqIoMlbmjPjb5ahSpp5v51RlpsdlqGqWgZarOUAueCzX/A8e9CS+9+aeT2gZ5CKOqOS0VtkrNVr9QolOnI0gu8NiZ7y36RTr3ZN0tSJ/+M4hIrQpDCYH0wzGfY1KvxX23qMatUOf/pdediPgX31I+H0CnZ2fvOfF8u19YdHWZ+j+fXD6+/KZ8po+5P97ntkL1WKKDUkQBSKbUKAoALXlBefJeHnU/V+GlEblKMEYJWl1jpEVYIlxANfVs8dgJqfdBCQFh/x8N5dtTjZJNxhEYs2OafDEB2P3ZK3uqh5VOpc9vXx4LUAgQnWmUNlLlE2QEvSgmSzd4VkFmPEFlRhF0+QiqAbr26GqrAJ0s277yCSS66lZ5gNT3fXmffSAatbGeOqswuWZTGkOo52/YsKGQGN3pN3DDhg0488wz8T//8z8Iw7G/B+Yyc0YJOuqoo/DII48Upv3lL3/BPvvsA0CZpJcuXYrbb7/dPj40NIR7770XK1eu3KHr6nA4HA7HdGIaqE71BgA9PT2FW6eDoHXr1mHz5s142cteBs/z4Hke7rrrLlx55ZXwPA9LlixBHMcYGBgoPG/Tpk1WlJgLzBkl6KyzzsIrX/lKXHLJJTjhhBPwm9/8BldffTWuvvpqALClexdffDH2339/rFixAp/5zGewxx574Ljjjttp650/2zX9xZp33gCic1JoV59SbpJkykek9AVHgT/8CxBPVeh4y/aFjCOQZ/4GQFWnCdu7TIBxDh7F8KtlVJfOt54fQJ916DNpsm0wu6Yep6CBUnziIZU/VKj+gs4Ayp35ZhkkxPoNWqvLCCOIawnWvf3vAACH/fB/JrUN9jz/6/jbpz6AZKiGpNYEF7zQC8h4IySXSGpNEJ2pxHwPNPBAKLU9onYnkk3rQQgF0kSpQQBA6Lir2Wi1BzKJ4a08HgCQPnCb8r0hqxzLuxlIuYr47u8gOOoEAEDzf1XVZ/jWj6J+0+WFse3n0FR55bwl5vNq+ogZz455jFAKtHiBWqu7OlZ8jaIgdToTHytpvD2HqMXrgxZViAuwFp+Qfa7xg+QeN/4gNY5SPSUVbf2vAOUZEi3rIrkE1d88JMj22bgWF/ZhVWGplBoEDCLmYAFF/jxa8AQABQso0kYKFmTvRSxS7f0xqo/yAWmLIAJKUJlfRmVhGaWeEl78nZ+Muk0nQv+ac1F7eito4CHQGVP+4szcW0gtdxR44xvfiD/84Q+FaSeddBIOPPBAfOpTn8Ly5cvh+z5uv/12HH+82u8feeQRPPnkk3NKeJgzB0GHH344fvCDH2DVqlW46KKLsGLFCnzxi1/EiSeeaOf55Cc/iVqthlNOOQUDAwN41atehdtuu22XlvIcDofDseszLWGJYvzP7+7uxqGHHlqYVq1WsWDBAjv95JNPxtlnn4358+ejp6cHp59+OlauXDlnTNHAHDoIAoC3ve1teNvb3jbq44QQXHTRRbjooot24FqNH/7QnSpN2PcByhDos2b+0J1gB79uWpbBDny17egthgdURdq8RQAAWo0ghgdsp24RpxBJCp4kYGGAALDXzoHsGrRXLYP5Sv0RoQDXFWcs1PlBuj+ZQOYt6JSQy3wGSYU9A+3koUgjpUL89q1vBNEegbCvgv3XfG9cr3/TZadj30uvw2NnvhdU5zQVzn7HqK5o7Sy+9cqPT7qr/FzDX7ICycbHQGXuPRGpUofGgfn8pg/+1KZHByuPR3z3d6zHyFSSgTIQyiBzKpMUAjJN0Ljlygmtdyd1p1V9yffXGmucfEf5TlifkL6f70Nll9PynHz1WVtfshafkBlDLaN9/c1jrYpqvqN92kgLcc+ty2j9ETXThVWTlIrjhZ7tV8ZjDpowUEbgV32kjRR+6CGuxahvbaDUoy6lmL6CygtUfM2tv92Bz4CEI6AEPqXwu3z0LO/GK267A9PFtq98As2BEZv+zPX7ZXvABXPr5Hg6PUHTxRVXXAFKKY4//ng0m00cc8wx+OpXvzqty5hp5tRBkMPhcDgcuyM0195k0mNMvkc0AODOO+8s3A/DEFdddRWuuuqqqQ28E3EHQTOAePTXKqsnKENGIyAl1ZUY1XnwDn5x2/zTpQK1jkce+w1ks24rdGRUB7wAJI4gGzUAEYKeqvVE0GrZpktLLsCTBDyKUV7QY8+eeJKCR4FSkXJnzCJOlKoUq4qRtKHUpnwPMcpU9QkZxbcghLQ5GEJIUAg0B5toDjbx27e+ESxgtjLN5BYBKPQCi4fqeOSUd2rvU+fKGMooaMAKVUR5jIel/uxzePrCj8ArB/Aq4bQmS88mTFUYBSDCbpBYeb2ISAEpwNffD7biZeMfUHBIwZHce7PtlUbDvlFztkw+UKE6bBTyvqDRKr86eXS2pwZ18gnlYb6XqRtJCpEkhayg7S2ntYt8JxXIQBhpyxrywxK8cgDq+xBJgma/qmpioY/AZHvFKfxq5pkSSYo0Sm32kFf2dCKzIo1SMJ+CJwJ+6KFrj27UNtXsa0pqWQp32kiR1GIILhF0KTUoaXJQQtAcaqp1CZiqBguYSrTOvTa/GhR+wGnA0Bd6COeFoIxg8UtXYM/zv962LSbL8PUXQCQpWOChOTCCNIpR6utCqa8L1X84r23+6VTjHXMLdxDkcDgcDscsh1Ay5uX88Y7hKOIOgmYCXVUjCd2pZxeiVAXxSiD67JpWY9XPqjYESSlkGqsz6lxOjumcTBgFi1OIsKRTl7PUXtOl3rp+RFZ9wwL1kTJn6iprRPeVYlkfpdbeSECxc3WnLtaCS5s9InjT5pgYnjr/w4iHa20qUKemgUF3paP/Ka8w8ER5GxKhqmpq37y441nkXCZ96k8gPAWkBKQAqAfp63LZWPXxIiKFePy3oM97+cQGpxQy1vkshx2L5p03ZI+ZjvO619h46dQJfjyMpgJ1qgwrPs4LfcTSKB5VBep0fzTFird8dvN+H/WX2udTRm2COwkpqO7ll0YpoNOUAcCvhro6joFHSp0hMYeMuc0UKlR/MgIhJJhPUeotIeiuYNvD21DqUeOF85TSOvLMiH2OpyvIaMBQChiYz3SVmM4J0uZd41USugeh3+WDBb71/BFG4Hf5CLp8lBd0gQYeHnr/25FEKYKqj4PW3oKtV34cACbly2PVLvgmGT8MEPRU4FVClJcs6jg/8fzJfcZ3IJROrQEqAFA+Z1JxdhhuizgcDofD4dgtcUrQNJA+9SeAUNBmDfR5Lwfd7xU7e5UAAEQKdYavq3KkVwUNQggApFTWZ6j9oIEHEZsztFx/nzAADTyktQgUABdFD03rGTT1fUjK26pmmJ+dSRt/Qv7oe7xln63+iXxVDADsdeE1ePysfwT1PUgmwHzTUynNjaHWOR7OoqHzr4dQmlWPaP8J1ZVx9Y3bkFz9aZSWLkX5HWeMa51nOwUVCIC350HgG4rZIJACkALisd+M+tnOV4XJvMKjPzPNO67PZhZaVTRqkFFKBM/67NlFZ4+Ppdhk84u2+51UIMJo4XMqxliG2SeMCpS9DNG2PKPcmM8Ot7lcxSqsfA5Q/hJFVvWVrY8U1FZnprUGWFgCYQS8xgtVbSYFnTCV9g4AfrUEFjDEtQSJ9u4AQFBWeT48FijPC1FZNh/1Z59DOC/Uyq+AjKUewwdP9Oej7KE51FSKj1a50ii3DbRqxhOuwvnKHrxyto+Z7wKTEl/f2sDIphqGnxqwShXzKf760XehsnRB23sxEVgYII2aKPV1wa+WES5bgvJxZ3Wcl77gqCkta0cwLSXyU3z+rog7CHI4HA6HY5YzLSXyU3z+rog7CJokycbH7P+EUHh7HrQT16YzbPkLwZ94sHh/eJvqfUQZaFcfkMbK90AjiCQF9ZTfAJTZjvZM9xAjjILT7KzYEqcQgD1LLmS0BCynrBBVraJTpTt19R6bzkrAk6tOglcNscd5a+CFJcTDdXXWzGPr87H5KzQ7ezfr1XqdnbQYkvJKhOQCshlhl4HSLMfHYLaPFIBIc54dDvHor0Gfr4LQxF/uzqk4mQoEq/IIpey0Kj5ARxWodfmGiVSCGY9bJ0UnP82+l1xACJFTXrR/raXyEYFf8AJJrQJ1Wr71l5lO7UgBZGpQ23oJ1euLap9OYTyj9Pj5TCQOvxrahHeqfXjN/ppOeqZIGwm8sq/UqJgj0Pk+Zn2Nf6drWTf8aoj6s8+h0R8hjdJCJ3pAVX3xRIAFFCLmtsqLJxx+6LX5mACl+OQ71KcjTbAg8w/ZatOYI64lOmFaVZehP4JX9tEcGAagvH57XXhNx203GpXjz0H9u5ch4AJepQxSrk5aveXr7wcIBdv3JZN6vmN24w6CHA6Hw+GY5eQv1U9lDEcRdxA0Sfyl++3sVRgXbJ9iLhE7+HXg6+8H5TFIbQjE9yEbNUghQOMIfHCbnjMp7HTGG0N9D0JXTUHbI2jgqS72OYWFdPDhUBbY5/OY22ox44nolLHS2lepk5eitnEbvDDIOsLn1psyCr+nmlXLtCQL2+X4vqp4y/WesipS4MELA5QXzwP1fNBq93g2/ZxAEgr4XkclUxKqE6OLSpFJJJdJVtklc/4fmVeBOiFa1JbW6jBKMzWKtqhy4/AFtb2OliRw5WOJtRLEC4rOaFVfqEVtapSIeeEzyXwGgRQ8SrR/g9rPoskZ4tp7Z5bJY97WJ6y6dIFVd4wCS30PPIqRRjGY76GhKxv9agiuVdlGfwTKCLzQ+G88JHET1WXzwaMmunzPVm+asZ97VO3vhBFQSlDqCbJKslB7jaIUlBGwMMjUXJv9ReCF7T8jqfavmGqwoMsH8xkSfd/sekZt4onQHepVpRrT3xNqO6dt448H2rsAQXcfwjefMqnnG0bLyEo2rUcyPDylsScCZdNQHeYuh7XhtojD4XA4HI7dEqcE7YbIoAzSFCC+zgQqV0GEUNlBtSE1T+7s3KghIk7tWSlr8VcQSsGgz3B9T59pF30g5ixYVVtJcMFBKCl4IVqTck2lSxrFIJx09FUQrSCJRuZTojk1x/Q6M/fNa1L31fK8MLCvzWYm6c7yXliC312xqoRo1Ma/sWc53l6HFO7zDX9Q1WIGQgGvpBQjQkHiWscqLsAoQC1eICDLAxoLPS9hTD03L9vnP4ttXdlH68tVnM94eOz/LSpQqwLUyYNUHE/n4BQ+jxx+EMB411oTySUXWY6WXj8vFGgONTJfECjSqAlfvy6jnKZxpCvNODiAyuJ5aA4MY3D9VquuBFUf4bwy/GpoM7BK86oQSYKovwaeCOvnMZlbPOYo9ZRsvo/pFwZkWUZmfJ5wEE5UfzIov596LcXqNh5z5QmKufpeoGp7Gg+Rea4feuBM2LHNWDzm2H/N9/DoaSe0vQfjJbnvFngLlo6aUj4d+EtWwC8Pzdj4bUyDMRpOCWrDHQQ5HA6HwzHLIXQaqsOcJ6gNdxC0G+LteRD4334HEnaBhjWr+pAgzM6W4wiy2QDSBCJNCmezXrkEyhhoknWjN3kskgsIpOqaPqMQcVZRY5JvAXUmqLJElApE/c4fRRZ4KPV1AwPDNr9kNPLqj4F0mpZTgYwCtNeF12Bo7WcLCkDvyRcXxq9982IQykAYQ+NHV6H8tlPH3M5zEUk9eMtfWJgmHv8tSKL6ick00SpPrhpMT7c+IaC9D1je25PGqru6+UwVFtZaqVZUJFvVnTyUMYgOClWrKjQanVSgfJq6ui8LVU+doL7XrjABNj/IvBbq+6rSiwvwqKiUxcM1u/xSX7dNcjf7FE9SVJYuQNRfg1/19euniPobaGyto7ywgjSKQXX3ea/sA0gKneHTBlCeF4IGDMynkELaqi6jEplxCSWQQkIKaZUflRWUqUeSS3CuPE4kKE43+UGm9x8AW41GGIWvu9YznyGcp3qhsVAll9PAw8DVn0bfKZds7y1U2+jx38I//B3jmncu4YzRM4PbIg6Hw+FwOHZLnBK0m2IyL+TDvwBJY3sGT8uqi7wQHGK4v5Cqa86ozVkpb0nPBaD7dmWeCMKYPdLmPC6kOBNKbBVNe1ZPpuCkUYxwQS8IpYieG7TzjJXumz/jIYzZDCPTW8kLA13tol7Ts6tPhRcGWHTWFRi54aK2cRs/ukotU3CgGQFJorqfAwjfdHKHLTw38fY8SCWgI0uTJiK1Cc8yiQHt78lXhBkvkPX0aAreGp07Zccy0/W4hDGAMhDAfh7z3rT8WKOllgO5TvPmM6X/Lzy/5fM2Vhf5fAd4+zkv9KbLqhxNppFJic5UE6o9Z74ei1tPklcObGWkFALNgRGrwlQW96rk41qk1llk+USNLf2gjGLwKeVLKc8LUeopKY9czOFXSxAmQZoFYL5nlVgp1F+/6oMFTK1roDrCZ53u9TbSlVsiFjnvDgXzGWhAQXWVZn4Lqg71zCZEJ7pjvdnPzThG/TEKUdDlI1zQq/7vrgAA9jz/6x33ydGYzf2/poLKnurQVHFCY4y/T9/ugjsIcjgcDodjluMSo2cGdxC0m8MOfDX4Ew+CNIaUB0gjhgcQbRsEC/ysMsoDRJqoKjFKwfRZbdBd1RkmTesJyu+wWWUWs6m7HguyfkK5ihkzza+WbednHsXwq2WwMEDXXotQ39yPVPdJArJ8IkqL/h+jBqh+RKYqxbPLEEkKwqk+q/UQLujFyA0XoevEz9rt0LjlSpTfcYZ6vfMWg3g+SLmqzsgTpWw077wBpdedOK3vy84kXzEmHvuN8oclcXsqNGBTxdswPjOj2OSrw0xadG5MUKaUoSQBKAUphXb8sTrGt3q+KFQVo6BKZcmnNlP9dSepHs+H7e1l/Dkqw6o948pAGYWAANMemXzfL8ooeJRYtcioP4Tq6sUoRjzU0JsgS4g2WUF+NUBl0Tx41dCOaTKAahu3YeipYdvxvXvvRQjCKqjv2yqttJHYz3tpnlJ0GaWggQ8eNQuvy3Sep4yCx9z2BjNJ0uoxXbHpZ9WbROcCsYAhqKplJyOxXn6qFCW9bXjC4elEab/lp4b5zFajEUbAfIZ5z1+E511xo50n6KnY//P7ZCf4+vvVuKNk+jgco+EOghwOh8PhmOVQSu2J3lTGcBRxB0EOsH1erM74mw2rBok4Agt8lZtDGaTgIJSBeqofkUhS6wnqJLGahGkAkCxTbAjPpTS3VHEZvw6gztCb/SM274QnKfxqCBGnKjlVd4oH2lOgjQI0lvSbf5wFOs03ikF9z/oPaBAClCL68RqEb/1o2xjxPTcBAIKVx4++cec4dL9XqIToDhT8OkmiPD+UKZUnjgBPqQ0de4cVFsIASkHLVVV91oxySpKuMDIJ0h0URjM9D+FUVxOqTusMnu7hpWAsKHxGzTJM5/do22DbuETbMSiY9fx0fjlZr7z8uGmUWuVICp2TxYlVl0TM0dg2CD9qWi9e0F1F7ektqG9tIG2kIMxHPJKoju8LukGDzEPT7B+GXw1BAx9prQHCKJJaBE8I1Xk+14MtbcTwQi9XAaYqvaTeP00WEKB8OyT3WiWXyt+jq8pSux+pbCAK9Xry24OWM9Wr8D5pFcgre/Z1GIIepWYZNXYsdgcFyF0OmxncFnE4HA6Hw7Fb4pQgh0IKIE2sd4NVu1VHec+31UCgDCJWykxSa+Tydqj1AwE6J4Vmaozp/UMphcxVN9DA225+i1F1RJyCsxgsDCDiFJXF8+xZTRo1waO4kFMEFCvEzBl/65mQ6enkV8uZcmXWiVKQUnnUtONdWQEq0JLdo5RBUy2mq7j05wI6LwheYL0+xPMhBQPMPIBSfzpl+ni+VZMAAJ4PGWWVfdV/OA8A0Lj5ikLvsnwOkeQCkgpIlimPAikYispkPh1cxKlKOdefW1/7ctJcCrlXVj62eLg+SnJ5ezf1fGUZ81lbzhVPBPxqCWE1RNBTRXXpAkQ6EwsAhp/chM1/2IRoIELYF4L5DKUepbDVNg4UcnqqSxfYcUt93Yi2DYJHCZJaE145ghcGmbKqfUiEEvBEqVCEEa020UK2Eg0YPEYQj+jXQ01FJ9H9rDK/EAvUayRcVX5SRsH87HvCVJIlUWorw4IuH+UFXdjjvDWFbdOa02VI7r0ZJFR+Ie/Fb+o4z66IU4JmBncQ5HA4HA7HLIeQaQhLJO4gqBW3RRwOh8PhcOyWOCXIUaRDq4O0rkyWTN9vDgwDALxyyc7qhSU0oxiVxfPs5SnVKFW0XfIygXomBj4zvbJ2g2uuBDpc0IukpozbadS0RkpzOavZP6wugbDO5uvCuLoprBeW4FVDUM+37UGINvSSUnmXbI0xKVraZHTEtMPwfMhItX0gYRWlo09C83/XqkurACCoLl9nhZYZMo6ylhymtD6O9OeEZc8HUD7uLEQ/XpNdhsvBRAlSZM1R7Uswl0m1sd4rl+yZdVNfgjKfRRNqyFo+vyJJ1WUlHtmxWM5cbcMIW0vrTWNSc3VN3w26fSw4dIVqDQMgrUXY/MDjtuy8vk0boim1Zec8ESgv7LYNjc2yeKLa1TS2DYIFXtZqQz+e1CI0h5p2nQijoABEzqzMCk1Rs33HhEOygNnmp4SRQiCkH3oQXGpzuQDzqS2BN5fP4pHEzuuVPZR6Sij1dRVK4wF1uTPetg1A8bJYuu5WFcsQ012yNcZYuMthM4M7CHI4HA6HY5bjDoJmBncQ5ADf8AcgjiDiyJqAeW1Yhc4lKdKoqc9E1dlyc2AE1PdsWKJtoxGnqG/uVzH9ehoNPPi5UnTBhR2XJ+mouRXUBCjqzsmVxfOssmR2ZKNImbP5oKeanf0mqVoOL5Zmm7LoBaf9W2F5zTtvQGUXCjwcL+lTfwJJE0AKEB5D5prlgjKAUF3CrkvWkQUfEi+woYmku69gFI/v/o4qdQfQvON6lI4+qe0xmSYggFKYUl1ib9twaEWmXLXm6taYgk6xBYbmnTcoZSpNwGpD+sXqhr/6Lw1CkHIVhFL48+ahuXlLLogzaw/RivkM0Q4/Sh4L1GOBbxWifGRDqa/Ljmuao0bbBlHfuA1BdxWEUez1mkOzZQkBLyxBcoGk1kC0bQgsDJDUI1XmHngIuqt2zNrGbSCUgscpkppqUBp0K5M39T2UevR66v0kqTWtesMCVijhN+qPWf+gywehRLXjSFKrAgXVTHEyz/P0eMxnYKEPFnigvoeyVsq4Lm4o9XVh8TlfKmzDobWfhUhSxENKTdz2lU+ofbtcQeXdnxz1Pd/VoR3aC01mDEcRt0UcDofD4XDsljglyAFwDj64DbJRs60gqOfbyH5At5jQZ7OmfFjos2UqBOKhmi1ll1zA0x4HABA08xwQWgy9a/cL5cLptApEGAWPk0JJcytU+4lEzpNBGAVrXYaPQlsCw67U9mIikDRRClCzDtGMIKKaKlOHVnoohagP2wap0J4pElY6lienD9wGmcagYRWCMqsGxb/4FoJXvxcAEBx1ggqabNSUAmSCEYMQJAht+b1dxyBE+OZTOq5//ItvqTH12AbzfjbvvAEkjgoNWylgAxoJpYAXgFCG0h6qqe7wk5ustycPC5UHjkdNEP35Mt4hAMXGsVyAVjx0773ETjPqpnnc65sP2tUHKf6i1CPfawuU5LFqhREP1cCTFEm9gfqWfuvjiQYaAFSwY6mnBC8M7DiJECCUIBpoFBvKArbE3zY21R4foNh2phXlpQogcmPZbRUDAgIUANFKGQ0YqPbzsTDAslWqEfHTF34Ee57/9bbx69+9zG4nE5bIwgDd77+gbd7dDdOgd6pjOIq4gyCHw+FwOGY5zhM0M8zZg6DPf/7zWLVqFc4880x88YtfBABEUYSPf/zj+Na3voVms4ljjjkGX/3qV7FkyZKxB3MA0IF3Od+EivpvZmGHvoe0HtlGjJ7ub9jsH0Y8XLfKjYruV41KRZLaa6628kZQCKjWBmOd2ZidnmqFx1SG5SvKAIAFfqH5ar5xph0nF+zIyhU4NIwBsWpVIaJaITBTom5nU81OVQgiCULb3qQVUgoBweEddiwAFWwntdeneecNAJTPx/iHmnfeoB9XlWfE81V1WV6IoUwpOowhePV7Ef/iW5BJXFCRmv+7VjW2pazgTSK+X2zUCvXZpgFTDX0bNdAqsyGNXk8vuvfOGpeaBqv5diwsLEHEyajVjNRUHpYDW6FmgjhNOw6/Wkb09DMAngENPDQHhsF8H9HAMBqb+62imer1CLorymek1SjhK09dKWBWsfHCACwsgfkehBBIGzFYwJRPp8X5kETqdZUXVNX+xYVtH9NKPgTVvO/5/dY2jA0AwotKA6EULAyw14XXFKZ3UoEAoPLuT6J+0+VgvVllpvncOBwzwZw8LLzvvvvw9a9/HS960YsK08866yz88Ic/xHe/+13cddddeOaZZ/DOd75zJ62lw+FwOBzTgzkpnOrNUWTOKUEjIyM48cQTcc011+Dii7P8iMHBQVx77bW48cYb8YY3vAEAsHbtWhx00EH49a9/jSOPPHJnrfKsR5aqoEEIniY2G0hy1QaDUGrPhqUQKhK/pUqhsmwB0ihGc2AEQXfFVmnlPUV5CFX5JHI7DU6BrK0FYTpbhprpfiFDyKhQnXwMXiVUVUZQ+TKODLb8heAP/8I2OQVy3hY9jZTKSuGhDISyMfNZZBIXsoT8I44DoJvN6nFFo4b47u8gOOoENZOpMktjyBSglaJnyyp8nKN5x/W2GauMs0arZhrxfDT/d639rIioDhHVVfVTSakoNKxARHWQNAbxAojaENi8xSqLqNID2qgh6FFqYbN/BDyXFWT+GhUoX91IwwBBdyXLvaIUaaOJeFgpakF3xVZUSi6s9yUeqiGpRYiH62j2D9vKK/WyVMVV2khshg+g2l5QRsFCv6By8qgJkagKP+PdkVyCUNWeo/BeCaX+SC7s/kx9P1cZp5fnq/3QtLmRXAAtjWfzmPwis18ab894EVFd+bg0u6tfrxWXGD0zzLktcuqpp+LYY4/F0UcfXZi+bt06JElSmH7ggQdi7733xj333DPqeM1mE0NDQ4Wbw+FwOByOXZ85pQR961vfwv3334/77ruv7bGNGzciCAL09fUVpi9ZsgQbN24cdczVq1fjwgsvnO5VnVN4y/aHqG0DHR4AdGNC2p2ADW5DPDgMLwysykJ9ncGTS9cdfnITWOChsrgPQXcVXiVEWjdJv9Q2rDTVZOZsmmnfkKHVxwNkKoCp/spPJ/bs1VNn8ci8TFYdogyV96yake22o0g2PgZ/6X4zMjb/2++yJGghIBq1groCAKAMtNoD/4jjwP94O/gfbwcoAzv4dW3jKXWmXY3L+3SS+26xviNv4VLw/i2QlEKKELS7D7TSbSvPmnfeoNKntf9HponOGIrtew4AErAp0clQ5mUyn1sWBmg+p/w4PElQXjRPqUUAaLVH+YmgquVkOVMu/J4KmM61yquMhc9eTpEMeqo2kdr4gEyyOY9i6/Wpb+5Hc2AEIklsk1bjH5JctjValUIiriVgPkV5YTe6l2c+R5ONZcbwtG9IcoFoQOV9SSGQ1CKIpNgM2K+U7X5lvH9EV5hZNTbwrA8QvroPAEs++WVs+8onkNYjex8ANl12OtJGDL8atmUAbY/6TZcDgN1OjgzCGOgoXryJjOEoMmeUoA0bNuDMM8/EDTfcgDBsL3GeLKtWrcLg4KC9bdiwYdrGdjgcDodjOnCeoJlhzihB69atw+bNm/Gyl73MTuOc4+c//zm+8pWv4P/9v/+HOI4xMDBQUIM2bdqEpUuXjjpuqVRCqVQa9fHdBVGZB3+v/cC3KdVM1IZAqj2g9YY9o5VcqGov34NX8cAC5W8wZ5BMK0YiSW1lmHkeoNQcLkRhZ2zNBep0ppOft3DmbbwQOs8GQoB6gKRcqQSUgeRyXOYqRgVKNq2Hv2QFks1/g7943+kZnBDr9ZG2l1tL/zituPA/3g526BvHXtcWv1C67tbsTi5/yMzHDn0j8PAvwLc9q3KDGjXkNRDCmEp4FhwyiXPVSWq9ZJqpKABsSjiPYttLK1zQq1QY43Whmb+M+L5SgjwfEEJ9dsKqVW8A9fnlcYLGlgF7v9PnV3l0ArufmP55JmPLZGkBQM+KZYi2DaKxeUCvs8ipogI0f37KgKCnjPKieagsnge/pwIexYiHaipZWXuOwr5uVe2n14uFAaphgHi4Zr08Uu/LQghQSm1mlvEoGdWM5TKNhPVBZerXorOuUG9pudSWvu5VQgguwJMUmy8/c9xqUONHVwH6fWHdfeN6jsMxVebMQdAb3/hG/OEPfyhMO+mkk3DggQfiU5/6FJYvXw7f93H77bfj+OOV9P7II4/gySefxMqVK3fGKjscDofDMS24nKCZYc4cBHV3d+PQQw8tTKtWq1iwYIGdfvLJJ+Pss8/G/Pnz0dPTg9NPPx0rV650lWHjwNvjACSb1gPbMv8UCUL48+YhqTWs6gOojvE08GxuD6B2Lq9cgt+jmhNJ3VEcgFWSeBSD+X4hQdpAGSsk6rZiPEDW/6MTf9Wyme4+rs/0tTJE/ADld5wx2U0y6/CXrFB/F+87bT4hts+LIf5yt0pTNuqZfRvUe06r3SBBuF0VyMAfujPzC3m+6g6fJqNeeyeUqqToZpSpTg//Qq3fvEUQtSHImGcqkO9DJlCVa3p+EoTK0xSPqHXOZd40B4btZxBQuVLJUF19ZoUA7VsMm25DGUiofG1q3Rh4s6l7hTHEw7WCX6e1GjGtRarXnvYiBT1Vu5+IJAXh1M7nhSUEPRUktQao9QMJs9nVuoYBgp4q5h24j/pcQ71uhECJUkTbBiG1EpvUGkrFMZlGIQUrqX2VR3HB92Pyh4wvz1R+Si5sIrzZZmk9Agpp0wLbvvIJe3/4+gsAwKY6Bz3VnL9JYODqTyPcdz+Ebzq54/sPANFtV0PWhiBM7zrqvCutGI/lVMdwFJkzB0Hj4YorrgClFMcff3whLNHhcDgcjrmMU4Jmhjl9EHTnnXcW7odhiKuuugpXXXXVzlmhOY6/ZAX4ticAAGK4HxActKsPXll1pjb+BgA2QwhQZ6tSCDT7h9HsH0a4oBdeTw98fXae921IrrJrBee24gvI/D6jYau9jMqT9w5Rprqb23mNojH3/UCjMV3VYsnGx8CYr/xflEHmFDaps1ryPh/+x9shOYeMlA/FbGNTXabSnhNAq0Gmyitdd6s9u/de+ubCOtAXHAWKrL8Yf/gX2XtHKbxFe4L3b1aKUi4rSiYA1d4RohUnTyg/UF6fkVzYakW1rtrjwtWPChvYrBaVqwqjVa1oNmq2MoyFAcraY5PPwjHqihQCXFdf8ShWCgsX8Ktl5QeiFH61rLZBNYTkAt377IHqnovQ7B8Gj2JE24YQLuix2Tp+dwXEC+w+pFaOgVAOr6sLZUaR1tT7lNQaygulVR6zP4k4tcqWDIu9+/LKgBQCIk6t6pX3ULVifE7M99vUsO73XwBx7XlIG02rao2lAtVvuhxIk0xxK1d36X3XMbuY0wdBDofD4XDsDhBKpq4EuQaqbbiDIEeR6jwAgLcXQ/rUowCAYMEC69co5LPoszVeGykk4NozQ92vyczvVcLsbFOIjpVerVgfhFF/aLvKI+NI9bTSn2YShM5XME6UopSpSumDP7X/03IVknOk626FiCPIRg0yjlTloPFh5eZV/5g+XBT5rW96iY1F8Or3quULAaGVD7ZgD3iHHdv2RZXcdwvE8AC8pXsDAGQzAh/cBiIESgB4s6lUkTgp9O4yxNoTFA/XdT+vx8HjVHVhb+n2DmjPG5S6EnRXrceGhYFVYrhOavar5UIFmhQC1T0XFXKC0lpk832ibYMo9XWDLVmErhXLs8+5QbR76AhlgOBg1S6wahcAoCQEhFbvTIWa5AJeTw8IY/CQ9UQr9XVnr1FkadicUuv/Y6P84Br/Xu/JF3d8HNCVorqHGg2ySJPGLVe2vSbCGCQAr9qj9l3PR+kN7x917N0V5wmaGdwWcTgcDofDsVvilCBHAbbPiwEA6TOPgC1qKDWHMoiRAchmVMjfMUqA19NbUAVkHIH4gT7by13bTxL1GGup9AJGVW1szk9uPkJp8Uwyd6ZplAhSCrPeVI5xwdffDxnVrRdIcm47rau+XonqyI58fzGdzzM8AHi+et+noMAZD9H2IF4AWu2xVWjJfbcAqfLhCMELmVIpMj+aWneBQGftCC6sAmSqoozfp22ZjFolJa8C8VwKc3NgxCYoU99D1wqlVJEgBO0WkDXVlkekCZr9w5BiGElN+ZW8JAULA9CwYvusWcUtfwav98lWb5xJ4c7neVHfs0ppa48vmq8Mi7VqVM7Spu18LdldZtuM3HARuk78bMf3h4YVsKqqtCNhFc3/XQsR1Yv7baUHsj4EeAFo6IP2LigkizuKEJ3nNdUxHEXcQZDD4XA4HLMdyqZ+id8dBLXhDoIcHRHVBUC5F+ApGH0IEByCMsimyjzJZ7qAMeUJ0T4FAVWtIxqxUgYMlIN6PiTN5fkAhbyfNvQ89lp2p53YqEP6S8J1nZ4Y/IkHQXgCxA2V72RUnjSGiBKI2lCxH1iup1ibQqGfN9NnnK0VZjJNbB4R8QIQvY4iTlUVYuAjjZpqXq76axGqlB2OtFid6GfqB7cd2UtgYWD74hm1Bch1uRdqmhcGSKMYXiUECat2e9GwAmlUy+F+lBf5GNmgcrlM6jP1PdUnTW8/KURxGwM2Hd2+dl70DBkvkKQCQr82GUcQcWp9SDYxOwhBhAD19PZqUZOAYll1XiFqrQorrGK1B+GbT7H3G7dcqfZT/fqlyQMKVSVY6eiTRh3L4ZhJ3EGQw+FwOByzHUrbD4gnM4ajgDsIcnQk6F1o/+cjW0GjOkRUBymVgTQG8tVBlGUVWjqpmQQhSO6MFsiqQIgw/h5arIRpUQ/aKryM4tMKZdqLQjN1yaESwCmDv2jvUefhG/4AwhPI+iBEbdhWgAFahdD5P7bTvMYqPS0+E+MZElEN8T03KX8WZSCl0ROn+cO/sL3BxusJss/94+12fUilB3JkQCslRXWkNRMnjZq2eokwqpQbqDT0vPLhsayvoKqADMFC1anejJHvWxZ0V8CTFH41tJlAZr8Asio6Qil4/xaU5nWjvrkfXhiABSpzR+YqKgsqaUvFmOQcMknsa+XNJkSSIm00Vc4PUshIVW1S31MVW0ZZBUBKoXouY5DcqEuZv6l1X5Om719uev3bq1F5z6q298WoQPHd39GvI5fsrf869WdiEMam3AXedZFvxx0WOhwOh8Ph2C1xSpBju7B9XwJAfVisSpBkCbbED9R9wVWFChXqmn++agtQ1UPmf8HbK75aVB9gjDOX3PzE89u6lzuyXmNjIbc+rTKA4giiUVNJ4WmmBkjBCzkyBsI6qwaEMpWc3L9FTfMCEE91apcP3Kbm8X2AMlvZJWtDEFENoAzJvTernCHTcT6ngNg0asCqH1JXZqnEaq6UmZbXaLqjG5+PgK4Wy/W2Y/q18SSBx0rWO2Me51GskqdHRvTieZaYrisYme8rtcVUppnPfxoXerMBALwA3l77wacM3uN/LGQIqYXq7ak9dSp7KXu+jCOAKw+XeZ7KO9KZRj1V9Zqr6iuehhWQUrndW2f67eltQrXfSKaxLezM5x21+oBkhwyjPKZCs3nnDQDg/HpTwRmjZwSnBDkcDofDMdvJFX9M/jb+n/zVq1fj8MMPR3d3NxYvXozjjjsOjzzySGGeKIpw6qmnYsGCBejq6sLxxx+PTZs2Tfcrn1GcEuQYF7JUBVuwFOmmJ9XOxLOu3vB86/0QjRqI6XPkBcUck2YjN2Iu/4fqa91tVTA5PxFlmVcipzqY5Tsmj4wjyGZDqQtCFM7uW/N1ANgO6a0otYArtS+NIU2VllDTYVTENAbxAuvnkdZ3JCCp8h4RU6VEqc2mUmqjSSPXSpBRhtIk+z+/TrlEcsmynmE8VvOa9GO/WoYUQvlpOiSZe11dSIaGbBJyUmuABX5bnhALg6xSUldL5vudFRAc8HyUXvBS8OEB8C1PIx0ZAY/iQto28QOrqJkxjbpEKINI1HatLF1gM39YuQJSrkI2aqq/mnneaErAKCqa2QajVfuNtwqQdfeNKzXcMTo7OjH6rrvuwqmnnorDDz8caZri05/+NN70pjfhoYceQrWqvG1nnXUWbr31Vnz3u99Fb28vTjvtNLzzne/E3XffPaX13JG4gyCHw+FwOBwFbrvttsL9//zP/8TixYuxbt06vOY1r8Hg4CCuvfZa3HjjjXjDG94AAFi7di0OOugg/PrXv8aRRx65M1Z7wriDIMe48JbtD74hgrdoT4jhAZXKm6/E0pkjLAhV1kwcQSZJMcMkp/qYNGIj8RaUHo05881nwqQP3FZYJgBVseaYFDKNIWpD+v2K1XvXWvFllCCRKUGGMRs6WhWIgaQJpPEQeX5R0dFZODJJtMIoCvNKJAUF0MyfV62MJ81+vqCu9UvKIVm7l8VUYnnVEN3vvwD1my6HjCOrAuXPmIlOSFcJ5+pzXpqn/USeb7N1eBQrH5CX8/EIPvbZtxBAEMJbvKe69W9G+tRjRU+U8e34gZqul0cpg0wT+HqfMYqPUvR4Vomlx5Id1sVuP/veMp3hw+xj+f9pTo0y05r/uxYAxqz2cirQNECmwRNE1POHhoYKk0ulEkqlUqdnWAYHleds/vz5AIB169YhSRIcffTRdp4DDzwQe++9N+655545cxDkPEEOh8PhcMx2puwHyg6ili9fjt7eXntbvXr1mIsWQuBjH/sYjjrqKBx66KEAgI0bNyIIAvT19RXmXbJkCTZu3Dgjm2AmcEqQY9yw5S9E+uxfgdowaKXHVoqBUuWD8FS/MFIKwdMEtByos09zJppThwjT6bE5v4F/2HGF5aUP/rRN5cmrQvzhXwAAiF8C/9vvbBWbIyN+7hkE8/ew/wNAMH8PJJvWg/AYojas1ZjOVT5tKhClY6o/hBbPVqUQIDoDyFZ5ATY1XM1TXHZePSSAUola10+rh+azI4FCkjXR04hgKtcqv46MZknK+vXR7nkQw/1gNGnPQ6JKuWS5M2VW7VY91aDVEQC0ywctVzMlrVPGVaeqR5PHRBnYgmVqUm1YP8YhakOqakuvj6RcZXHpyjGhl+8tUXlQfHAbxMBmyKim8rp0NhGaUef3Off+yyRf8Zfz/Imcp0iH9hGoXnEu72fusWHDBvT09Nj721OBTj31VPzxj3/EL3/5y5letR2OOwhyOBwOh2OWM53G6J6ensJB0Ficdtpp+NGPfoSf//zn2Guvvez0pUuXIo5jDAwMFNSgTZs2YenSpVNazx2JOwhyTAjJfLDuPojaUOY5KIUqw8Uvg0gBiBSsu0/Nz3l2xqq7XxOqO72XqzYrphPbTQ8uqTNcSSjgklA7YlQgAKBNpVykT/0JlKdAY6jYB8x0Ls/1wrJVUqxdAWr1zdhxWn0nrVVbnq9VQ5HrRj+KEiVaPGWWBGAMwavfq17TulshSqHqaacVSmIyjppUVZvlvu3yKlD9pstROf4cAEDzjusho1qmfHm+/ZzzbRv1c5nqfF7N8ovU61JJ6Ygj62cjflYFaSoo869FapVKcm4rLtmCZfAW7ZnNRyggtVrEfMikWXiPvD2ep/6n6gV6fYtB9j4AYvg5QAiQsurPJWpDkFHdLlelTRvVSlgVt1CFh1zSu97PlYKrlKHtqUDisd+A7veKMedxjJMdnBMkpcTpp5+OH/zgB7jzzjuxYkUxd+ywww6D7/u4/fbbcfzxxwMAHnnkETz55JNYuXLl1NZzB+IOghwOh8PhcBQ49dRTceONN+K///u/0d3dbX0+vb29KJfL6O3txcknn4yzzz4b8+fPR09PD04//XSsXLlyzpiiAXcQ5Jgg/uJ9wRuDoF0UsqnOKtnBr4P4y90gUkAyHyAUJNDp0Tl/B+3uU2eZaaJ8Bq2J0hOErXgZAKVsgKgz42TTeoAQ+Iv3ndLYuxrx1qfAUq2QJE1ApEoNSJNCNVhr7otRg/JZQaZ6ingBCr2tDK1J4EBB6ZGp9gUhyB4bK8PGkJ+npZeZd9ixSB/8KQQGMn9LnPM6tWRJmcoxAECaILn3ZoBSlN7wfvCH7gTv36xeVxCCeAFEfQi0d0Hm6zEqT37bBSFIWIGoD9vqLFtBafrkmW1gVLfcPpBPx7ZKlFlZ6kGyQH3OvRKklEodIrlsHymsEicIBa3qyx1aIaLVHkitysqmSgmXjKn8LprzTglezAuiDFSrP0SreOPpQSUe/63dLx3TQGuq/mTHGCdr1qwBALzuda8rTF+7di0++MEPAgCuuOIKUEpx/PHHo9ls4phjjsFXv/rVqa3jDsYdBDkcDofDMcvZ0Q1UpewUnVkkDENcddVVuOqqq6ayWhPivvvuw89+9jNs3rxZWSxyfOELX5jweO4gyOFwOBwOx6znkksuwXnnnYcDDjgAS5YsASG2G2Xh/4ngDoIcE4bt82Kkz/4VhGnD8+O/zV0CUeWzkAKE+YWml6RUASlVIEYGtPQ/TR8/Qq3s7i9ZgWTz35BseRL+or2nZ/xdAMITdRkMgIwbQBqrEm/RYkw27RXM83TjzLxB2gTmkVLucqa5VKKRaZLdz4+d/ztW883WecylsJbLZumDPwWgTPS0ez4IY+DGcK2b+RpjvkVf7rFl39ANSU1D1INfZ9tWJPfdApnGoJWe9stbLfENhFKA+SClsm0RQ0rljpf6iJc9p2AcH8/lDilVIYDZfFKfDZsoCuqpy2Qs97r1PkLym0JfUiSUAkmiQyz1uubfPyC7DJZ7z4OVx4M//AuwA1/dcTXp816+/dfiGD/mu3WqY8xhvvSlL+E//uM/7OW46cAdBDkcDofDMdtxXeRBKcVRRx01rWO6gyDHpJBeCeDKSEniFPT5R4L/7Xeq7NkPlWFUSoB6IJ4K4hJBGSAUVJf7TtuZYquiRKhTgVogSV0pQABko6ZMsfEo4XnmOa3qhQn6M2pA3vis79t582/JWM0789NaFaNRnmtKtgFkgZ1QyoN49NeAN6AMxfmGo4WmsAwEccH8K2pDBeUjuffmbHzPh3/4OwqrLf5yN+gL1Jdx+tSfAABsr0PA//Y7EEIzBc3zAfjK2NxiEiZSQBIdFmrK4O2D1Kxs+zYzGH+HyC4DGBUIAKRfsssBoJSj/Dp4vm5wy0C8QJXrC5EpXKYMP0my8ng9H6EM4tFfd8yt4U88CLbPi0dfb8ekyIeDTmWMucxZZ52Fq666Cl/84henbUx3EORwOBwOh2PWc8455+DYY4/Ffvvth4MPPhi+X6z6/P73vz/hMd1BkGNStCot+bYV6bN/hSh12TNQac5E9dmuqMwD4cVWBhMl2fJkzgtRjHzPr1vcvxHBvLmTXjrdJFueBIlroNEw+HA/AOXXkaaFgmkxYc4yBYfkLYoF/KyqxJSHm8a3YTWbUSsuMk3aFR4vaPMIGa9Ooclu/jmt/1Nmn0N8o0ooP0364E+VL+j5R8Kjv4WMRlQ4YJpAau+TLTtPY/V6oVtrsKzpaPTTawvtLQAAnCO+5yZVJu75ajkvyCR5b69D7P92H9DqEHiq151CmjJ3aBXI7h9lW+4OKaxCZOZT2yCnCOmxrKpDc/uXUZQIBVigxhF6HUhq9xlSqii/nm5mDKNadQi7zJfuA1nrGv633wEdzKhOBZohyDR4guZ4ZMEZZ5yBn/3sZ3j961+PBQsWTNoMnccdBDkcDofDMctxl8OA6667DjfddBOOPfbYaRvTHQTtQOLBrQh6F+7s1ZgR8s1LvWX7I9m0HpIy5QvKQfRZqZxCZVi89Sl0Ov6Ptz4FAAgWZv1tjAoUD6jwu6Bv8aSXOycRHCRuaKVD2GmFv0DRczPaF6XxBJnqsFwAoGq10O7pIaNVtFCWVSPxUbxAresI3YZFe5JUZZOeL03AH7oTJOyCpJ6q5Eq0dyXVTXtNiwrKAOiKRaNy5EMYW7aBVcE8Pwsg3A7eXocgffavmQ+IFNUb2eIBsv6gnEIEIPMtkTRTiAgteIxIi2/I7lu5ZVvs60yz1825qnbzdTsTvR3yzyGUFtQvAJAtAZQOx0wzf/587LffftM65tzWxhwOh8Ph2B3IpZVP/ja3f/IvuOACnH/++ajX69M25pxRglavXo3vf//7ePjhh1Eul/HKV74Sl156KQ444AA7TxRF+PjHP45vfetbhQjvJUuW7MQ1VwrQ7kSy+W8AZfbMNo8kRKkThCJ99q/wlu0/5lhG3QGQ7cCUwp+/l/IFQXmA8vPFzz0DEFpQgYwClP9/Vyfe+hQoj0F4DJEUPViEMUjBlJ+EMlUlBABilC/JFpXG+GZkkrVasGObyqgWb43N69GNREkQQtSHOi9vNJVKqzK2Us1k4wgONCPVhsIvAcJTVU6MAVFNr5NRnAQK6s9Y6B8O4vmgXX0Qpeq4zxyl9uXoFW5fniTWwyMlBQhR4lAH30ZBBSJU/W9bbIyy3mYx1FNeI+plypLgypdHmdpOaax8W35JN2vN1qFVATIYtcuxg3A5Qbjyyivx2GOPYcmSJdh3333bjNH333//hMecMwdBd911F0499VQcfvjhSNMUn/70p/GmN70JDz30EKpVZc4866yzcOutt+K73/0uent7cdppp+Gd73wn7r777p289g6Hw+FwOKbCcccdN+1jEjmeBiGzkC1btmDx4sW466678JrXvAaDg4NYtGgRbrzxRrzrXe8CADz88MM46KCDcM8994y7q+3Q0BB6e3sxODiInp7xXf+fKM2h5wAApZ75MzL+bMCoMbZSBchOWYUAESkITyamBDFvu5VeHZdL6G6j/uSJtz4FGg2C1gdUOrSupBJxBGifjK3oEu1yQlsGzPaUk7yPJ+8P0lVnxstDu/pAy1WIRg1i6LnO1WGGVm+KrgqzjVvzHhbKQMpVsANfrfJ6UlXxlW7bqF5vTrWSadJZbTIqlx6XMOVdomEVWLwPvD0PGnsbtBBvfUr54AiF9IKsWgztXh4AnWUdKUFE2nFfMWqoea6kXjZuruIMUKnhplKMJE21fTT0+er7UTz+W5f0PAF2xO+FWcZz9/w3erqq23/CWGON1DB/5d/P6PrONeaMEtTK4OAgAGWUAoB169YhSRIcffTRdp4DDzwQe++995gHQc1mE81m094fGhpFnnc4HA6HY2fhEqNnhDl5ECSEwMc+9jEcddRROPTQQwEAGzduRBAE6OvrK8y7ZMkSbNy4cdSxVq9ejQsvvHAmV7cNowDFg1shqYdSd98OXf4OwfQvGs3fAJUf1KmiC9CKDgCw7CM6mgqUr7oL5u/R8XFTHWbPjvW67cpqXLBwL6TPNiBLXaBeCTIaAQDV+0sIyDS2icukgxKkZqZtyouIam1VW8TkAFEGEdVUNo/x7TAG5K7di/owZFS3HoeCd0hwyCTrpUX8QFV2GS9Qbjn5/l35HnVALq/n6T/DYz5ksw5RUyc4atlsVN8RKAOtdqtxKQOp9kB2L5ywCgRkn2uzr4NpVSZfBSZF4XMJkdpKPiJUts9oiqm/aG+rLFvFKT9mDkk9W50JKUB4DLrfK9R2eupPSkHyi5lb2yPe+lTbvuuYIXbzg6CvfvWr+P73v4/58+fjIx/5CN74xjfax7Zu3YpXvOIVePzxxyc87px0SZ166qn44x//iG9961tTHmvVqlUYHBy0tw0bNkzDGjocDofD4ZgOrrzySnziE5/AgQceiFKphLe+9a1YvXq1fZxzjieeeGJSY885Jei0007Dj370I/z85z/HXntlZyBLly5FHMcYGBgoqEGbNm3C0qWj+0hKpRJKpYmd/UwXu0pmUKeKK3O/OfRcsdqFEFUJo5Nx7RjG+zNa9cIYSaet2zEe2Kx8QPnpnTJTzPy7cH6TJNrfIqWqnALUX8GVT8iwPSVIQ3wfJPUB0doV3VeeH8qyRGabMm2q+rLKLuL5Kucn15UdAGQKEFZMRyaFMWimArGsc71kAcACkKQBvv5+sBUv0ytGIYMyCACiX6/0fJszZfxIhXWlDLSsvRdeANk1H9LLuqdPhqB3IZojgwDRFV35faCDD8gqNgD8pWPnotj9yGQQmWowHhfVJZarDguqkDzNkt5N7lBuudtjd6t63dkQo5pOcYy5yNe//nVcc801+Md//EcAwEc/+lEcd9xxaDQauOiii6Y09pzZIlJKnHbaafjBD36AO+64AytWrCg8fthhh8H3fdx+++122iOPPIInn3wSK1eu3NGr63A4HA7H9EGmmhHE7EH4XGP9+vV45Stfae+/8pWvxB133IGrr74aq1atmtLYc0YJOvXUU3HjjTfiv//7v9Hd3W19Pr29vSiXy+jt7cXJJ5+Ms88+G/Pnz0dPTw9OP/10rFy5ctyVYY7JMVblVd5z0xweyBKkdYIuYaJQNWYVCZplomxvGW20eJHyKo9RpvI+rFbfUnN4QK37LuDVkqavWovaQNIoy+0xCDF636hcN3cS8DblyKQNq7NVrQLlvD4kF9RGTP8xIKvC8n3bw0rSFq9OXkHKeYGUl8jLzaf8MHmF0dvjAKRP/QmyVAUpDatx8l3pdSUbCcIsJZoyoDov2yyVeR29ZhOlULlFAAjdu6xlPpKrIPMX77vdcc3nW+1fOgNJEkCqbSOJVtNy40rqQVTmgdZVPzlvjwMwUST15qyy4JhbLFy4EBs2bMC+++5rpx166KG444478IY3vAHPPPPMpMeeMwdBa9asAQC87nWvK0xfu3YtPvjBDwIArrjiClBKcfzxxxfCEh0Oh8PhmNMQMvUGqNPQcHRn8KpXvQrf//738epXv7ow/eCDD8btt9+O17/+9ZMee84cBI0nzigMQ1x11VW46qqrdsAaOSZKqbtPna2aM25JIBFkHeW9XGfsfOXMBPuMjeXv6VQNNlqFWHN4YNaqQcaPMS4vE2Wqo7i+qyqTApDQAwlyHpCWiq+2ShJS0snDtK1TPNF9wKTQSoT26hj/T2G8nL/HKE0kCIE4UtVqozWKpDTzHXm+8rEw4wnSnx2fAjwFf+LBrJs59ZRq0a22FQVsBRrRr5tUe0CCsk1lFlX1mfAX7Y1pu4CQVyilACEi1xwMtqJLEopg0d6TXoZR7CTzVTYQoPahvBoo1HKkH6oKuklUvhlGq/B0TDM5ZXxKY8xBzj33XKxbt67jY4cccgjuuOMO3HTTTZMae84cBDkcDofD4dj9eNGLXoQXvehFoz5+6KGH2rgcAPiXf/kXXHTRRVi4cPsnie4gyLFDGUtZieq1Ytqt4Pa+UT5k/mxIS7ulrt4ZWUfjDZqNBL0L0Rx6rrBdWhWt+LlnVEWQ8Vdpf5AVH6TIlAJ9vy3hu/U+obZyqfBeJE01nkiVL0inQxtVoq2zPAB4JUjmQzJVmUQJBStViuqfSJU6pH07MlBVW8LzlbplXpOpgtNeMzb0LNJnHlFeF6PuhCohl/EEJG1C+jpjSAqIoKyyq7wQ/tL9pk/9yRGWy6g3VC4TtduOq+2WqMBWf8mKMUYYm9Z9q1kbtv9LQkHyiipVnh5e6gJJ6kg2PgYyRh5RK2Zs6YW7dNbWbEKOkrs20TF2B77xjW/gnHPOcQdBDofD4XDsEuzGl8MmykS6gbmDIMesIaxUEdV1dg2hICTX+TuvSGimWwFqY5abCLd7Bp7LRpJekKkruVwZyeMsnbhV+QGUkiNzjyN3Ntl6ZioFIH1AlEC8pLic3HzSTPNL1q9jvD1m2dYnllKQ0LN9saTnq+eyAGA+ZFBRY1JPpVUzH0RKVfnUGMy6nEthVSNRqoJoBQrUA5II3l6HjL0tpwmhv5wJJfYzDtFhu08DqtO8fs8JsdvdQojebiodG3Fj3GOXqt0q9wh0h/VCjOo1hJWp9c5yOFpxB0EOh8PhcMx2CJn6idksP7HbGbiDIMeswpzpRY2GOnNl1HbCHi1d19GZYN5Se5augtJalIac94aIVPWyym9f4wEyCpCZJmX2ZWpSipH1hIMUkMxrV44MpnebVyqoVMLk/ogUNBq288r883SysfRKKs3ZeIKoBwECLiR8gkJFofEu0SRTOqQfWnXJM1VkOxApdWXaNPwoKUVmFGWUkCybK19xp9U5SRkgoPxCE1SiJPUKnrKZzNeyCvHujO61N+UxHAXcQZDD4XA4HLMcZ4yeGdxBkGNWEpbL9v+oXrNnrvku2DOO/sJo1oZR0l3F5xxaAbJn/RoiZeb1EanyhgDtydL5bueGll5VAJQqw1Pd9VwWcmnyHiL1l2QKkK7mUhVkHkAICNeeH0BPo4WgOFMJJlkAob1EXEhwm0ZeXFfCY4B6IMbzwhjY8heOusnyPbFmqqeckFL1LMpvm0moQvkKsFYkZbYLPQjLMoTUGmT+KzvPxJZPzHNaWjE0Rwan3a/nvECOifC+970PPT0945rXHRY6HA6HwzHbMdVhU73NcX7xi1/gfe97H1auXImnn34aAPBf//Vf+OUvf2nnWbNmzbjK4wGnBDnmAPmzQJslNM6dOarXMnUCKHokCLFnrPkzaqP6lKrdqiJlrqpAgFVaUglwnpWNUgIQUFBCQLyiQiTHUASMHYjobSi07EIhleLCk6IC1KlCjFBbydW2ulqpkOWckqDnN2qVJERVgGkPEAD7l1ECAQJqPiMi1Rk8zayzPAD+xIOq1xj1rLpo1KGZUn8AoKuiFM6RegOCMDC7fci4+oR1YjTVhUgJEIpSj3o8ajRsFR4xGVxSK3FeOKFl5vcL40lyzDCuRB433XQT/umf/gknnngiHnjgATSbKl9rcHAQl1xyCX784x9PeMy5vUUcDofD4XDsFlx88cX42te+hmuuuQa+n51EHXXUUbj//vsnNaZTghxzi5y6YNSb0fw6jShSOSyEWp+IUSNIbox88jGRIkvDJXTOexHMtqk3IqS5zu9cAoQQABKQANXqD5fIlLIWst5j6i8lxPpwOADGSqAs1wsuX0Umpa1OMv4kLqRdrsV0jM/7fwiFAIGQUleh6WVKaUPRhNTrJ6T6iLBAqR6EAr5KZOZ/+51+AQTSCyCqC4A0VlVjUuzQXnFdlTIGaw1QQjPVarpp8XKF5TKiRjELyHrsCEEwb+m4hm2t1JK5CkPHDOKUIDzyyCN4zWte0za9t7cXAwMDkxpzbm8Rh8PhcDh2AyQhtkJs8re5nRO0dOlSPProo23Tf/nLX+J5z3vepMZ0SpBjTiFAQJgPmvOeGKKGOqMPK1U0osjOT1s6aBMpkBAPxiLDoLwkAABJC/PuKim1lXKIpKZUAOOfoZDgIKAEWWVVDjFK8rzZVFxKOw8XEgkkKAFCU9nVoe8YoL/MpVlGcSGMEEjKIHX3LimhFSDZtj5cSHRaRapD5ZTXJVD+oiTKep55AQjXqgXzIGUJkGKHqUAGRpB5pbwA8cBmBH2LJzTGWFWLJlcrX62Vr7ps1obV655EJVfHfYLQtn3S4ZhOPvzhD+PMM8/Ef/zHf4AQgmeeeQb33HMPzjnnHHzmM5+Z1JjuIMjhcDgcjtmOuxyGc889F0IIvPGNb0S9XsdrXvMalEolnHPOOTj99NMnNaY7CHLMKSplVcXSiLJKooKvh1ClCGnZlxBkZ/0aSShSkSkLkujEYygVgebVC+w6alArQio1YjTFB2hvRCik2l6t5ArPEHEJjxIAVCk7EoUsGfN0acaTUvuTACmkfR/U8qSdL78+xgOUH8uOTwBICRl2qywhEDCvBJlLNwaJi1VsXjD6RphBJCGqSo0FIGmEuH/juL05QNGf0/oZlYSq7WOzgdqZqArUcV/ooPY5ZoDdvG0G5xx33303Tj31VHziE5/Ao48+ipGRERx88MHo6uqa9LjuIMjhcDgcDseshjGGN73pTfjzn/+Mvr4+HHzwwdMyrjsIcsxJymGWazJSb4ASYlWieiMCQZaKLHN9pBKpVARbaaSnF0KGjYoEukupQb1V5QcZrjfalJXREFJ5gMxfM60Va6nSj8dGGtJ/acsJqK3msuPJwjyko9unuIz8uAFT/yRcKq+Qzr0xBXAJ8cACVVJLeWIzjIjunzaT2UCjYTKDEO6BqF6DZD5oNLHMne19JiWhIER0THGeaAp6c2QQnXQEs7/YDCIpx5WyHjUaBY+SYzu4y2E49NBD8fjjj2PFihXTNubc3iIOh8PhcOwGTL0ybOq9x3Y2F198Mc455xz86Ec/wrPPPouhoaHCbTI4JcjhcDgcjtkOmYYu8nP8IOitb30rAOAd73iH9RECma+Q89H9b6PhDoIccx57WaEDRAqIXOPQ1iBAc48SFcanGlvqnYsQGwwI7DryfXeljOG6KpcXHS5w5C+RmctN+b+tXz5AZow2ZmugeNmK5y6ndbqk0nq5bLSLYa2X8Uy0Qf7ymFquutzJQEAIQEFsyGLb66Wz4GtQX56TE2xfMRZhpapaZejWIFMOg2z5ATWm7HK+rY0OYxzPpbZdYV9y7Fh+9rOfTfuYs2DvdzgcDofDMSbOE4TXvva10z6mOwhy7HK0VoGawD0gCwq08yJTE1pbOJgGlPnS39a2A8DcPKPtrmQm6TxCFpWePEZ9MQZrABjUAYxGZWEEOnwxex7T91vNzIa8QmRM2K2aTSczNiGksK6UAInIZiaEgCCn7JnXoc3CgGrfMRuUINPSQvpT+yw1RwYBKa3iE5bLSrEhFJATv1RgMGOYtjKjeUvmeiLxrMYdBOHnP//5mI93aqmxPXb+3u9wOBwOh8OxHV73ute1TcufCDlPkMORQxICyXzV0oG3+1xYzt/CpQr4y9tGUtNWgzIQKSFJZ19Jvl3HXKMQDYBMiTGY+3n1pxOMEqsUEULAdJsL3+TobWfZ+THyShHvbOMBIaRNUWp9DoN6z7hUAYzESk6sMP9sed+mQ1E0qla+RJ3kWlk0hwcAYELeoGZtONfypKgktG67fHSFY5pxShD6+/sL95MkwQMPPIDPfOYz+NznPjepMd1BkMPhcDgcsxzTQHWqY8xlenvbE87/7u/+DkEQ4Oyzz8a6desmPKY7CHLskhjlRkrlAyoE8RFiFYo8qW7ZYMQHox4xXfFE1ZNHrTKai4GKY1XWjYdWhch6jAgBQ6b2eCiqQfnwxQJtvizlRWI5r5BptSFQVJ+EVGpS3vfFc+1RWM6T5FG2S6oW5vMX1WtKwcmznR/AfKBi/rkyr0CMQ/Gci/uBY26zZMkSPPLII5N6rjsIcjgcDodjtuMuh+H3v/994b6UEs8++yw+//nP4yUvecmkxpzUQdCHPvQhfOlLX0J3dzELolar4fTTT8d//Md/TGplHI6pEjUaIFD5N3kVwNBa+dTagDM/eyelQjUDHV0N2t0xVWcj9fYquvzmpKR924+aH2RUHqJD0ZDJ+nn/j/EJUUYytUirRyw3uJC7rnfFVi8SqtrC5PxA+R/ATm0tWlUge+llkj+cZl3mYvXkrGQ3b6AKAC95yUtACGlr93PkkUdO+rhjUp/u6667Do0OpcKNRgPXX3/9pFbE4XA4HA6HYzTWr1+Pxx9/HOvXr8f69evxxBNPoF6v41e/+hUOPPDASY05oYOgoaEhDA4OQkqJ4eHhQs+O/v5+/PjHP8bixYsntSLTyVVXXYV9990XYRjiiCOOwG9+85udvUqOHYkU4EYFyHlGjArUKbnY/C9kdjPP6agItZ5RzXGZeTowfiDT0NZACWnPYGr5f7TzU/OYyR/yKAGjBEz/b7C+H0Laxmq9P1pV2a5AWC5nyssEP5PN2nC7CtQKoTYpGkDhf3vf7Qszg7kcNtXbBJlNv6d33XUXli5din322Qf77LMPli9fjjAMEcfxpAWYCW2Rvr4+zJ8/H4QQvOAFL8C8efPsbeHChfjQhz6EU089dVIrMl18+9vfxtlnn43zzz8f999/P1784hfjmGOOwebNm3fqejkcDofDMVl2RgPV2fZ7etJJJ2FwcLBt+vDwME466aRJjUlk68W1MbjrrrsgpcQb3vAG3HTTTZg/f759LAgC7LPPPthjjz0mtSLTxRFHHIHDDz8cX/nKVwAAQggsX74cp59+Os4999ztPn9oaAi9vb0YHBxET0/PTK+uYwyG6w3rMRkPjSgCkRJpSxURgLZkYaA9I2csVJpx9oy8sGH9QXM0K2i6Ga43Wvw/7dKL6PC1M9758lPylWCq6k/1gOO59948Zt73iXym5irWGySF9QVJnfhsaPUEtSVB22wgteHyPjiTcN2KqcislEM0ogjAruu/AnbM74VZxqaNG6e8jKGhISxZunTc6zvV39PphlKKTZs2YdGiRYXpDz74IF7/+tfjueeem/CYEzJGm74d69evx/Lly0Gn2tF2monjGOvWrcOqVavsNEopjj76aNxzzz0dn9NsNtFsNu39oaGhGV9Ph8PhcDh2Fq2/c6VSCaVSqTBtMr+nM8VLX/pSa0944xvfCM/LDl0451i/fj3e/OY3T2rsSVWH7bPPPgCAer2OJ598EnEcFx5/0YteNKmVmSpbt24F5xxLliwpTF+yZAkefvjhjs9ZvXo1Lrzwwh2xeo4JYPwlg7XGdtOKAaDeUGedEgQSRQUAaPeBbM83op7T4mPJ3ZUyu2+TpPN+CX0WvbtXxnRSdzpNH61ohekHCts735eMZYnfXEgkQvcu0wqR6Xo/ns/QroRRakwneeTUoNEYrRrMZm7pz7ntc5Z7bwCl2nWVM9Un/z7VG9GYhUm7slo0XZj3YKpjAMDy5csL088//3xccMEFhWmT+T2dKY477jgAwO9+9zscc8wx6Orqso8FQYB9990Xxx9//KTGntRB0JYtW3DSSSfhJz/5ScfHJ9O/Y2exatUqnH322fb+0NBQ2wfE4XA4HI6diZTFA8vJjgEAGzZsKFwOa1WBZhvnn38+AGDffffFe97zHoTTeNA8qetZH/vYxzAwMIB7770X5XIZt912G6677jrsv//+uOWWW6Zt5SbKwoULwRjDpk2bCtM3bdqEpUuXdnxOqVRCT09P4ebY+XRXyuiulMd9Bi+ktDcDJdltvJhKJqNUmGgOcwJGpFS3Tp4gO4Has7ZGFHX0TuzK5LOZhPVkjX3bHoXtn3sehQTVyp+wikTxububCpQnnxvU9lhLZVce8/ndnvIgJZAIiUQo/XWk3rCqbKd58+TVn0YUWQ+RY+Zp/c3rdBA0md/TmeYDH/jAtB4AAZM8CLrjjjvwhS98AS9/+ctBKcU+++yD973vfbjsssuwevXqaV3BiRAEAQ477DDcfvvtdpoQArfffjtWrly509bL4XA4HI6pkD/Rm8ptvMzG31POOS6//HK84hWvwNKlSzF//vzCbTJM6iCoVqvZPKB58+Zhy5YtAIAXvvCFuP/++ye1ItPF2WefjWuuuQbXXXcd/vznP+OjH/0oarXapMvnHLOfgZG6qgYa5/yj+X+251PJKz5WERrlS6V1etRo2NuuDhdy1O7vAEbdbvltWrgJnvs/HXXb5xU/WwE4xxNyp8J4/GhRvaY+l6bf13ZKqPN+ICnVD3NvVSm2ZktXtC+oUg7b/jeXdKRU6k85LE6rN5QiNJqaVG8UHzP/t07fFZHTdJsIs+339MILL8QXvvAFvOc978Hg4CDOPvtsvPOd7wSltM3TNF4m5Qk64IAD8Mgjj2DffffFi1/8Ynz961/Hvvvui6997WtYtmzZpFZkunjPe96DLVu24LOf/Sw2btyIl7zkJbjtttvazF0Oh8PhcDhGZ7b9nt5www245pprcOyxx+KCCy7AP/zDP2C//fbDi170Ivz617/GGWecMeExJ5QTZPjGN76BNE3xwQ9+EOvWrcOb3/xmbNu2DUEQ4LrrrsN73vOeCa/IbMHlBM1NBmsN+JSAb+fjPJousN0MoFbyPZlGXViHs2rzvFwGy65YGfPccB2MZpV5jJCCrwdSjK46jLJtJWWgPClM49QHAMRc2MqwfJ+wvq7K1F7ILkA+M6gAodn7oDOuRlMqjTeoHKr8n3xFmNlD8vlLJjVcSGn/dlXKBbUmX+3XWnnZSqXceR8xPiLznNHmmyl2ZE7Qk89MT07Q3nuMPydotlGtVvHnP/8Ze++9N5YtW4Zbb70VL3vZy/D444/jpS99accgxe0xKSXofe97n/3/sMMOwxNPPIGHH34Ye++9NxYuXDiZIR0Oh8PhcIyClLKtcehkxpjL7LXXXnj22Wex9957Y7/99sNPf/pTvOxlL8N999036Qq3cR8E5cvIt8cXvvCFSa2MwzEZtg3XQQAEjNiL3gTF69/jUYCA7ahA+kyaSDG6EpR/zih+FOGVrJ+CQvkZzBn1rpJmPL+7gi1D9UyZoQDT7wJBcRu2Jhmrifq+4JlilIv9J1JAUs8qf0Jm+UCCqN5i87udCgRk3iCTqF54rCXhfDw+onIYImo0kEil8BmzbT7hvWuUz3GrUjNYU8pT3s/FOuw3JmeotaLMKFMGo0DtaEXIsWP4P//n/+D222/HEUccgdNPPx3ve9/7cO211+LJJ5/EWWedNakxx30Q9MADD4xrvt3ZiOhwOBwOx0xgGjtPdYy5zOc//3n7/3ve8x7ss88++NWvfoX9998fb3/72yc15rgPgn72s59NagEOx44gFRKpkFYRkGhXg/KMN7EYQFEByt3fLqOoQkRKyJw2ZVQgIcefkD0XWNRTwbbhOoQEGHKbQIiC+tNRBRI8e0yrPvntbhQh86VOCcDl6AnhjqKKsr0qxajR2K4qRKCUnRGd7j6eTW6S4A35z7rxC5n9oZMi1OoByquogFJS640II/XGqGrUXGaOH8NMiSRJ8JGPfASf+cxnsGLFCgDAkUceiSOPPHJK486u5l8Oh8PhcDjaMErQVG9zFd/3cdNNN037uO4gyDHnMTt2wmWhMgjQ/pMJjmczaHK+FethsWqQ7HwDsvlGq3KyakXW8XwufzmNBddJwsoHlGX7FLZn263DxjBVTPnbKDCy627P6cKoPFG9hqheQ7M2XLi/PRUoLJetmtpVKdvb9jBJ8GN53yghIND94HIhf1LqDCohUSmH9vGuljGNR2lXzw3aHTnuuONw8803T+uYk6oOczgcDofDseNw1WHA/vvvj4suugh33303DjvsMFSrRWP/ZHKC3EGQY86zqEdVAW3T2TSpkAU/0PaUoO3lApFWBWiiFBZA1RltrqpJyszLtKshABCzydq8VePPYCJSACKFYD64kLkMIjXGrqymzSimzx0YGlEEKpVfK99XLKxUbSVW4akT+LyO1Btt1Y+talA+UyiPSR+XLY6Y0dSkrkrZ+pR2JW+Q0LepjjGXufbaa9HX14d169Zh3bp1hccIIe4gyOFwOBwOx67J+vXrp31MdxA0xzHXvV0uBrCgW1UjBSzLoxkNc7ZJdQ8kQnIq0Fh5QIRkCkY+8tbQmoRMmapkyiVEJ1xar4xRghglu6QatLS3io2DNXBJwBhTE8UoFWG5PCA7mfmQ1IOAUggYlMKXatkn0TJBKiSIzgdiu9pGnCE6+37U90g+88eoKqYSC8j8bCMt1V55nxuQVX+NR43pyi2vVdQz4wzXGyAt83RXyoWqs+6cP6lTT7G5+l2Ztx1OZYxdgTiOsX79euy3337wvKkdxjhjtMPhcDgcs5zdvToMAOr1Ok4++WRUKhUccsghePLJJwEAp59+eiFDaCK4g6A5junO7CohFEmLH2gsWrOCAHTur9QKIWMbIszjlKl8G+O7IMRWtxgVyGD+31V7XXEhsyI6q46RwrYq3Nc3ST1IrS4Yv5fZhlEqbT4UoFQ0JwJND3m/jan8qpTDgqIjUawMo0T17ktF1ll+MnTZKi91y49j9m2z62zvRz3fyd5UmTnmLqtWrcKDDz6IO++8E2HOo3b00Ufj29/+9qTGdJfDHA6Hw+GY5bjqMODmm2/Gt7/9bRx55JGF7hSHHHIIHnvssUmN6Q6CdhHm6nXu6WZpbxX1RoRESFCyfV9QRzWoFaMGjZUUbbxCLX2uTCaQtRvpmzmDlVJ5WXZ1BcNnBFSfv0sQm/Ujc0qb9WDlPUHaswXovmA6FZrr99d4T8wXIpcA08sZGKnvssrazsQoNcP1BgZrDfvZJVCf6+nY5t2VMgZG6h2X3Tp9PCnr5vtxLivmrjoM2LJlCxYvXtw2vVarTbpll7sc5nA4HA6HY9bz8pe/HLfeequ9bw58/u///b9YuXLlpMZ0SpDD4XA4HLMciWmoDpuWNdl5XHLJJXjLW96Chx56CGma4ktf+hIeeugh/OpXv8Jdd901qTGdEuTY5TCXwoTMLj+13gz5SH5JCCRlhUs1+Vtb2wZ7M9cDjKE3dzlHm4HNcozZM399nxFV3j+/e9e8dLO0t1pohkmk1NvaUyZpcyNUT/MgmG+DEU2DTGOA5vrv9sTvvGl2sDZ2w1DHxOmuKPOzaU0jgVEvSw2M1PHccB0DI3X7f/6xidDXVSnc8stsbdCaZ6TemNO2gew7ZGq3ucyrXvUq/O53v0OapnjhC1+In/70p1i8eDHuueceHHbYYZMa0ylBDofD4XDMclpP4CY7xlxnv/32wzXXXDNt47mDIMcuR29VhaexnHHWmDeNCmOuJZvpXMqsvQPMc1ihEl6CdWyrASlAdLsBALYknuTOvGznCNNANDfwrqoAGTYP1tAVMKQ5czikijKAzOICGFHWaSFy7TByco6Q2X3z3hJrPFeJl8ac20peLWg10o7HWOsYnfG2pWg1/28brtv9cdtwHQta9gPzPnZ6bDTGasy6q7TP2N3hnOMHP/gB/vznPwMADj74YPz93//9pEMT3UGQw+FwOByznOkIO5zrYYl/+tOf8I53vAMbN27EAQccAAC49NJLsWjRIvzwhz/EoYceOuExnSdognSKYXfMPhqJKJS/579AzNknkJVdd/IPCSmLIX8SECA2+NDSUuotQLJ57Vidv4B29dL4zYM1eLS9KSaglJx849NUvxcAbCCimcfcZE5ZM74qM63Te9gJo/oM1lSJ91zPTpmNbB6sFe6LlvcxFRIxVzcBIObF9+C54bp9D/kO+uUey080K8h9D032Ntevh/3zP/8zDjnkEDz11FO4//77cf/992PDhg140YtehFNOOWVSYzolyOFwOBwOx6znd7/7HX77299i3rx5dtq8efPwuc99DocffvikxnQHQROkUg7bmgY6Zh9cAiMxR9mn4EIWPDiMEkiZta8gMgvey8+X9wsZlI9Ft9woqEHMVj1BV4OZs1hCSEGt2J0wQZBcFn1ZQDG91kwzgYpGGDCqnQl5o/p5SSdVTUqIlpqxsfwklKj3p1WFcEyNLUOq2uvZgRqEBHwtkgpkJd5KGVJ3qCRtXWjm62bIgPoMGWVpcW91RtZ51qtAAAQkxBSlnKk+f2fzghe8AJs2bcIhhxxSmL5582Y8//nPn9SY7nKYw+FwOByznKleCpuOLvQ7m9WrV+OMM87A9773PTz11FN46qmn8L3vfQ8f+9jHcOmll2JoaMjexotTgiaBqzKY/Szrq+Lp/hoYlwgYKagPjBLt28n8JVzCVitZxSI3T6tCJKQE1aqD6ZgB3eJBSIm8uJBXPGRuGiFkt1GGuJCQrUpQp/lkyzw5FUhKQJDsi5yQ4pe6ILATzNldqzJkyJ/5CygPy0ypDLsTRrERyN7DJNerwSqiyN67mEvss6CrMI5Rk/LMZMsHo9i6SsHZzdve9jYAwAknnFCsDAXw9re/3d4nhIBzPq4x3UGQw+FwOByzHFcdBvzsZz+b9jHdQdAsYqTecCrTNLLnPHVmv3GwZpWBkqf0Gy6kTbklyNKI87D8xWKjCAGQRDfxNKqDERtylU1A8QvH/MtFzt+iValdlW3DdfhUqTsxl22+D6Co5JjHC+pO7n/l4ck/uXUw9YdRpRosbVF2TGq0SRPnQiIWElwAS+c5FWiyPPXcCAAUsrdMZZ9pUsxbrsMI7REjUP66J7aN2Hn3WdCFVMjC5yFf0TkT9HVVJpxcPTBSx/AOTCKfjstZc/1y2Gtf+9ppH9MdBDkcDofD4ZgTRFGE3//+99i8eTOEKF4kfcc73jHh8dxB0CwirwIN1xtjpp86xk9eEdg4WINPSSE5mhFVMZZXaQAALVVlAGylE0P2WGsFmH6qFSpm+ix2tmLSm03mT+u2BLL3IJ/i3fq4Ie/Rssvo8P60KkCtY5lsolhnQO3CYtwOwXq2tHrDZaYEqSBv2aYE6YBvUBAQIguVmE9sGwEjxfc27w2bKfq6KoWeZmNh5tuR+7WrDgNuu+02vP/978fWrVvbHpuIDyiPqw5zOBwOh2OW46rDgNNPPx3vfve78eyzz0IIUbhN5gAImCMHQX/7299w8sknY8WKFSiXy9hvv/1w/vnnI47jwny///3v8epXvxphGGL58uW47LLLdtIaTx2nAs0MS3urGIkFWO7M01YkofhlwXWWSSqkni9Ll853gjdqh5nOW1SgPPm8GwDj7ok0V6H6jF4AdhsWb9DbV/3Nb2vecvZv1ID8bSLk3x/jBZoOs+nuTra/ZCnQce69TIVEylG4caH+mvmTXFq4kOp+/nOQ6PFmmnw+0VjsjI+M6yIPbNq0CWeffTaWLFkybWPOicthDz/8MIQQ+PrXv47nP//5+OMf/4gPf/jDqNVquPzyywEAQ0NDeNOb3oSjjz4aX/va1/CHP/wBH/rQh9DX1zfpOG2Hw+FwOByzg3e961248847sd9++03bmETOUbPCv/3bv2HNmjV4/PHHAQBr1qzBv/7rv2Ljxo0IggAAcO655+Lmm2/Gww8/PO5xh4aG0Nvbi8HBQfT09MzIujt2Ps8N19XZKpfwGEFAie1nlKe127zyMWDUqi5TcVaoDBvFz8AIwaKeXVsJMt6JeiLQGszMZVahB8Am+tBOZWQ5zNkso8QqaiaZelnf6FVe+TP8RL/3ZpyxnucYnUe3DFu/D2/5kEuZeVBa+39RQmw1GKD2K58Wk6N9vY8RZPlRjMBWkM0UW4bq49ovnxuuw5PpjP9emN+kO//0BLq6p7aMkeEhvO6Qfebs71u9Xse73/1uLFq0CC984Qvh+37h8TPOOGPCY84JJagTg4ODmD9/vr1/zz334DWveY09AAKAY445Bpdeein6+/sLvUbyNJtNNJtNe38iSZMOh8PhcOwIpuNy1ly/HPbNb34TP/3pTxGGIe68886CeZ4QsvscBD366KP48pe/bC+FAcDGjRuxYsWKwnzmuuHGjRtHPQhavXo1LrzwwplbWcesREKducY6KyYoMcQ8yzYpzqnOPj2q+oJJAohR/Al5k13Rz5KbriuSFvXu2ioQoDwWg7UGPEbs6XwslMcD6JwTBBTTuPNYRc48V9/fczs5P5sHa4UvzLxqMZYK9OxADcv6qtg4WBu16mx34KnnRjCSCOWjgrTJ6EC2Le39tkyg8f3w+pTCZ9l7FOs3O/9ZUB4ziUe3DIMS4HkLu6f0up7uVwnXjKp9d3Fvddzq7Pzuijtp3sH867/+Ky688EKce+65oHR6LM071Rh97rnnghAy5q31UtbTTz+NN7/5zXj3u9+ND3/4w1Neh1WrVmFwcNDeNmzYMOUxHQ6Hw+GYTkTHwoKJ3ea6EhTHMd7znvdM2wEQsJOVoI9//OP44Ac/OOY8z3ve8+z/zzzzDF7/+tfjla98Ja6++urCfEuXLsWmTZsK08z9pUuXjjp+qVRCqVSa4Jo75jqtibVcwlYwtc6j/s/3AyM6E6VDx3lsP/mY0dGzbHZFeqtlpMN168EBit3Es4nqDyUA13fyQhCFqjLrZMd66rkR7DV/dJ+IgEroNv8bOmUTFZ6n12l3er9aeWjjEFKhfkC5ABIdUNeqBLXS+oOb93p1+jHmQiARaj5GiB2XUe0dkspHRwgAKiHl2O/deNhznuoxKKXqPTebFT/RplJPboy5zAc+8AF8+9vfxqc//elpG3OnHgQtWrQIixYtGte8Tz/9NF7/+tfjsMMOw9q1a9uOBFeuXIl//dd/RZIk1iz1P//zPzjggANGvRTmcDgcDodjbsA5x2WXXYb/r713j46iyve+v7uqL0kICYHcQEIg6qB4uBke88aljhcOgcF59Ojj6xkVyRwOKpO5igocHK6jKGFwqUtHnecIzhzP6Pi6xvEwIqB4QcmgIsid4R6EJMg1FyDdXbXfP6p3dVV19SXp7nR3+vdZq1fSVbt27V1V3b33d/8ua9aswahRo4IMo5cvX97lOtPCJujYsWO48cYbUV5ejmXLluG7777T9wmV55577sHChQsxbdo0zJo1Czt27MCzzz6LZ555JlnNJlIYzf5Hm2Fq2cj9cU0ss1ohXjB/+GOJMV2lMEo9WgRcIQElvv3phjECsJjNqtzsQQRoao/CA2qacaqjgMMhMkf769G996JogzFDfbROsZFsjTIBj6Liok/VlSCxLGPFqJyK9wIt0rrVVsh8vMQ4vKqm9kiM6fZBKtd8CMV7GZpKxBnHwZNtMdsFCTXIyTSboFRFUUOrbl2pI53Zvn07xo4dCwDYsWOHaV8kVTcUaTEIWrduHfbv34/9+/dj8ODBpn3iyyw/Px9r165FXV0dKisrUVhYiHnz5lGMIIIgCCLtIe+wDM4iX1tbG9F2CABGjRqFDRs2JL5BRFojPEJEfiOJAYrEdM8XATeoQBJnmlcY1zyXrDFOVP8BRkXCmlVbbEtVm4OegvujNNtFAFbgzx6ui22BayzHYAupqNY8ZJriQEpPZC76VHT6VD1iOhAc90dgTVwgfnRDxX4y/iiLMqqkqUJC31OFTZACOGWtrOYdyKAw4NDJNgyLgxpEpA/79+/HgQMHcMMNNyA7Oztk7sFoSIu0GQRBEASRycTqGSZe6cypU6dwyy234Hvf+x5+8IMfoKmpCQAwbdo0zJw5s1t1poUSRBDxJMvBcOaiggs+FR4fRx+XBEVVocJsE2RUgjjjUNVA1mt/CQCBOCaAeSbMwDEkjMdSJuFVgU7/xb2oaNddeBkBmioD+D2DJIMqwDTlTWJarinZYfUY04g0CzRG7dZ/Byh7fFiOnGoHoKk1uk1QGA+lcJG+Q7lnKyo3RF/3f55UBpkBql/1kQx2QoCk2x3JkqYWKRzYd6INAOB2sF77mVMRu3dXmpsE4Ve/+hWcTicaGxtx5ZVX6tvvvvtuPPzww/jtb3/b5TppEEQQBEEQKY6i8pDLkF2pI51Zu3Yt1qxZE2QbfPnll+PIkSPdqpMGQUTGcdHnl4ZVzeNETGCFCqTHsPFHLub+GEIS/MqE305FhCkR9kFWO6HeOiPtDj5DlnBAs+/xqoDX77Kl230AWsAWSdvuZH67EB6wCeIIxIsJFxvIyOD+uWg8rSkbdG+iw+GXXAIeYf6/aiDnmhE7+x67fQJRT9APswQATP9ASowF7IR8MHmNyRI3PS8eq1ES0avo6OhATk5wRO/Tp093O94f2QQRBEEQRIrD/UuKsbzSNF+6zvXXX48//OEP+nvGGFRVxdKlS3HTTTd1q05SgoiMpNOn2Tn0ccladFoeyGVl9BALpQYBAOMG7y9TpGmOYQNi81bpjRiFA6EuAP6/htm8KbIwuN8exCaPWBfPT+pP1+DG++PHqNqI/50Gtz2jGgpo8aE0IitD4lhF5QE1SGsJVIXDKUtQOYfXr/aoEodTZYCkxQ7S2tz1fqYLCg/EuoqljnRm6dKluOWWW/DVV1/B4/Hgsccew86dO3H69Gl8/vnn3aqTlCCCIAiCIFKevLw87N69G9dddx1uu+02dHR04I477sCWLVuCokdHCylBREZy3qvAq3C4ZM0T5YIvOD6QQCg/Eme6GsQM6g/nTM9wne4uqIliYL8+uk2OS/Yra1zzygMCapDTodlWqQbbDs4CNkCynIzWZybC3urQ2U5/fj3Nk8uoBlntgrS8X8F1iW1CiZAYC5qCq4pFZdL3G432JEhMUwdVBfBKQj3yl5R77+ePgiUCw4YNQ1NTE+bOnWvafurUKQwePBiK0nWjMBoEEQRBEESKQ95hodPdtLe3Iysrq1t10iCIyCiOnenABZ+Kdo+CQX3dkBlDp8LBecBTyYgsAeDQc4aJSLVC+QECHmMKjy2qcW9H2OQ0n+vAeUlFu8dnykMlMQavqppiNSlcyyjudkiQ/bZZjGnKQrSeYURs5Gc5NAXBp2V5FwqNsP1x+j8IssRgEYb0+E8i2rRk+BH2Gu5zlkNCW4gfaN1WiANQVIO3mBbNGgCynFqjFJWCPyWDw4cPY/HixVi/fj2am5sxaNAg3HfffZg7dy5cLpdebtu2bairq8OXX36JoqIi/OxnP8Njjz0Wsf6HH34YgGYIPW/ePJOHmKIo2LRpE8aMGdOtttMgiCAIgiBSnFReDtuzZw9UVcXLL7+Myy67DDt27MD06dPR0dGBZcuWAQBaW1sxYcIEjB8/Hi+99BK2b9+Of/u3f0O/fv0i5vjcsmULAE0J2r59u2lg5XK5MHr0aDzyyCPdajsNgoiMg3PALUvwKCo4l/RouHqUYoMyoaiauiP2a6YrXLcPAgzxg8BizmidCZTm98GRU+1wyzKckual51XFyxgd2IwKDoek7SMVqGfRInkz/2fDr/wwzTNMj+BsuW9GVdQJBq/CA+qpIfK0wgOKjrA5sotBZPp8qjC5G2ZCFPBU9g6bOHEiJk6cqL+vqKjA3r178bvf/U4fBL3++uvweDx49dVX4XK5cNVVV2Hr1q1Yvnx5xEGQSJz64x//GM8++yzy8vLi1nYS7wmCIAgig2htbTW9Ojs7436Oc+fOoX///vr7hoYG3HDDDSYVp6amBnv37sWZM2eiqnPFihVxHQABNAgiCIIgiJQn1kCJxuW0srIy5Ofn668lS5bEta379+/H888/jwcffFDf1tzcjJKSElM58b65uTmu5+8KtBxGZBQeRYXXb4DZ1qkgy6El8pT8Ur7RUBeAyf0WhtQOKgLpM6xBFInIyEwzhhVLYN4wmR3FNdcSqTKUD6ClsJ7EJTNkObT5ssQCDgTCENopSf73gXtlTIgLiOWswI+w+EwpKjesakm27vUCsRQXrozVMLs3oaocaozeXeL4o0ePmhSVUCknZs+ejaeffjpsnbt378YVV1yhvz927BgmTpyIu+66C9OnT4+pvT0BDYIIgiAIIsVR42ATJMZQeXl5US0rzZw5E7W1tWHLVFRU6P8fP34cN910E6699lq88sorpnKlpaVoaWkxbRPvS0tLo2h9YqBBEJFxXLCRHWTGNANoS6wtq5E0JM0AGkCQEabUm60y48zg/rnoONEKr6qpAkJNEIgkmU5JgsvB4JQYHBKpQMngipI8bDt+Dl5V1zwBBAyhxb0S74UiJGykJTA9uKiIU+NVNFXILWtqoNFQ2tYo3m8YbVSBJJb+wf9SnaKiIhQVFUVV9tixY7jppptQWVmJFStWQLJ8pqurqzF37lx4vV49uvO6deswfPhwFBQUxL3t0UI2QQRBEASR4sTTJijeHDt2DDfeeCOGDBmCZcuW4bvvvkNzc7PJ1ueee+6By+XCtGnTsHPnTrz55pt49tln9RhAyYKUICKj4NBUBtWjuWZ3KircshaKX/GZvyCsKTBMapBhtioxbbZMdA2PwjUVyG9zItQD2XBtNQVI+0tu8clDZgw5TtlvyyPb2v/IUkBRjSZUxLbj59DpU+H029Z1+gL3XeFctz1SOQ+yMZIlLYhmrssBl4Pp+3vz51Cx2Ct2t45EsG7dOuzfvx/79+/H4MGDTftElOf8/HysXbsWdXV1qKysRGFhIebNmxfRPT7R0CCIIAiCIIhuU1tbG9F2CABGjRqFDRs2JL5BXYAGQURGoahAp0/zEBOB2VSJw+h0YWeToNjYK9gUI7qABAaXA8iCQ09DIq6pmNk7JUYpMpJM4+l2zV4Ofnsf/18tB6o5OKLcBe89l8wgLDKMnyVdAfIba8hgIXNeOWXNXqw3K0CCeHqHEQFoEEQQBEEQKY6COESMjktLehc0CCIyiouKqqs6iqoZCnpVc1wgSKG9VATGXZkwC00E2U4GRWVQodl8uGSm+x4Jjw1SgJKPBE21kVngXskMGGax+2k83a4nyY2GK0rysPdEq57yIuAhqMKrAP6cqNrn1R8ASKTUMKbq6InPX9PZDgzs1yfh5yF6HhoEEQRBEESKk8oJVNMZGgQRGcGellYAgMfvAXbRpyLLIUFVuB61VtihGCNEC0REaRETRQLDiFJSgGKhorAvDp1sw7BCuo6pjFDjGk+3Q1GDFSBBV1QgQbZDgswYPIoK1Slpqo9P0wO9hrUbmZkVIUCzB5J7KMiLR+E4cqo9qXGqUtk7LJ2hOEEEQRAEQWQkpAQRvZ49La0mu59Onyb1aAoQ88vMDIA209Lj1KjMFA8F0GyBRg7M78nm92pCqQpE6tEdpaerdR482QYJHE7O0MkCkd2FguFVuP6ZdEpSj9njlQ/IxaGTbX7lMjnPrKrykF5yXamDMEODIIIgCIJIcZQ4DIJiPb43QoMgotcjMwYvROZrbVapeYUFykiq0d4g2DtMRMIlFYggEofMGNwOwKcCMpMBACq0fH0qODgPjiXVU3Bo9oL7v2vznx8Y4Oq589MgKDGQTRBBEARBEBlJ2g2COjs7MWbMGDDGsHXrVtO+bdu24frrr0dWVhbKysqwdOnS5DSSSClkf+4pp2TOdWTFOksSnieB7NgUIpogEkn5gFxkOyRkOyS4ZC12VJYsBf0dOTC/x70zVa6pUsJLq6dtgxQ1oAZ1/9WjTU4L0m4Q9Nhjj2HQoEFB21tbWzFhwgSUl5dj8+bNqK+vx4IFC/DKK68koZUEQRAEET9iHwDFvpzWG0krm6DVq1dj7dq1ePvtt7F69WrTvtdffx0ejwevvvoqXC4XrrrqKmzduhXLly9PepZaIrmoBjsCEetHqEIiDL3KuW2EaFF+zCX9eqi1BJHZXFJgjsxsjM/z7en2pEURFyF2KNRO7yJtlKCWlhZMnz4df/zjH5GTkxO0v6GhATfccANcroClWk1NDfbu3YszZ86ErLezsxOtra2mF0EQBEGkEqQEJYa0UII456itrcVDDz2EcePG4fDhw0FlmpubMWzYMNO2kpISfV9BQYFt3UuWLMHChQvj3mYitRDZrhnTvgTcDknLHO9fJBeKT5YjMC+4duiAHm8nQRBmygfk4tvT7VC45tl58GQbHBJLSNwiOw6ebIOiavnTvCoABlxW1POxgihOUGJIqhI0e/ZsMMbCvvbs2YPnn38ebW1tmDNnTtzbMGfOHJw7d05/HT16NO7nIAiCIAgi9UiqEjRz5kzU1taGLVNRUYH169ejoaEBbrfbtG/cuHG499578dprr6G0tBQtLS2m/eJ9aWlpyPrdbndQvUTvQmaAz7Ker/JAxGjZ7zn2/UsLk9dIgiBCwhgDOIdH6TklQ8QD8vm9qlyylr2+IkkRoxUehzhBZNAURFIHQUVFRSgqKopY7rnnnsNvfvMb/f3x48dRU1ODN998E1VVVQCA6upqzJ07F16vF06nEwCwbt06DB8+PORSGEEQBEGkAxQsMTGkhU3QkCFDTO9zc7W14EsvvRSDBw8GANxzzz1YuHAhpk2bhlmzZmHHjh149tln8cwzz/R4e4nUwikxeNRAgAyvwvW4QV7/F4tTYth2/BwAYNQgigpNEKnEJQV98O3pdshMixyd6Ihd+060QfVHjldUwKuqKB/Qs3GJiJ4hLQZB0ZCfn4+1a9eirq4OlZWVKCwsxLx588g9niAIgkh7SAlKDGk5CBo6dCi4zdrmqFGjsGHDhiS0iEhlmCX+j8QYvKqq2wWp/meJMejxgwiCSD0cEiAxCYlOG+ZRuK4EAYBTSn40GZ/KIcc4iPHRICiItBwEEQRBEEQmQUpQYqBBENGraT7XgU5F1b3CHBJDjlNGu0dTgGSJIUuS0D/HSRniCSKFSWSk6MbT7fAoHOe9Kjp9KtwOSc8xeNVAsgXqzdAgiCAIgiBSHAqWmBhoEET0anyKOXOywgM2QE5JZIcHqUAEkcFwfzRqmTG4HRIcEuvxLPWRENnrY62DMJN8ay+CIAiCIIgkQEoQ0WtpOtsBFZpHCVRtfd8Lrs+oZL8K5JblpLaTSA1Ot50HAPTvG5ygmejdyH7PUAmACmB4cWqpQAAZRicKGgQRBEEQRIpDg6DEQIMgotciM0ABAImh028Y5PFxnPcqAACv/oWgJKV9RGpBClDmMrh/LprOdkBROQb3T05uMCI50CCIIAiCIFIcUoISAw2CiF6LR+Hw+vOCiQizKudQOeCWNZ8AWdIiSBNEvPmuVbMxKsojhSkdGNivT7KbEBaFq1AMORC7WwdhhrzDCIIgCILISEgJIgiCIIgUh4IlJgYaBBG9Flli8KocKqAHTPSqKpwSg8o5nDKDW5ZRWdYvmc0keimca88eQcQDReWQyCYo7tAgiCAIgiBSHJ8KsJizyMepMb0IGgQRvRaZaWqQ0fBNC4yoQGIMWQ4JskRG0URiKM5PbUNbgiBoEEQQBEEQKQ8thyUGGgQRvZbi/D749nS7yS7DKTMAMpwyw6hBkZOmfnu6HYr/e6N8QG5C2kkQBBEJGgQlBnKRJwiCIAgiIyEliOjVuGSGCz6OLIdm+6OoDNn+p37fiTZcXhw+RP7g/qT+EPHhVNt5DKDUHEQ3ISUoMdAgiCAIgiBSHIoTlBhoOYzo1RTn94FDYmAAGLQ0GbLhqd93oi1ZTSMyDFKBCCL1ICWIIAiCIFIcReUxxwmi5bBgaBBE9HpkCXD5RU/OtS+Bi5zDp2rJVPeeaEW2Q8KQJNn/NJ3tgPhuuqSAYssQBBEM5xw8xkGM+P4jAtByGEEQBEEQGQkpQUSvp9QSubfpbAdklYMzBsY4JGieY83nOoLK9gQD+/VB09mOHj8vQRDpg6rymA2byTA6GBoEEQRBEESKwzmPeTmLlsOCoUEQkXEM7Jd6djep2CaCIFIHrsbBJoiUoCDIJoggCIIgiIyElCCCIAiCSHHIJigxkBJEEARBECkOV+PzSjSdnZ0YM2YMGGPYunWrad+2bdtw/fXXIysrC2VlZVi6dGniGxSBtBoE/e1vf0NVVRWys7NRUFCA22+/3bS/sbERkydPRk5ODoqLi/Hoo4/C5/Mlp7EEQRAEkWE89thjGDRoUND21tZWTJgwAeXl5di8eTPq6+uxYMECvPLKK0loZYC0WQ57++23MX36dDz55JO4+eab4fP5sGPHDn2/oiiYPHkySktLsXHjRjQ1NeH++++H0+nEk08+mcSWEwRBEERspIN32OrVq7F27Vq8/fbbWL16tWnf66+/Do/Hg1dffRUulwtXXXUVtm7diuXLl+OBBx5IaLvCkRaDIJ/Ph1/84heor6/HtGnT9O0jRozQ/1+7di127dqFDz74ACUlJRgzZgwWL16MWbNmYcGCBXC5XMloOkEQBEHETDxtglpbW03b3W433G53THW3tLRg+vTpeOedd5CTE5wnr6GhATfccIPpt7impgZPP/00zpw5g4KCgpjO313SYjns66+/xrFjxyBJEsaOHYuBAwdi0qRJJiWooaEBI0eORElJib6tpqYGra2t2LlzZ8i6Ozs70draanoRBEEQRG+lrKwM+fn5+mvJkiUx1cc5R21tLR566CGMGzfOtkxzc7Pp9xmA/r65uTmm88dCWgyCDh48CABYsGABHn/8caxatQoFBQW48cYbcfr0aQDdv8BLliwxPQxlZWUJ6gXRW2g83Y4jp9qjKnvwJGWpJwgidkScoFhfAHD06FGcO3dOf82ZM8f2nLNnzwZjLOxrz549eP7559HW1haynlQmqYOgaC+wqmom7XPnzsWdd96JyspKrFixAowxvPXWWzG1Yc6cOaaH4ejRo/HoGkEQBEHEj3gMgPyDoLy8PNMr1FLYzJkzsXv37rCviooKrF+/Hg0NDXC73XA4HLjssssAAOPGjcPUqVMBAKWlpWhpaTHVL96XlpYm6qpFJKk2QTNnzkRtbW3YMhUVFWhqagJgtgFyu92oqKhAY2MjAO0ifvHFF6Zjo7nA8VgLJTIPxqIrV1HYN7ENIQiCSBBFRUUoKiqKWO65557Db37zG/398ePHUVNTgzfffBNVVVUAgOrqasydOxderxdOpxMAsG7dOgwfPjxp9kBAkgdB0V7gyspKuN1u7N27F9dddx0AwOv14vDhwygvLwegXeAnnngCJ06cQHFxMQDtAufl5ZkGTwRBEASRbqicg8Xo3aUmyDtsyJAhpve5ubkAgEsvvRSDBw8GANxzzz1YuHAhpk2bhlmzZmHHjh149tln8cwzzySkTdGSFt5heXl5eOihhzB//nyUlZWhvLwc9fX1AIC77roLADBhwgSMGDECU6ZMwdKlS9Hc3IzHH38cdXV1pPQQ3abxtGb7wzlQPkD7YA/pn5vMJhEEkYFwHofcYUlMoJqfn4+1a9eirq4OlZWVKCwsxLx585LqHg+kySAIAOrr6+FwODBlyhRcuHABVVVVWL9+vS6jybKMVatWYcaMGaiurkafPn0wdepULFq0KMktJwiCIIjYSKcEqkOHDrUdcI0aNQobNmzokTZEC+PJHBqmIK2trcjPz8e5c+eQl5eX7OYQSeTb0+0Y7Fd99rS0QlE1WyDOAVkCriih54MgMpme+L0Q5xj96P8H2d0nprqUzg58U/9/6PfNQNooQQRBEASRqagqwGIOlhinxvQiaBBEEH72f6fF9PH5v2g8Ckfj4VNQVCDHKUOWgDGX9EtiCwkiPJuPngUAVJb1S2o7iPiTDmkz0pG0CJZIEARBEAQRb0gJIgg/nANeletK0L5THQA0Fej6igHJbBrRg6zf/52IKYfxl0cO4ZFMvmw8g/81JBBjpVNRoKjAxsOnAACKf/lDlgCnZJ7zGo+zsvXYWf1YUpVSA65qr1jrIMzQIIggCIIgUhxV5XGwCaLlMCs0CCIymj0trXBIDD6VQ1GBc51etHUqpjKTrigJcTTRW9hw8BRkv1CS5ZDgVbQfi08OnESbR4FXUfEv/zSwR9ryyYGT+P6lhQA0VUpmDIrflkNmDE6ZwSlJkBiDxJhuBwQAEmOAxCExZgqMJ8obEcfJkqYYVZb1w5eNZ4LKfdl4Rv/fqh5tPnpWv27iOJVrnyWVc7385qNnTe1ROIdX4fqx+nYVCVddNxzUVDJSdwmABkEEQRAEkfKkU5ygdIIGQURGsr3pHCRoM2yPos1KT3R04lynTy/jliVkOch3oDci7H4UlUOWNAVDUjWlBdBswwDAq6jwKipynDI+2PedfrxXUTHpihK8u6sZ/3tE/JI/Clse8Vc8f24WeA5lg+Jih1CBFFVTeSS/kqQYyotjtbJafV82ntHLieMBwCkz/ZxG1cmK8RhRv6jTel6BYmOjIpQar9+fW9wnr8px65Wxq7JCAfrkwEmc9yqQGEPN8OKY6000NAhKDPQNTxAEQRBERkJKEEEQBEGkOKmcQDWdoUEQkbLsO9GGy4v7xqWunU2tpvcjB+YDALYdP6d/MeQ4ZXhVjnb/kpiXccBHPqWpxJq9JwAgsIRlsOG9+bKAO/sH+76DW5agch5k6GvEWo9X5frSCwDITFuSUjkHVPOPyJq9J+CWJdMymeI/TuUcCgfOexX4FBV+O2tMuXpwUBs+OXASTjnQRomxoGUiBdz2B8y81GRug7Wfxu3GuiTGbK9noCzTy9lhNXgO1xZRVuHakqJxWU6WmH4OmUG/ZsZyb28/bqpPX/qz+W13SiysMbswPk8XaDksMdAgiCAIgiBSnHTPIp+q0CCISFliVYGEyiMMRAFt5siYpgxd9Ks8sgS4HAwFshO5LgfOubwAgOa2Tvy/o4Jn7pnGX3Y06cpIpNn1mr0ngoxMV+9pgVc1KzIyA5yyBIlpqkG4oISr97RA4doxxnqMBrsK5/jkwElIjOG8VwtxoBpcxa2KiaJyWwVBVyqEYbRNewKKhf9gNbBd1OFVua5gKFzb5pSYrhopKkeWQ9Lc3WUWZFCshPmxMv4OWtUdO0UECBh62/UV4JBUBjmEYGa6b3ZSkQGrEmY9l7G9nQa5S3sOLEbTPHBsqPg2kqU9EmNwSkxXvt7eftz/nLEeDXNApA80CCIIgiCIFIeroQeDXamDMEODIKLXovoDsnlVFYphSi9LgFuWoXIOt0PS1QQwAHLALVmSGN745hj+dfQlPd/4HuIvO5os7tI87Axc5Qxvbz+u23A4bZSB1Xta9P8lxuCUJThl+/N3+lRITFNIjHUJJUQELXRKmmKSwyLbpwj7GuHuLeow2qNYlQnjvkgYVTFNFQqcG9DsgLyqpvyoKtddvQvcTriFJOm/HnYKkPV3ys7Gx2yHE7zN7rhwSovENCVIt8kx3VeD/ZAaXgmynitSG8TzpYLDBzN2SpIVybJZZhwqZ7qyJfrjVVR0Kire+OaYvq3d44Oqcu35lBjuGZvaqi8lUE0M5CJPEARBEERGQkoQ0SsxhukXqQQEksGOpNOnwu2QwAyzebHfLUsmu4Xewru7mk1BAoW9jSwxyGCQ9Nk7A2RN+RDXJcshIccg6wjBwJjawQ5r0EmRVkFikkn5MNr7AIDTMk0T99TOdsbokRRO9TEeL8qIbUKZsFOEZGa2QVE5oCqB50X12wq5HTLc0NSH814FCgeK+7iQ65Kj8vCK1E67fdb+GfeHUvaM18Z43SXGbG2IrNciGkIpa3aqVPC28G1QVR5kE6QyzchMKFsOv/ImSwxuaJ9n0fYsWYIiAW6HpgS9vf04cpwyJMbQ7vHhzpGDoutkD0HeYYmBBkEEQRAEkeKoKkfQWml36iBM0CCISAhfNp7B/xpSgL8fOa1vM4bVNyZOFN5bRtHFGsdEvA8V2+PvR04bbDJUf72afYidN43wLHLKDPCJOCVaGaFaOP1K0H9v+Tbl7QWM/PeWbwEEbFeC1RVNrchySCYlRxzj9d+Iiz5Vs/vxXxhxfS/axE7S7m3gQlu9iNo9gaS0xlgwRi5ajUIQrA5YbYFMSkkYzySrAhJ0bAgPJEkKeKDJjOnqg5aKQuuDrk4p2nnbPT54Fc37q7Rvluk6m84XQrmy67exf8b9ofoZTR/t1Bcg+P5Y1Rb9fCF+UI1tClLPxDNpuK7Wtkl+Wyq7+oIbYdkpGepjDF5Vgc9wfkli+rOY65L1z8FFn5Yepam9E16F48Gq8jAnJXoTNAgiCIIgiBSHqwq4qkQuGKEOwgwNgjIUkaBReM6Ei6p7fcUAfHLgJL5/aSE2HDylJyAMh8I5/n7ktO79Y0QkdZSZP96KHFCCQtsFMFO7jRj74FW1GZ0xCq5blkzKk+nc8M+gOYeqBOyEgID3SDQeQ6nAq181QvbHQxHxdPq6ZOS6HaZ7ILyagMBEWig5RhXFKUuQmab8GCMoA6HtU6KR24WSIjAqQrFca2sbjGqI1b4kUjvt1A+h/Ig67T4zPkWFzBhkB0O2U9Y93lQ7ZUbEIgrjQRXOPsiuvyYvM9X6WQo+h2I5V6ho06GIFDdI2OgAZkVX4oDK7O9BOLusSBj7rELUI7z0OHKcMgqynXp7On0KWi96dQU0lT/rNAhKDOQdRhAEQRBERkJKUC/kkwMnAYS2nzDOyOz2WbeL+tbv/870VzbYmlw7VFOHNhzUlBo7tWjj4VNBKozAq3C/nUToqZidUgQY7SuCZ7Ky36PJikkZkZnfJoCj0+/RI9okM/t8T8nm5U1HwnrTyIwhxykHvGOYuc9i1iuujWKnJqgc59WAMuY3n7Kc0/w+mojHUAJtBOxVSKtNmB2hnhU725dw5cU57Gxg5BCKlbVusT/bKSNbvJeY7lln1w9jNGlTnd2w/QEAr6qGtQkytztYbRJKkPUzZKcOif7JBlXRqgrJkuYxKBsUV1MfuPmahMvzFvreWc7JglU8mTHIMoMkad8x4vMNQI8j9m/jhoSoP3XgqhoHJaj3ebvGCg2CCIIgCCLF4YoCrsQ4CIrx+N4IDYLSBJFzyLoE75SkIE8rqzeQQOVa+WjRZovM5NUlZnYiGi8AKL5A3iaBne2OomrZsL3gJm8wO5sNO4w5n7S2BI7X6tf2CeXC4Y8EK6L3AgEvMKFIAYCqaN5LbZ0+tHsUtHs0vUNkk3/iw39AUTlcDgmzb7o82suXMN745pjm9aYG7EnEfZH8Hm9ZsoSCbKfJNkpgnNkLTy87myCrV1W42DGhbG7C2Vh4EfmeWwllk2Q6t/HZjNIlWJaYZr8CzV7FGHVaDqNOGJ95hYvyogAACbriYfeMW73qxDZjncZt4RQuYb8Wyt4nFKH2GbeHK+MyqImhVKFAm8Pfj3BqnfF4o7pkpx7ZqYzCZtD8TKsh72+qwXkcbII4DYKskE0QQRAEQRAZCSlBSeDt7cf1/41RSf+8LbDdaEcgMyDHKfsjm0o2Co/BFkSy3y7wqmqQbY11XV4g8i6FiyWiHycBADfkUYrgNaIEzhE4d+RcTnbRf4UXk1uW4FU52j2KZvPiUaByjub2zqD2dnh8IW0hrH8FHp+Kx1fvDmkzIUsMLoeEhTVXhO17V/jLjqagHF0FWU4UZDlN5awKDqApN4qNDYCd2tMVGxI7Qtmi2B0XrTpj244o1Anr/mjOZ7VvcRnsyITC5jXYDIltssHDSbJ6gkWwv4gm/k6462n1/jKqgnbPtMcS38naZ1HOuD8SispxwWNWF4z12p3DdHwUCnC442S/fWMgCnzwzF58XXr99m1CKZ7x/wzt1rmTBXmHJQYaBBEEQRBEikODoMRAg6AQLFizB8vvuibu9f7x62+R65L92acZ3t3VrO/Lckh6tF59pmnI79TpU6HKgFdF0Dq2Ke6KxUbISFAEWQ5INvE6rDmMgvdbJRq9Ifb7EWzPZIyYaz1Gz9/lMEeWPe9VcN6roNMXiOkhM8UUe0ZTTSRInENVgYuKCo//Qnh8akjVJ5RyEM47xvpXlhjqP9mPvCwn+rpkKDx67zKRnd1Yv3hOrDFqhO1HuHtk9EwCAtfUaEMSKUdUuJl6V0PwR3tdu1JHpH2h7qtRvRN/7RQLWWJQwHWbIUnEvZGg3xedMHF5tN1BG/R/7Tw2tTrMtkBhI0pze0VT9MPlkIKUoUhKjfF4cZyxrCwxW/Uo2noTgaoG5CCFc8BgB+mUmK7AvbzpCHKcMto9PgzIccHn95hs9/hwwavoypmd15z4v/N8ew/1ikgUNAgiCIIgiBSHlKDEkDaDoH/84x949NFH8fnnn8Pj8WDUqFFYvHgxbrrpJr1MY2MjZsyYgY8++gi5ubmYOnUqlixZAoej690871Hw8F93RCznsMx2sv0qj3gFxa3xb3c5JGTJEpyyhFyXDKcs6RmoTeVZIHaLygGFq0GzexEDRtgK2SlFQLD9DeCf5RjKRPLOiAW7SbximQ0LhB2M2yHpqpjKtVxgCtfyg3X6tJbnOGVN1eBazI/zXiVo1hZJQQg1g/aFOU7scxhmv0V93cgxRQrm+L9fHEGHPzaJOI/x2ch2yejrcmgRhg32XkZvLV+IbPZiVmuMcyOwehR5Q8SGMl2LEPc/kuoTKdJutPY7kbZHqwR15f4by4nPp1ABTGqGLigwKAqHkD8DnkrhI6/bxwny3xvD/Q2VUT1ab61otoXzGLTbH267yyYOV08oQEYPMOOz75TN7THaUykcKHBrvweBHGIOnOjoRPtFn8luynq9jft8/meq0y7hXYKgOEGJIW28w2699Vb4fD6sX78emzdvxujRo3HrrbeiuVlbTlIUBZMnT4bH48HGjRvx2muvYeXKlZg3b16SW04QBEEQRCqSFkrQyZMnsW/fPvznf/4nRo0aBQB46qmn8OKLL2LHjh0oLS3F2rVrsWvXLnzwwQcoKSnBmDFjsHjxYsyaNQsLFiyAy+Xq0jlVleOCIbJoqFgSik1cjGyXDJdDQrZLhsen6jMIoz2KUS3KzXL4lY+A51eOUw6ZbdtOGXDIkj9bdUAZssOoQITywAr0WfsbbnbbXSLNTiWGoOiugGYX5VVUf3Z4bQzf5vcCE33PkiV4WehYMXYqnXH9XxBOBTLiUznc/vstFCBhw+OUGCQWUPcuKqppxqmoHO0XfTgteXSFMNsVKC/rtlGaZ2CozN6qIZ6NrhwavL5kFvwcmbN4i7829mERbF2s7bDDThW1o6uKUDTKRyT1yNo2u3g3dp5O4vkLlQcNsI9eHLItPKAO2XkudjWvV1D9IdQeu+2hvMS6qvAYr2+QvVXYaxH6nhmPs3432XnciejoXr8KcqLDE7Kdwm5KfFeLfYrK9e8D4/au2sXFgqoqAbfaWOogTKSFEjRgwAAMHz4cf/jDH9DR0QGfz4eXX34ZxcXFqKysBAA0NDRg5MiRKCkp0Y+rqalBa2srdu7cGbLuzs5OtLa2ml4EQRAEkUoIm6BYX4SZtFCCGGP44IMPcPvtt6Nv376QJAnFxcV4//33UVBQAABobm42DYAA6O/FkpkdS5YswcKFC233WWcqtjFP9Cm0P2aGl+HsBW/YelwOyWRHIuJs2M24jHFLjDNREflZ5MqRVQ6foupeUkY1yKSwqCEUojATvHA5faxYvW5CETJuiJhlWc6v7+fasTmSDLd/7T/PHdxeoZYpHDgvKfosUMzqLniUkLZAxmseytNGKHjWth8/d9G2P9a+G23D9Htrk1MNECqOWeVRFHPkW0nSokSL/43HapGMg69nNKqPHeFyaFk90EzPvmXKZVQcQqkSxv2RlJBon71w5wmlMFk9naK1mQmXW0ucpyuqVqj2hiJSm7ui7ESKBh3p/Fasue5Mx4XzfjWoodYI+KpBPRZ2kpLE4GQMWdC8b4V9nlGZF9/BkewCrd8DoWI9EelDUpWg2bNngzEW9rVnzx5wzlFXV4fi4mJs2LABX3zxBW6//Xb88Ic/RFNTU0xtmDNnDs6dO6e/jh49GqfeEQRBEER8ICUoMSRVCZo5cyZqa2vDlqmoqMD69euxatUqnDlzBnl5eQCAF198EevWrcNrr72G2bNno7S0FF988YXp2JaWFgBAaWlpyPrdbjfcbnfQ9myXDLdLDrILCTdbk22myMYcW9bywo6kqK8bTonpHmKAebauqlyLdWOwL1IcgVmvrPpjyciB/wFDRmX/c2+nEBkjrQbZM7DIM99QdCUGjF2uJLt9oeoN9qSxRNFmgOxXSRT/sL+PywGVc3j817X9oi9IGeq0RNh1WFSHdr9niHGGLFQd8V7cL+FB43JI6J/l1LO7h+qDaZ+YnRrUFomxoCmMLkoq3OR51JVoznZ2GsbnyU5Rsquru95G4WyHQkU2ttsW7fMXSYnqbn2CSEpQpPojeXGFKx9vDy07+6lI54mmX5Fyd4VSgUI9q7kuh17WIUvwKaoWPZ3zkMqN9R4Z2y2sSW374ulBHUFRwKUYBzGUQDWIpA6CioqKUFRUFLHc+fPnAQCSRfqUJEkPTV9dXY0nnngCJ06cQHFxMQBg3bp1yMvLw4gRI+LccoIgCILoOTiP3TCaEqgGkxY2QdXV1SgoKMDUqVMxb948ZGdn4/e//z0OHTqEyZMnAwAmTJiAESNGYMqUKVi6dCmam5vx+OOPo66uzlbpiUQftwNZBpuPcLNMu32h1pGN28777VI8PtVkGwKEnzmbZpcGOxIRKVVkvla5lhFbP5Zx+GCwGVHMMTa0NXTjQJPbZiHXyto2z7aAsf9W1ceaCyxecYokxiDJDBLnkA3eWUYPHECLRZTl0Lz5rNGkrTmRRAwoca+sNjgy0+Ia6X1VuclzDYBuo2DM0B4pb5dWJvJ1CefFpYZRJE3bosjsHi4eT7i6rdh5YEVLOPsWq2IRzpYolPIUTu2Itp12Kk40yk5XbIPCnS8a7LzAQtkuRdsOuzps71cY1TEaFINHqH68xPRI6CoHLio+eBVhn6bt7+uPE+R1cN1W0BofKNp74FCcQduI9CItvMMKCwvx/vvvo729HTfffDPGjRuHzz77DH/9618xevRoAIAsy1i1ahVkWUZ1dTXuu+8+3H///Vi0aFGSW08QBEEQsSGCJcb2omCJVtJCCQKAcePGYc2aNWHLlJeX47333ovL+XKzZGT54/cIorVDiORpYsQafyQoLokhKqp+jGHmY5ztK1yzB5EZACkw0zKWF7YoRvVHnDNoVsUCM2tjewH76M9G7JQdr+F6GDOZJwJTVG2jdxwAwPDeH4k6Hw49ro6YHZ694NVnhbLEkJflRJZD0vMP2Sk5wjNFXPu+Ljk4po/huHD2Ocay0WJ3TW09tYCQU6BolM6uxO0RhPMItPMU6y7GuDRdVVASEem4O7ZKVsK1K17eWt05LpxqZN0WpIIZYlsJxLMaNvK2QXkNhVPSIsuLSNxZDgnZTtmUn1F8Hwkv03aP5kUqbDCt/THaDIrvZ+btOR2BxyFOEBlGB5MWShBBEARBEES8SRslqKcp7uOGM0fzC3BKDA5ZUwCMHlVAIJO3MfqyMWeT1VMpGtsOIGDrI9axjZ5d1jZo5bW/4WZQ3fXwMqk5vq7Z7ljtgazXx0g0MTfslJFIHmWhYu8AgAque8ZJEgNUrnuSDcrLCnle43vhNSUxZqvYhbPVkWyUPpNnmyy890Kf365eO4UpGjuHaFSgcPWFI5QnljWisFU1iEWdsVOD7Gw+utqXaNrUXduhZNOVa2Gn8NgRUgW0qEEhI92HOYXRs1VVuf596QDMNnp+pdbo9Skxhk6fT29HlizB4ZJQYPCidcpapHbNe1c7zqtwtHt8aJN7NncYYlzOouWwYGgQRBAEQRApDi2HJQYaBIXA7ZDgdmpeRdZcXEL9MeL0K0WinNevDom8NeI4wGx7Y8zzJN5bUVUOyZJd3LqQGWiOeU3dpIooMLUx6DxR2Ol0VQEK5Q1mzGul749w8lCRq+1yYhlzZkXCOIs02VgZ3kTTb6ta47UpE00UciPR2gSFit8T9pgoPBiN2Ck43SWc91A8VKBw0aiNtnd2fUmE3U4sZeNFd/sFdM0mqKsY1SCTLZ9NbjuZBdQe82fH0A7D96NkozJlO2VYMX4H+xTV5EXbqaj+YxXTb4HEmJ4rkEhfaBBEEARBECkOKUGJgQZBBEEQBJHiqKoCRoOguEODoBC4HTJynHLUSwteRYVXsTfStcqnTlnSl9S8qqoH87Iep+E/lmvBvyTmX76xsW+za6vVMFu4hBvfA9EtG4UjnGt2KEK5+ofCKD1HMqIO5/YYylA5OP1GZGPkcNj1yRsmGGG8AkXaJvoNETAw3HJQpCWQeC8bxcvYONwyWKgy1nMkYukoFrprhN5VErWkFynVhp27fDj0z6LtB53pS9ky85sHSMHLYtp+8ZdBkkN/a9gHjLUGlyXSERoEEQRBEESKwxUVYDEqQQp5h1mhQVAIOn0KZJ/5gQsbwEtXe8zbZUO+MzEbEsG6VM6DDJWNClCoAInmcuGRWbAxrnhvDbQYqd5ISkgigx9a649kRG0k0rWKNlBhJFf8rtYfb7rq2hyKWF27u9KOSOeKNsFppHNEVCLC7O/qde0p1SZauhpoMR6BGSO5zkfrWh90HDd/F9oZSZsNrUVBo1OF5V7bNCNIaVbsv/87fT23vJQOucP+9re/YdGiRdi2bRuysrLw/e9/H++8846+v7GxETNmzMBHH32E3NxcTJ06FUuWLIHDkbyhCA2CCIIgCCLF4aoSuxKUQJugt99+G9OnT8eTTz6Jm2++GT6fDzt27ND3K4qCyZMno7S0FBs3bkRTUxPuv/9+OJ1OPPnkkwlrVyRoEBSC7857kM08yW5GSHpKXegJEj0TTlV6a7/jaRMTj7qMLvFG7NLBEMF05zntjiIWia6qVtHs18t1wR7JyIXzqfsb0ZP4fD784he/QH19PaZNm6ZvHzFihP7/2rVrsWvXLnzwwQcoKSnBmDFjsHjxYsyaNQsLFiyAy+VKRtMpbQZBEARBpDqxJ09VdCWotbXV9Ors7IypbV9//TWOHTsGSZIwduxYDBw4EJMmTTIpQQ0NDRg5ciRKSkr0bTU1NWhtbcXOnTtjOn8skBIUAq+iQo7BiKy3zvKJAPFI9NlbSYW+RZrdy7G6RMaZeKm7sX73xOO7q6fuf6S2Rtqv25qF8doMh7cHDY3juRxWVlZm2j5//nwsWLCg2/UePHgQALBgwQIsX74cQ4cOxW9/+1vceOON+Mc//oH+/fujubnZNAACoL9vbm7u9rljhQZBFrj/i+hiR3tM9dAgqPeTCj/0qUo0eeASTXeXOJJFvAZBXQ3lENSODPruivUzLH4neE+YJyjhAmxEXwcAHD16FHl5efpmt9ttW3z27Nl4+umnw1a5e/duqP6cZHPnzsWdd94JAFixYgUGDx6Mt956Cw8++GCsLU8YNAiy0NbWBgBYcMd1SW4JQRAEkQ60tbUhPz8/IXW7XC6Ulpaiedef41JfaWkpCgsLkZWVFbHszJkzUVtbG7ZMRUUFmpqaAJhtgNxuNyoqKtDY2Kif94svvjAd29LSou9LFjQIsjBo0CAcPXoUffv2BUvSTLK1tRVlZWVBo/XeAPUtPaG+pSfUt8TCOUdbWxsGDRqUsHNkZWXh0KFD8HjiY4TtcrmiGgABQFFREYqKiiKWq6yshNvtxt69e3HddZqA4PV6cfjwYZSXlwMAqqur8cQTT+DEiRMoLi4GAKxbtw55eXmmwVNPQ4MgC5IkYfDgwcluBgAgLy+v131xCahv6Qn1LT2hviWORClARrKysqIeuCSDvLw8PPTQQ5g/fz7KyspQXl6O+vp6AMBdd90FAJgwYQJGjBiBKVOmYOnSpWhubsbjjz+Ourq6kMtxPQENggiCIAiCiIn6+no4HA5MmTIFFy5cQFVVFdavX4+CggIAgCzLWLVqFWbMmIHq6mr06dMHU6dOxaJFi5LabhoEEQRBEAQRE06nE8uWLcOyZctClikvL8d7773Xg62KDMUJSkHcbjfmz5+fVIkwUVDf0hPqW3pCfSOI8DDeI759BEEQBEEQqQUpQQRBEARBZCQ0CCIIgiAIIiOhQRBBEARBEBkJDYIIgiAIgshIaBCURJ544glce+21yMnJQb9+/WzLMMaCXm+88YapzMcff4yrr74abrcbl112GVauXJn4xkcgmr41NjZi8uTJyMnJQXFxMR599FH4fD5TmVTsmx1Dhw4Nuk9PPfWUqcy2bdtw/fXXIysrC2VlZVi6dGmSWts1XnjhBQwdOhRZWVmoqqoKCn2fDixYsCDo/lxxxRX6/osXL6Kurg4DBgxAbm4u7rzzTj2kfyry6aef4oc//CEGDRoExhjeeecd037OOebNm4eBAwciOzsb48ePx759+0xlTp8+jXvvvRd5eXno168fpk2bhvb22HImxoNIfautrQ26lxMnTjSVSdW+EakHDYKSiMfjwV133YUZM2aELbdixQo0NTXpr9tvv13fd+jQIUyePBk33XQTtm7dil/+8pf493//d6xZsybBrQ9PpL4pioLJkyfD4/Fg48aNeO2117By5UrMmzdPL5OqfQvFokWLTPfpZz/7mb6vtbUVEyZMQHl5OTZv3oz6+nosWLAAr7zyShJbHJk333wTDz/8MObPn4+vv/4ao0ePRk1NDU6cOJHspnWZq666ynR/PvvsM33fr371K/zP//wP3nrrLXzyySc4fvw47rjjjiS2NjwdHR0YPXo0XnjhBdv9S5cuxXPPPYeXXnoJmzZtQp8+fVBTU4OLFy/qZe69917s3LkT69atw6pVq/Dpp5/igQce6KkuhCRS3wBg4sSJpnv5pz/9ybQ/VftGpCCcSDorVqzg+fn5tvsA8L/85S8hj33sscf4VVddZdp2991385qamji2sPuE6tt7773HJUnizc3N+rbf/e53PC8vj3d2dnLOU79vRsrLy/kzzzwTcv+LL77ICwoK9L5xzvmsWbP48OHDe6B13eeaa67hdXV1+ntFUfigQYP4kiVLktiqrjN//nw+evRo231nz57lTqeTv/XWW/q23bt3cwC8oaGhh1rYfazfEaqq8tLSUl5fX69vO3v2LHe73fxPf/oT55zzXbt2cQD8yy+/1MusXr2aM8b4sWPHeqztkbD7/ps6dSq/7bbbQh6TLn0jUgNSgtKAuro6FBYW4pprrsGrr74Kbgjt1NDQgPHjx5vK19TUoKGhoaeb2SUaGhowcuRIlJSU6NtqamrQ2tqKnTt36mXSqW9PPfUUBgwYgLFjx6K+vt60tNfQ0IAbbrgBLpdL31ZTU4O9e/fizJkzyWhuRDweDzZv3my6B5IkYfz48Sl7D8Kxb98+DBo0CBUVFbj33nv17NabN2+G1+s19fOKK67AkCFD0rKfhw4dQnNzs6k/+fn5qKqq0vvT0NCAfv36Ydy4cXqZ8ePHQ5IkbNq0qcfb3FU+/vhjFBcXY/jw4ZgxYwZOnTql70v3vhE9C6XNSHEWLVqEm2++GTk5OVi7di1+8pOfoL29HT//+c8BAM3NzaaBBACUlJSgtbUVFy5cQHZ2djKaHZFQ7Rb7wpVJxb79/Oc/x9VXX43+/ftj48aNmDNnDpqamrB8+XIAWl+GDRtmOsbYX5FfJ5U4efIkFEWxvQd79uxJUqu6R1VVFVauXInhw4ejqakJCxcuxPXXX48dO3agubkZLpcryHatpKREfxbTCdFmu/tm/GyJTN4Ch8OB/v37p3yfJ06ciDvuuAPDhg3DgQMH8B//8R+YNGkSGhoaIMtyWveN6HloEBRnZs+ejaeffjpsmd27d5uMMsPx61//Wv9/7Nix6OjoQH19vT4I6kni3bdUpyv9ffjhh/Vto0aNgsvlwoMPPoglS5ZQWP8UYNKkSfr/o0aNQlVVFcrLy/HnP/85pQbTRGT+9V//Vf9/5MiRGDVqFC699FJ8/PHHuOWWW5LYMiIdoUFQnJk5cyZqa2vDlqmoqOh2/VVVVVi8eDE6OzvhdrtRWloa5MXS0tKCvLy8uH+5x7NvpaWlQV5Goh+lpaX6357qmx2x9Leqqgo+nw+HDx/G8OHDQ/YFCPQ31SgsLIQsy7btTtU2R0u/fv3wve99D/v378c///M/w+Px4OzZsyY1KF37Kdrc0tKCgQMH6ttbWlowZswYvYzVuN3n8+H06dNp1+eKigoUFhZi//79uOWWW3pV34jEQ4OgOFNUVISioqKE1b9161YUFBTo6kJ1dXVQVt5169ahuro67ueOZ9+qq6vxxBNP4MSJE7p0vW7dOuTl5WHEiBF6mZ7qmx2x9Hfr1q2QJEnvW3V1NebOnQuv1wun0wlA68vw4cNTcikMAFwuFyorK/Hhhx/qHomqquLDDz/ET3/60+Q2Lkba29tx4MABTJkyBZWVlXA6nfjwww9x5513AgD27t2LxsbGHnvW4smwYcNQWlqKDz/8UB/0tLa2YtOmTbq3ZnV1Nc6ePYvNmzejsrISALB+/XqoqoqqqqpkNb1bfPvttzh16pQ+4OtNfSN6gGRbZmcyR44c4Vu2bOELFy7kubm5fMuWLXzLli28ra2Nc875u+++y3//+9/z7du383379vEXX3yR5+Tk8Hnz5ul1HDx4kOfk5PBHH32U7969m7/wwgtclmX+/vvvJ6tbnPPIffP5fPyf/umf+IQJE/jWrVv5+++/z4uKivicOXP0OlK1b1Y2btzIn3nmGb5161Z+4MAB/l//9V+8qKiI33///XqZs2fP8pKSEj5lyhS+Y8cO/sYbb/CcnBz+8ssvJ7HlkXnjjTe42+3mK1eu5Lt27eIPPPAA79evn8mrLx2YOXMm//jjj/mhQ4f4559/zsePH88LCwv5iRMnOOecP/TQQ3zIkCF8/fr1/KuvvuLV1dW8uro6ya0OTVtbm/6ZAsCXL1/Ot2zZwo8cOcI55/ypp57i/fr143/961/5tm3b+G233caHDRvGL1y4oNcxceJEPnbsWL5p0yb+2Wef8csvv5z/6Ec/SlaXdML1ra2tjT/yyCO8oaGBHzp0iH/wwQf86quv5pdffjm/ePGiXkeq9o1IPWgQlESmTp3KAQS9PvroI8655tY5ZswYnpuby/v06cNHjx7NX3rpJa4oiqmejz76iI8ZM4a7XC5eUVHBV6xY0fOdsRCpb5xzfvjwYT5p0iSenZ3NCwsL+cyZM7nX6zXVk4p9s7J582ZeVVXF8/PzeVZWFr/yyiv5k08+afpS5pzzb775hl933XXc7XbzSy65hD/11FNJanHXeP755/mQIUO4y+Xi11xzDf/73/+e7CZ1mbvvvpsPHDiQu1wufskll/C7776b79+/X99/4cIF/pOf/IQXFBTwnJwc/i//8i+8qakpiS0Oz0cffWT7+Zo6dSrnXHOT//Wvf81LSkq42+3mt9xyC9+7d6+pjlOnTvEf/ehHPDc3l+fl5fEf//jH+iQlmYTr2/nz5/mECRN4UVERdzqdvLy8nE+fPj1oUJ6qfSNSD8a5wd+aIAiCIAgiQ6A4QQRBEARBZCQ0CCIIgiAIIiOhQRBBEARBEBkJDYIIgiAIgshIaBBEEARBEERGQoMggiAIgiAyEhoEEQRBEASRkdAgiCAI3HjjjfjlL3+Z7GYQBEH0KDQIIgiCIAgiI6FBEEEQBEEQGQkNggiCMHHmzBncf//9KCgoQE5ODiZNmoR9+/bp+1euXIl+/fphzZo1uPLKK5Gbm4uJEyeiqakpia0mCILoOjQIIgjCRG1tLb766iu8++67aGhoAOccP/jBD+D1evUy58+fx7Jly/DHP/4Rn376KRobG/HII48ksdUEQRBdx5HsBhAEkTrs27cP7777Lj7//HNce+21AIDXX38dZWVleOedd3DXXXcBALxeL1566SVceumlAICf/vSnWLRoUdLaTRAE0R1ICSIIQmf37t1wOByoqqrStw0YMADDhw/H7t279W05OTn6AAgABg4ciBMnTvRoWwmCIGKFBkEEQXQZp9Npes8YA+c8Sa0hCILoHjQIIghC58orr4TP58OmTZv0badOncLevXsxYsSIJLaMIAgi/tAgiCAIncsvvxy33XYbpk+fjs8++wzffPMN7rvvPlxyySW47bbbkt08giCIuEKDIIIgTKxYsQKVlZW49dZbUV1dDc453nvvvaAlMIIgiHSHcVrIJwiCIAgiAyEliCAIgiCIjIQGQQRBEARBZCQ0CCIIgiAIIiOhQRBBEARBEBkJDYIIgiAIgshIaBBEEARBEERGQoMggiAIgiAyEhoEEQRBEASRkdAgiCAIgiCIjIQGQQRBEARBZCQ0CCIIgiAIIiOhQRBBEARBEBnJ/w/5iSfq9hxN1AAAAABJRU5ErkJggg==\n" + ] }, - "metadata": {} + "metadata": {}, + "output_type": "display_data" } + ], + "source": [ + "climate = (ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR')\n", + " .filterDate('1960', '2020'))\n", + "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", + "ds = xarray.open_dataset(\n", + " climate,\n", + " engine='ee',\n", + " **grid_params\n", + ")\n", + "\n", + "mean_deg_c = ds['temperature_2m'].groupby('time.month').mean(dim='time') - 273.15\n", + "(mean_deg_c[6] - mean_deg_c[0]).plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "n3ZV6SnyFQ0P" + }, "source": [ "#### Server-side computation (using Earth Engine)\n", "\n", "While Earth Engine can perform the calculation, it requires a join operation due to the need to group images by month. This involves creating helper functions and applying a join filter, which can be less intuitive compared to Xarray's concise grouping syntax." - ], - "metadata": { - "id": "n3ZV6SnyFQ0P" - } + ] }, { "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 525 + }, + "id": "Umto_N4bFWA4", + "outputId": "baec524c-bc80-47f7-c596-d887927ae368" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def k_to_c(image):\n", " return image.select().addBands(image.subtract(273.15))\n", @@ -519,59 +563,47 @@ "\n", "deg_c_by_month = deg_c_by_month.map(get_month_mean_across_years)\n", "\n", + "global_geom = shapely.geometry.box(-180, -90, 180, 90)\n", + "grid_params = helpers.fit_geometry(\n", + " geometry=global_geom,\n", + " grid_crs='EPSG:4326',\n", + " grid_scale=(1.0, -1.0)\n", + ")\n", + "\n", "ds = xarray.open_dataset(\n", " ee.ImageCollection(deg_c_by_month),\n", " engine='ee',\n", - " scale=1,\n", - " crs='EPSG:4326',\n", - " geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]),\n", + " **grid_params\n", ")\n", "\n", "mean_deg_c = ds['temperature_2m']\n", - "(mean_deg_c[6] - mean_deg_c[0]).transpose().plot()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 525 - }, - "id": "Umto_N4bFWA4", - "outputId": "baec524c-bc80-47f7-c596-d887927ae368" - }, - "execution_count": null, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 9 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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\n" - }, - "metadata": {} - } + "(mean_deg_c[6] - mean_deg_c[0]).plot()" ] }, { "cell_type": "markdown", + "metadata": { + "id": "Rgd_X7CfF7B6" + }, "source": [ "#### Comparison\n", "\n", "For calculating the monthly mean temperature difference with a focus on code readability, the client-side approach using Xarray is preferable. The grouping syntax is more natural and easier to follow. In situations where performance is a major concern (e.g., extremely large datasets or very high resolutions), the performance characteristics of each approach should be carefully evaluated, but in this case, the readability advantage of Xarray makes it a strong choice." - ], - "metadata": { - "id": "Rgd_X7CfF7B6" - } + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" } - ] -} \ No newline at end of file + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/examples/dataflow/ee_to_zarr_dataflow.py b/examples/dataflow/ee_to_zarr_dataflow.py index 739aff7..f0592ee 100644 --- a/examples/dataflow/ee_to_zarr_dataflow.py +++ b/examples/dataflow/ee_to_zarr_dataflow.py @@ -23,6 +23,8 @@ import xarray as xr import xarray_beam as xbeam import xee +from xee import helpers +import shapely import ee @@ -38,7 +40,7 @@ 'EPSG:4326', help='Coordinate Reference System for output Zarr.', ) -_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor for output Zarr.') +_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor in degrees for output Zarr.') _TARGET_CHUNKS = flags.DEFINE_string( 'target_chunks', '', @@ -89,11 +91,21 @@ def main(argv: list[str]) -> None: .select('precipitationCal') ) + # Define grid parameters + # Create a global geometry (-180 to 180 longitude, -90 to 90 latitude) + global_geom = shapely.geometry.box(-180, -90, 180, 90) + + # Use grid_scale to define pixel size - fit_geometry will calculate the shape + grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs=_CRS.value, + grid_scale=(_SCALE.value, -_SCALE.value) # negative y-scale for north-up orientation + ) + ds = xr.open_dataset( input_coll, - crs=_CRS.value, - scale=_SCALE.value, engine=xee.EarthEngineBackendEntrypoint, + **grid_params ) template = xbeam.make_template(ds) itemsize = max(variable.dtype.itemsize for variable in template.values()) diff --git a/examples/ee_to_zarr.py b/examples/ee_to_zarr.py index 4821599..b2e581a 100644 --- a/examples/ee_to_zarr.py +++ b/examples/ee_to_zarr.py @@ -22,6 +22,8 @@ import xarray as xr import xarray_beam as xbeam import xee +from xee import helpers +import shapely import ee @@ -38,7 +40,7 @@ 'EPSG:4326', help='Coordinate Reference System for output Zarr.', ) -_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor for output Zarr.') +_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor in degrees for output Zarr.') _TARGET_CHUNKS = flags.DEFINE_string( 'target_chunks', '', @@ -73,11 +75,21 @@ def main(argv: list[str]) -> None: ee.Initialize(opt_url='https://earthengine-highvolume.googleapis.com') + # Define grid parameters + # Create a global geometry (-180 to 180 longitude, -90 to 90 latitude) + global_geom = shapely.geometry.box(-180, -90, 180, 90) + + # Use grid_scale to define pixel size - fit_geometry will calculate the shape + grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs=_CRS.value, + grid_scale=(_SCALE.value, -_SCALE.value) # negative y-scale for north-up orientation + ) + ds = xr.open_dataset( _INPUT.value, - crs=_CRS.value, - scale=_SCALE.value, engine=xee.EarthEngineBackendEntrypoint, + **grid_params ) template = xbeam.make_template(ds) itemsize = max(variable.dtype.itemsize for variable in template.values()) From 2f7952b1a3e9479eb8b7474fba1fb8133108a4bd Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 13 Nov 2025 19:49:08 +0000 Subject: [PATCH 36/56] Update and improve docs --- README.md | 284 ++------- .../xee.EarthEngineBackendArray.rst | 32 + .../xee.EarthEngineBackendEntrypoint.rst | 35 ++ docs/_autosummary/xee.EarthEngineStore.rst | 47 ++ docs/_autosummary/xee.PixelGridParams.rst | 41 ++ docs/_autosummary/xee.extract_grid_params.rst | 6 + docs/_autosummary/xee.fit_geometry.rst | 6 + docs/_autosummary/xee.geometry_to_bounds.rst | 6 + docs/_autosummary/xee.set_scale.rst | 6 + docs/api.md | 25 +- docs/concepts.md | 71 +++ docs/conf.py | 25 +- docs/faq.md | 32 + docs/guide.md | 162 +++++ docs/index.md | 52 +- docs/installation.md | 26 +- docs/migration-guide-v1.md | 556 ++++++++++++++++++ docs/performance.md | 55 ++ docs/quickstart.md | 107 ++++ docs/user-guide.md | 1 + xee/__init__.py | 33 +- xee/helpers.py | 108 +++- 22 files changed, 1400 insertions(+), 316 deletions(-) create mode 100644 docs/_autosummary/xee.EarthEngineBackendArray.rst create mode 100644 docs/_autosummary/xee.EarthEngineBackendEntrypoint.rst create mode 100644 docs/_autosummary/xee.EarthEngineStore.rst create mode 100644 docs/_autosummary/xee.PixelGridParams.rst create mode 100644 docs/_autosummary/xee.extract_grid_params.rst create mode 100644 docs/_autosummary/xee.fit_geometry.rst create mode 100644 docs/_autosummary/xee.geometry_to_bounds.rst create mode 100644 docs/_autosummary/xee.set_scale.rst create mode 100644 docs/concepts.md create mode 100644 docs/faq.md create mode 100644 docs/guide.md create mode 100644 docs/migration-guide-v1.md create mode 100644 docs/performance.md create mode 100644 docs/quickstart.md create mode 120000 docs/user-guide.md diff --git a/README.md b/README.md index 3f9b9c3..e03832c 100644 --- a/README.md +++ b/README.md @@ -2,287 +2,69 @@ ![Xee Logo](https://raw.githubusercontent.com/google/Xee/main/docs/xee-logo.png) -_An Xarray extension for Google Earth Engine._ - -Xee bridges the gap between Google Earth Engine's massive data catalog and the scientific Python ecosystem. It provides a custom Xarray backend that allows you to open any `ee.ImageCollection` as if it were a local `xarray.Dataset`. Data is loaded lazily and in parallel, enabling you to work with petabyte-scale archives of satellite and climate data using the power and flexibility of Xarray and its integrations with libraries like Dask. +Xee is an Xarray backend for Google Earth Engine. Open `ee.Image` / `ee.ImageCollection` objects as lazy `xarray.Dataset`s and analyze petabyte‑scale Earth data with the scientific Python stack. [![image](https://img.shields.io/pypi/v/xee.svg)](https://pypi.python.org/pypi/xee) [![image](https://static.pepy.tech/badge/xee)](https://pepy.tech/project/xee) -[![Conda -Recipe](https://img.shields.io/badge/recipe-xee-green.svg)](https://github.com/conda-forge/xee-feedstock) +[![Conda Recipe](https://img.shields.io/badge/recipe-xee-green.svg)](https://github.com/conda-forge/xee-feedstock) [![image](https://img.shields.io/conda/vn/conda-forge/xee.svg)](https://anaconda.org/conda-forge/xee) -[![Conda -Downloads](https://img.shields.io/conda/dn/conda-forge/xee.svg)](https://anaconda.org/conda-forge/xee) - -## How to use +[![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/xee.svg)](https://anaconda.org/conda-forge/xee) -Install with pip: +## Install -```shell +```bash pip install --upgrade xee ``` -Install with conda: +or -```shell +```bash conda install -c conda-forge xee ``` -Then, authenticate Earth Engine: - -```shell -earthengine authenticate --quiet -``` - -Now, in your Python environment, make the following imports and initialize the Earth Engine client with your project ID. Using the high-volume API endpoint is recommended. +## Minimal example ```python -import ee -import xarray as xr +import ee, xarray as xr from xee import helpers -import shapely - -ee.Initialize( - project='PROJECT-ID', # Replace with your project ID - opt_url='https://earthengine-highvolume.googleapis.com' -) -``` - -### Specifying the Output Grid -To open a dataset, you must specify the desired output pixel grid. The `xee.helpers` module simplifies this process by providing several convenient workflows, summarized below. +# Authenticate once (on a persistent machine): +# earthengine authenticate -| Goal | Method | When to Use | -| :--- | :--- | :--- | -| **Match Source Grid** | Use `helpers.extract_grid_params()` to get the parameters from an EE object. | When you want the data in its original, default projection and scale. | -| **Fit Area to a Shape** | Use `helpers.fit_geometry()` with the `geometry` and `grid_shape` arguments. | When you need a consistent output array size (e.g., for ML models) and the exact pixel size is less important. | -| **Fit Area to a Scale** | Use `helpers.fit_geometry()` with the `geometry` and `grid_scale` arguments. | When the specific resolution (e.g., 30 meters, 0.01 degrees) is critical for your analysis. | -| **Manual Override** | Pass `crs`, `crs_transform`, and `shape_2d` directly to `xr.open_dataset`. | For advanced cases where you already have an exact grid definition. | +# Initialize (high‑volume endpoint recommended for reading stored collections) +# Replace with your Earth Engine registered Google Cloud project ID +ee.Initialize(project='PROJECT-ID', opt_url='https://earthengine-highvolume.googleapis.com') -> **Important Note on Units:** All grid parameter values must be in the units of the specified Coordinate Reference System (`crs`). -> * For a geographic CRS like `'EPSG:4326'`, the units are in **degrees**. -> * For a projected CRS like `'EPSG:32610'` (UTM), the units are in **meters**. -> This applies to the translation values in `crs_transform` and the pixel sizes in `grid_scale`. - -### Usage Examples - -Here are common workflows for opening datasets with `xee`, corresponding to the methods in the table above. - -#### Match Source Grid - -This is the simplest case, using `helpers.extract_grid_params` to match the dataset's default grid. - -```python +# Open a dataset by matching its native grid ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') -grid_params = helpers.extract_grid_params(ic) -ds = xr.open_dataset(ic, engine='ee', **grid_params) -``` - -#### Fit Area to a Shape - -Define a grid over an area of interest by specifying the number of pixels. `helpers.fit_geometry` will calculate the correct `crs_transform`. - -```python -aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia -grid_params = helpers.fit_geometry( - geometry=aoi, - grid_crs='EPSG:4326', - grid_shape=(256, 256) -) - -ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) -``` - -#### Fit Area to a Scale (Resolution) - -> **A Note on `grid_scale` and Y-Scale Orientation** -> When using `fit_geometry` with `grid_scale`, you are defining both the pixel size and the grid's orientation via the sign of the y-scale. -> * A **negative `y_scale`** (e.g., `(10000, -10000)`) is the standard for "north-up" satellite and aerial imagery, creating a grid with a **top-left** origin. -> * A **positive `y_scale`** (e.g., `(10000, 10000)`) is used by some datasets and creates a grid with a **bottom-left** origin. -> You may need to inspect your source dataset's projection information to determine the correct sign to use. If you use `grid_shape`, a standard negative y-scale is assumed. - -The following example defines a grid over an area by specifying the pixel size in meters. `fit_geometry` will reproject the geometry and calculate the correct `shape_2d`. - -```python -aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia -grid_params = helpers.fit_geometry( - geometry=aoi, - geometry_crs='EPSG:4326', # CRS of the input geometry - grid_crs='EPSG:32662', # Target CRS in meters (Plate Carrée) - grid_scale=(10000, -10000) # Define a 10km pixel size -) - -ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) -``` - -#### Open a Custom Region at Source Resolution - -This workflow is ideal for analyzing a specific area while maintaining the dataset's original resolution. - -```python -# 1. Get the original grid parameters from the target ImageCollection -ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') -source_params = helpers.extract_grid_params(ic) - -# 2. Extract the source CRS and scale -source_crs = source_params['crs'] -source_transform = source_params['crs_transform'] -source_scale = (source_transform[0], source_transform[4]) # (x_scale, y_scale) - -# 3. Use the source parameters to fit the grid to a specific geometry -aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia -final_grid_params = helpers.fit_geometry( - geometry=aoi, - geometry_crs='EPSG:4326', - grid_crs=source_crs, - grid_scale=source_scale -) - -# 4. Open the dataset with the final, combined parameters -ds = xr.open_dataset(ic, engine='ee', **final_grid_params) -``` - -#### Manual Override - -For use cases where you know the exact grid parameters, you can provide them directly. - -```python -# Manually define a 512x512 pixel grid with 1-degree pixels in EPSG:4326 -manual_crs = 'EPSG:4326' -manual_transform = (0.1, 0, -180.05, 0, -0.1, 90.05) # Values are in degrees -manual_shape = (512, 512) - -ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - crs=manual_crs, - crs_transform=manual_transform, - shape_2d=manual_shape, -) +grid = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid) +print(ds) ``` -#### Open a Pre-Processed ImageCollection +Next steps: -A key feature of Xee is its ability to open a computed `ee.ImageCollection`. This allows you to leverage Earth Engine's powerful server-side processing for tasks like filtering, band selection, and calculations before loading the data into Xarray. +- Quickstart: docs/quickstart.md +- Concepts (grid params, CRS, orientation): docs/concepts.md +- User Guide (workflows): docs/user-guide.md -```python -# Define an AOI as a shapely object for the helper function -sf_aoi_shapely = shapely.geometry.Point(-122.4, 37.7).buffer(0.2) -# Create an ee.Geometry from the shapely object for server-side filtering -coords = list(sf_aoi_shapely.exterior.coords) -sf_aoi_ee = ee.Geometry.Polygon(coords) +## Features -# Define a function to calculate NDVI and add it as a band -def add_ndvi(image): - # Landsat 9 SR bands: NIR = B5, Red = B4 - ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') - return image.addBands(ndvi) +- Lazy, parallel pixel retrieval through Earth Engine +- Flexible output grid definition (fixed resolution or fixed shape) +- CF-friendly dimension order: `[time, y, x]` +- Plays nicely with Xarray, Dask, and friends -# Build the pre-processed collection -processed_collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') - .filterDate('2024-06-01', '2024-09-01') - .filterBounds(sf_aoi_ee) - .map(add_ndvi) - .select(['NDVI'])) +## Community & Support -# Define the output grid using a helper -grid_params = helpers.fit_geometry( - geometry=sf_aoi_shapely, - grid_crs='EPSG:32610', # Target CRS in meters (UTM Zone 10N) - grid_scale=(30, -30) # Use Landsat's 30m resolution -) +- Discussions: https://github.com/google/Xee/discussions +- Issues: https://github.com/google/Xee/issues -# Open the fully processed collection -ds = xr.open_dataset(processed_collection, engine='ee', **grid_params) -``` - -#### Open a single Image - -The `helpers` work the same way for a single `ee.Image`. - -```python -img = ee.Image('ECMWF/ERA5_LAND/MONTHLY_AGGR/202501') -grid_params = helpers.extract_grid_params(img) -ds = xr.open_dataset(img, engine='ee', **grid_params) -``` +## Contributing -#### Visualize a Single Time Slice - -Once you have your `xarray.Dataset`, you can visualize a single time slice of a variable to verify the results. This requires the `matplotlib` library, which is an optional dependency. - -If you don't have it installed, you can add it with pip: - -```shell -pip install matplotlib -``` - -Then you can use Xarray's plotting functions to visualize the data. - -```python - -# First, open a dataset using one of the methods above -aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia -grid_params = helpers.fit_geometry( - geometry=aoi, - grid_crs='EPSG:4326', - grid_shape=(256, 256) -) -ds = xr.open_dataset('ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) - -# Select the 2m air temperature for the first time step -temp_slice = ds['temperature_2m'].isel(time=0) - -# Plot the data -temp_slice.plot() -``` - -See [examples](https://github.com/google/Xee/tree/main/examples) or -[docs](https://github.com/google/Xee/tree/main/docs) for more uses and -integrations. - -## Getting help - -If you encounter issues using Xee, you can: - -1. Open a new or add to an existing [Xee discussion - topic](https://github.com/google/Xee/discussions) -2. Open an [Xee issue](https://github.com/google/Xee/issues). To increase the - likelihood of the issue being resolved, use this [template Colab - notebook](https://colab.research.google.com/drive/1vAgfAPhKGJd4G9ZUOzciqZ7MbqJjlMLR) - to create a reproducible script. - -## How to run integration tests - -The Xee integration tests only pass on Xee branches (no forks). Please run the -integration tests locally before sending a PR. To run the tests locally, -authenticate using `earthengine authenticate` and run the following: - -```bash -python -m unittest xee/ext_integration_test.py -``` - -or - -```bash -python -m pytest xee/ext_integration_test.py -``` +See docs/contributing.md and sign the required CLA. ## License -This is not an official Google product. +Apache 2.0. See LICENSE. This is not an official Google product. -``` -Copyright 2023 Google LLC - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - https://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` diff --git a/docs/_autosummary/xee.EarthEngineBackendArray.rst b/docs/_autosummary/xee.EarthEngineBackendArray.rst new file mode 100644 index 0000000..11beac0 --- /dev/null +++ b/docs/_autosummary/xee.EarthEngineBackendArray.rst @@ -0,0 +1,32 @@ +xee.EarthEngineBackendArray +=========================== + +.. currentmodule:: xee + +.. autoclass:: EarthEngineBackendArray + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~EarthEngineBackendArray.__init__ + ~EarthEngineBackendArray.async_get_duck_array + ~EarthEngineBackendArray.async_getitem + ~EarthEngineBackendArray.get_duck_array + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~EarthEngineBackendArray.ndim + ~EarthEngineBackendArray.size + + \ No newline at end of file diff --git a/docs/_autosummary/xee.EarthEngineBackendEntrypoint.rst b/docs/_autosummary/xee.EarthEngineBackendEntrypoint.rst new file mode 100644 index 0000000..17bc50f --- /dev/null +++ b/docs/_autosummary/xee.EarthEngineBackendEntrypoint.rst @@ -0,0 +1,35 @@ +xee.EarthEngineBackendEntrypoint +================================ + +.. currentmodule:: xee + +.. autoclass:: EarthEngineBackendEntrypoint + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~EarthEngineBackendEntrypoint.__init__ + ~EarthEngineBackendEntrypoint.guess_can_open + ~EarthEngineBackendEntrypoint.open_dataset + ~EarthEngineBackendEntrypoint.open_datatree + ~EarthEngineBackendEntrypoint.open_groups_as_dict + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~EarthEngineBackendEntrypoint.description + ~EarthEngineBackendEntrypoint.open_dataset_parameters + ~EarthEngineBackendEntrypoint.supports_groups + ~EarthEngineBackendEntrypoint.url + + \ No newline at end of file diff --git a/docs/_autosummary/xee.EarthEngineStore.rst b/docs/_autosummary/xee.EarthEngineStore.rst new file mode 100644 index 0000000..c3e8d09 --- /dev/null +++ b/docs/_autosummary/xee.EarthEngineStore.rst @@ -0,0 +1,47 @@ +xee.EarthEngineStore +==================== + +.. currentmodule:: xee + +.. autoclass:: EarthEngineStore + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~EarthEngineStore.__init__ + ~EarthEngineStore.close + ~EarthEngineStore.get_attrs + ~EarthEngineStore.get_child_store + ~EarthEngineStore.get_dimensions + ~EarthEngineStore.get_encoding + ~EarthEngineStore.get_parent_dimensions + ~EarthEngineStore.get_variables + ~EarthEngineStore.image_to_array + ~EarthEngineStore.load + ~EarthEngineStore.open + ~EarthEngineStore.open_store_variable + ~EarthEngineStore.project + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~EarthEngineStore.ATTRS_VALID_TYPES + ~EarthEngineStore.DEFAULT_MASK_VALUE + ~EarthEngineStore.GETITEM_KWARGS + ~EarthEngineStore.PREFERRED_CHUNKS + ~EarthEngineStore.SCALE_UNITS + ~EarthEngineStore.get_info + ~EarthEngineStore.image_collection_properties + ~EarthEngineStore.image_ids + + \ No newline at end of file diff --git a/docs/_autosummary/xee.PixelGridParams.rst b/docs/_autosummary/xee.PixelGridParams.rst new file mode 100644 index 0000000..b384d05 --- /dev/null +++ b/docs/_autosummary/xee.PixelGridParams.rst @@ -0,0 +1,41 @@ +xee.PixelGridParams +=================== + +.. currentmodule:: xee + +.. autoclass:: PixelGridParams + + + .. automethod:: __init__ + + + .. rubric:: Methods + + .. autosummary:: + + ~PixelGridParams.__init__ + ~PixelGridParams.clear + ~PixelGridParams.copy + ~PixelGridParams.fromkeys + ~PixelGridParams.get + ~PixelGridParams.items + ~PixelGridParams.keys + ~PixelGridParams.pop + ~PixelGridParams.popitem + ~PixelGridParams.setdefault + ~PixelGridParams.update + ~PixelGridParams.values + + + + + + .. rubric:: Attributes + + .. autosummary:: + + ~PixelGridParams.crs + ~PixelGridParams.crs_transform + ~PixelGridParams.shape_2d + + \ No newline at end of file diff --git a/docs/_autosummary/xee.extract_grid_params.rst b/docs/_autosummary/xee.extract_grid_params.rst new file mode 100644 index 0000000..1183eac --- /dev/null +++ b/docs/_autosummary/xee.extract_grid_params.rst @@ -0,0 +1,6 @@ +xee.extract\_grid\_params +========================= + +.. currentmodule:: xee + +.. autofunction:: extract_grid_params \ No newline at end of file diff --git a/docs/_autosummary/xee.fit_geometry.rst b/docs/_autosummary/xee.fit_geometry.rst new file mode 100644 index 0000000..00daa50 --- /dev/null +++ b/docs/_autosummary/xee.fit_geometry.rst @@ -0,0 +1,6 @@ +xee.fit\_geometry +================= + +.. currentmodule:: xee + +.. autofunction:: fit_geometry \ No newline at end of file diff --git a/docs/_autosummary/xee.geometry_to_bounds.rst b/docs/_autosummary/xee.geometry_to_bounds.rst new file mode 100644 index 0000000..03e0c89 --- /dev/null +++ b/docs/_autosummary/xee.geometry_to_bounds.rst @@ -0,0 +1,6 @@ +xee.geometry\_to\_bounds +======================== + +.. currentmodule:: xee + +.. autofunction:: geometry_to_bounds \ No newline at end of file diff --git a/docs/_autosummary/xee.set_scale.rst b/docs/_autosummary/xee.set_scale.rst new file mode 100644 index 0000000..e36aac1 --- /dev/null +++ b/docs/_autosummary/xee.set_scale.rst @@ -0,0 +1,6 @@ +xee.set\_scale +============== + +.. currentmodule:: xee + +.. autofunction:: set_scale \ No newline at end of file diff --git a/docs/api.md b/docs/api.md index 650f8c2..1f8d62b 100644 --- a/docs/api.md +++ b/docs/api.md @@ -1,10 +1,29 @@ -# API docs +# Xee API ```{eval-rst} .. currentmodule:: xee ``` -## Core extension +## User grid helpers + +High-level utilities for deriving or matching pixel grid parameters passed to +``xarray.open_dataset(..., engine='ee')``. + +```{eval-rst} +.. autosummary:: + :toctree: _autosummary + + fit_geometry + extract_grid_params + set_scale + PixelGridParams +``` + +## Core extension backend + +Lower-level interfaces used internally by the xarray backend. Most users do +not need these directly; they're documented for advanced workflows and +debugging. ```{eval-rst} .. autosummary:: @@ -15,7 +34,7 @@ EarthEngineBackendArray ``` -## Utility functions +## Other utilities ```{eval-rst} .. autosummary:: diff --git a/docs/concepts.md b/docs/concepts.md new file mode 100644 index 0000000..cbeb320 --- /dev/null +++ b/docs/concepts.md @@ -0,0 +1,71 @@ +--- +title: Core Concepts +--- + +# Core Concepts + +This page clarifies the ideas you need to be effective with Xee. + +## Pixel Grid Parameters + +Opening EE data requires specifying an output pixel grid. Xee uses three explicit parameters: + +| Parameter | Meaning | +|-----------|---------| +| `crs` | Coordinate Reference System for the output grid (e.g. `EPSG:4326`, `EPSG:32610`). | +| `crs_transform` | Affine transform tuple `(x_scale, x_skew, x_trans, y_skew, y_scale, y_trans)` describing pixel size, rotation/skew, and origin translation in CRS units. | +| `shape_2d` | `(width, height)` of the output grid in pixels. | + +Instead of constructing these manually, prefer helpers: + +- `extract_grid_params(obj)`: Match an `ee.Image` or `ee.ImageCollection` source grid. +- `fit_geometry(geometry, grid_crs, grid_scale=(x, y))`: Define pixel size (resolution) over an AOI. +- `fit_geometry(geometry, grid_crs, grid_shape=(w, h))`: Define output array dimensions, letting resolution float. + +### Y Scale Sign & Orientation + +`crs_transform[4]` (the y-scale) is negative for north-up imagery (top-left origin) and positive for bottom-left origin layouts. Helpers default to negative (north-up). When matching a source grid, its sign is preserved. + +## Dimension Ordering + +Datasets are returned as `[time, y, x]` (v1.0+) aligning with CF conventions and most geospatial libraries. Prior versions used `[time, x, y]`. If code assumed positional indices, update to name-based access: `ds.sizes['x']`, `ds.sizes['y']`. + +## Stored vs Computed Collections + +- Stored: unmodified `ee.ImageCollection('ID')` — use high‑volume endpoint for throughput. +- Computed: collections after `.map()`, `.select()`, filtering, band math — standard endpoint sometimes more efficient due to caching. + +## Choosing a Grid Strategy + +| Situation | Recommended approach | +|-----------|---------------------| +| Just explore dataset | `extract_grid_params` | +| Train ML model (fixed input size) | `fit_geometry(..., grid_shape=...)` | +| Preserve known resolution | `fit_geometry(..., grid_scale=...)` | +| Export with exact projection | Manual parameters (advanced) | + +## CRS Units & Transforms + +All scale/translation values are expressed in units of `crs`. Degrees for geographic CRSs; meters (or feet) for projected CRSs. Plate Carrée (`EPSG:4326`) has non-uniform ground size — consider a projected CRS for area/length sensitive analysis. + +## Chunking & Lazy Loading + +Data is paged from EE using pixel chunks (bounded by EE's max request size). Xarray+Dask operations trigger parallel pixel fetches, respecting EE quota limits (e.g., ~100 QPS for certain endpoints). See [Performance & Limits](performance.md) for tuning advice. + +## Error Patterns + +| Symptom | Likely cause | Mitigation | +|---------|--------------|------------| +| Quota exceeded / 429 | Too many parallel pixel requests | Reduce Dask workers or chunk size. | +| Empty array / all NaNs | AOI outside dataset extent | Verify geometry CRS & bounds; try `extract_grid_params`. | +| Distorted aspect | Wrong y-scale sign | Use helpers or invert sign of `grid_scale[1]`. | + +## Helpers vs Manual Override + +Helpers encapsulate reprojection, bounding logic, and transform math. Manual construction is only needed for reproducibility of pre-agreed custom grids or advanced alignment with external rasters. + +## Safe Defaults + +- Prefer matching source for exploratory analysis. +- Use `grid_shape` when pixel count matters (consistent model input shape). +- Use `grid_scale` for resolution-sensitive metrics (e.g., indices, physical units). diff --git a/docs/conf.py b/docs/conf.py index 3957f0d..a599e0a 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -52,7 +52,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', '_templates', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ['_build', '_templates', 'Thumbs.db', '.DS_Store', 'README.md', 'user-guide.md'] intersphinx_mapping = { 'xarray': ('https://xarray.pydata.org/en/latest/', None), @@ -65,6 +65,26 @@ # html_theme = 'sphinx_rtd_theme' +# Keep the left-hand navigation consistent on every page. In particular, +# - titles_only=True prevents page section headings (e.g., "Goals", "Approach") +# from appearing in the sidebar when viewing that page. +# - collapse_navigation=False expands the full toctree instead of focusing only +# on the current page branch (which makes the list look different per page). +# - sticky_navigation=False avoids auto-scrolling the sidebar to keep the +# current entry near the top, which can give the impression of different +# ordering between pages. +# - navigation_depth controls how deep the tree expands. With titles_only=True, +# this is the depth of documents, not their internal sections. +html_theme_options = { + 'titles_only': True, + 'collapse_navigation': False, + 'sticky_navigation': False, + # Do not include hidden local toctrees (e.g., autosummary children) in the + # sidebar, and limit the sidebar to top-level only. + 'includehidden': False, + 'navigation_depth': 1, +} + # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". @@ -81,3 +101,6 @@ # https://stackoverflow.com/a/66295922/809705 autodoc_typehints = 'description' + +# Note: We exclude README.md from Sphinx to avoid duplicate toctree references, +# since the landing page content is provided by index.md. diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 0000000..18b1acc --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,32 @@ +--- +title: FAQ +--- + +# FAQ + +## Why is the y-scale negative? +North-up raster conventions define the origin at the top-left so rows increase downward; a negative y-scale encodes that orientation. Some EE projections use positive y-scale (bottom-left origin). Matching source grid preserves orientation. + +## How do I pick between `grid_shape` and `grid_scale`? +Use `grid_shape` when a fixed pixel width/height is required (e.g., ML model inputs). Use `grid_scale` when the physical resolution matters (e.g., aligning with 30 m Landsat data). + +## I get 429 quota errors. What do I do? +Reduce parallelism (fewer Dask workers), narrow the AOI or time range, combine server-side operations before opening, or switch to the standard endpoint for computed collections. + +## Can I open a computed `ee.ImageCollection`? +Yes. Build the collection with filtering / mapping functions, then pass the resulting collection object directly to `xr.open_dataset(..., engine='ee')` with grid parameters. + +## How do I reproduce the same grid later? +Store `crs`, `crs_transform`, and `shape_2d` in metadata or write a helper that re-derives them from the same AOI using `fit_geometry`. Manual override is fine for archival reproducibility. + +## How can I export to Zarr? +Use Xarray's `.to_zarr()` on a materialized dataset or see the examples in `examples/` (e.g., Earth Engine to Zarr pipeline). For very large pipelines consider Xarray-Beam. + +## Why did dimension ordering change? +To align with CF conventions (`[time, y, x]`) and reduce the need for transposes in plotting / interoperability. + +## I'm seeing empty arrays / NaNs. +Your AOI may fall outside the dataset extent or the CRS mismatch caused an unexpected reprojection. Try matching source grid first to confirm availability. + +## Do I need shapely geometries? +Helpers accept shapely for convenience. If you already have an EE geometry, you can convert it or use bounding box approaches. Shapely makes reprojection and area reasoning simpler client-side. diff --git a/docs/guide.md b/docs/guide.md new file mode 100644 index 0000000..816a988 --- /dev/null +++ b/docs/guide.md @@ -0,0 +1,162 @@ +# User Guide + +This guide collects practical workflows. For underlying theory see [Core Concepts](concepts.md). For a minimal setup see the [Quickstart](quickstart.md). + +## Match Source Grid + +Use `helpers.extract_grid_params` to mirror the dataset's native projection & resolution. + +```python +import ee, xarray as xr +from xee import helpers + +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) +``` + +## Fit Area to a Shape + +Derive a grid that covers an AOI with a fixed pixel count (resolution floats). + +```python +import shapely +from xee import helpers + +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) +) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) +``` + +## Fit Area to a Scale (Resolution) + +Fix physical pixel size; grid dimensions derived from AOI extent. + +```python +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', # CRS of the input geometry + grid_crs='EPSG:32662', # Target CRS in meters (Plate Carrée) + grid_scale=(10000, -10000) # Define a 10km pixel size +) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) +``` + +## Custom Region at Source Resolution + +Fit an AOI but keep original pixel size. + +```python +# 1. Get the original grid parameters from the target ImageCollection +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +source_params = helpers.extract_grid_params(ic) + +# 2. Extract the source CRS and scale +source_crs = source_params['crs'] +source_transform = source_params['crs_transform'] +source_scale = (source_transform[0], source_transform[4]) # (x_scale, y_scale) + +# 3. Use the source parameters to fit the grid to a specific geometry +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +final_grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', + grid_crs=source_crs, + grid_scale=source_scale +) + +# 4. Open the dataset with the final, combined parameters +ds = xr.open_dataset(ic, engine='ee', **final_grid_params) +``` + +## Manual Override + +Direct specification for reproducibility / alignment with external rasters. + +```python +# Manually define a 512x512 pixel grid with 1-degree pixels in EPSG:4326 +manual_crs = 'EPSG:4326' +manual_transform = (0.1, 0, -180.05, 0, -0.1, 90.05) # Values are in degrees +manual_shape = (512, 512) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', crs=manual_crs, crs_transform=manual_transform, shape_2d=manual_shape) +``` + +## Pre-Processed ImageCollection + +Apply server-side operations before opening for efficiency. + +```python +# Define an AOI as a shapely object for the helper function +sf_aoi_shapely = shapely.geometry.Point(-122.4, 37.7).buffer(0.2) +# Create an ee.Geometry from the shapely object for server-side filtering +coords = list(sf_aoi_shapely.exterior.coords) +sf_aoi_ee = ee.Geometry.Polygon(coords) + +# Define a function to calculate NDVI and add it as a band +def add_ndvi(image): + # Landsat 9 SR bands: NIR = B5, Red = B4 + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +# Build the pre-processed collection +processed_collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-06-01', '2024-09-01') + .filterBounds(sf_aoi_ee) + .map(add_ndvi) + .select(['NDVI'])) + +# Define the output grid using a helper +grid_params = helpers.fit_geometry( + geometry=sf_aoi_shapely, + grid_crs='EPSG:32610', # Target CRS in meters (UTM Zone 10N) + grid_scale=(30, -30) # Use Landsat's 30m resolution +) + +# Open the fully processed collection +ds = xr.open_dataset(processed_collection, engine='ee', **grid_params) +``` + +## Single Image + +```python +img = ee.Image('ECMWF/ERA5_LAND/MONTHLY_AGGR/202501') +grid_params = helpers.extract_grid_params(img) +ds = xr.open_dataset(img, engine='ee', **grid_params) +``` + +## Visualize a Time Slice + +Requires `matplotlib` (`pip install matplotlib`). + +```python + +# First, open a dataset using one of the methods above +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) +) +ds = xr.open_dataset('ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid_params) + +# Select the 2m air temperature for the first time step +temp_slice = ds['temperature_2m'].isel(time=0) + +# Plot the data +temp_slice.plot() +``` + +## Further Resources + +- [Core Concepts](concepts.md) +- [Performance & Limits](performance.md) +- [FAQ](faq.md) +- Examples: see `examples/` directory in the repository diff --git a/docs/index.md b/docs/index.md index 6c36a2c..74c0dc6 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,36 +1,26 @@ -# Xee: A Google Earth Engine extension for Xarray +# Xee Documentation -Xee is an Xarray extension for Google Earth Engine. It aims to help users view -Earth Engine's [data catalog](https://developers.google.com/earth-engine/datasets) -through the lense of arrays. +Xee is an Xarray extension for Google Earth Engine that lets you open `ee.Image` and `ee.ImageCollection` objects as lazy `xarray.Dataset`s. -In this documentation, we assume readers have some familiarity with -[Earth Engine](https://earthengine.google.com/), [Xarray](https://xarray.dev/), -and Python. Here, we'll dive into core concepts related to the integration -between these tools. - -## Contents - - +```{admonition} Upgrading to Xee v1.0? +:class: important +See the [Migration Guide](migration-guide-v1.md) for grid parameter changes and new `[time, y, x]` dimension ordering. +``` ```{toctree} -:maxdepth: 1 -why-xee.md -installation.md -client-vs-server.ipynb -api.md +:maxdepth: 2 + +quickstart +installation +concepts +guide +performance +api +migration-guide-v1 +faq +why-xee +client-vs-server +contributing +code-of-conduct ``` + diff --git a/docs/installation.md b/docs/installation.md index a87aaf0..9e60eef 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -1,13 +1,8 @@ # Installation -Install Xee and its dependencies using `pip` or conda-like package managers. To -help minimize system disruption and package conflicts, it's recommended to use -virtual environments like Python's -[`venv`](https://docs.python.org/3/library/venv.html) with `pip` or [conda's -integrated environment management -system](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-environments.html). +Install Xee with pip or conda. Use virtual environments (`venv`, conda envs) to avoid dependency conflicts. -Install with `pip`: +Install with pip: ```shell pip install --upgrade xee @@ -26,21 +21,20 @@ Engine](https://developers.google.com/earth-engine/guides) for data. To use Earth Engine, you'll need to create and register a Google Cloud project, authenticate with Google, and initialize the service. -If you already have a Cloud project registered for Earth Engine and are familiar -with Earth Engine authentication and initialization, you can skip this section. +If you already have a registered Earth Engine Cloud project and know the auth/initialize steps, skip to the [Quickstart](quickstart.md). **Note**: the authentication and initialization steps described in the following sections cover the majority of common system configurations and access methods, if you're having trouble, refer to the Earth Engine [Authentication and Initialization guide](https://developers.google.com/earth-engine/guides/auth). -### Create and register a Cloud project +### 1. Create and register a Cloud project Follow instructions in the [Earth Engine Access guide](https://developers.google.com/earth-engine/guides/access#get_access_to_earth_engine ) to create and register a Google Cloud project. -### Authentication +### 2. Authentication Google needs to know who is accessing Earth Engine to determine what services are available and what permissions are granted. The goal of authentication is to @@ -48,7 +42,7 @@ establish credentials that can be used during initialization. There are several ways to verify your identity and create credentials, depending on your working environment: -#### Persistent environment +#### Persistent environment (one-time) If you're working from a system with a persistent environment, such as a local computer or on-premises server, you can authenticate using the [Earth Engine @@ -64,7 +58,7 @@ credentials are stored locally (`~/.config/earthengine/credentials`), allowing them to be used in subsequent initialization to the Earth Engine service. This is typically a one-time step. -#### Temporary environment +#### Ephemeral environment (each session) If you're working from a system like [Google Colab](https://colab.google/) that provides a temporary environment recycled after use, you'll need to authenticate @@ -80,7 +74,7 @@ mode](https://developers.google.com/earth-engine/guides/auth#authentication_deta and guides you through steps to generate authentication credentials. Be sure to rerun the authentication process each time the environment is reset. -### Initialization +### 3. Initialization Initialization checks user authentication credentials, sets the Cloud project to use for requests, and connects the client to Earth Engine's services. At the @@ -88,7 +82,7 @@ top of your script, include one of the following expressions with the `project` argument modified to match the Google Cloud project ID enabled and registered for Earth Engine use. -#### High-volume endpoint +#### High-volume endpoint (bulk stored data) If you are requesting stored data (supplying a collection ID or passing an unmodified `ee.ImageCollection()` object to `xarray.open_dataset`), connect to @@ -102,7 +96,7 @@ ee.Initialize( ) ``` -#### Standard endpoint +#### Standard endpoint (computed / cached) If you are requesting computed data (applying expressions to the data), consider connecting to the [standard diff --git a/docs/migration-guide-v1.md b/docs/migration-guide-v1.md new file mode 100644 index 0000000..95ac7e8 --- /dev/null +++ b/docs/migration-guide-v1.md @@ -0,0 +1,556 @@ +# Migration Guide: Xee v1.0.0 + +This guide helps you update your code from Xee v0.x to v1.0.0. The 1.0 release includes two major improvements: + +1. **New grid parameter system** for specifying output geography +2. **Updated dimension ordering** from `[time, x, y]` to `[time, y, x]` + +## Quick Migration Checklist + +- [ ] Replace `scale` and `geometry` parameters with grid parameter helpers +- [ ] Remove `.transpose()` calls before plotting or passing to libraries expecting `[time, y, x]` +- [ ] Update any code that explicitly references dimension order +- [ ] Test your workflows with the new API + +## 1. Geography Specification Changes + +### Old API (v0.x) + +The old API used simple `crs`, `scale`, and `geometry` parameters: + +```python +import ee +import xarray as xr + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=0.25, # pixel size in degrees + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +``` + +### New API (v1.0) + +The new API requires explicit grid parameters: `crs`, `crs_transform`, and `shape_2d`. We provide helper functions to make this easy: + +#### Option 1: Match Source Grid (Recommended for simplicity) + +```python +import ee +import xarray as xr +from xee import helpers + +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) +``` + +#### Option 2: Fit Geometry with Specific Scale + +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +# Define your area of interest using shapely +aoi = shapely.geometry.box(-180, -90, 180, 90) # Global extent + +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_scale=(0.25, -0.25) # (x_scale, y_scale) in degrees +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +#### Option 3: Fit Geometry with Specific Shape + +```python +import shapely +from xee import helpers + +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia + +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) # (width, height) in pixels +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +### Migration Examples + +#### Example 1: Global dataset at fixed scale + +**Before (v0.x):** +```python +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=1.0, + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +``` + +**After (v1.0):** +```python +import shapely +from xee import helpers + +global_geom = shapely.geometry.box(-180, -90, 180, 90) +grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs='EPSG:4326', + grid_scale=(1.0, -1.0) # Note: negative y-scale for north-up orientation +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +#### Example 2: Regional dataset with EE geometry + +**Before (v0.x):** +```python +import ee + +aoi = ee.Geometry.Rectangle([-122.5, 37.0, -121.5, 38.0]) +ds = xr.open_dataset( + 'LANDSAT/LC09/C02/T1_L2', + engine='ee', + crs='EPSG:32610', + scale=30, + geometry=aoi +) +``` + +**After (v1.0):** +```python +import ee +import shapely +from xee import helpers + +# Convert EE geometry to shapely (or create directly with shapely) +aoi = shapely.geometry.box(-122.5, 37.0, -121.5, 38.0) + +grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', # Input geometry CRS + grid_crs='EPSG:32610', # Output grid CRS (UTM Zone 10N) + grid_scale=(30, -30) # 30m resolution +) + +ds = xr.open_dataset( + 'LANDSAT/LC09/C02/T1_L2', + engine='ee', + **grid_params +) +``` + +#### Example 3: Using source resolution for a custom area + +**Before (v0.x):** +```python +# You had to manually determine the scale from the dataset +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:4326', + scale=0.25, # Manually determined + geometry=my_region +) +``` + +**After (v1.0):** +```python +from xee import helpers +import shapely + +# 1. Extract source grid parameters +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +source_params = helpers.extract_grid_params(ic) + +# 2. Get the source scale +source_crs = source_params['crs'] +source_transform = source_params['crs_transform'] +source_scale = (source_transform[0], source_transform[4]) + +# 3. Apply to your custom region +my_region = shapely.geometry.box(-10, 35, 5, 50) # Western Europe +grid_params = helpers.fit_geometry( + geometry=my_region, + geometry_crs='EPSG:4326', + grid_crs=source_crs, + grid_scale=source_scale +) + +ds = xr.open_dataset(ic, engine='ee', **grid_params) +``` + +## 2. Dimension Ordering Changes + +### What Changed + +Xee v1.0 outputs dimensions in `[time, y, x]` order (matching CF conventions and most geospatial tools), instead of the previous `[time, x, y]` order. + +### Impact on Your Code + +#### Plotting + +**Before (v0.x):** +```python +# Required transpose for correct visualization +ds['temperature_2m'].isel(time=0).transpose().plot() +``` + +**After (v1.0):** +```python +# No transpose needed - plots correctly by default +ds['temperature_2m'].isel(time=0).plot() +``` + +#### Integration with Other Libraries + +Many geospatial libraries expect `[time, y, x]` ordering. You may have been using `.transpose()` to accommodate this. + +**Before (v0.x):** +```python +# Had to transpose for libraries expecting [time, y, x] +data_array = ds['temperature_2m'].transpose('time', 'y', 'x') +export_to_geotiff(data_array) +``` + +**After (v1.0):** +```python +# Dimension order is already correct +data_array = ds['temperature_2m'] +export_to_geotiff(data_array) +``` + +#### Explicit Dimension Access + +If you have code that explicitly references dimension positions, update it: + +**Before (v0.x):** +```python +# Dimensions were [time, x, y] +time_dim, x_dim, y_dim = ds['temperature_2m'].dims +# or +width = ds['temperature_2m'].shape[1] # x dimension +height = ds['temperature_2m'].shape[2] # y dimension +``` + +**After (v1.0):** +```python +# Dimensions are now [time, y, x] +time_dim, y_dim, x_dim = ds['temperature_2m'].dims +# or +height = ds['temperature_2m'].shape[1] # y dimension +width = ds['temperature_2m'].shape[2] # x dimension +``` + +**Better approach (dimension-agnostic):** +```python +# This works in both versions +dims = ds['temperature_2m'].dims +width = ds.sizes['x'] +height = ds.sizes['y'] +time_length = ds.sizes['time'] +``` + +## 3. Common Migration Patterns + +### Pattern 1: Simple global analysis + +**Before:** +```python +import ee +import xarray as xr + +ee.Initialize() +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=1.0, + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +mean_temp = ds['temperature_2m'].mean(dim='time') +mean_temp.transpose().plot() +``` + +**After:** +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +ee.Initialize() +global_geom = shapely.geometry.box(-180, -90, 180, 90) +grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs='EPSG:4326', + grid_scale=(1.0, -1.0) +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +mean_temp = ds['temperature_2m'].mean(dim='time') +mean_temp.plot() # No transpose needed +``` + +### Pattern 2: Regional analysis with preprocessing + +**Before:** +```python +import ee +import xarray as xr + +def add_ndvi(image): + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +aoi = ee.Geometry.Rectangle([-122.5, 37.5, -122.0, 38.0]) +collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-01-01', '2024-12-31') + .filterBounds(aoi) + .map(add_ndvi) + .select(['NDVI'])) + +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:32610', + scale=30, + geometry=aoi +) +``` + +**After:** +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +def add_ndvi(image): + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +# Use shapely for geometry +aoi_shapely = shapely.geometry.box(-122.5, 37.5, -122.0, 38.0) + +# Create ee.Geometry for server-side filtering +coords = list(aoi_shapely.exterior.coords) +aoi_ee = ee.Geometry.Polygon(coords) + +collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-01-01', '2024-12-31') + .filterBounds(aoi_ee) + .map(add_ndvi) + .select(['NDVI'])) + +grid_params = helpers.fit_geometry( + geometry=aoi_shapely, + geometry_crs='EPSG:4326', + grid_crs='EPSG:32610', + grid_scale=(30, -30) +) + +ds = xr.open_dataset(collection, engine='ee', **grid_params) +``` + +### Pattern 3: Export workflows + +**Before:** +```python +import xarray as xr + +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:4326', + scale=0.1, + geometry=region +) + +# Transpose for proper export +data = ds['variable'].transpose('time', 'y', 'x') +data.to_netcdf('output.nc') +``` + +**After:** +```python +import xarray as xr +from xee import helpers + +grid_params = helpers.fit_geometry( + geometry=region, + grid_crs='EPSG:4326', + grid_scale=(0.1, -0.1) +) + +ds = xr.open_dataset(collection, engine='ee', **grid_params) + +# Already in correct dimension order +data = ds['variable'] +data.to_netcdf('output.nc') +``` + +## 4. Understanding Grid Parameters + +### The Three Required Parameters + +1. **`crs`**: Coordinate Reference System (e.g., `'EPSG:4326'`, `'EPSG:32610'`) +2. **`crs_transform`**: Affine transformation tuple `(a, b, c, d, e, f)` where: + - `a` = pixel width (x-scale) + - `b` = row rotation (typically 0) + - `c` = x-coordinate of upper-left corner + - `d` = column rotation (typically 0) + - `e` = pixel height (y-scale, typically negative for north-up) + - `f` = y-coordinate of upper-left corner +3. **`shape_2d`**: Tuple of `(width, height)` in pixels + +### Helper Function Summary + +| Function | Use Case | Parameters | +|----------|----------|------------| +| `helpers.extract_grid_params(ee_obj)` | Match the native grid of an EE Image/ImageCollection | EE object | +| `helpers.fit_geometry(..., grid_scale=...)` | Define grid by pixel size | geometry, CRS, scale | +| `helpers.fit_geometry(..., grid_shape=...)` | Define grid by pixel count | geometry, CRS, shape | + +### Manual Grid Definition + +For advanced use cases, you can still define grid parameters manually: + +```python +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + crs_transform=(1.0, 0, -180.0, 0, -1.0, 90.0), + shape_2d=(360, 180) +) +``` + +## 5. Troubleshooting + +### Issue: "Missing required parameter" + +**Error:** `TypeError: missing required argument: 'crs_transform'` + +**Solution:** You're using the old API syntax. Update to use grid parameter helpers: + +```python +# Add these imports +from xee import helpers +import shapely + +# Replace your old xr.open_dataset call with helper-based approach +grid_params = helpers.fit_geometry( + geometry=your_geometry, + grid_crs='EPSG:4326', + grid_scale=(your_scale, -your_scale) +) +ds = xr.open_dataset(collection, engine='ee', **grid_params) +``` + +### Issue: "Plots are rotated/flipped" + +**Problem:** You're still using `.transpose()` from v0.x code + +**Solution:** Remove the `.transpose()` call - v1.0 outputs in the correct orientation by default + +### Issue: "Dimension order is wrong for my export" + +**Check:** What order does your export library expect? + +Most modern geospatial tools expect `[time, y, x]` (which v1.0 provides). If you have legacy code expecting `[time, x, y]`, you can still transpose: + +```python +# Only if your downstream tool requires the old ordering +data = ds['variable'].transpose('time', 'x', 'y') +``` + +### Issue: "I need the old behavior" + +If you must maintain the old API temporarily, you can pin to v0.x: + +```bash +pip install "xee<1.0.0" +``` + +However, we strongly recommend migrating to v1.0 for better CF compliance and ecosystem compatibility. + +## 6. Testing Your Migration + +After updating your code, verify it works correctly: + +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +# Initialize Earth Engine +ee.Initialize(project='YOUR-PROJECT') + +# Test 1: Open a dataset +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR').limit(5) +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) + +# Test 2: Check dimensions +print("Dimensions:", ds['temperature_2m'].dims) +# Should print: ('time', 'y', 'x') + +# Test 3: Plot without transpose +ds['temperature_2m'].isel(time=0).plot() + +# Test 4: Verify CRS and transform +print("CRS:", grid_params['crs']) +print("Transform:", grid_params['crs_transform']) +print("Shape:", grid_params['shape_2d']) +``` + +## 7. Additional Resources + +- [Main README](https://github.com/google/Xee/tree/main/README.md) - Complete usage guide with examples +- [API Documentation](api.md) - Detailed API reference +- [Client vs Server Guide](client-vs-server.ipynb) - Examples using v1.0 API +- [GitHub Issues](https://github.com/google/Xee/issues) - Report problems or ask questions + +## Need Help? + +If you encounter issues during migration: + +1. Check this guide for common patterns +2. Review the [updated examples](https://github.com/google/Xee/tree/main/examples) +3. Open a [GitHub Discussion](https://github.com/google/Xee/discussions) +4. File an [issue](https://github.com/google/Xee/issues) with a reproducible example + +--- + +**Welcome to Xee v1.0!** We believe these changes make the library more powerful, standards-compliant, and easier to integrate with the broader scientific Python ecosystem. diff --git a/docs/performance.md b/docs/performance.md new file mode 100644 index 0000000..baa772f --- /dev/null +++ b/docs/performance.md @@ -0,0 +1,55 @@ +--- +title: Performance & Limits +--- + +# Performance & Limits + +Guidance for working efficiently within Earth Engine and Xee constraints. + +## Endpoints + +| Endpoint | Use case | Notes | +|----------|----------|-------| +| High‑volume | Reading stored ImageCollections | Higher throughput, intended for bulk pixel access. | +| Standard | Computed collections / iterative dev | Caching can accelerate repeated computations. | + +Switch endpoints by passing / omitting `opt_url` in `ee.Initialize`. + +## Quotas & Request Parallelism + +Earth Engine imposes QPS limits. Large Dask graphs may overrun quotas and cause retries or 429 errors. + +Recommendations: + +1. Start with modest parallelism (e.g., `DASK_NUM_WORKERS=4`). +2. Coarsen grid (larger pixels) or reduce AOI when prototyping. +3. Consolidate operations server-side (EE `.map`, `.select`, band math) before opening in Xee. +4. Cache intermediate results in memory rather than re-opening repeatedly. + +## Chunk Size Considerations + +EE responses have an upper size limit (tens of MB). Xee's backend picks reasonable pixel window sizes automatically. If you see many small requests, consider choosing a coarser grid or limiting variable selection to needed bands. + +## Memory Pressure + +Lazy arrays only materialize when you perform computations. Use Xarray operations that retain laziness (`.mean`, `.sel`, `.where`) before calling `.compute()`. + +## Common Optimizations + +| Goal | Strategy | +|------|----------| +| Faster experimentation | Limit time range (`isel(time=slice(0, N))`) | +| Stable resolution | Use `fit_geometry` with `grid_scale` | +| Uniform model inputs | Use `fit_geometry` with `grid_shape` | +| Avoid re-fetching | Persist results: `ds.to_zarr()` (advanced) | + +## Troubleshooting Slowdowns + +1. Inspect task graph size: `ds['var'].data.__dask_graph__()` (diagnostic only). +2. Verify you're not re-initializing EE in each worker. +3. Reduce concurrency; watch for fewer 429 responses. +4. Narrow AOI or temporal range. + +## Export & Large Pipelines + +For heavy export / transformation workflows consider combining Xee with [Xarray-Beam](https://xarray-beam.readthedocs.io/) or exporting via examples in the repository. diff --git a/docs/quickstart.md b/docs/quickstart.md new file mode 100644 index 0000000..b8cf530 --- /dev/null +++ b/docs/quickstart.md @@ -0,0 +1,107 @@ +--- +title: Quickstart +--- + +# Quickstart + +Get up and running with Xee in a few minutes. + +## 1. Install + +Use pip (or conda): + +```bash +pip install --upgrade xee +``` + +```bash +conda install -c conda-forge xee +``` + +Optional (plotting): `pip install matplotlib`. + +## 2. Earth Engine access + +You need an Earth Engine–enabled Google Cloud project. If you haven't done this yet, follow the Earth Engine [Access guide](https://developers.google.com/earth-engine/guides/access#get_access_to_earth_engine). + +Authenticate once on a persistent machine: + +```bash +earthengine authenticate +``` + +Or inside ephemeral environments (e.g. Colab): + +```python +import ee +ee.Authenticate() +``` + +Initialize (high‑volume endpoint recommended for reading stored ImageCollections): + +```python +import ee +ee.Initialize( + project='YOUR-PROJECT-ID', + opt_url='https://earthengine-highvolume.googleapis.com' +) +``` + +For computed collections (server-side expressions) you can omit `opt_url` to use the standard endpoint which benefits from caching. + +## 3. Open your first dataset + +```python +import ee, xarray as xr +from xee import helpers + +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +grid = helpers.extract_grid_params(ic) # match source projection & resolution +ds = xr.open_dataset(ic, engine='ee', **grid) +print(ds) +``` + +Plot the first time slice (matplotlib required): + +```python +ds['temperature_2m'].isel(time=0).plot() +``` + +## 4. Next steps + +| Goal | Where to go | +|------|-------------| +| Learn grid parameter patterns | [Concepts](concepts.md) | +| Fit a custom area or scale | [User Guide](guide.md) | +| API signatures | [API Reference](api.md) | +| Migrate 0.x code | [Migration Guide](migration-guide-v1.md) | +| Performance tips | [Performance & Limits](performance.md) | +| Troubleshooting common issues | [FAQ](faq.md) | + +## 5. Minimal workflow recap + +1. Install Xee & authenticate EE +2. Initialize EE client +3. Derive grid parameters (match source or fit a geometry) +4. Call `xr.open_dataset(..., engine='ee', **grid)` +5. Use Xarray normally (select, compute, visualize, export) + +## 6. Example: custom AOI at fixed size + +```python +import shapely +from xee import helpers + +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia +grid = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', # degrees + grid_shape=(256, 256) # (width, height) pixels +) + +ds = xr.open_dataset('ee://ECMWF/ERA5_LAND/MONTHLY_AGGR', engine='ee', **grid) +``` + +## 7. Having trouble? + +See the [FAQ](faq.md) and open a [discussion](https://github.com/google/Xee/discussions) if needed. diff --git a/docs/user-guide.md b/docs/user-guide.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/docs/user-guide.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/xee/__init__.py b/xee/__init__.py index f2e8c34..c673087 100644 --- a/xee/__init__.py +++ b/xee/__init__.py @@ -12,6 +12,33 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""A Google Earth Engine extension for Xarray.""" -from .ext import * -from .ext import __version__ +"""Public Xee API. + +End users typically: + +1. Define pixel grid parameters using helper functions like :func:`fit_geometry` + or :func:`extract_grid_params`. +2. Call :func:`xarray.open_dataset` with ``engine='ee'`` and the returned + ``grid_params``. + +The backend classes are exposed for advanced or library integration use, but +most workflows only need the helpers and the xarray interface. +""" + +from .ext import * # noqa: F401,F403 (backend classes) +from .ext import __version__ # noqa: F401 +from .helpers import fit_geometry, extract_grid_params, set_scale, PixelGridParams # noqa: F401 + +__all__ = [ + # version + '__version__', + # helper functions + 'fit_geometry', + 'extract_grid_params', + 'set_scale', + 'PixelGridParams', + # selected backend surface (avoid * pollution for autosummary ordering) + 'EarthEngineBackendEntrypoint', + 'EarthEngineStore', + 'EarthEngineBackendArray', +] diff --git a/xee/helpers.py b/xee/helpers.py index 72f38b0..092f9d3 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -12,7 +12,27 @@ # See the License for the specific language governing permissions and # limitations under the License. # ============================================================================== -"""Helper functions for grid parameters.""" +"""Helper functions for constructing pixel grid parameters for Xee. + +These helpers produce the three required keyword arguments passed to +``xarray.open_dataset(..., engine='ee', **grid_params)``: + +* ``crs`` – The target Coordinate Reference System. +* ``crs_transform`` – A 6-tuple affine transform (origin + scale) in CRS units. +* ``shape_2d`` – The (width, height) pixel shape of the output grid. + +Two primary workflows: + +1. :func:`extract_grid_params` – Match the *native* grid of an Earth Engine + Image or ImageCollection. +2. :func:`fit_geometry` – Derive a grid that fits a user geometry using either + an explicit pixel scale (``grid_scale``) or an explicit pixel shape + (``grid_shape``). + +All scale values must be expressed in the units of ``grid_crs``. For +geographic CRSs (e.g. ``EPSG:4326``) this is degrees. For projected CRSs (e.g. +UTM) this is meters. +""" import math import affine @@ -29,16 +49,43 @@ class PixelGridParams(TypedDict): - crs: str - crs_transform: TransformType - shape_d2: ShapeType + """TypedDict describing pixel grid parameters. + + - ``crs``: EPSG code or WKT for output grid CRS. + - ``crs_transform``: 6-tuple affine transform ``(a, b, c, d, e, f)``: + a = pixel width (x scale) + b = row rotation (usually 0) + c = x origin (upper-left x) + d = column rotation (usually 0) + e = pixel height (y scale, negative for north-up) + f = y origin (upper-left y) + - ``shape_2d``: ``(width, height)`` pixel counts. + """ + crs: str + crs_transform: TransformType + shape_2d: ShapeType def set_scale( crs_transform: TransformType, scaling: ScalingType, ) -> list: - """Update the CRS transform's scale parameters.""" + """Return a new CRS transform with updated scale components. + + Useful for adjusting an existing transform's pixel size while retaining its + origin. A negative y scale preserves north-up orientation. + + Args: + crs_transform: Existing 6-value transform tuple. + scaling: ``(x_scale, y_scale)`` pair. ``y_scale`` may be negative for + north-up images. + + Returns: + A list of the 6 affine transform values with updated scale components. + + Raises: + TypeError: If ``scaling`` is not a length-2 tuple. + """ if isinstance(scaling, tuple) and len(scaling) == 2: x_scale, y_scale = scaling crs_transform[0] = x_scale @@ -50,16 +97,41 @@ def set_scale( def fit_geometry( - geometry: shapely.geometry, + geometry: shapely.geometry.base.BaseGeometry, *, geometry_crs: str = 'EPSG:4326', buffer: float = 0, grid_crs: str = 'EPSG:4326', - grid_scale: ScalingType = None, - grid_scale_digits: int = None, - grid_shape: ShapeType = None, + grid_scale: ScalingType | None = None, + grid_scale_digits: int | None = None, + grid_shape: ShapeType | None = None, ) -> PixelGridParams: - """Return grid parameters that fit the geometry.""" + """Derive grid parameters that *cover* a geometry. + + You must specify exactly one of ``grid_scale`` (pixel size) or + ``grid_shape`` (pixel count). When a scale is provided the output pixel + shape is computed to fully cover the buffered geometry. When a shape is + provided the scale is inferred uniformly over the geometry's bounding box. + + Args: + geometry: Shapely geometry defining the area of interest (in + ``geometry_crs`` units). + geometry_crs: CRS of the input geometry (default WGS84). + buffer: Optional positive distance in CRS units to expand the geometry. + grid_crs: Target CRS for the output grid. + grid_scale: Optional ``(x_scale, y_scale)`` in ``grid_crs`` units. ``y`` + may be negative for north-up orientation. + grid_scale_digits: If provided with ``grid_shape`` workflow, round inferred + scales to this number of decimal places. + grid_shape: Optional ``(width, height)`` pixel count. + + Returns: + ``PixelGridParams`` dictionary usable with ``xarray.open_dataset``. + + Raises: + ValueError: If both or neither of ``grid_scale`` / ``grid_shape`` provided. + TypeError: If ``grid_scale`` is malformed. + """ if (grid_scale is None) == (grid_shape is None): raise ValueError("Exactly one of 'grid_scale' or 'grid_shape' must be specified.") @@ -112,7 +184,21 @@ def fit_geometry( def extract_grid_params( ee_obj: Union[ee.Image, ee.ImageCollection] ) -> PixelGridParams: - # Extract the pixel grid parameters from an ee.Image or ee.ImageCollection object + """Return native pixel grid parameters for an EE Image or ImageCollection. + + For an ImageCollection, the first image's first band's grid definition is + used. This matches Earth Engine's internal representation and lets you + "match source grid" without having to inspect projection metadata manually. + + Args: + ee_obj: ``ee.Image`` or ``ee.ImageCollection`` instance. + + Returns: + ``PixelGridParams`` mapping the native CRS, transform, and dimensions. + + Raises: + TypeError: If ``ee_obj`` is not a supported EE type. + """ if isinstance(ee_obj, ee.Image): img_obj = ee_obj From 367ff76293e32e605c64dd677b5f2520d95bfcd8 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 13 Nov 2025 23:07:24 +0000 Subject: [PATCH 37/56] Update documentation for breaking changes in v0.1.0 and migration guide --- README.md | 10 + docs/README.md | 35 ++- docs/conf.py | 2 +- docs/index.md | 17 +- docs/migration-guide-v0.1.0.md | 557 +++++++++++++++++++++++++++++++++ docs/migration-guide-v1.md | 4 +- docs/quickstart.md | 2 +- docs/user-guide.md | 1 - 8 files changed, 616 insertions(+), 12 deletions(-) mode change 120000 => 100644 docs/README.md create mode 100644 docs/migration-guide-v0.1.0.md delete mode 120000 docs/user-guide.md diff --git a/README.md b/README.md index e03832c..41f4c9f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +--- +**⚠️ Breaking Change in v0.1.0!** + +A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, +existing code written for pre-v0.1.0 versions will require updates to remain compatible. + +- See the [Migration Guide](docs/migration-guide-v0.1.0.md) for details on updating your code. +- If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. +--- + # Xee: Xarray + Google Earth Engine ![Xee Logo](https://raw.githubusercontent.com/google/Xee/main/docs/xee-logo.png) diff --git a/docs/README.md b/docs/README.md deleted file mode 120000 index dd0ea36..0000000 --- a/docs/README.md +++ /dev/null @@ -1 +0,0 @@ -index.md \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..5ef0e7b --- /dev/null +++ b/docs/README.md @@ -0,0 +1,34 @@ +# Xee Documentation (source files) + +```{admonition} Breaking Change in v0.1.0! +:class: warning + +A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. + +- See the [Migration Guide](migration-guide-v0.1.0.md) for details on updating your code. +- If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. +``` + +## For nicely rendered documentation + +Visit **Read the Docs**: https://xee.readthedocs.io/en/latest/ + +## About this folder + +This `docs/` folder contains the source files used to build the documentation site with Sphinx and MyST. + +If you're browsing on GitHub: +- Start from [`index.md`](index.md) for the documentation landing page +- Or build the docs locally (see below) + +## Build locally (optional) + +```bash +cd docs +make html +open _build/html/index.html # or xdg-open on Linux +``` + +## Project information + +For project overview and repository information, see the root [`README.md`](../README.md). diff --git a/docs/conf.py b/docs/conf.py index a599e0a..f66ef83 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -52,7 +52,7 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', '_templates', 'Thumbs.db', '.DS_Store', 'README.md', 'user-guide.md'] +exclude_patterns = ['_build', '_templates', 'Thumbs.db', '.DS_Store', 'README.md'] intersphinx_mapping = { 'xarray': ('https://xarray.pydata.org/en/latest/', None), diff --git a/docs/index.md b/docs/index.md index 74c0dc6..d2af9ed 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,12 +1,17 @@ # Xee Documentation -Xee is an Xarray extension for Google Earth Engine that lets you open `ee.Image` and `ee.ImageCollection` objects as lazy `xarray.Dataset`s. +```{admonition} Breaking Change in v0.1.0! +:class: warning + +A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. -```{admonition} Upgrading to Xee v1.0? -:class: important -See the [Migration Guide](migration-guide-v1.md) for grid parameter changes and new `[time, y, x]` dimension ordering. +- See the [Migration Guide](migration-guide-v0.1.0.md) for details on updating your code. +- If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. ``` + +Xee is an Xarray extension for Google Earth Engine that lets you open `ee.Image` and `ee.ImageCollection` objects as lazy `xarray.Dataset`s. + ```{toctree} :maxdepth: 2 @@ -14,12 +19,12 @@ quickstart installation concepts guide +client-vs-server performance api -migration-guide-v1 +migration-guide-v0.1.0 faq why-xee -client-vs-server contributing code-of-conduct ``` diff --git a/docs/migration-guide-v0.1.0.md b/docs/migration-guide-v0.1.0.md new file mode 100644 index 0000000..fd341c2 --- /dev/null +++ b/docs/migration-guide-v0.1.0.md @@ -0,0 +1,557 @@ +# Migration Guide: Xee v0.1.0 + +This guide helps you update your code from Xee v0.0.x to v0.1.0. The 0.1 release includes two major improvements: + +1. **New grid parameter system** for specifying output geography +2. **Updated dimension ordering** from `[time, x, y]` to `[time, y, x]` + +## Quick Migration Checklist + +- [ ] Replace `scale` and `geometry` parameters with grid parameter helpers +- [ ] Remove `.transpose()` calls before plotting or passing to libraries expecting `[time, y, x]` +- [ ] Update any code that explicitly references dimension order +- [ ] Test your workflows with the new API + +## 1. Geography Specification Changes + +### Old API (v0.x) + +The old API used simple `crs`, `scale`, and `geometry` parameters: + +```python +import ee +import xarray as xr + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=0.25, # pixel size in degrees + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +``` + +### New API (v0.1.0) + +The new API requires explicit grid parameters: `crs`, `crs_transform`, and `shape_2d`. We provide helper functions to make this easy: + +#### Option 1: Match Source Grid (Recommended for simplicity) + +```python +import ee +import xarray as xr +from xee import helpers + +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) +``` + +#### Option 2: Fit Geometry with Specific Scale + +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +# Define your area of interest using shapely +aoi = shapely.geometry.box(-180, -90, 180, 90) # Global extent + +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_scale=(0.25, -0.25) # (x_scale, y_scale) in degrees +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +#### Option 3: Fit Geometry with Specific Shape + +```python +import shapely +from xee import helpers + +aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia + +grid_params = helpers.fit_geometry( + geometry=aoi, + grid_crs='EPSG:4326', + grid_shape=(256, 256) # (width, height) in pixels +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +### Migration Examples + +#### Example 1: Global dataset at fixed scale + +**Before (v0.x):** +```python +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=1.0, + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +``` + +**After (v0.1.0):** +```python +import shapely +from xee import helpers + +global_geom = shapely.geometry.box(-180, -90, 180, 90) +grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs='EPSG:4326', + grid_scale=(1.0, -1.0) # Note: negative y-scale for north-up orientation +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +``` + +#### Example 2: Regional dataset with EE geometry + +**Before (v0.x):** +```python +import ee + +aoi = ee.Geometry.Rectangle([-122.5, 37.0, -121.5, 38.0]) +ds = xr.open_dataset( + 'LANDSAT/LC09/C02/T1_L2', + engine='ee', + crs='EPSG:32610', + scale=30, + geometry=aoi +) +``` + +**After (v0.1.0):** +```python +import ee +import shapely +from xee import helpers + +# Convert EE geometry to shapely (or create directly with shapely) +aoi = shapely.geometry.box(-122.5, 37.0, -121.5, 38.0) + +grid_params = helpers.fit_geometry( + geometry=aoi, + geometry_crs='EPSG:4326', # Input geometry CRS + grid_crs='EPSG:32610', # Output grid CRS (UTM Zone 10N) + grid_scale=(30, -30) # 30m resolution +) + +ds = xr.open_dataset( + 'LANDSAT/LC09/C02/T1_L2', + engine='ee', + **grid_params +) +``` + +#### Example 3: Using source resolution for a custom area + +**Before (v0.x):** +```python +# You had to manually determine the scale from the dataset +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:4326', + scale=0.25, # Manually determined + geometry=my_region +) +``` + +**After (v0.1.0):** +```python +from xee import helpers +import shapely + +# 1. Extract source grid parameters +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') +source_params = helpers.extract_grid_params(ic) + +# 2. Get the source scale +source_crs = source_params['crs'] +source_transform = source_params['crs_transform'] +source_scale = (source_transform[0], source_transform[4]) + +# 3. Apply to your custom region +my_region = shapely.geometry.box(-10, 35, 5, 50) # Western Europe +grid_params = helpers.fit_geometry( + geometry=my_region, + geometry_crs='EPSG:4326', + grid_crs=source_crs, + grid_scale=source_scale +) + +ds = xr.open_dataset(ic, engine='ee', **grid_params) +``` + +## 2. Dimension Ordering Changes + +### What Changed + +Xee v0.1.0 outputs dimensions in `[time, y, x]` order (matching CF conventions and most geospatial tools), instead of the previous `[time, x, y]` order. + +### Impact on Your Code + +#### Plotting + +**Before (v0.x):** +```python +# Required transpose for correct visualization +ds['temperature_2m'].isel(time=0).transpose().plot() +``` + +**After (v0.1.0):** +```python +# No transpose needed - plots correctly by default +ds['temperature_2m'].isel(time=0).plot() +``` + +#### Integration with Other Libraries + +Many geospatial libraries expect `[time, y, x]` ordering. You may have been using `.transpose()` to accommodate this. + +**Before (v0.x):** +```python +# Had to transpose for libraries expecting [time, y, x] +data_array = ds['temperature_2m'].transpose('time', 'y', 'x') +export_to_geotiff(data_array) +``` + +**After (v0.1.0):** +```python +# Dimension order is already correct +data_array = ds['temperature_2m'] +export_to_geotiff(data_array) +``` + +#### Explicit Dimension Access + +If you have code that explicitly references dimension positions, update it: + +**Before (v0.x):** +```python +# Dimensions were [time, x, y] +time_dim, x_dim, y_dim = ds['temperature_2m'].dims +# or +width = ds['temperature_2m'].shape[1] # x dimension +height = ds['temperature_2m'].shape[2] # y dimension +``` + +**After (v0.1.0):** +```python +# Dimensions are now [time, y, x] +time_dim, y_dim, x_dim = ds['temperature_2m'].dims +# or +height = ds['temperature_2m'].shape[1] # y dimension +width = ds['temperature_2m'].shape[2] # x dimension +``` + +**Better approach (dimension-agnostic):** +```python +# This works in both versions +dims = ds['temperature_2m'].dims +width = ds.sizes['x'] +height = ds.sizes['y'] +time_length = ds.sizes['time'] +``` + +## 3. Common Migration Patterns + +### Pattern 1: Simple global analysis + +**Before:** +```python +import ee +import xarray as xr + +ee.Initialize() +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + scale=1.0, + geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) +) +mean_temp = ds['temperature_2m'].mean(dim='time') +mean_temp.transpose().plot() +``` + +**After:** +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +ee.Initialize() +global_geom = shapely.geometry.box(-180, -90, 180, 90) +grid_params = helpers.fit_geometry( + geometry=global_geom, + grid_crs='EPSG:4326', + grid_scale=(1.0, -1.0) +) + +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + **grid_params +) +mean_temp = ds['temperature_2m'].mean(dim='time') +mean_temp.plot() # No transpose needed +``` + +### Pattern 2: Regional analysis with preprocessing + +**Before:** +```python +import ee +import xarray as xr + +def add_ndvi(image): + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +aoi = ee.Geometry.Rectangle([-122.5, 37.5, -122.0, 38.0]) +collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-01-01', '2024-12-31') + .filterBounds(aoi) + .map(add_ndvi) + .select(['NDVI'])) + +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:32610', + scale=30, + geometry=aoi +) +``` + +**After:** +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +def add_ndvi(image): + ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') + return image.addBands(ndvi) + +# Use shapely for geometry +aoi_shapely = shapely.geometry.box(-122.5, 37.5, -122.0, 38.0) + +# Create ee.Geometry for server-side filtering +coords = list(aoi_shapely.exterior.coords) +aoi_ee = ee.Geometry.Polygon(coords) + +collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') + .filterDate('2024-01-01', '2024-12-31') + .filterBounds(aoi_ee) + .map(add_ndvi) + .select(['NDVI'])) + +grid_params = helpers.fit_geometry( + geometry=aoi_shapely, + geometry_crs='EPSG:4326', + grid_crs='EPSG:32610', + grid_scale=(30, -30) +) + +ds = xr.open_dataset(collection, engine='ee', **grid_params) +``` + +### Pattern 3: Export workflows + +**Before:** +```python +import xarray as xr + +ds = xr.open_dataset( + collection, + engine='ee', + crs='EPSG:4326', + scale=0.1, + geometry=region +) + +# Transpose for proper export +data = ds['variable'].transpose('time', 'y', 'x') +data.to_netcdf('output.nc') +``` + +**After:** +```python +import xarray as xr +from xee import helpers + +grid_params = helpers.fit_geometry( + geometry=region, + grid_crs='EPSG:4326', + grid_scale=(0.1, -0.1) +) + +ds = xr.open_dataset(collection, engine='ee', **grid_params) + +# Already in correct dimension order +data = ds['variable'] +data.to_netcdf('output.nc') +``` + +## 4. Understanding Grid Parameters + +### The Three Required Parameters + +1. **`crs`**: Coordinate Reference System (e.g., `'EPSG:4326'`, `'EPSG:32610'`) +2. **`crs_transform`**: Affine transformation tuple `(a, b, c, d, e, f)` where: + - `a` = pixel width (x-scale) + - `b` = row rotation (typically 0) + - `c` = x-coordinate of upper-left corner + - `d` = column rotation (typically 0) + - `e` = pixel height (y-scale, typically negative for north-up) + - `f` = y-coordinate of upper-left corner +3. **`shape_2d`**: Tuple of `(width, height)` in pixels + +### Helper Function Summary + +| Function | Use Case | Parameters | +|----------|----------|------------| +| `helpers.extract_grid_params(ee_obj)` | Match the native grid of an EE Image/ImageCollection | EE object | +| `helpers.fit_geometry(..., grid_scale=...)` | Define grid by pixel size | geometry, CRS, scale | +| `helpers.fit_geometry(..., grid_shape=...)` | Define grid by pixel count | geometry, CRS, shape | + +### Manual Grid Definition + +For advanced use cases, you can still define grid parameters manually: + +```python +ds = xr.open_dataset( + 'ECMWF/ERA5_LAND/MONTHLY_AGGR', + engine='ee', + crs='EPSG:4326', + crs_transform=(1.0, 0, -180.0, 0, -1.0, 90.0), + shape_2d=(360, 180) +) +``` + +## 5. Troubleshooting + +### Issue: "Missing required parameter" + +**Error:** `TypeError: missing required argument: 'crs_transform'` + +**Solution:** You're using the old API syntax. Update to use grid parameter helpers: + +```python +# Add these imports +from xee import helpers +import shapely + +# Replace your old xr.open_dataset call with helper-based approach +grid_params = helpers.fit_geometry( + geometry=your_geometry, + grid_crs='EPSG:4326', + grid_scale=(your_scale, -your_scale) +) +ds = xr.open_dataset(collection, engine='ee', **grid_params) +``` + +### Issue: "Plots are rotated/flipped" + +**Problem:** You're still using `.transpose()` from v0.x code + +**Solution:** Remove the `.transpose()` call - v0.1.0 outputs in the correct orientation by default + +### Issue: "Dimension order is wrong for my export" + +**Check:** What order does your export library expect? + +Most modern geospatial tools expect `[time, y, x]` (which v0.1.0 provides). If you have legacy code expecting `[time, x, y]`, you can still transpose: + +```python +# Only if your downstream tool requires the old ordering +data = ds['variable'].transpose('time', 'x', 'y') +``` + +### Issue: "I need the old behavior" + +If you must maintain the old API temporarily, you can pin to v0.0.x: + +```bash +pip install "xee<0.1.0" +``` + +However, we strongly recommend migrating to v0.1.0 for better CF compliance and ecosystem compatibility. + +## 6. Testing Your Migration + +After updating your code, verify it works correctly: + +```python +import ee +import xarray as xr +from xee import helpers +import shapely + +# Initialize Earth Engine +ee.Initialize(project='YOUR-PROJECT') + +# Test 1: Open a dataset +ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR').limit(5) +grid_params = helpers.extract_grid_params(ic) +ds = xr.open_dataset(ic, engine='ee', **grid_params) + +# Test 2: Check dimensions +print("Dimensions:", ds['temperature_2m'].dims) +# Should print: ('time', 'y', 'x') + +# Test 3: Plot without transpose +ds['temperature_2m'].isel(time=0).plot() + +# Test 4: Verify CRS and transform +print("CRS:", grid_params['crs']) +print("Transform:", grid_params['crs_transform']) +print("Shape:", grid_params['shape_2d']) +``` + +## 7. Additional Resources + +- [Main README](https://github.com/google/Xee/tree/main/README.md) - Complete usage guide with examples +- [API Documentation](api.md) - Detailed API reference +- [Client vs Server Guide](client-vs-server.ipynb) - Examples using v0.1.0 API +- [GitHub Issues](https://github.com/google/Xee/issues) - Report problems or ask questions + +## Need Help? + +If you encounter issues during migration: + +1. Check this guide for common patterns +2. Review the [updated examples](https://github.com/google/Xee/tree/main/examples) +3. Open a [GitHub Discussion](https://github.com/google/Xee/discussions) +4. File an [issue](https://github.com/google/Xee/issues) with a reproducible example + +--- + +**Welcome to Xee v0.1.0!** We believe these changes make the library more powerful, standards-compliant, and easier to integrate with the broader scientific Python ecosystem. + diff --git a/docs/migration-guide-v1.md b/docs/migration-guide-v1.md index 95ac7e8..887d570 100644 --- a/docs/migration-guide-v1.md +++ b/docs/migration-guide-v1.md @@ -1,6 +1,6 @@ -# Migration Guide: Xee v1.0.0 +# Migration Guide: Xee v0.1.0 -This guide helps you update your code from Xee v0.x to v1.0.0. The 1.0 release includes two major improvements: +This guide helps you update your code from Xee v0.0.x to v0.1.0. The 0.1 release includes two major improvements: 1. **New grid parameter system** for specifying output geography 2. **Updated dimension ordering** from `[time, x, y]` to `[time, y, x]` diff --git a/docs/quickstart.md b/docs/quickstart.md index b8cf530..dfee6fa 100644 --- a/docs/quickstart.md +++ b/docs/quickstart.md @@ -74,7 +74,7 @@ ds['temperature_2m'].isel(time=0).plot() | Learn grid parameter patterns | [Concepts](concepts.md) | | Fit a custom area or scale | [User Guide](guide.md) | | API signatures | [API Reference](api.md) | -| Migrate 0.x code | [Migration Guide](migration-guide-v1.md) | +| Migrate 0.0.x code | [Migration Guide](migration-guide-v0.1.0.md) | | Performance tips | [Performance & Limits](performance.md) | | Troubleshooting common issues | [FAQ](faq.md) | diff --git a/docs/user-guide.md b/docs/user-guide.md deleted file mode 120000 index 32d46ee..0000000 --- a/docs/user-guide.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file From a9b14f0df5d9c6e2c899c60291da4875d8b7f1de Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 13 Nov 2025 23:30:42 +0000 Subject: [PATCH 38/56] Refactor breaking change notice in README files for GH MD format --- README.md | 17 +++++++---------- docs/README.md | 14 ++++++-------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 41f4c9f..7a159f5 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,12 @@ ---- -**⚠️ Breaking Change in v0.1.0!** - -A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, -existing code written for pre-v0.1.0 versions will require updates to remain compatible. - -- See the [Migration Guide](docs/migration-guide-v0.1.0.md) for details on updating your code. -- If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. ---- - # Xee: Xarray + Google Earth Engine +> **⚠️ Breaking Change in v0.1.0!** +> +> A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. +> +> - See the [Migration Guide](docs/migration-guide-v0.1.0.md) for details on updating your code. +> - If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. + ![Xee Logo](https://raw.githubusercontent.com/google/Xee/main/docs/xee-logo.png) Xee is an Xarray backend for Google Earth Engine. Open `ee.Image` / `ee.ImageCollection` objects as lazy `xarray.Dataset`s and analyze petabyte‑scale Earth data with the scientific Python stack. diff --git a/docs/README.md b/docs/README.md index 5ef0e7b..69244c2 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,13 +1,11 @@ # Xee Documentation (source files) -```{admonition} Breaking Change in v0.1.0! -:class: warning - -A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. - -- See the [Migration Guide](migration-guide-v0.1.0.md) for details on updating your code. -- If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. -``` +> **⚠️ Breaking Change in v0.1.0!** +> +> A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. +> +> - See the [Migration Guide](migration-guide-v0.1.0.md) for details on updating your code. +> - If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. ## For nicely rendered documentation From 1f251ce1a66355ca6ea48c35654f77cd80589b15 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 13 Nov 2025 23:34:17 +0000 Subject: [PATCH 39/56] Fix formatting of breaking change notice in documentation --- README.md | 6 +++--- docs/README.md | 2 +- docs/index.md | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7a159f5..9e966ca 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# Xee: Xarray + Google Earth Engine - -> **⚠️ Breaking Change in v0.1.0!** +> **⚠️ Breaking Change in v0.1.0** > > A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. > > - See the [Migration Guide](docs/migration-guide-v0.1.0.md) for details on updating your code. > - If you need more time to migrate, you can pin your environment to the latest pre-v0.1.0 release. +# Xee: Xarray + Google Earth Engine + ![Xee Logo](https://raw.githubusercontent.com/google/Xee/main/docs/xee-logo.png) Xee is an Xarray backend for Google Earth Engine. Open `ee.Image` / `ee.ImageCollection` objects as lazy `xarray.Dataset`s and analyze petabyte‑scale Earth data with the scientific Python stack. diff --git a/docs/README.md b/docs/README.md index 69244c2..ddd461a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,6 +1,6 @@ # Xee Documentation (source files) -> **⚠️ Breaking Change in v0.1.0!** +> **⚠️ Breaking Change in v0.1.0** > > A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. > diff --git a/docs/index.md b/docs/index.md index d2af9ed..07841f0 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ # Xee Documentation -```{admonition} Breaking Change in v0.1.0! +```{admonition} Breaking Change in v0.1.0 :class: warning A major refactor was released in v0.1.0, introducing breaking changes to the Xee API. In most cases, existing code written for pre-v0.1.0 versions will require updates to remain compatible. From d84b103abf873ca08844f1fb4f42ed365c8b2195 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Thu, 13 Nov 2025 23:50:20 +0000 Subject: [PATCH 40/56] Update Sphinx configuration for improved navigation and remove migration guide for v0.1.0 --- docs/conf.py | 14 +- docs/migration-guide-v1.md | 556 ------------------------------------- 2 files changed, 7 insertions(+), 563 deletions(-) delete mode 100644 docs/migration-guide-v1.md diff --git a/docs/conf.py b/docs/conf.py index f66ef83..a88a8b4 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -66,23 +66,23 @@ html_theme = 'sphinx_rtd_theme' # Keep the left-hand navigation consistent on every page. In particular, -# - titles_only=True prevents page section headings (e.g., "Goals", "Approach") -# from appearing in the sidebar when viewing that page. +# - titles_only=False allows page section headings to appear in the sidebar, +# making them collapsible/expandable for easy navigation. # - collapse_navigation=False expands the full toctree instead of focusing only # on the current page branch (which makes the list look different per page). # - sticky_navigation=False avoids auto-scrolling the sidebar to keep the # current entry near the top, which can give the impression of different # ordering between pages. -# - navigation_depth controls how deep the tree expands. With titles_only=True, -# this is the depth of documents, not their internal sections. +# - navigation_depth controls how deep the tree expands. Set to 2 to show +# documents plus one level of section headers. html_theme_options = { - 'titles_only': True, + 'titles_only': False, 'collapse_navigation': False, 'sticky_navigation': False, # Do not include hidden local toctrees (e.g., autosummary children) in the - # sidebar, and limit the sidebar to top-level only. + # sidebar, and show documents plus one level of sections. 'includehidden': False, - 'navigation_depth': 1, + 'navigation_depth': 2, } # Add any paths that contain custom static files (such as style sheets) here, diff --git a/docs/migration-guide-v1.md b/docs/migration-guide-v1.md deleted file mode 100644 index 887d570..0000000 --- a/docs/migration-guide-v1.md +++ /dev/null @@ -1,556 +0,0 @@ -# Migration Guide: Xee v0.1.0 - -This guide helps you update your code from Xee v0.0.x to v0.1.0. The 0.1 release includes two major improvements: - -1. **New grid parameter system** for specifying output geography -2. **Updated dimension ordering** from `[time, x, y]` to `[time, y, x]` - -## Quick Migration Checklist - -- [ ] Replace `scale` and `geometry` parameters with grid parameter helpers -- [ ] Remove `.transpose()` calls before plotting or passing to libraries expecting `[time, y, x]` -- [ ] Update any code that explicitly references dimension order -- [ ] Test your workflows with the new API - -## 1. Geography Specification Changes - -### Old API (v0.x) - -The old API used simple `crs`, `scale`, and `geometry` parameters: - -```python -import ee -import xarray as xr - -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - crs='EPSG:4326', - scale=0.25, # pixel size in degrees - geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) -) -``` - -### New API (v1.0) - -The new API requires explicit grid parameters: `crs`, `crs_transform`, and `shape_2d`. We provide helper functions to make this easy: - -#### Option 1: Match Source Grid (Recommended for simplicity) - -```python -import ee -import xarray as xr -from xee import helpers - -ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') -grid_params = helpers.extract_grid_params(ic) -ds = xr.open_dataset(ic, engine='ee', **grid_params) -``` - -#### Option 2: Fit Geometry with Specific Scale - -```python -import ee -import xarray as xr -from xee import helpers -import shapely - -# Define your area of interest using shapely -aoi = shapely.geometry.box(-180, -90, 180, 90) # Global extent - -grid_params = helpers.fit_geometry( - geometry=aoi, - grid_crs='EPSG:4326', - grid_scale=(0.25, -0.25) # (x_scale, y_scale) in degrees -) - -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - **grid_params -) -``` - -#### Option 3: Fit Geometry with Specific Shape - -```python -import shapely -from xee import helpers - -aoi = shapely.geometry.box(113.33, -43.63, 153.56, -10.66) # Australia - -grid_params = helpers.fit_geometry( - geometry=aoi, - grid_crs='EPSG:4326', - grid_shape=(256, 256) # (width, height) in pixels -) - -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - **grid_params -) -``` - -### Migration Examples - -#### Example 1: Global dataset at fixed scale - -**Before (v0.x):** -```python -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - crs='EPSG:4326', - scale=1.0, - geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) -) -``` - -**After (v1.0):** -```python -import shapely -from xee import helpers - -global_geom = shapely.geometry.box(-180, -90, 180, 90) -grid_params = helpers.fit_geometry( - geometry=global_geom, - grid_crs='EPSG:4326', - grid_scale=(1.0, -1.0) # Note: negative y-scale for north-up orientation -) - -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - **grid_params -) -``` - -#### Example 2: Regional dataset with EE geometry - -**Before (v0.x):** -```python -import ee - -aoi = ee.Geometry.Rectangle([-122.5, 37.0, -121.5, 38.0]) -ds = xr.open_dataset( - 'LANDSAT/LC09/C02/T1_L2', - engine='ee', - crs='EPSG:32610', - scale=30, - geometry=aoi -) -``` - -**After (v1.0):** -```python -import ee -import shapely -from xee import helpers - -# Convert EE geometry to shapely (or create directly with shapely) -aoi = shapely.geometry.box(-122.5, 37.0, -121.5, 38.0) - -grid_params = helpers.fit_geometry( - geometry=aoi, - geometry_crs='EPSG:4326', # Input geometry CRS - grid_crs='EPSG:32610', # Output grid CRS (UTM Zone 10N) - grid_scale=(30, -30) # 30m resolution -) - -ds = xr.open_dataset( - 'LANDSAT/LC09/C02/T1_L2', - engine='ee', - **grid_params -) -``` - -#### Example 3: Using source resolution for a custom area - -**Before (v0.x):** -```python -# You had to manually determine the scale from the dataset -ds = xr.open_dataset( - collection, - engine='ee', - crs='EPSG:4326', - scale=0.25, # Manually determined - geometry=my_region -) -``` - -**After (v1.0):** -```python -from xee import helpers -import shapely - -# 1. Extract source grid parameters -ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') -source_params = helpers.extract_grid_params(ic) - -# 2. Get the source scale -source_crs = source_params['crs'] -source_transform = source_params['crs_transform'] -source_scale = (source_transform[0], source_transform[4]) - -# 3. Apply to your custom region -my_region = shapely.geometry.box(-10, 35, 5, 50) # Western Europe -grid_params = helpers.fit_geometry( - geometry=my_region, - geometry_crs='EPSG:4326', - grid_crs=source_crs, - grid_scale=source_scale -) - -ds = xr.open_dataset(ic, engine='ee', **grid_params) -``` - -## 2. Dimension Ordering Changes - -### What Changed - -Xee v1.0 outputs dimensions in `[time, y, x]` order (matching CF conventions and most geospatial tools), instead of the previous `[time, x, y]` order. - -### Impact on Your Code - -#### Plotting - -**Before (v0.x):** -```python -# Required transpose for correct visualization -ds['temperature_2m'].isel(time=0).transpose().plot() -``` - -**After (v1.0):** -```python -# No transpose needed - plots correctly by default -ds['temperature_2m'].isel(time=0).plot() -``` - -#### Integration with Other Libraries - -Many geospatial libraries expect `[time, y, x]` ordering. You may have been using `.transpose()` to accommodate this. - -**Before (v0.x):** -```python -# Had to transpose for libraries expecting [time, y, x] -data_array = ds['temperature_2m'].transpose('time', 'y', 'x') -export_to_geotiff(data_array) -``` - -**After (v1.0):** -```python -# Dimension order is already correct -data_array = ds['temperature_2m'] -export_to_geotiff(data_array) -``` - -#### Explicit Dimension Access - -If you have code that explicitly references dimension positions, update it: - -**Before (v0.x):** -```python -# Dimensions were [time, x, y] -time_dim, x_dim, y_dim = ds['temperature_2m'].dims -# or -width = ds['temperature_2m'].shape[1] # x dimension -height = ds['temperature_2m'].shape[2] # y dimension -``` - -**After (v1.0):** -```python -# Dimensions are now [time, y, x] -time_dim, y_dim, x_dim = ds['temperature_2m'].dims -# or -height = ds['temperature_2m'].shape[1] # y dimension -width = ds['temperature_2m'].shape[2] # x dimension -``` - -**Better approach (dimension-agnostic):** -```python -# This works in both versions -dims = ds['temperature_2m'].dims -width = ds.sizes['x'] -height = ds.sizes['y'] -time_length = ds.sizes['time'] -``` - -## 3. Common Migration Patterns - -### Pattern 1: Simple global analysis - -**Before:** -```python -import ee -import xarray as xr - -ee.Initialize() -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - crs='EPSG:4326', - scale=1.0, - geometry=ee.Geometry.Rectangle([-180, -90, 180, 90]) -) -mean_temp = ds['temperature_2m'].mean(dim='time') -mean_temp.transpose().plot() -``` - -**After:** -```python -import ee -import xarray as xr -from xee import helpers -import shapely - -ee.Initialize() -global_geom = shapely.geometry.box(-180, -90, 180, 90) -grid_params = helpers.fit_geometry( - geometry=global_geom, - grid_crs='EPSG:4326', - grid_scale=(1.0, -1.0) -) - -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - **grid_params -) -mean_temp = ds['temperature_2m'].mean(dim='time') -mean_temp.plot() # No transpose needed -``` - -### Pattern 2: Regional analysis with preprocessing - -**Before:** -```python -import ee -import xarray as xr - -def add_ndvi(image): - ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') - return image.addBands(ndvi) - -aoi = ee.Geometry.Rectangle([-122.5, 37.5, -122.0, 38.0]) -collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') - .filterDate('2024-01-01', '2024-12-31') - .filterBounds(aoi) - .map(add_ndvi) - .select(['NDVI'])) - -ds = xr.open_dataset( - collection, - engine='ee', - crs='EPSG:32610', - scale=30, - geometry=aoi -) -``` - -**After:** -```python -import ee -import xarray as xr -from xee import helpers -import shapely - -def add_ndvi(image): - ndvi = image.normalizedDifference(['SR_B5', 'SR_B4']).rename('NDVI') - return image.addBands(ndvi) - -# Use shapely for geometry -aoi_shapely = shapely.geometry.box(-122.5, 37.5, -122.0, 38.0) - -# Create ee.Geometry for server-side filtering -coords = list(aoi_shapely.exterior.coords) -aoi_ee = ee.Geometry.Polygon(coords) - -collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') - .filterDate('2024-01-01', '2024-12-31') - .filterBounds(aoi_ee) - .map(add_ndvi) - .select(['NDVI'])) - -grid_params = helpers.fit_geometry( - geometry=aoi_shapely, - geometry_crs='EPSG:4326', - grid_crs='EPSG:32610', - grid_scale=(30, -30) -) - -ds = xr.open_dataset(collection, engine='ee', **grid_params) -``` - -### Pattern 3: Export workflows - -**Before:** -```python -import xarray as xr - -ds = xr.open_dataset( - collection, - engine='ee', - crs='EPSG:4326', - scale=0.1, - geometry=region -) - -# Transpose for proper export -data = ds['variable'].transpose('time', 'y', 'x') -data.to_netcdf('output.nc') -``` - -**After:** -```python -import xarray as xr -from xee import helpers - -grid_params = helpers.fit_geometry( - geometry=region, - grid_crs='EPSG:4326', - grid_scale=(0.1, -0.1) -) - -ds = xr.open_dataset(collection, engine='ee', **grid_params) - -# Already in correct dimension order -data = ds['variable'] -data.to_netcdf('output.nc') -``` - -## 4. Understanding Grid Parameters - -### The Three Required Parameters - -1. **`crs`**: Coordinate Reference System (e.g., `'EPSG:4326'`, `'EPSG:32610'`) -2. **`crs_transform`**: Affine transformation tuple `(a, b, c, d, e, f)` where: - - `a` = pixel width (x-scale) - - `b` = row rotation (typically 0) - - `c` = x-coordinate of upper-left corner - - `d` = column rotation (typically 0) - - `e` = pixel height (y-scale, typically negative for north-up) - - `f` = y-coordinate of upper-left corner -3. **`shape_2d`**: Tuple of `(width, height)` in pixels - -### Helper Function Summary - -| Function | Use Case | Parameters | -|----------|----------|------------| -| `helpers.extract_grid_params(ee_obj)` | Match the native grid of an EE Image/ImageCollection | EE object | -| `helpers.fit_geometry(..., grid_scale=...)` | Define grid by pixel size | geometry, CRS, scale | -| `helpers.fit_geometry(..., grid_shape=...)` | Define grid by pixel count | geometry, CRS, shape | - -### Manual Grid Definition - -For advanced use cases, you can still define grid parameters manually: - -```python -ds = xr.open_dataset( - 'ECMWF/ERA5_LAND/MONTHLY_AGGR', - engine='ee', - crs='EPSG:4326', - crs_transform=(1.0, 0, -180.0, 0, -1.0, 90.0), - shape_2d=(360, 180) -) -``` - -## 5. Troubleshooting - -### Issue: "Missing required parameter" - -**Error:** `TypeError: missing required argument: 'crs_transform'` - -**Solution:** You're using the old API syntax. Update to use grid parameter helpers: - -```python -# Add these imports -from xee import helpers -import shapely - -# Replace your old xr.open_dataset call with helper-based approach -grid_params = helpers.fit_geometry( - geometry=your_geometry, - grid_crs='EPSG:4326', - grid_scale=(your_scale, -your_scale) -) -ds = xr.open_dataset(collection, engine='ee', **grid_params) -``` - -### Issue: "Plots are rotated/flipped" - -**Problem:** You're still using `.transpose()` from v0.x code - -**Solution:** Remove the `.transpose()` call - v1.0 outputs in the correct orientation by default - -### Issue: "Dimension order is wrong for my export" - -**Check:** What order does your export library expect? - -Most modern geospatial tools expect `[time, y, x]` (which v1.0 provides). If you have legacy code expecting `[time, x, y]`, you can still transpose: - -```python -# Only if your downstream tool requires the old ordering -data = ds['variable'].transpose('time', 'x', 'y') -``` - -### Issue: "I need the old behavior" - -If you must maintain the old API temporarily, you can pin to v0.x: - -```bash -pip install "xee<1.0.0" -``` - -However, we strongly recommend migrating to v1.0 for better CF compliance and ecosystem compatibility. - -## 6. Testing Your Migration - -After updating your code, verify it works correctly: - -```python -import ee -import xarray as xr -from xee import helpers -import shapely - -# Initialize Earth Engine -ee.Initialize(project='YOUR-PROJECT') - -# Test 1: Open a dataset -ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR').limit(5) -grid_params = helpers.extract_grid_params(ic) -ds = xr.open_dataset(ic, engine='ee', **grid_params) - -# Test 2: Check dimensions -print("Dimensions:", ds['temperature_2m'].dims) -# Should print: ('time', 'y', 'x') - -# Test 3: Plot without transpose -ds['temperature_2m'].isel(time=0).plot() - -# Test 4: Verify CRS and transform -print("CRS:", grid_params['crs']) -print("Transform:", grid_params['crs_transform']) -print("Shape:", grid_params['shape_2d']) -``` - -## 7. Additional Resources - -- [Main README](https://github.com/google/Xee/tree/main/README.md) - Complete usage guide with examples -- [API Documentation](api.md) - Detailed API reference -- [Client vs Server Guide](client-vs-server.ipynb) - Examples using v1.0 API -- [GitHub Issues](https://github.com/google/Xee/issues) - Report problems or ask questions - -## Need Help? - -If you encounter issues during migration: - -1. Check this guide for common patterns -2. Review the [updated examples](https://github.com/google/Xee/tree/main/examples) -3. Open a [GitHub Discussion](https://github.com/google/Xee/discussions) -4. File an [issue](https://github.com/google/Xee/issues) with a reproducible example - ---- - -**Welcome to Xee v1.0!** We believe these changes make the library more powerful, standards-compliant, and easier to integrate with the broader scientific Python ecosystem. From a9ab5ec492d7007ece946a36c8d21e4d597074c5 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Sat, 15 Nov 2025 00:43:41 +0000 Subject: [PATCH 41/56] Drop Python version support for 3.9 and 3.10 --- .github/workflows/ci-build.yml | 2 -- .github/workflows/publish.yml | 4 ++-- .readthedocs.yaml | 2 +- examples/dataflow/Dockerfile | 2 +- pyproject.toml | 4 +--- 5 files changed, 5 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 1df5b27..776cacd 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -31,8 +31,6 @@ jobs: fail-fast: false matrix: python-version: [ - "3.9", - "3.10", "3.11", "3.12", "3.13", diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 916f287..429a7f4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,7 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: 3.9 + python-version: "3.11" - name: Install dependencies run: | @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-python@v5 name: Install Python with: - python-version: 3.9 + python-version: "3.11" - uses: actions/download-artifact@v4 with: name: releases diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 7fb3118..5a58703 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -8,7 +8,7 @@ version: 2 build: os: ubuntu-22.04 tools: - python: "3.10" + python: "3.11" # Build documentation in the docs/ directory with Sphinx sphinx: diff --git a/examples/dataflow/Dockerfile b/examples/dataflow/Dockerfile index cbd382b..7213994 100644 --- a/examples/dataflow/Dockerfile +++ b/examples/dataflow/Dockerfile @@ -1,4 +1,4 @@ -FROM apache/beam_python3.9_sdk:2.51.0 +FROM apache/beam_python3.11_sdk:2.51.0 COPY requirements.txt ./ diff --git a/pyproject.toml b/pyproject.toml index 8879486..b3f7364 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "xee" dynamic = ["version"] description = "A Google Earth Engine extension for Xarray." readme = "README.md" -requires-python = ">=3.9" +requires-python = ">=3.11" license = {text = "Apache-2.0"} authors = [ {name = "Google LLC", email = "noreply@google.com"}, @@ -17,8 +17,6 @@ classifiers = [ "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", From 41c33c23f4155132f271b889719761c7dbc4a050 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 17 Nov 2025 18:49:17 +0000 Subject: [PATCH 42/56] Update contributing guidelines to include test running instructions --- docs/contributing.md | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/contributing.md b/docs/contributing.md index ea73169..e2f4854 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -25,8 +25,22 @@ Guidelines](https://opensource.google/conduct/). ## Contribution process -### Code Reviews +### Code reviews All submissions, including submissions by project members, require review. We use [GitHub pull requests](https://docs.github.com/articles/about-pull-requests) -for this purpose. \ No newline at end of file +for this purpose. + +### Running tests + +The Xee integration tests only pass on Xee branches (no forks). Please run the integration tests locally before sending a PR. To run the tests locally, authenticate using `earthengine authenticate` and run one of the following: + +```bash +python -m unittest xee/ext_integration_test.py +``` + +or + +```bash +python -m pytest xee/ext_integration_test.py +``` \ No newline at end of file From ca2c03c124dc65b0329629417a3f15234d740256 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Sat, 22 Nov 2025 01:09:46 +0000 Subject: [PATCH 43/56] Fix mangled conflict resolution --- xee/ext_integration_test.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index c7917ef..156c1a1 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -385,7 +385,6 @@ def test_can_chunk__opened_dataset(self): except ValueError: self.fail('Chunking failed.') - def test_honors_geometry_simple_utm(self): """Test that a non-geographic projection can be used.""" ic = ee.ImageCollection([ @@ -396,13 +395,6 @@ def test_honors_geometry_simple_utm(self): min_y, max_y = -4, 0 width = max_x - min_x height = max_y - min_y - self.assertEqual(ds.sizes, {'time': 4248, 'lon': 40, 'lat': 33}) - self.assertNotEqual(ds.sizes, standard_ds.sizes) - - def test_honors_projection(self): - ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( - '1992-10-05', '1993-03-31' - ) ds = xr.open_dataset( ic, engine=xee.EarthEngineBackendEntrypoint, @@ -440,7 +432,6 @@ def test_honors_projection(self): ]]) ) - @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') def test_expected_precise_transform(self): data = np.empty((162, 121), dtype=np.float32) From b126dbbea2a8d00eb240d9c8fdbe9b03ed8b58fe Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Sat, 22 Nov 2025 03:19:08 +0000 Subject: [PATCH 44/56] Ran pyink to format files to pass lint checks --- docs/conf.py | 8 +- examples/dataflow/ee_to_zarr_dataflow.py | 15 +- examples/ee_to_zarr.py | 15 +- xee/__init__.py | 26 +-- xee/ext.py | 56 +++--- xee/ext_integration_test.py | 224 +++++++++++++---------- xee/ext_test.py | 162 ++++++++-------- xee/helpers.py | 60 +++--- 8 files changed, 311 insertions(+), 255 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index a88a8b4..a50f8ca 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -52,7 +52,13 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', '_templates', 'Thumbs.db', '.DS_Store', 'README.md'] +exclude_patterns = [ + '_build', + '_templates', + 'Thumbs.db', + '.DS_Store', + 'README.md', +] intersphinx_mapping = { 'xarray': ('https://xarray.pydata.org/en/latest/', None), diff --git a/examples/dataflow/ee_to_zarr_dataflow.py b/examples/dataflow/ee_to_zarr_dataflow.py index f0592ee..f20e365 100644 --- a/examples/dataflow/ee_to_zarr_dataflow.py +++ b/examples/dataflow/ee_to_zarr_dataflow.py @@ -40,7 +40,9 @@ 'EPSG:4326', help='Coordinate Reference System for output Zarr.', ) -_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor in degrees for output Zarr.') +_SCALE = flags.DEFINE_float( + 'scale', 0.25, help='Scale factor in degrees for output Zarr.' +) _TARGET_CHUNKS = flags.DEFINE_string( 'target_chunks', '', @@ -94,18 +96,19 @@ def main(argv: list[str]) -> None: # Define grid parameters # Create a global geometry (-180 to 180 longitude, -90 to 90 latitude) global_geom = shapely.geometry.box(-180, -90, 180, 90) - + # Use grid_scale to define pixel size - fit_geometry will calculate the shape grid_params = helpers.fit_geometry( geometry=global_geom, grid_crs=_CRS.value, - grid_scale=(_SCALE.value, -_SCALE.value) # negative y-scale for north-up orientation + grid_scale=( + _SCALE.value, + -_SCALE.value, + ), # negative y-scale for north-up orientation ) ds = xr.open_dataset( - input_coll, - engine=xee.EarthEngineBackendEntrypoint, - **grid_params + input_coll, engine=xee.EarthEngineBackendEntrypoint, **grid_params ) template = xbeam.make_template(ds) itemsize = max(variable.dtype.itemsize for variable in template.values()) diff --git a/examples/ee_to_zarr.py b/examples/ee_to_zarr.py index b2e581a..cd8acae 100644 --- a/examples/ee_to_zarr.py +++ b/examples/ee_to_zarr.py @@ -40,7 +40,9 @@ 'EPSG:4326', help='Coordinate Reference System for output Zarr.', ) -_SCALE = flags.DEFINE_float('scale', 0.25, help='Scale factor in degrees for output Zarr.') +_SCALE = flags.DEFINE_float( + 'scale', 0.25, help='Scale factor in degrees for output Zarr.' +) _TARGET_CHUNKS = flags.DEFINE_string( 'target_chunks', '', @@ -78,18 +80,19 @@ def main(argv: list[str]) -> None: # Define grid parameters # Create a global geometry (-180 to 180 longitude, -90 to 90 latitude) global_geom = shapely.geometry.box(-180, -90, 180, 90) - + # Use grid_scale to define pixel size - fit_geometry will calculate the shape grid_params = helpers.fit_geometry( geometry=global_geom, grid_crs=_CRS.value, - grid_scale=(_SCALE.value, -_SCALE.value) # negative y-scale for north-up orientation + grid_scale=( + _SCALE.value, + -_SCALE.value, + ), # negative y-scale for north-up orientation ) ds = xr.open_dataset( - _INPUT.value, - engine=xee.EarthEngineBackendEntrypoint, - **grid_params + _INPUT.value, engine=xee.EarthEngineBackendEntrypoint, **grid_params ) template = xbeam.make_template(ds) itemsize = max(variable.dtype.itemsize for variable in template.values()) diff --git a/xee/__init__.py b/xee/__init__.py index c673087..ce1d6e3 100644 --- a/xee/__init__.py +++ b/xee/__init__.py @@ -17,9 +17,9 @@ End users typically: 1. Define pixel grid parameters using helper functions like :func:`fit_geometry` - or :func:`extract_grid_params`. + or :func:`extract_grid_params`. 2. Call :func:`xarray.open_dataset` with ``engine='ee'`` and the returned - ``grid_params``. + ``grid_params``. The backend classes are exposed for advanced or library integration use, but most workflows only need the helpers and the xarray interface. @@ -30,15 +30,15 @@ from .helpers import fit_geometry, extract_grid_params, set_scale, PixelGridParams # noqa: F401 __all__ = [ - # version - '__version__', - # helper functions - 'fit_geometry', - 'extract_grid_params', - 'set_scale', - 'PixelGridParams', - # selected backend surface (avoid * pollution for autosummary ordering) - 'EarthEngineBackendEntrypoint', - 'EarthEngineStore', - 'EarthEngineBackendArray', + # version + '__version__', + # helper functions + 'fit_geometry', + 'extract_grid_params', + 'set_scale', + 'PixelGridParams', + # selected backend surface (avoid * pollution for autosummary ordering) + 'EarthEngineBackendEntrypoint', + 'EarthEngineStore', + 'EarthEngineBackendArray', ] diff --git a/xee/ext.py b/xee/ext.py index 2aae9c9..c988d28 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -62,7 +62,9 @@ # Types for type hints CrsType = str -TransformType = Union[tuple[float, float, float, float, float, float], affine.Affine] +TransformType = Union[ + tuple[float, float, float, float, float, float], affine.Affine +] ShapeType = tuple[int, int] _BUILTIN_DTYPES = { @@ -82,14 +84,15 @@ _TO_LIST_WARNING_LIMIT = 10000 EE_AFFINE_TRANSFORM_FIELDS = [ - 'scaleX', - 'shearX', - 'translateX', - 'shearY', - 'scaleY', - 'translateY' + 'scaleX', + 'shearX', + 'translateX', + 'shearY', + 'scaleY', + 'translateY', ] + # Used in ext_test.py. def _check_request_limit(chunks: dict[str, int], dtype_size: int, limit: int): """Checks that the actual number of bytes exceeds the limit.""" @@ -219,7 +222,9 @@ def __init__( crs_transform.f, ) elif not isinstance(crs_transform, tuple): - raise TypeError('crs_transform must be an affine.Affine object or a tuple.') + raise TypeError( + 'crs_transform must be an affine.Affine object or a tuple.' + ) else: self.affine_transform = affine.Affine(*crs_transform) self.ee_init_kwargs = ee_init_kwargs @@ -280,7 +285,6 @@ def get_info(self) -> dict[str, Any]: ('first', self.image_collection.first()), ] - # TODO(#29, #30): This RPC call takes the longest time to compute. This # requires a full scan of the images in the collection, which happens on the # EE backend. This is essential because we want the primary dimension of the @@ -394,7 +398,6 @@ def _assign_preferred_chunks(self) -> Chunks: chunks[y_dim_name] = self.chunks['height'] return chunks - def project(self, bbox: types.BBox) -> types.Grid: """Translate a bounding box (pixel space) to a grid (projection space). @@ -412,10 +415,13 @@ def project(self, bbox: types.BBox) -> types.Grid: x_start, y_start, x_end, y_end = bbox # Translate the crs_transform to the origin of the bounding box - transform_grid_cell = affine.Affine.translation( - xoff=x_start * self.affine_transform.a, - yoff=y_start * self.affine_transform.e - ) * self.affine_transform + transform_grid_cell = ( + affine.Affine.translation( + xoff=x_start * self.affine_transform.a, + yoff=y_start * self.affine_transform.e, + ) + * self.affine_transform + ) return { # The size of the bounding box. The affine transform and project will be @@ -424,7 +430,9 @@ def project(self, bbox: types.BBox) -> types.Grid: 'width': x_end - x_start, 'height': y_end - y_start, }, - 'affineTransform': dict(zip(EE_AFFINE_TRANSFORM_FIELDS, transform_grid_cell)), + 'affineTransform': dict( + zip(EE_AFFINE_TRANSFORM_FIELDS, transform_grid_cell) + ), 'crsCode': self.crs, } @@ -566,7 +574,6 @@ def _get_primary_coordinates(self) -> list[Any]: ] return primary_coords - def get_variables(self) -> utils.Frozen[str, xarray.Variable]: vars_ = [(name, self.open_store_variable(name)) for name in self._bands()] @@ -584,8 +591,12 @@ def get_variables(self) -> utils.Frozen[str, xarray.Variable]: x_scale, _, x_translate, _, y_scale, y_translate = self.crs_transform width, height = self.shape_2d - width_coord = np.array([x_translate + x_scale / 2 + ix * x_scale for ix in range(width)]) - height_coord = np.array([y_translate + y_scale / 2 + iy * y_scale for iy in range(height)]) + width_coord = np.array( + [x_translate + x_scale / 2 + ix * x_scale for ix in range(width)] + ) + height_coord = np.array( + [y_translate + y_scale / 2 + iy * y_scale for iy in range(height)] + ) # Make sure there's at least a single point in each dimension. if width_coord.ndim == 0: @@ -664,7 +675,10 @@ def __init__(self, variable_name: str, ee_store: EarthEngineStore): self._info = ee_store._band_attrs(variable_name) self.dtype = np.dtype(np.float32) - self.shape = (ee_store.n_images, ) + (ee_store.shape_2d[1], ee_store.shape_2d[0]) + self.shape = (ee_store.n_images,) + ( + ee_store.shape_2d[1], + ee_store.shape_2d[0], + ) self._apparent_chunks = {k: 1 for k in self.store.PREFERRED_CHUNKS.keys()} if isinstance(self.store.chunks, dict): self._apparent_chunks = self.store.chunks.copy() @@ -886,7 +900,7 @@ def open_dataset( filename_or_obj: str | os.PathLike[Any] | ee.ImageCollection, crs: CrsType, crs_transform: TransformType, - shape_2d: ShapeType, + shape_2d: ShapeType, drop_variables: tuple[str, ...] | None = None, io_chunks: Any | None = None, n_images: int = -1, @@ -916,7 +930,7 @@ def open_dataset( upon opening. crs_transform: Transform matrix describing the grid origin and scale relative to the CRS. - shape_2d: Dimensions of the pixel grid in the form (width, height). + shape_2d: Dimensions of the pixel grid in the form (width, height). drop_variables (optional): Variables or bands to drop before opening. io_chunks (optional): Specifies the chunking strategy for loading data from EE. By default, this automatically calculates optional chunks based diff --git a/xee/ext_integration_test.py b/xee/ext_integration_test.py index 156c1a1..23d36ed 100644 --- a/xee/ext_integration_test.py +++ b/xee/ext_integration_test.py @@ -42,13 +42,14 @@ 'https://www.googleapis.com/auth/earthengine', ] -# Define grid parameters for tests +# Define grid parameters for tests _TEST_GRID_PARAMS = { - 'crs': 'EPSG:4326', - 'crs_transform': (1.0, 0, -180.0, 0, -1.0, 90.0), - 'shape_2d': (360, 180) + 'crs': 'EPSG:4326', + 'crs_transform': (1.0, 0, -180.0, 0, -1.0, 90.0), + 'shape_2d': (360, 180), } + def _read_identity_pool_creds() -> identity_pool.Credentials: credentials_path = os.environ[_CREDENTIALS_PATH_KEY] with open(credentials_path) as file: @@ -325,7 +326,7 @@ def test_guess_can_open__image_collection(self): def test_open_dataset__sanity_check(self): """Test opening a simple image collection in geographic coordinates.""" - n_images, width, height = 3, 4, 5 + n_images, width, height = 3, 4, 5 ds = self.entry.open_dataset( pathlib.Path('ECMWF') / 'ERA5' / 'MONTHLY', n_images=n_images, @@ -336,18 +337,18 @@ def test_open_dataset__sanity_check(self): self.assertEqual(dict(ds.sizes), {'time': 3, 'y': height, 'x': width}) self.assertNotEmpty(dict(ds.coords)) self.assertEqual( - list(ds.data_vars.keys()), - [ - 'mean_2m_air_temperature', - 'minimum_2m_air_temperature', - 'maximum_2m_air_temperature', - 'dewpoint_2m_temperature', - 'total_precipitation', - 'surface_pressure', - 'mean_sea_level_pressure', - 'u_component_of_wind_10m', - 'v_component_of_wind_10m' - ] + list(ds.data_vars.keys()), + [ + 'mean_2m_air_temperature', + 'minimum_2m_air_temperature', + 'maximum_2m_air_temperature', + 'dewpoint_2m_temperature', + 'total_precipitation', + 'surface_pressure', + 'mean_sea_level_pressure', + 'u_component_of_wind_10m', + 'v_component_of_wind_10m', + ], ) # Loop through the data variables. for v in ds.values(): @@ -355,13 +356,12 @@ def test_open_dataset__sanity_check(self): self.assertFalse(v.isnull().all(), 'All values are null!') self.assertEqual(v.shape, (n_images, height, width)) - def test_open_dataset__n_images(self): ds = self.entry.open_dataset( pathlib.Path('LANDSAT') / 'LC08' / 'C02' / 'T1', drop_variables=tuple(f'B{i}' for i in range(3, 12)), n_images=1, - **_TEST_GRID_PARAMS + **_TEST_GRID_PARAMS, ) self.assertLen(ds.time, 1) @@ -377,7 +377,7 @@ def test_can_chunk__opened_dataset(self): ds = xr.open_dataset( 'NASA/GPM_L3/IMERG_V07', engine=xee.EarthEngineBackendEntrypoint, - **_TEST_GRID_PARAMS + **_TEST_GRID_PARAMS, ).isel(time=slice(0, 1)) try: @@ -387,10 +387,13 @@ def test_can_chunk__opened_dataset(self): def test_honors_geometry_simple_utm(self): """Test that a non-geographic projection can be used.""" - ic = ee.ImageCollection([ - ee.Image('LANDSAT/LC09/C02/T1_L2/LC09_043034_20211116').select(0) - .addBands(ee.Image.pixelLonLat()), - ]) + ic = ee.ImageCollection( + [ + ee.Image('LANDSAT/LC09/C02/T1_L2/LC09_043034_20211116') + .select(0) + .addBands(ee.Image.pixelLonLat()), + ] + ) min_x, max_x = 10, 12 min_y, max_y = -4, 0 width = max_x - min_x @@ -398,38 +401,57 @@ def test_honors_geometry_simple_utm(self): ds = xr.open_dataset( ic, engine=xee.EarthEngineBackendEntrypoint, - crs='EPSG:32610', - crs_transform=(30, 0, 448485+103000, 0, -30, 4263915-84000), # Origin over SF + crs='EPSG:32610', + crs_transform=( + 30, + 0, + 448485 + 103000, + 0, + -30, + 4263915 - 84000, + ), # Origin over SF shape_2d=(width, height), ) self.assertEqual(ds.sizes, {'time': 1, 'y': height, 'x': width}) np.testing.assert_allclose( - ds['latitude'].values, - np.array([[ - [37.764977, 37.764973], - [37.764706, 37.7647 ], - [37.764435, 37.76443 ], - [37.764164, 37.764164] - ]]) + ds['latitude'].values, + np.array( + [ + [ + [37.764977, 37.764973], + [37.764706, 37.7647], + [37.764435, 37.76443], + [37.764164, 37.764164], + ] + ] + ), ) np.testing.assert_allclose( - ds['longitude'].values, - np.array([[ - [-122.41528, -122.41495], - [-122.41529, -122.41495], - [-122.41529, -122.41495], - [-122.41529, -122.41495] - ]]) + ds['longitude'].values, + np.array( + [ + [ + [-122.41528, -122.41495], + [-122.41529, -122.41495], + [-122.41529, -122.41495], + [-122.41529, -122.41495], + ] + ] + ), ) np.testing.assert_allclose( - ds['SR_B1'].values, - np.array([[ - [14332., 12254.], - [13622., 10379.], - [12058., 10701.], - [11264., 11150.] - ]]) + ds['SR_B1'].values, + np.array( + [ + [ + [14332.0, 12254.0], + [13622.0, 10379.0], + [12058.0, 10701.0], + [11264.0, 11150.0], + ] + ] + ), ) @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') @@ -462,7 +484,7 @@ def test_expected_precise_transform(self): engine='ee', crs=str(raster.rio.crs), crs_transform=raster.rio.transform()[:6], - shape_2d=data.shape + shape_2d=data.shape, ) self.assertNotEqual(abs(x_res), abs(y_res)) np.testing.assert_allclose( @@ -474,18 +496,21 @@ def test_parses_ee_url(self): """Test the ee: URL parsing.""" n_images, width, height = 3, 10, 20 test_params = { - 'n_images': n_images, - 'crs': 'EPSG:4326', - 'crs_transform': (12.0, 0, -180.0, 0, -25.0, 90.0), - 'shape_2d': (width, height) + 'n_images': n_images, + 'crs': 'EPSG:4326', + 'crs_transform': (12.0, 0, -180.0, 0, -25.0, 90.0), + 'shape_2d': (width, height), } ds1 = self.entry.open_dataset('ee://LANDSAT/LC08/C02/T1', **test_params) ds2 = self.entry.open_dataset('ee:LANDSAT/LC08/C02/T1', **test_params) - self.assertEqual(dict(ds1.sizes), {'time': n_images, 'y': height, 'x': width}) - self.assertEqual(dict(ds2.sizes), {'time': n_images, 'y': height, 'x': width}) + self.assertEqual( + dict(ds1.sizes), {'time': n_images, 'y': height, 'x': width} + ) + self.assertEqual( + dict(ds2.sizes), {'time': n_images, 'y': height, 'x': width} + ) np.testing.assert_allclose( - ds1['B1'].compute().values, - ds2['B1'].compute().values + ds1['B1'].compute().values, ds2['B1'].compute().values ) def test_data_sanity_check(self): @@ -496,7 +521,7 @@ def test_data_sanity_check(self): 'ECMWF/ERA5_LAND/HOURLY', engine=xee.EarthEngineBackendEntrypoint, n_images=1, - **_TEST_GRID_PARAMS + **_TEST_GRID_PARAMS, ) temperature_2m = era5.isel(time=0).temperature_2m self.assertNotEqual(temperature_2m.min(), 0.0) @@ -507,7 +532,7 @@ def test_validate_band_attrs(self): 'ee:LANDSAT/LC08/C02/T1', drop_variables=tuple(f'B{i}' for i in range(3, 12)), n_images=3, - **_TEST_GRID_PARAMS + **_TEST_GRID_PARAMS, ) valid_types = (str, int, float, complex, np.ndarray, np.number, list, tuple) @@ -550,7 +575,7 @@ def test_fast_time_slicing(self): # With fast slicing, the returned data should include the original image. fast_slicing = xr.open_dataset(**params, fast_time_slicing=True) - fast_slicing_data = getattr(fast_slicing[dict(time=0)], band).as_numpy() + fast_slicing_data = getattr(fast_slicing[dict(time=0)], band).as_numpy() self.assertTrue(np.all(fast_slicing_data > 0)) @absltest.skipIf(_SKIP_RASTERIO_TESTS, 'rioxarray module not loaded') @@ -562,7 +587,7 @@ def test_write_projected_dataset_to_raster(self): crs = 'EPSG:32610' proj = ee.Projection(crs) - + point = shapely.geometry.Point(-122.44, 37.78) ee_point = ee.Geometry.Point(list(point.coords)[0]) @@ -573,15 +598,11 @@ def test_write_projected_dataset_to_raster(self): col = col.limit(10) grid_dict = helpers.fit_geometry( - geometry=point.buffer(0.1), - grid_crs=crs, - grid_scale=(100, -100) + geometry=point.buffer(0.1), grid_crs=crs, grid_scale=(100, -100) ) ds = xr.open_dataset( - col, - engine=xee.EarthEngineBackendEntrypoint, - **grid_dict + col, engine=xee.EarthEngineBackendEntrypoint, **grid_dict ) ds = ds.isel(time=0) @@ -603,7 +624,7 @@ def setUp(self): super().setUp() init_ee_for_tests() self.entry = xee.EarthEngineBackendEntrypoint() - + def test_extract_grid_params_from_image(self): img = ee.Image('LANDSAT/LT05/C02/T1_TOA/LT05_031034_20110619') grid_params = helpers.extract_grid_params(img) @@ -612,11 +633,14 @@ def test_extract_grid_params_from_image(self): np.allclose(grid_params['crs_transform'], [30, 0, 643185, 0, -30, 4255815]) def test_extract_grid_params_from_image_collection(self): - dem = ee.ImageCollection('COPERNICUS/DEM/GLO30'); + dem = ee.ImageCollection('COPERNICUS/DEM/GLO30') grid_params = helpers.extract_grid_params(dem) self.assertEqual(grid_params['shape_2d'], (3601, 3601)) self.assertEqual(grid_params['crs'], 'EPSG:4326') - np.allclose(grid_params['crs_transform'], [0.000278, 0, 5.999861, 0, -0.000278, 1.000139]) + np.allclose( + grid_params['crs_transform'], + [0.000278, 0, 5.999861, 0, -0.000278, 1.000139], + ) def test_extract_grid_params_from_invalid_object(self): with self.assertRaises(TypeError): @@ -633,56 +657,62 @@ def setUp(self): def test_extract_projection_from_image(self): - ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate('1992-10-05', '1993-03-31') + ic = ee.ImageCollection('ECMWF/ERA5_LAND/HOURLY').filterDate( + '1992-10-05', '1993-03-31' + ) grid_params = helpers.extract_grid_params(ic) # Open any Earth Engine ImageCollection by specifying the Xarray engine as 'ee': ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/HOURLY', - engine='ee', - **grid_params + 'ee://ECMWF/ERA5_LAND/HOURLY', engine='ee', **grid_params ) - + # Open all bands in a specific projection: ds = xr.open_dataset( - 'ee://ECMWF/ERA5_LAND/HOURLY', - engine='ee', - crs='EPSG:32610', - crs_transform=(30, 0, 448485 + 103000, 0, -30, 4263915 - 84000), # In San Francisco, California - shape_2d=(64, 64), + 'ee://ECMWF/ERA5_LAND/HOURLY', + engine='ee', + crs='EPSG:32610', + crs_transform=( + 30, + 0, + 448485 + 103000, + 0, + -30, + 4263915 - 84000, + ), # In San Francisco, California + shape_2d=(64, 64), ) # Open an ImageCollection (maybe, with EE-side filtering or processing): ds = xr.open_dataset( - ic, - engine='ee', - crs='EPSG:32610', - crs_transform=(30, 0, 448485 + 103000, 0, -30, 4263915 - 84000), # In San Francisco, California - shape_2d=(64, 64), + ic, + engine='ee', + crs='EPSG:32610', + crs_transform=( + 30, + 0, + 448485 + 103000, + 0, + -30, + 4263915 - 84000, + ), # In San Francisco, California + shape_2d=(64, 64), ) # Open an ImageCollection with a specific EE projection or geometry: grid_params = helpers.fit_geometry( - geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), - grid_crs='EPSG:4326', - grid_shape=(256, 256) + geometry=shapely.geometry.box(113.33, -43.63, 153.56, -10.66), + grid_crs='EPSG:4326', + grid_shape=(256, 256), ) - ds = xr.open_dataset( - ic, - engine='ee', - **grid_params - ) + ds = xr.open_dataset(ic, engine='ee', **grid_params) # Open a single Image: img = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') grid_params = helpers.extract_grid_params(img) - ds = xr.open_dataset( - img, - engine='ee', - **grid_params - ) + ds = xr.open_dataset(img, engine='ee', **grid_params) if __name__ == '__main__': diff --git a/xee/ext_test.py b/xee/ext_test.py index 32bda17..4e230b8 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -110,10 +110,12 @@ def test_init_with_affine_transform(self, mock_get_info): 'size': 1, 'props': {}, 'first': { - 'bands': [{ - 'id': 'b1', - 'data_type': {'type': 'PixelType', 'precision': 'float'} - }] + 'bands': [ + { + 'id': 'b1', + 'data_type': {'type': 'PixelType', 'precision': 'float'}, + } + ] }, } transform_tuple = (1.0, 0.0, -180.0, 0.0, -1.0, 90.0) @@ -142,10 +144,12 @@ def test_project(self, mock_get_info): 'size': 1, 'props': {}, 'first': { - 'bands': [{ - 'id': 'b1', - 'data_type': {'type': 'PixelType', 'precision': 'float'} - }] + 'bands': [ + { + 'id': 'b1', + 'data_type': {'type': 'PixelType', 'precision': 'float'}, + } + ] }, } transform_tuple = (0.25, 0.0, -180.0, 0.0, -0.5, 90.0) @@ -163,45 +167,57 @@ def test_project(self, mock_get_info): self.assertEqual(grid['dimensions']['height'], 20) self.assertEqual(grid['crsCode'], 'EPSG:4326') # Check that the translation is correct: c + (x_start * a), f + (y_start * e) - self.assertAlmostEqual(grid['affineTransform']['translateX'], -180.0 + (10 * 0.25)) - self.assertAlmostEqual(grid['affineTransform']['translateY'], 90.0 + (20 * -0.5)) + self.assertAlmostEqual( + grid['affineTransform']['translateX'], -180.0 + (10 * 0.25) + ) + self.assertAlmostEqual( + grid['affineTransform']['translateY'], 90.0 + (20 * -0.5) + ) @mock.patch( 'xee.ext.EarthEngineStore.get_info', new_callable=mock.PropertyMock, ) def test_init_with_tuple_transform(self, mock_get_info): - """Test that a tuple object can be passed for crs_transform.""" - # (Setup the mock_get_info.return_value just like in the other test) - mock_get_info.return_value = { - 'size': 1, 'props': {}, - 'first': {'bands': [{'id': 'b1', 'data_type': {'type': 'PixelType', 'precision': 'float'}}]} - } - transform_tuple = (1.0, 0.0, -180.0, 0.0, -1.0, 90.0) - - # Pass the tuple directly - store = xee.EarthEngineStore( + """Test that a tuple object can be passed for crs_transform.""" + # (Setup the mock_get_info.return_value just like in the other test) + mock_get_info.return_value = { + 'size': 1, + 'props': {}, + 'first': { + 'bands': [ + { + 'id': 'b1', + 'data_type': {'type': 'PixelType', 'precision': 'float'}, + } + ] + }, + } + transform_tuple = (1.0, 0.0, -180.0, 0.0, -1.0, 90.0) + + # Pass the tuple directly + store = xee.EarthEngineStore( + image_collection=mock.MagicMock(), + crs='EPSG:4326', + crs_transform=transform_tuple, + shape_2d=(360, 180), + ) + + # Assert that the tuple was stored correctly + self.assertEqual(store.crs_transform, transform_tuple) + + def test_init_with_invalid_transform_type(self): + """Test that a TypeError is raised for invalid crs_transform types.""" + with self.assertRaises(TypeError): + # Pass a list, which is an invalid type + invalid_transform = [1.0, 0.0, -180.0, 0.0, -1.0, 90.0] + xee.EarthEngineStore( image_collection=mock.MagicMock(), crs='EPSG:4326', - crs_transform=transform_tuple, + crs_transform=invalid_transform, shape_2d=(360, 180), ) - # Assert that the tuple was stored correctly - self.assertEqual(store.crs_transform, transform_tuple) - - def test_init_with_invalid_transform_type(self): - """Test that a TypeError is raised for invalid crs_transform types.""" - with self.assertRaises(TypeError): - # Pass a list, which is an invalid type - invalid_transform = [1.0, 0.0, -180.0, 0.0, -1.0, 90.0] - xee.EarthEngineStore( - image_collection=mock.MagicMock(), - crs='EPSG:4326', - crs_transform=invalid_transform, - shape_2d=(360, 180), - ) - class ParseEEInitKwargsTest(absltest.TestCase): @@ -250,43 +266,31 @@ def test_parse_ee_init_kwargs__credentials_and_credentials_function(self): class GridHelpersTest(absltest.TestCase): """Test grid helper functions that do not require GEE access.""" - def test_set_scale(self): + def test_set_scale(self): """Test that the scale values of the CRS transform can be updated.""" crs_transform = [1, 0, 100, 0, 5, 200] scaling = (123, 456) crs_transform_new = helpers.set_scale(crs_transform, scaling) - np.testing.assert_allclose( - crs_transform_new, - [123, 0, 100, 0, 456, 200] - ) - + np.testing.assert_allclose(crs_transform_new, [123, 0, 100, 0, 456, 200]) def test_fit_geometry_specify_scale(self): """Test generating grid parameters to match a geometry, specifying the scale.""" grid_dict = helpers.fit_geometry( - geometry=shapely.Polygon([(10.1, 10.1), - (10.1, 10.9), - (11.9, 10.1)]), - grid_crs='EPSG:4326', - grid_scale=(0.5, -0.5), - ) - self.assertEqual( - grid_dict['crs_transform'], - (0.5, 0.0, 10.0, 0.0, -0.5, 11.0), + geometry=shapely.Polygon([(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)]), + grid_crs='EPSG:4326', + grid_scale=(0.5, -0.5), ) self.assertEqual( - grid_dict['shape_2d'], - (4, 2) + grid_dict['crs_transform'], + (0.5, 0.0, 10.0, 0.0, -0.5, 11.0), ) - + self.assertEqual(grid_dict['shape_2d'], (4, 2)) def test_fit_geometry_specify_scale_scalar_fails(self): """Test that a scalar grid_scale raises a TypeError.""" with self.assertRaises(TypeError): helpers.fit_geometry( - geometry=shapely.Polygon( - [(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)] - ), + geometry=shapely.Polygon([(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)]), grid_crs='EPSG:4326', grid_scale=0.5, # A scalar should fail ) @@ -294,9 +298,7 @@ def test_fit_geometry_specify_scale_scalar_fails(self): def test_fit_geometry_specify_scale_positive_y(self): """Test fit_geometry with an explicit positive y-scale.""" grid_dict = helpers.fit_geometry( - geometry=shapely.Polygon( - [(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)] - ), + geometry=shapely.Polygon([(10.1, 10.1), (10.1, 10.9), (11.9, 10.1)]), grid_crs='EPSG:4326', grid_scale=(0.5, 0.5), # Note the positive y-scale ) @@ -304,47 +306,39 @@ def test_fit_geometry_specify_scale_positive_y(self): self.assertEqual( grid_dict['crs_transform'], (0.5, 0.0, 10.0, 0.0, 0.5, 11.0) ) - self.assertEqual( - grid_dict['shape_2d'], (4, 2) - ) - + self.assertEqual(grid_dict['shape_2d'], (4, 2)) def test_fit_geometry_specify_scale_utm(self): """Test generating grid parameters to match a UTM geometry, specifying the scale.""" grid_dict = helpers.fit_geometry( - geometry=shapely.geometry.box(551000, 4179000, 552000, 4180000), # over San Francisco - geometry_crs='EPSG:32610', - grid_crs='EPSG:4326', - grid_scale=(0.01, -0.01), - ) - self.assertEqual( - grid_dict['crs_transform'], - (0.01, 0.0, -122.43, 0.0, -0.01, 37.77) + geometry=shapely.geometry.box( + 551000, 4179000, 552000, 4180000 + ), # over San Francisco + geometry_crs='EPSG:32610', + grid_crs='EPSG:4326', + grid_scale=(0.01, -0.01), ) self.assertEqual( - grid_dict['shape_2d'], - (3, 2) + grid_dict['crs_transform'], (0.01, 0.0, -122.43, 0.0, -0.01, 37.77) ) - + self.assertEqual(grid_dict['shape_2d'], (3, 2)) def test_fit_geometry_specify_shape(self): """Test generating grid parameters to match a geometry, specifying the shape.""" grid_dict = helpers.fit_geometry( - geometry=shapely.Polygon([(10.0, 2.0), - (10.0, 3.0), - (12.0, 2.0)]), - grid_crs='EPSG:4326', - grid_shape=(4, 2) + geometry=shapely.Polygon([(10.0, 2.0), (10.0, 3.0), (12.0, 2.0)]), + grid_crs='EPSG:4326', + grid_shape=(4, 2), ) np.testing.assert_allclose( - grid_dict['crs_transform'], - (0.5, 0, 10, 0, -0.5, 3), - rtol=1e-4, + grid_dict['crs_transform'], + (0.5, 0, 10, 0, -0.5, 3), + rtol=1e-4, ) def test_fit_geometry_value_error(self): """Test that a ValueError is raised for invalid scale/shape combinations.""" - geom = shapely.geometry.box(0, 0, 1, 1) # Use a valid polygon + geom = shapely.geometry.box(0, 0, 1, 1) # Use a valid polygon # Test when both grid_scale and grid_shape are provided with self.assertRaisesRegex( ValueError, "Exactly one of 'grid_scale' or 'grid_shape' must be" diff --git a/xee/helpers.py b/xee/helpers.py index 092f9d3..06016a0 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -61,6 +61,7 @@ class PixelGridParams(TypedDict): f = y origin (upper-left y) - ``shape_2d``: ``(width, height)`` pixel counts. """ + crs: str crs_transform: TransformType shape_2d: ShapeType @@ -69,7 +70,7 @@ class PixelGridParams(TypedDict): def set_scale( crs_transform: TransformType, scaling: ScalingType, - ) -> list: +) -> list: """Return a new CRS transform with updated scale components. Useful for adjusting an existing transform's pixel size while retaining its @@ -97,14 +98,14 @@ def set_scale( def fit_geometry( - geometry: shapely.geometry.base.BaseGeometry, - *, - geometry_crs: str = 'EPSG:4326', - buffer: float = 0, - grid_crs: str = 'EPSG:4326', - grid_scale: ScalingType | None = None, - grid_scale_digits: int | None = None, - grid_shape: ShapeType | None = None, + geometry: shapely.geometry.base.BaseGeometry, + *, + geometry_crs: str = 'EPSG:4326', + buffer: float = 0, + grid_crs: str = 'EPSG:4326', + grid_scale: ScalingType | None = None, + grid_scale_digits: int | None = None, + grid_shape: ShapeType | None = None, ) -> PixelGridParams: """Derive grid parameters that *cover* a geometry. @@ -134,10 +135,12 @@ def fit_geometry( """ if (grid_scale is None) == (grid_shape is None): - raise ValueError("Exactly one of 'grid_scale' or 'grid_shape' must be specified.") + raise ValueError( + "Exactly one of 'grid_scale' or 'grid_shape' must be specified." + ) transformer = Transformer.from_crs( - crs_from=geometry_crs, crs_to=grid_crs, always_xy=True + crs_from=geometry_crs, crs_to=grid_crs, always_xy=True ) reprojected_geometry = transform(transformer.transform, geometry) if buffer and buffer > 0: @@ -150,11 +153,15 @@ def fit_geometry( if isinstance(grid_scale, tuple) and len(grid_scale) == 2: x_scale, y_scale = grid_scale else: - raise TypeError(f'Expected a tuple of length 2 for grid_scale, got {grid_scale}') + raise TypeError( + f'Expected a tuple of length 2 for grid_scale, got {grid_scale}' + ) # REVERTED to the more direct and robust shape calculation. x_shape = int(math.ceil(x_max / x_scale) - math.floor(x_min / x_scale)) - y_shape = int(math.ceil(y_max / abs(y_scale)) - math.floor(y_min / abs(y_scale))) + y_shape = int( + math.ceil(y_max / abs(y_scale)) - math.floor(y_min / abs(y_scale)) + ) else: # grid_shape is not None x_shape, y_shape = grid_shape x_scale = (x_max - x_min) / x_shape @@ -167,23 +174,20 @@ def fit_geometry( grid_x_min = math.floor(x_min / x_scale) * x_scale grid_y_max = math.ceil(y_max / abs(y_scale)) * abs(y_scale) - affine_transform = ( - affine.Affine.translation(grid_x_min, grid_y_max) - * affine.Affine.scale(x_scale, y_scale) - ) + affine_transform = affine.Affine.translation( + grid_x_min, grid_y_max + ) * affine.Affine.scale(x_scale, y_scale) crs_transform = affine_transform[:6] return dict( - crs=grid_crs, - crs_transform=crs_transform, - shape_2d=(x_shape, y_shape) + crs=grid_crs, crs_transform=crs_transform, shape_2d=(x_shape, y_shape) ) def extract_grid_params( - ee_obj: Union[ee.Image, ee.ImageCollection] - ) -> PixelGridParams: + ee_obj: Union[ee.Image, ee.ImageCollection], +) -> PixelGridParams: """Return native pixel grid parameters for an EE Image or ImageCollection. For an ImageCollection, the first image's first band's grid definition is @@ -205,12 +209,14 @@ def extract_grid_params( elif isinstance(ee_obj, ee.ImageCollection): img_obj = ee_obj.first() else: - raise TypeError(f'Expected ee.Image or ee.ImageCollection, got {type(ee_obj)}') - + raise TypeError( + f'Expected ee.Image or ee.ImageCollection, got {type(ee_obj)}' + ) + first_band_info = img_obj.select(0).getInfo()['bands'][0] return dict( - crs=first_band_info['crs'], - crs_transform=tuple(first_band_info['crs_transform']), - shape_2d=tuple(first_band_info['dimensions']) + crs=first_band_info['crs'], + crs_transform=tuple(first_band_info['crs_transform']), + shape_2d=tuple(first_band_info['dimensions']), ) From 07c2323d27d474484124a45807b1821a01f3999b Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Sat, 22 Nov 2025 04:06:43 +0000 Subject: [PATCH 45/56] [fix comments] README.md --- README.md | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9e966ca..4f5b87e 100644 --- a/README.md +++ b/README.md @@ -32,15 +32,16 @@ conda install -c conda-forge xee ## Minimal example ```python -import ee, xarray as xr +import ee +import xarray as xr from xee import helpers # Authenticate once (on a persistent machine): # earthengine authenticate +project = 'PROJECT-ID' # Set your Earth Engine registered Google Cloud project ID # Initialize (high‑volume endpoint recommended for reading stored collections) -# Replace with your Earth Engine registered Google Cloud project ID -ee.Initialize(project='PROJECT-ID', opt_url='https://earthengine-highvolume.googleapis.com') +ee.Initialize(project=project, opt_url='https://earthengine-highvolume.googleapis.com') # Open a dataset by matching its native grid ic = ee.ImageCollection('ECMWF/ERA5_LAND/MONTHLY_AGGR') @@ -73,5 +74,9 @@ See docs/contributing.md and sign the required CLA. ## License -Apache 2.0. See LICENSE. This is not an official Google product. +[Apache 2.0](LICENSE) + +`SPDX-License-Identifier: Apache-2.0` + +This is not an official Google product. From 6e6efa3599b7fa8cfd2fc5e62ec64be891967f4c Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 18:31:43 +0000 Subject: [PATCH 46/56] [fix comments] concepts.md --- docs/concepts.md | 30 +++++++++++++++++++++++++++--- docs/performance.md | 2 +- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/docs/concepts.md b/docs/concepts.md index cbeb320..8978228 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -16,6 +16,19 @@ Opening EE data requires specifying an output pixel grid. Xee uses three explici | `crs_transform` | Affine transform tuple `(x_scale, x_skew, x_trans, y_skew, y_scale, y_trans)` describing pixel size, rotation/skew, and origin translation in CRS units. | | `shape_2d` | `(width, height)` of the output grid in pixels. | +### Understanding `crs_transform` + +The tuple follows the [Rasterio/`affine.Affine`](https://affine.readthedocs.io/en/latest/) standard. The coefficients correspond to: + +- `a`: Scale X (pixel width) +- `b`: Shear X (row rotation) +- `c`: Translation X (x-origin) +- `d`: Shear Y (column rotation) +- `e`: Scale Y (pixel height, usually negative) +- `f`: Translation Y (y-origin) + +**Note:** This ordering (a, b, c, d, e, f) differs from the GDAL `GeoTransform` sequence, which is (c, a, b, f, d, e). Ensure you map the translation indices 0 and 3 in GDAL to indices 2 and 5 for Xee. + Instead of constructing these manually, prefer helpers: - `extract_grid_params(obj)`: Match an `ee.Image` or `ee.ImageCollection` source grid. @@ -28,7 +41,7 @@ Instead of constructing these manually, prefer helpers: ## Dimension Ordering -Datasets are returned as `[time, y, x]` (v1.0+) aligning with CF conventions and most geospatial libraries. Prior versions used `[time, x, y]`. If code assumed positional indices, update to name-based access: `ds.sizes['x']`, `ds.sizes['y']`. +Datasets are returned as `[time, y, x]` aligning with CF conventions and most geospatial libraries. ## Stored vs Computed Collections @@ -46,11 +59,22 @@ Datasets are returned as `[time, y, x]` (v1.0+) aligning with CF conventions and ## CRS Units & Transforms -All scale/translation values are expressed in units of `crs`. Degrees for geographic CRSs; meters (or feet) for projected CRSs. Plate Carrée (`EPSG:4326`) has non-uniform ground size — consider a projected CRS for area/length sensitive analysis. +All scale and translation values in the `crs_transform` are expressed in the units of the specified `crs`. + +* **Projected CRSs** (e.g., `EPSG:3857`, **UTM** zones) use linear units, typically **meters** or feet. +* **Geographic CRSs** (e.g., `EPSG:4326`) use angular units, typically **degrees**. + +> **Note on Geographic Distortion:** +> Geographic CRSs (like `EPSG:4326`) define pixels in degrees. Because the ground distance of a degree of longitude shrinks as you move from the equator to the poles, a grid in this CRS will have **non-uniform ground pixel sizes**. +> +> * **Distortion:** A "square" pixel in degrees becomes a narrow rectangle in meters at high latitudes. +> * **Analysis Impact:** Euclidean distance and area calculations performed directly on the array (e.g., assuming `1 pixel = X meters`) will be incorrect. +> +> If your analysis requires uniform measurement of **distance or area**, consider reprojecting to a projected CRS (meters) suitable for your region of interest. ## Chunking & Lazy Loading -Data is paged from EE using pixel chunks (bounded by EE's max request size). Xarray+Dask operations trigger parallel pixel fetches, respecting EE quota limits (e.g., ~100 QPS for certain endpoints). See [Performance & Limits](performance.md) for tuning advice. +Data is paged from EE using pixel chunks (bounded by EE's max request size). Xarray+Dask operations trigger parallel pixel fetches, respecting [EE quota limits](https://developers.google.com/earth-engine/guides/usage). See [Performance & Limits](performance.md) for tuning advice. ## Error Patterns diff --git a/docs/performance.md b/docs/performance.md index baa772f..4a312f6 100644 --- a/docs/performance.md +++ b/docs/performance.md @@ -17,7 +17,7 @@ Switch endpoints by passing / omitting `opt_url` in `ee.Initialize`. ## Quotas & Request Parallelism -Earth Engine imposes QPS limits. Large Dask graphs may overrun quotas and cause retries or 429 errors. +Earth Engine imposes [QPS limits](https://developers.google.com/earth-engine/guides/usage). Large Dask graphs may overrun quotas and cause retries or 429 errors. Recommendations: From 80d4cefa53d28342793cbe4f7d44b47e074a4918 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 18:54:59 +0000 Subject: [PATCH 47/56] [fix comments] guide.md --- docs/guide.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/guide.md b/docs/guide.md index 816a988..1678fc4 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -117,7 +117,7 @@ processed_collection = (ee.ImageCollection('LANDSAT/LC09/C02/T1_L2') grid_params = helpers.fit_geometry( geometry=sf_aoi_shapely, grid_crs='EPSG:32610', # Target CRS in meters (UTM Zone 10N) - grid_scale=(30, -30) # Use Landsat's 30m resolution + grid_scale=(30, -30) # Use Landsat's 30m resolution ) # Open the fully processed collection @@ -159,4 +159,4 @@ temp_slice.plot() - [Core Concepts](concepts.md) - [Performance & Limits](performance.md) - [FAQ](faq.md) -- Examples: see `examples/` directory in the repository +- Examples: see [examples](https://github.com/google/Xee/tree/main/examples) directory in the repository From f89dbb92f55b5bc703c5edfa72718a6b5fcddebd Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 19:21:36 +0000 Subject: [PATCH 48/56] [fix comments] migration-guide-v0.1.0.md --- docs/migration-guide-v0.1.0.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/docs/migration-guide-v0.1.0.md b/docs/migration-guide-v0.1.0.md index fd341c2..e88e498 100644 --- a/docs/migration-guide-v0.1.0.md +++ b/docs/migration-guide-v0.1.0.md @@ -14,7 +14,7 @@ This guide helps you update your code from Xee v0.0.x to v0.1.0. The 0.1 release ## 1. Geography Specification Changes -### Old API (v0.x) +### Old API (v0.0.x) The old API used simple `crs`, `scale`, and `geometry` parameters: @@ -96,7 +96,7 @@ ds = xr.open_dataset( #### Example 1: Global dataset at fixed scale -**Before (v0.x):** +**Before (v0.1.0):** ```python ds = xr.open_dataset( 'ECMWF/ERA5_LAND/MONTHLY_AGGR', @@ -128,7 +128,7 @@ ds = xr.open_dataset( #### Example 2: Regional dataset with EE geometry -**Before (v0.x):** +**Before (v0.1.0):** ```python import ee @@ -167,7 +167,7 @@ ds = xr.open_dataset( #### Example 3: Using source resolution for a custom area -**Before (v0.x):** +**Before (v0.1.0):** ```python # You had to manually determine the scale from the dataset ds = xr.open_dataset( @@ -215,7 +215,7 @@ Xee v0.1.0 outputs dimensions in `[time, y, x]` order (matching CF conventions a #### Plotting -**Before (v0.x):** +**Before (v0.1.0):** ```python # Required transpose for correct visualization ds['temperature_2m'].isel(time=0).transpose().plot() @@ -231,7 +231,7 @@ ds['temperature_2m'].isel(time=0).plot() Many geospatial libraries expect `[time, y, x]` ordering. You may have been using `.transpose()` to accommodate this. -**Before (v0.x):** +**Before (v0.1.0):** ```python # Had to transpose for libraries expecting [time, y, x] data_array = ds['temperature_2m'].transpose('time', 'y', 'x') @@ -249,7 +249,7 @@ export_to_geotiff(data_array) If you have code that explicitly references dimension positions, update it: -**Before (v0.x):** +**Before (v0.1.0):** ```python # Dimensions were [time, x, y] time_dim, x_dim, y_dim = ds['temperature_2m'].dims @@ -280,7 +280,7 @@ time_length = ds.sizes['time'] ### Pattern 1: Simple global analysis -**Before:** +**Before (v0.1.0):** ```python import ee import xarray as xr @@ -297,7 +297,7 @@ mean_temp = ds['temperature_2m'].mean(dim='time') mean_temp.transpose().plot() ``` -**After:** +**After (v0.1.0):** ```python import ee import xarray as xr @@ -323,7 +323,7 @@ mean_temp.plot() # No transpose needed ### Pattern 2: Regional analysis with preprocessing -**Before:** +**Before (v0.1.0):** ```python import ee import xarray as xr @@ -348,7 +348,7 @@ ds = xr.open_dataset( ) ``` -**After:** +**After (v0.1.0):** ```python import ee import xarray as xr @@ -384,7 +384,7 @@ ds = xr.open_dataset(collection, engine='ee', **grid_params) ### Pattern 3: Export workflows -**Before:** +**Before (v0.1.0):** ```python import xarray as xr @@ -401,7 +401,7 @@ data = ds['variable'].transpose('time', 'y', 'x') data.to_netcdf('output.nc') ``` -**After:** +**After (v0.1.0):** ```python import xarray as xr from xee import helpers @@ -479,7 +479,7 @@ ds = xr.open_dataset(collection, engine='ee', **grid_params) ### Issue: "Plots are rotated/flipped" -**Problem:** You're still using `.transpose()` from v0.x code +**Problem:** You're still using `.transpose()` from v0.0.x code **Solution:** Remove the `.transpose()` call - v0.1.0 outputs in the correct orientation by default @@ -537,7 +537,7 @@ print("Shape:", grid_params['shape_2d']) ## 7. Additional Resources -- [Main README](https://github.com/google/Xee/tree/main/README.md) - Complete usage guide with examples +- [Main Guide](guide.md) - Complete usage guide with examples - [API Documentation](api.md) - Detailed API reference - [Client vs Server Guide](client-vs-server.ipynb) - Examples using v0.1.0 API - [GitHub Issues](https://github.com/google/Xee/issues) - Report problems or ask questions From 451fec37d89459814366531680f5280d7eb554e3 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 19:43:40 +0000 Subject: [PATCH 49/56] [fix comments] pyproject.toml --- pyproject.toml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 470f529..94c1bbf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "xee" dynamic = ["version"] description = "A Google Earth Engine extension for Xarray." readme = "README.md" -requires-python = ">=3.11" +requires-python = ">=3.10" license = {text = "Apache-2.0"} authors = [ {name = "Google LLC", email = "noreply@google.com"}, @@ -17,6 +17,7 @@ classifiers = [ "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", + "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", From d3c35edd989a95bcd57fe94ae5379c1da2192842 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 19:47:16 +0000 Subject: [PATCH 50/56] [fix comments] ext.py --- xee/ext.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xee/ext.py b/xee/ext.py index c988d28..a3c6d2a 100644 --- a/xee/ext.py +++ b/xee/ext.py @@ -46,7 +46,7 @@ import ee -assert sys.version_info >= (3, 9) +assert sys.version_info >= (3, 10) try: __version__ = importlib.metadata.version('xee') or 'unknown' except importlib.metadata.PackageNotFoundError: @@ -60,7 +60,6 @@ # data as a single chunk. Chunks = Union[int, dict[Any, Any], Literal['auto'], None] -# Types for type hints CrsType = str TransformType = Union[ tuple[float, float, float, float, float, float], affine.Affine From 5406b98bd1581c960afa3c8115992873b78cde5f Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 23:46:09 +0000 Subject: [PATCH 51/56] [fix comments] ext_test.py --- xee/ext_test.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/xee/ext_test.py b/xee/ext_test.py index 4e230b8..03c6fff 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -100,8 +100,9 @@ def test_exceeding_byte_limit__raises_error(self): with self.assertRaises(ValueError): ext._check_request_limit(chunks, dtype_size, xee.REQUEST_BYTE_LIMIT) - @mock.patch( - 'xee.ext.EarthEngineStore.get_info', + @mock.patch.object( + ext.EarthEngineStore, + 'get_info', new_callable=mock.PropertyMock, ) def test_init_with_affine_transform(self, mock_get_info): @@ -134,8 +135,9 @@ def test_init_with_affine_transform(self, mock_get_info): self.assertEqual(store.scale_y, -1.0) self.assertEqual(store.scale, 1.0) - @mock.patch( - 'xee.ext.EarthEngineStore.get_info', + @mock.patch.object( + ext.EarthEngineStore, + 'get_info', new_callable=mock.PropertyMock, ) def test_project(self, mock_get_info): @@ -174,8 +176,9 @@ def test_project(self, mock_get_info): grid['affineTransform']['translateY'], 90.0 + (20 * -0.5) ) - @mock.patch( - 'xee.ext.EarthEngineStore.get_info', + @mock.patch.object( + ext.EarthEngineStore, + 'get_info', new_callable=mock.PropertyMock, ) def test_init_with_tuple_transform(self, mock_get_info): From 5b944d1fbb46c03ebf80cdeeacf98d16aa7d8434 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Mon, 8 Dec 2025 23:51:32 +0000 Subject: [PATCH 52/56] [fix comments] helpers.py --- xee/helpers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/helpers.py b/xee/helpers.py index 06016a0..4015bc0 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -34,13 +34,13 @@ UTM) this is meters. """ import math +from typing import TypedDict, Union import affine import ee from pyproj import Transformer import shapely from shapely.ops import transform -from typing import TypedDict, Union TransformType = tuple[float, float, float, float, float, float] From af9da5ea1a57ac2c1f6734161fd916772eba2606 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 9 Dec 2025 00:05:41 +0000 Subject: [PATCH 53/56] [fix comments] use Python 3.13 in CI workflows --- .github/workflows/ci-build.yml | 1 + .github/workflows/publish.yml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 776cacd..ce99562 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -31,6 +31,7 @@ jobs: fail-fast: false matrix: python-version: [ + "3.10", "3.11", "3.12", "3.13", diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 85d3c13..4be1653 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,7 +25,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.11" + python-version: "3.13" - name: Install dependencies run: | @@ -53,7 +53,7 @@ jobs: - uses: actions/setup-python@v5 name: Install Python with: - python-version: "3.11" + python-version: "3.13" - uses: actions/download-artifact@v4 with: name: releases From ec62a5e6a07bd7f2ec46f12116082e8591b64a8a Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 9 Dec 2025 00:19:07 +0000 Subject: [PATCH 54/56] [fix comments] __init__.py --- xee/__init__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xee/__init__.py b/xee/__init__.py index ce1d6e3..d38c319 100644 --- a/xee/__init__.py +++ b/xee/__init__.py @@ -30,14 +30,14 @@ from .helpers import fit_geometry, extract_grid_params, set_scale, PixelGridParams # noqa: F401 __all__ = [ - # version + # Version. '__version__', - # helper functions + # Helper functions. 'fit_geometry', 'extract_grid_params', 'set_scale', 'PixelGridParams', - # selected backend surface (avoid * pollution for autosummary ordering) + # Selected backend surface (avoid * pollution for autosummary ordering). 'EarthEngineBackendEntrypoint', 'EarthEngineStore', 'EarthEngineBackendArray', From 9f2bf50aacf9cf786863e385b0a7fe6901b8aca0 Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 9 Dec 2025 00:21:11 +0000 Subject: [PATCH 55/56] [fix comments] ext_test.py --- xee/ext_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xee/ext_test.py b/xee/ext_test.py index 03c6fff..c04c08c 100644 --- a/xee/ext_test.py +++ b/xee/ext_test.py @@ -183,7 +183,7 @@ def test_project(self, mock_get_info): ) def test_init_with_tuple_transform(self, mock_get_info): """Test that a tuple object can be passed for crs_transform.""" - # (Setup the mock_get_info.return_value just like in the other test) + # Setup the mock_get_info.return_value just like in the other test mock_get_info.return_value = { 'size': 1, 'props': {}, From c7402e1eb45cb71375922e70ed6fbb4d7b3865da Mon Sep 17 00:00:00 2001 From: Justin Braaten Date: Tue, 9 Dec 2025 00:27:19 +0000 Subject: [PATCH 56/56] [fix comments] helpers.py --- xee/helpers.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xee/helpers.py b/xee/helpers.py index 4015bc0..bab066f 100644 --- a/xee/helpers.py +++ b/xee/helpers.py @@ -99,6 +99,7 @@ def set_scale( def fit_geometry( geometry: shapely.geometry.base.BaseGeometry, + # All following parameters are keyword-only. *, geometry_crs: str = 'EPSG:4326', buffer: float = 0,