diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index ca66aca..36e1d92 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -5,22 +5,32 @@ on: [ push, pull_request ] jobs: build: + name: Conda Build with Python${{ matrix.python-version }} runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11"] + defaults: + run: + shell: bash -l {0} steps: - - name: Checkout repository and submodules - uses: actions/checkout@v2 - with: - submodules: recursive + - uses: actions/checkout@v3 - name: Install packages run: | sudo apt-get -y install pandoc graphviz - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + - name: Setup Conda (Micromamba) with Python${{ matrix.python-version }} + uses: mamba-org/setup-micromamba@v1 with: - python-version: ${{ matrix.python-version }} + cache-downloads: true + cache-environment: true + environment-file: environment.yml + create-args: >- + conda + python=${{ matrix.python-version }} + - name: Conda and Mamba versions + run: | + conda --version + echo "micromamba: $(micromamba --version)" - name: Install requirements 📦 run: | python -m pip install --upgrade pip diff --git a/environment.yml b/environment.yml index d0cd5b8..1344df2 100644 --- a/environment.yml +++ b/environment.yml @@ -4,34 +4,37 @@ channels: - defaults dependencies: - pip -- python>=3.8 -- pywps>=4.5.2,<4.7 +- python >=3.9 +- pywps >=4.5.2,<4.7 - jinja2 - click - psutil - requests # daops -- cftime>=1.2.1 -- xarray>=0.21 -- cf_xarray>=0.7 -- dask>=2021.12 -- netcdf4>=1.4 -- bottleneck>=1.3.1,<1.4 -- daops>=0.8.1,<0.9 -- clisops>=0.9.6,<0.11 -- roocs-utils>=0.6.4,<0.7 +- cftime >=1.2.1 +- xarray >=0.21,<2023.3.0 # https://github.com/pydata/xarray/issues/7794 +- xesmf >=0.8.2 +- cf_xarray >=0.7 +- dask >=2021.12 +- netcdf4 >=1.4 +- bottleneck >=1.3.1,<1.4 +- daops >=0.10.0,<0.11 +- clisops >=0.12.0,<0.13 +- roocs-utils >=0.6.4,<0.7 +- roocs-grids >=0.1.2 # workflow - networkx # provenance -- prov>=2.0.0 +- prov >=2.0.0 - pydot - graphviz # catalog - intake -- pandas>=1.3.5,<1.4 -- sqlalchemy>=1.4.45,<2.0 +- pandas >=1.3.5,<2.0 +- sqlalchemy >=1.4.45,<2.0 - aiohttp # dashboard -- bokeh>=2.4.2,<2.5 +- bokeh >=2.4.2,<2.5 # tests - pytest +- beautifulsoup4 diff --git a/requirements.txt b/requirements.txt index 343e2fa..94d66a9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,9 +3,12 @@ jinja2 click psutil # daops -daops>=0.8.1,<0.9 -clisops>=0.9.6,<0.11 +daops>=0.10.0,<0.11 +# daops @ git+https://github.com/roocs/daops.git@regrid-main-ce#egg=daops +clisops>=0.12.0,<0.13 +# clisops @ git+https://github.com/roocs/clisops.git@regrid-main#egg=clisops roocs-utils>=0.6.4,<0.7 +roocs_grids>=0.1.2 xarray>=0.21 cf-xarray>=0.7 dask[complete] @@ -17,7 +20,7 @@ prov>=2.0.0 pydot # catalog intake -pandas>=1.3.5,<1.4 +pandas>=1.3.5,<2.0 SQLAlchemy>=1.4.45,<2.0 aiohttp # dashboard diff --git a/rook/director/director.py b/rook/director/director.py index beb6a17..041d9ee 100644 --- a/rook/director/director.py +++ b/rook/director/director.py @@ -108,8 +108,8 @@ def _resolve(self): if self.inputs.get("apply_fixes") and self.requires_fixes(): return - # TODO: quick fix for average and concat. Don't use original files for these operators. - if "dims" in self.inputs or "freq" in self.inputs: + # TODO: quick fix for average, regrid and concat. Don't use original files for these operators. + if "dims" in self.inputs or "freq" in self.inputs or "grid" in self.inputs: return # Finally, check if the subset requirements can align with whole datasets diff --git a/rook/utils/regrid_utils.py b/rook/utils/regrid_utils.py index ee9fe5f..d74f115 100644 --- a/rook/utils/regrid_utils.py +++ b/rook/utils/regrid_utils.py @@ -1,12 +1,8 @@ def run_regrid(args): - from daops.ops.average import average_over_dims + from daops.ops.regrid import regrid args["apply_fixes"] = False - args["dims"] = ["latitude", "longitude"] - # remove regrid arguments - args.pop("method", None) - args.pop("grid", None) + result = regrid(**args) - result = average_over_dims(**args) return result.file_uris diff --git a/spec-list.txt b/spec-list.txt index ad8d388..0614295 100644 --- a/spec-list.txt +++ b/spec-list.txt @@ -3,30 +3,30 @@ # platform: linux-64 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.82.0-ha770c72_6.conda -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.83.0-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/aom-3.6.1-h59595ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.4-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aom-3.7.1-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.8-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.21.0-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.22.1-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/charls-2.4.2-h59595ed_0.conda https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.1-h59595ed_0.conda https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-he1b5a44_1004.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda @@ -44,13 +44,12 @@ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda https://conda.anaconda.org/conda-forge/linux-64/libspatialindex-1.9.3-h9c3ff4c_4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda @@ -80,242 +79,250 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h59595ed_4.conda https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.7-h6e18cf3_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h037bafe_4.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h037bafe_3.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h037bafe_3.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.9-h3b91eb8_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-hfd9eb17_6.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-hfd9eb17_5.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-hfd9eb17_5.conda https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda -https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.1-h87da1f6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.2-hed45d22_0.conda https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h01aab08_1018.conda https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.55.1-h47da74e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_0.conda https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.4-hf27288f_0.conda https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.06.02-h7a70373_0.conda -https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.0-h2797004_0.conda +https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h8917695_15.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda -https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.55-h06160fa_0.conda +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.56-h06160fa_0.conda https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h64cca9d_0.conda https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.35-hd1885a1_4.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.36-hc23c90e_0.conda https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda -https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.11.1-hb4ffafa_0.conda +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.11.2-hb4ffafa_0.conda https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h039dbb9_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-hebfc3b9_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda -https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.2-h0ab5242_0.conda -https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda -https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h4b38347_4.conda -https://conda.anaconda.org/conda-forge/linux-64/python-3.10.13-hd12c33a_0_cpython.conda +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.3-h0ab5242_0.conda +https://conda.anaconda.org/conda-forge/linux-64/nss-3.95-h1d7d5a4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.6-hab00c5b_0_cpython.conda https://conda.anaconda.org/conda-forge/linux-64/re2-2023.06.02-h2873b5e_0.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.0-h2c6b66d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/appdirs-1.4.4-pyh9f0ad1d_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-he4fbe49_4.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hbbfb9a7_7.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h1fff966_7.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.14-hc86c171_2.conda https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_1.conda -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/dataclasses-0.8-pyhc8e2a94_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py310hff52083_2.conda +https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_2.conda https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h743c826_0.conda -https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.0-py310h2372a71_1.conda +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.0-py311h459d7ec_1.conda https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.10.0-pyhca7485f_0.conda https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h829c605_4.conda -https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.1-py310hc6cd4ac_0.conda +https://conda.anaconda.org/conda-forge/linux-64/greenlet-3.0.1-py311hb755f60_0.conda https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda -https://conda.anaconda.org/conda-forge/noarch/humanize-4.8.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/humanize-4.9.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-hb7c19ff_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.59.2-hd6c4280_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.0-hfc447b1_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.59.3-hd6c4280_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_0.conda https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda -https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.40.1-py310h1b8f574_0.conda +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.41.1-py311ha6695c7_0.conda https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py310hff52083_1.conda -https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py310h9b7343a_1.conda -https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py310h350c4a5_1.conda -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py310hd41b1e2_0.conda -https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py310h2372a71_1.conda +https://conda.anaconda.org/conda-forge/linux-64/loguru-0.7.2-py311h38be061_1.conda +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_1.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py311h9547e67_0.conda +https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py311h459d7ec_1.conda https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/networkx-3.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h459d7ec_1.conda +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.12.0-py310hcb5633a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/rtree-1.1.0-py310hbdcdc62_0.conda -https://conda.anaconda.org/conda-forge/linux-64/setuptools-59.8.0-py310hff52083_1.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda +https://conda.anaconda.org/conda-forge/noarch/roocs-grids-0.1.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.13.1-py311h46250e7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/rtree-1.1.0-py311h3bb2b0f_0.conda +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda https://conda.anaconda.org/conda-forge/noarch/xyzservices-2023.10.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.3.1-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.5-h1a24852_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.8-h31a96f8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.7-h4faf3ed_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.10-hba57965_1.conda https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.44.0-py310h2372a71_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.45.1-py311h459d7ec_0.conda https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.2-nompi_h4f84152_100.conda https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda -https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/isodate-0.6.1-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-19_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h119a65a_9.conda https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h5206363_4.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py310h01dd4db_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py311ha6c5da5_0.conda https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.0-h8972f4a_1.conda +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.0.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_0.conda https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/referencing-0.31.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-1.4.49-py311h459d7ec_1.conda +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/werkzeug-3.0.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda -https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.2-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.20-he249171_1.conda -https://conda.anaconda.org/conda-forge/noarch/branca-0.6.0-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.3-py311h459d7ec_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.1-py311h459d7ec_0.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.1-hfadff92_0.conda +https://conda.anaconda.org/conda-forge/noarch/branca-0.7.0-pyhd8ed1ab_1.conda https://conda.anaconda.org/conda-forge/noarch/elastic-transport-8.10.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.2-hcd42e92_1.conda https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h090f1da_0.conda -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.4-py310ha4c1d20_0.conda -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/poppler-23.10.0-h590f24d_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py310h32c33b7_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h7385560_2.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py311h64a7726_0.conda +https://conda.anaconda.org/conda-forge/linux-64/poppler-23.11.0-h590f24d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_4.conda https://conda.anaconda.org/conda-forge/noarch/rdflib-7.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda -https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.8.6-py310h2372a71_1.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.24.4-h28e6ea9_2.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.24.7-h97e63c7_6.conda https://conda.anaconda.org/conda-forge/noarch/bokeh-2.4.3-pyhd8ed1ab_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/bottleneck-1.3.7-py310h1f7b6fc_1.conda -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py310h1f7b6fc_0.conda -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py310hd41b1e2_0.conda -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.10.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/elasticsearch-8.10.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/folium-0.14.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py310h496a806_2.conda -https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.3-h6f3d308_2.conda -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_102.conda -https://conda.anaconda.org/conda-forge/linux-64/numba-0.57.1-py310h0f6aa51_0.conda -https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.12.1-py310hc6cd4ac_0.conda -https://conda.anaconda.org/conda-forge/noarch/owslib-0.29.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pandas-1.3.5-py310hb5077e9_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/bottleneck-1.3.7-py311h1f0f07a_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py311h9547e67_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.11.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/elasticsearch-8.11.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/folium-0.15.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py311h089f87a_2.conda +https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.0-he7dcfe9_6.conda +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_103.conda +https://conda.anaconda.org/conda-forge/linux-64/numba-0.58.1-py311h96b013e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.12.1-py311hb755f60_0.conda +https://conda.anaconda.org/conda-forge/noarch/owslib-0.29.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pandas-1.5.3-py311h2872171_1.conda https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py310hb13e2d6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py310h7dcad9a_0.conda -https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.182-hb97d603_2.conda -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.10.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py311h64a7726_0.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py311h2032efe_1.conda +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.182-h8beafcf_7.conda +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.11.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.conda -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.3-py310h5c4b078_2.conda -https://conda.anaconda.org/conda-forge/noarch/geopandas-base-0.13.2-pyha770c72_1.conda +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.0-py311h815a124_6.conda +https://conda.anaconda.org/conda-forge/noarch/geopandas-base-0.14.1-pyha770c72_0.conda https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.1-py310h62c0568_0.conda -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.5-nompi_py310hba70d50_100.conda -https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py310h1fdf081_1.conda +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py311h54ef318_0.conda +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.5-nompi_py311he8ad708_100.conda +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py311hc009520_1.conda https://conda.anaconda.org/conda-forge/noarch/sparse-0.14.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/xarray-0.21.1-pyhd8ed1ab_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/xarray-2023.2.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/zarr-2.12.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.6-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda -https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py310h7631d76_0.conda -https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h3b6bca8_14_cpu.conda -https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.5.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_1.conda +https://conda.anaconda.org/conda-forge/linux-64/graphviz-9.0.0-h78e8752_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.1-h2b6da2a_4_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/mapclassify-2.6.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/python-geotiff-0.2.10-pyh6eeeb26_0.conda -https://conda.anaconda.org/conda-forge/noarch/geopandas-0.13.2-pyhd8ed1ab_1.conda -https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py310hf9e7431_14_cpu.conda -https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py310hff52083_4.conda +https://conda.anaconda.org/conda-forge/noarch/geopandas-0.14.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.1-h59595ed_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.1-h120cb0d_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.1-hacb8726_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.1-h352af49_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda https://conda.anaconda.org/conda-forge/noarch/xesmf-0.8.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/dask-2023.10.1-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.1-h59595ed_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.1-h61ff412_4_cpu.conda https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.1-h61ff412_4_cpu.conda +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.1-py311h39c9aba_4_cpu.conda +https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/dask-2023.11.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/intake-0.7.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/roocs-utils-0.6.4-pyh1a96a4e_0.conda -https://conda.anaconda.org/conda-forge/noarch/clisops-0.10.1-pyh1a96a4e_0.conda -https://conda.anaconda.org/conda-forge/noarch/daops-0.8.1-pyh6c4a22f_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/roocs-utils-0.6.5-pyhca7485f_0.conda +https://conda.anaconda.org/conda-forge/noarch/clisops-0.12.0-pyhca7485f_0.conda +https://conda.anaconda.org/conda-forge/noarch/daops-0.10.0-pyhca7485f_0.conda https://conda.anaconda.org/conda-forge/noarch/pywps-4.6.0-pyhca7485f_0.conda https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.7-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8ed1ab_0.conda diff --git a/tests/common.py b/tests/common.py index e64a602..4c85a4e 100644 --- a/tests/common.py +++ b/tests/common.py @@ -1,9 +1,8 @@ import os -# import tempfile - from jinja2 import Template from pathlib import Path +from bs4 import BeautifulSoup from pywps import get_ElementMakerForVersion from pywps.app.basic import get_xpath_ns from pywps.tests import WpsClient, WpsTestResponse @@ -106,3 +105,10 @@ def get_output(doc): output[identifier_el.text] = data_el[0].text return output + + +def extract_paths_from_metalink(path): + path = path.replace("file://", "") + doc = BeautifulSoup(open(path, "r").read(), "xml") + paths = [el.text.replace("file://", "") for el in doc.find_all("metaurl")] + return paths diff --git a/tests/smoke/test_smoke_checks.py b/tests/smoke/test_smoke_checks.py index d3cb245..7bd838b 100644 --- a/tests/smoke/test_smoke_checks.py +++ b/tests/smoke/test_smoke_checks.py @@ -98,6 +98,28 @@ } ) +WF_C3S_CMIP6_REGRID = json.dumps( + { + "doc": "subset+regrid on cmip6", + "inputs": {"ds": [C3S_CMIP6_MON_COLLECTION]}, + "outputs": {"output": "regrid/output"}, + "steps": { + "subset": { + "run": "subset", + "in": {"collection": "inputs/ds", "time": "2016/2016"}, + }, + "regrid": { + "run": "regrid", + "in": { + "collection": "subset/output", + "method": "nearest_s2d", + "grid": "1deg", + }, + }, + }, + } +) + WF_C3S_CORDEX = json.dumps( { @@ -450,6 +472,20 @@ def test_smoke_execute_c3s_cmip6_weighted_average(wps): ) +def test_smoke_execute_c3s_cmip6_regrid(wps): + inputs = [ + ("collection", C3S_CMIP6_MON_COLLECTION), + ("grid", "auto"), + ("method", "nearest_s2d"), + ] + urls = wps.execute("regrid", inputs) + assert len(urls) == 1 + assert ( + "rlds_Amon_INM-CM5-0_ssp245_r1i1p1f1_gr_20150116-21001216_regrid-nearest_s2d-120x179_cells_grid.nc" + in urls[0] + ) + + def test_smoke_execute_c3s_cmip5_orchestrate(wps): inputs = [ ("workflow", ComplexDataInput(WF_C3S_CMIP5)), @@ -479,6 +515,18 @@ def test_smoke_execute_c3s_cmip6_weighted_average_orchestrate(wps): ) +def test_smoke_execute_c3s_cmip6_regrid_orchestrate(wps): + inputs = [ + ("workflow", ComplexDataInput(WF_C3S_CMIP6_REGRID)), + ] + urls = wps.execute("orchestrate", inputs) + assert len(urls) == 1 + assert ( + "rlds_Amon_INM-CM5-0_ssp245_r1i1p1f1_gr_20160116-20161216_regrid-nearest_s2d-180x360_cells_grid.nc" + in urls[0] + ) + + def test_smoke_execute_c3s_cmip6_orchestrate_metadata(wps, tmp_path): inputs = [ ("workflow", ComplexDataInput(WF_C3S_CMIP6)), diff --git a/tests/test_wps_average_weighted.py b/tests/test_wps_average_weighted.py index 4d5dd8d..ed3ab48 100644 --- a/tests/test_wps_average_weighted.py +++ b/tests/test_wps_average_weighted.py @@ -1,21 +1,13 @@ import pytest import xarray as xr -from bs4 import BeautifulSoup from pywps import Service from pywps.tests import assert_response_success, client_for from rook.processes.wps_average_weighted import WeightedAverage -from .common import PYWPS_CFG, get_output - - -def extract_paths_from_metalink(path): - path = path.replace("file://", "") - doc = BeautifulSoup(open(path, "r").read(), "xml") - paths = [el.text.replace("file://", "") for el in doc.find_all("metaurl")] - return paths +from .common import PYWPS_CFG, get_output, extract_paths_from_metalink def assert_weighted_average(path): diff --git a/tests/test_wps_regrid.py b/tests/test_wps_regrid.py index 8060747..73d2c3a 100644 --- a/tests/test_wps_regrid.py +++ b/tests/test_wps_regrid.py @@ -1,16 +1,27 @@ import pytest +import xarray as xr + from pywps import Service from pywps.tests import assert_response_success, client_for from rook.processes.wps_regrid import Regrid -from .common import PYWPS_CFG, get_output +from .common import PYWPS_CFG, get_output, extract_paths_from_metalink + + +def assert_regrid(path): + assert "meta4" in path + paths = extract_paths_from_metalink(path) + assert len(paths) > 0 + print(paths) + ds = xr.open_dataset(paths[0]) + assert "time" in ds.coords def test_wps_regrid_cmip6(): client = client_for(Service(processes=[Regrid()], cfgfiles=[PYWPS_CFG])) - datainputs = "collection=c3s-cmip6.ScenarioMIP.INM.INM-CM5-0.ssp245.r1i1p1f1.Amon.rlds.gr1.v20190619" + datainputs = "collection=CMIP6.CMIP.IPSL.IPSL-CM6A-LR.historical.r1i1p1f1.Amon.rlds.gr.v20180803" datainputs += ";method=nearest_s2d" datainputs += ";grid=auto" resp = client.get( @@ -19,3 +30,4 @@ def test_wps_regrid_cmip6(): print(resp) assert_response_success(resp) assert "output" in get_output(resp.xml) + assert_regrid(path=get_output(resp.xml)["output"])