From 3b377068f8b40b2dbca28125623b20a45cc30f96 Mon Sep 17 00:00:00 2001 From: Karen Andrea Garcia <85649962+Karen-A-Garcia@users.noreply.github.com> Date: Wed, 13 Dec 2023 08:57:46 -0800 Subject: [PATCH 01/14] Fixing missing height coordinates in MPI-ESM1-2-HR and MPI-ESM1-2-XR (#2263) Co-authored-by: Karen Garcia Perdomo Co-authored-by: Valeriu Predoi --- esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_hr.py | 12 ++ esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_xr.py | 16 +++ .../cmor/_fixes/cmip6/test_mpi_esm1_2_hr.py | 114 +++++++++++++++++- 3 files changed, 140 insertions(+), 2 deletions(-) diff --git a/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_hr.py b/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_hr.py index b1bdc08727..b8540b3a04 100644 --- a/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_hr.py +++ b/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_hr.py @@ -47,6 +47,10 @@ def fix_metadata(self, cubes): return cubes +class Tasmax(Tas): + """Fixes for tasmax.""" + + class Ta(Fix): """Fixes for ta.""" @@ -100,3 +104,11 @@ def fix_metadata(self, cubes): add_scalar_height_coord(cube, height=10.0) return cubes + + +class Uas(SfcWind): + """Fixes for uas.""" + + +class Vas(SfcWind): + """Fixes for vas.""" diff --git a/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_xr.py b/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_xr.py index c3ae86a6a6..644155e690 100644 --- a/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_xr.py +++ b/esmvalcore/cmor/_fixes/cmip6/mpi_esm1_2_xr.py @@ -9,6 +9,14 @@ class Tas(BaseTas): """Fixes for tas.""" +class Tasmax(BaseTas): + """Fixes for tasmax.""" + + +class Tasmin(BaseTas): + """Fixes for tasmin.""" + + class Ta(BaseFix): """Fixes for ta.""" @@ -27,3 +35,11 @@ class Ua(BaseFix): class SfcWind(BaseSfcWind): """Fixes for sfcWind.""" + + +class Uas(BaseSfcWind): + """Fixes for uas.""" + + +class Vas(BaseSfcWind): + """Fixes for vas.""" diff --git a/tests/integration/cmor/_fixes/cmip6/test_mpi_esm1_2_hr.py b/tests/integration/cmor/_fixes/cmip6/test_mpi_esm1_2_hr.py index 777434d51c..3a9dac1fb6 100644 --- a/tests/integration/cmor/_fixes/cmip6/test_mpi_esm1_2_hr.py +++ b/tests/integration/cmor/_fixes/cmip6/test_mpi_esm1_2_hr.py @@ -1,9 +1,19 @@ """Test fixes for MPI-ESM1-2-HR.""" import iris - -from esmvalcore.cmor._fixes.cmip6.mpi_esm1_2_hr import AllVars, Cl, Cli, Clw +import pytest +from cf_units import Unit + +from esmvalcore.cmor._fixes.cmip6.mpi_esm1_2_hr import ( + AllVars, + Cl, + Cli, + Clw, + SfcWind, + Tas, +) from esmvalcore.cmor._fixes.common import ClFixHybridPressureCoord from esmvalcore.cmor._fixes.fix import Fix +from esmvalcore.cmor.table import get_var_info def test_get_allvars_fix(): @@ -42,6 +52,58 @@ def test_allvars_r2i1p1f1(): assert fixed_cubes[1].coord('latitude').points[0] == -86.49036676628 +@pytest.fixture +def sfcwind_cubes(): + correct_lat_coord = iris.coords.DimCoord([0.0], + var_name='lat', + standard_name='latitude') + wrong_lat_coord = iris.coords.DimCoord([0.0], + var_name='latitudeCoord', + standard_name='latitude') + correct_lon_coord = iris.coords.DimCoord([0.0], + var_name='lon', + standard_name='longitude') + wrong_lon_coord = iris.coords.DimCoord([0.0], + var_name='longitudeCoord', + standard_name='longitude') + correct_cube = iris.cube.Cube([[10.0]], var_name='sfcWind', + dim_coords_and_dims=[(correct_lat_coord, 0), + (correct_lon_coord, 1)] + ) + wrong_cube = iris.cube.Cube([[10.0]], + var_name='ta', + dim_coords_and_dims=[(wrong_lat_coord, 0), + (wrong_lon_coord, 1)]) + scalar_cube = iris.cube.Cube(0.0, var_name='ps') + return iris.cube.CubeList([correct_cube, wrong_cube, scalar_cube]) + + +@pytest.fixture +def tas_cubes(): + correct_lat_coord = iris.coords.DimCoord([0.0], + var_name='lat', + standard_name='latitude') + wrong_lat_coord = iris.coords.DimCoord([0.0], + var_name='latitudeCoord', + standard_name='latitude') + correct_lon_coord = iris.coords.DimCoord([0.0], + var_name='lon', + standard_name='longitude') + wrong_lon_coord = iris.coords.DimCoord([0.0], + var_name='longitudeCoord', + standard_name='longitude') + correct_cube = iris.cube.Cube([[10.0]], + var_name='tas', + dim_coords_and_dims=[(correct_lat_coord, 0), + (correct_lon_coord, 1)]) + wrong_cube = iris.cube.Cube([[10.0]], + var_name='ta', + dim_coords_and_dims=[(wrong_lat_coord, 0), + (wrong_lon_coord, 1)]) + scalar_cube = iris.cube.Cube(0.0, var_name='ps') + return iris.cube.CubeList([correct_cube, wrong_cube, scalar_cube]) + + def test_get_cl_fix(): """Test getting of fix.""" fixes = Fix.get_fixes('CMIP6', 'MPI-ESM1-2-HR', 'Amon', 'cl') @@ -73,3 +135,51 @@ def test_get_clw_fix(): def test_clw_fix(): """Test fix for ``clw``.""" assert Clw is ClFixHybridPressureCoord + + +def test_get_sfcwind_fix(): + fixes = Fix.get_fixes('CMIP6', 'MPI_ESM1_2_HR', 'day', 'sfcWind') + assert SfcWind(None) in fixes + + +def test_sfcwind_fix_metadata(sfcwind_cubes): + for cube in sfcwind_cubes: + with pytest.raises(iris.exceptions.CoordinateNotFoundError): + cube.coord('height') + height_coord = iris.coords.AuxCoord(10.0, + var_name='height', + standard_name='height', + long_name='height', + units=Unit('m'), + attributes={'positive': 'up'}) + vardef = get_var_info('CMIP6', 'day', 'sfcWind') + fix = SfcWind(vardef) + + out_cubes = fix.fix_metadata(sfcwind_cubes) + assert out_cubes[0].var_name == 'sfcWind' + coord = out_cubes[0].coord('height') + assert coord == height_coord + + +def test_get_tas_fix(): + fixes = Fix.get_fixes('CMIP6', 'MPI_ESM1_2_HR', 'day', 'tas') + assert Tas(None) in fixes + + +def test_tas_fix_metadata(tas_cubes): + for cube in tas_cubes: + with pytest.raises(iris.exceptions.CoordinateNotFoundError): + cube.coord('height') + height_coord = iris.coords.AuxCoord(2.0, + var_name='height', + standard_name='height', + long_name='height', + units=Unit('m'), + attributes={'positive': 'up'}) + vardef = get_var_info('CMIP6', 'day', 'tas') + fix = Tas(vardef) + + out_cubes = fix.fix_metadata(tas_cubes) + assert out_cubes[0].var_name == 'tas' + coord = out_cubes[0].coord('height') + assert coord == height_coord From 9ecaf7b1d923084cfb5717593ec363dbb9515530 Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Thu, 7 Dec 2023 07:47:13 +0000 Subject: [PATCH 02/14] fix anaconda badge without hardcoded version (#2260) Co-authored-by: Bouwe Andela --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 20d13f1637..f2039f5e8b 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![codecov](https://codecov.io/gh/ESMValGroup/ESMValCore/branch/main/graph/badge.svg?token=wQnDzguwq6)](https://codecov.io/gh/ESMValGroup/ESMValCore) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/5d496dea9ef64ec68e448a6df5a65783)](https://www.codacy.com/gh/ESMValGroup/ESMValCore?utm_source=github.com&utm_medium=referral&utm_content=ESMValGroup/ESMValCore&utm_campaign=Badge_Grade) [![Docker Build Status](https://img.shields.io/docker/cloud/build/esmvalgroup/esmvalcore)](https://hub.docker.com/r/esmvalgroup/esmvalcore/) -[![Anaconda-Server Badge](https://img.shields.io/badge/Anaconda.org-2.9.0-blue.svg)](https://anaconda.org/conda-forge/esmvalcore) +[![Anaconda-Server Badge](https://img.shields.io/conda/vn/conda-forge/ESMValCore?color=blue&label=conda-forge&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/esmvalcore) [![Github Actions Test](https://github.com/ESMValGroup/ESMValCore/actions/workflows/run-tests.yml/badge.svg)](https://github.com/ESMValGroup/ESMValCore/actions/workflows/run-tests.yml) ![esmvaltoollogo](https://raw.githubusercontent.com/ESMValGroup/ESMValCore/main/doc/figures/ESMValTool-logo-2.png) From 7eafe2d555fef6d243e196a65e69c81f0a73170b Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Thu, 7 Dec 2023 15:31:29 +0000 Subject: [PATCH 03/14] make build and deploy to PyPI Github Action use PyPI's new trusted publishers authentication (#2269) --- .../workflows/build-and-deploy-on-pypi.yml | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/.github/workflows/build-and-deploy-on-pypi.yml b/.github/workflows/build-and-deploy-on-pypi.yml index 449d86b3e4..411ad5df63 100644 --- a/.github/workflows/build-and-deploy-on-pypi.yml +++ b/.github/workflows/build-and-deploy-on-pypi.yml @@ -12,12 +12,18 @@ jobs: build-n-publish: name: Build and publish ESMValCore on PyPi runs-on: ubuntu-latest + environment: + name: pypi + url: https://pypi.org/project/ESMValCore/ + permissions: + # IMPORTANT: this permission is mandatory for trusted publishing + id-token: write steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Set up Python 3.11 - uses: actions/setup-python@v1 + uses: actions/setup-python@v4 with: python-version: "3.11" - name: Install pep517 @@ -34,14 +40,10 @@ jobs: --binary --out-dir dist/ . - #- name: Publish distribution 📦 to Test PyPI - # uses: pypa/gh-action-pypi-publish@master - # with: - # password: ${{ secrets.test_pypi_password }} - # repository_url: https://test.pypi.org/legacy/ + # - name: Publish distribution to Test PyPI + # uses: pypa/gh-action-pypi-publish@release/v1 + # with: + # repository-url: https://test.pypi.org/legacy/ - name: Publish distribution 📦 to PyPI if: startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 - with: - user: __token__ - password: ${{ secrets.pypi_password }} From 72d08a3981222dbbad78f47fabb5fa50663f92a1 Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Thu, 7 Dec 2023 13:50:14 +0100 Subject: [PATCH 04/14] Pin Python to lower than 3.12 (#2272) --- environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/environment.yml b/environment.yml index cb066cba09..4dfac03a39 100644 --- a/environment.yml +++ b/environment.yml @@ -37,7 +37,7 @@ dependencies: - psutil - py-cordex - pybtex - - python >=3.9 + - python >=3.9,<3.12 - python-stratify >=0.3 - pyyaml - requests From 1f73cc0ca565d37b51c295e558da0f6883a2e8f1 Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Tue, 19 Dec 2023 16:34:14 +0100 Subject: [PATCH 05/14] Add highlights to the v2.10 changelog (#2282) Co-authored-by: Manuel Schlund <32543114+schlunma@users.noreply.github.com> --- CITATION.cff | 4 ++-- doc/changelog.rst | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 70cf872768..f0b66da549 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -201,11 +201,11 @@ authors: given-names: Joerg cff-version: 1.2.0 -date-released: 2023-11-01 +date-released: 2023-12-19 doi: "10.5281/zenodo.3387139" license: "Apache-2.0" message: "If you use this software, please cite it using these metadata." repository-code: "https://github.com/ESMValGroup/ESMValCore/" title: ESMValCore -version: "v2.10.0rc1" +version: "v2.10.0" ... diff --git a/doc/changelog.rst b/doc/changelog.rst index daa5dae664..0f5a3e060f 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -9,7 +9,24 @@ v2.10.0 ------- Highlights -TODO: add highlights +- All statistics preprocessors support the same operators and have a common + :ref:`documentation `. In addition, arbitrary keyword arguments + for the statistical operation can be directly given to the preprocessor. + +- The output webpage generated by the tool now looks better and provides + methods to select and filter the output. + +- Improved computational efficiency: + + - Automatic rechunking between preprocessor steps to keep the + `graph size smaller `_ + and the `chunk size optimal `__. + - Reduce the size of the dask graph created by :func:`esmvalcore.preprocessor.anomalies`. + - Preprocessors :func:`esmvalcore.preprocessor.mask_above_threshold`, + :func:`esmvalcore.preprocessor.mask_below_threshold`, + :func:`esmvalcore.preprocessor.mask_inside_range`, + :func:`esmvalcore.preprocessor.mask_outside_range` are now lazy. + - Lazy coordinates bounds are no longer loaded into memory by the CMOR checks and fixes. This release includes @@ -24,7 +41,7 @@ Backwards incompatible changes (``additional_``) ``datasets`` section as described in :ref:`supplementary_variables`. - Use smarter (units-aware) weights (`#2139 `__) `Manuel Schlund `__ - + - Some preprocessors handle units better. For details, see the pull request. - Removed deprecated configuration option ``offline`` (`#2213 `__) `Manuel Schlund `__ @@ -33,28 +50,26 @@ Backwards incompatible changes Please refer to :ref:`changelog-v2-8-0` for upgrade instructions. - Fix issue with CORDEX datasets requiring different dataset tags for downloads and fixes (`#2066 `__) `Joakim Löw `__ - + - Due to the different facets for CORDEX datasets, there was an inconsistency in the fixing mechanism. This change requires changes to existing recipes that use CORDEX datasets. Please refer to the pull request for detailed update instructions. -- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (`#2191 `__) `Manuel Schlund `__ - - - This harmonizes the operators for all statistics preprocessors. From this version, the new names can be used; the old arguments will stop working from - version 2.12.0. Please refer to :ref:`stat_preprocs` for a detailed description. - - For the following changes, no user change is necessary - + - Remove deprecated way of calling :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2201 `__) `Bouwe Andela `__ - Remove deprecated callback argument from preprocessor ``load`` function (`#2207 `__) `Bouwe Andela `__ - Remove deprecated preprocessor function `cleanup` (`#2215 `__) `Bouwe Andela `__ - Deprecations ~~~~~~~~~~~~ - Clearly separate fixes and CMOR checks (`#2157 `__) `Manuel Schlund `__ +- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (`#2191 `__) `Manuel Schlund `__ + + - This harmonizes the operators for all statistics preprocessors. From this version, the new names can be used; the old arguments will stop working from + version 2.12.0. Please refer to :ref:`stat_preprocs` for a detailed description. Bug fixes ~~~~~~~~~ @@ -85,7 +100,7 @@ Computational performance improvements - Make :ref:`threshold_masking` preprocessors lazy (`#2169 `__) `Jörg Benke `__ - Restored usage of numpy in `_mask_with_shp` (`#2209 `__) `Jörg Benke `__ -- Call coord.core_bounds() instead of coord.bounds in ``check.py`` (`#2146 `__) `sloosvel `__ +- Do not realize lazy coordinate bounds in CMOR check (`#2146 `__) `sloosvel `__ - Rechunk between preprocessor steps (`#2205 `__) `Bouwe Andela `__ - Reduce the size of the dask graph created by the ``anomalies`` preprocessor function (`#2200 `__) `Bouwe Andela `__ @@ -100,7 +115,7 @@ Documentation - Remove meercode badge from README because their API is broken (`#2224 `__) `Valeriu Predoi `__ - Correct usage help text of version command (`#2232 `__) `James Frost `__ - Add ``navigation_with_keys: False`` to ``html_theme_options`` in Readthedocs ``conf.py`` (`#2245 `__) `Valeriu Predoi `__ -- Replace squarey badge with roundy shield for Anaconda sticker in README (`#2233 `__) `Valeriu Predoi `__ +- Replace squarey badge with roundy shield for Anaconda sticker in README (`#2233 `__, `#2260 `__) `Valeriu Predoi `__ Fixes for datasets ~~~~~~~~~~~~~~~~~~ @@ -113,6 +128,7 @@ Installation - Clean-up how pins are written in conda environment file (`#2125 `__) `Valeriu Predoi `__ - Use importlib.metadata instead of deprecated pkg_resources (`#2096 `__) `Bouwe Andela `__ - Pin shapely to >=2.0 (`#2075 `__) `Valeriu Predoi `__ +- Pin Python to <3.12 in conda environment (`#2272 `__) `Bouwe Andela `__ Preprocessor ~~~~~~~~~~~~ @@ -140,7 +156,7 @@ Improvements - Add file encoding (and some read modes) at open file step (`#2219 `__) `Valeriu Predoi `__ - Check type of argument passed to :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2217 `__) `Valeriu Predoi `__ - Dynamic HTML output for monitoring (`#2062 `__) `Brei Soliño `__ - +- Use PyPI's trusted publishers authentication (`#2269 `__) `Valeriu Predoi `__ .. _changelog-v2-9-0: From 11e5b1e2e875f7043f75415eb05816d45ced8eae Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Tue, 19 Dec 2023 16:34:14 +0100 Subject: [PATCH 06/14] Add highlights to the v2.10 changelog (#2282) Co-authored-by: Manuel Schlund <32543114+schlunma@users.noreply.github.com> --- CITATION.cff | 4 ++-- doc/changelog.rst | 42 +++++++++++++++++++++++++++++------------- 2 files changed, 31 insertions(+), 15 deletions(-) diff --git a/CITATION.cff b/CITATION.cff index 70cf872768..f0b66da549 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -201,11 +201,11 @@ authors: given-names: Joerg cff-version: 1.2.0 -date-released: 2023-11-01 +date-released: 2023-12-19 doi: "10.5281/zenodo.3387139" license: "Apache-2.0" message: "If you use this software, please cite it using these metadata." repository-code: "https://github.com/ESMValGroup/ESMValCore/" title: ESMValCore -version: "v2.10.0rc1" +version: "v2.10.0" ... diff --git a/doc/changelog.rst b/doc/changelog.rst index daa5dae664..0f5a3e060f 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -9,7 +9,24 @@ v2.10.0 ------- Highlights -TODO: add highlights +- All statistics preprocessors support the same operators and have a common + :ref:`documentation `. In addition, arbitrary keyword arguments + for the statistical operation can be directly given to the preprocessor. + +- The output webpage generated by the tool now looks better and provides + methods to select and filter the output. + +- Improved computational efficiency: + + - Automatic rechunking between preprocessor steps to keep the + `graph size smaller `_ + and the `chunk size optimal `__. + - Reduce the size of the dask graph created by :func:`esmvalcore.preprocessor.anomalies`. + - Preprocessors :func:`esmvalcore.preprocessor.mask_above_threshold`, + :func:`esmvalcore.preprocessor.mask_below_threshold`, + :func:`esmvalcore.preprocessor.mask_inside_range`, + :func:`esmvalcore.preprocessor.mask_outside_range` are now lazy. + - Lazy coordinates bounds are no longer loaded into memory by the CMOR checks and fixes. This release includes @@ -24,7 +41,7 @@ Backwards incompatible changes (``additional_``) ``datasets`` section as described in :ref:`supplementary_variables`. - Use smarter (units-aware) weights (`#2139 `__) `Manuel Schlund `__ - + - Some preprocessors handle units better. For details, see the pull request. - Removed deprecated configuration option ``offline`` (`#2213 `__) `Manuel Schlund `__ @@ -33,28 +50,26 @@ Backwards incompatible changes Please refer to :ref:`changelog-v2-8-0` for upgrade instructions. - Fix issue with CORDEX datasets requiring different dataset tags for downloads and fixes (`#2066 `__) `Joakim Löw `__ - + - Due to the different facets for CORDEX datasets, there was an inconsistency in the fixing mechanism. This change requires changes to existing recipes that use CORDEX datasets. Please refer to the pull request for detailed update instructions. -- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (`#2191 `__) `Manuel Schlund `__ - - - This harmonizes the operators for all statistics preprocessors. From this version, the new names can be used; the old arguments will stop working from - version 2.12.0. Please refer to :ref:`stat_preprocs` for a detailed description. - - For the following changes, no user change is necessary - + - Remove deprecated way of calling :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2201 `__) `Bouwe Andela `__ - Remove deprecated callback argument from preprocessor ``load`` function (`#2207 `__) `Bouwe Andela `__ - Remove deprecated preprocessor function `cleanup` (`#2215 `__) `Bouwe Andela `__ - Deprecations ~~~~~~~~~~~~ - Clearly separate fixes and CMOR checks (`#2157 `__) `Manuel Schlund `__ +- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (`#2191 `__) `Manuel Schlund `__ + + - This harmonizes the operators for all statistics preprocessors. From this version, the new names can be used; the old arguments will stop working from + version 2.12.0. Please refer to :ref:`stat_preprocs` for a detailed description. Bug fixes ~~~~~~~~~ @@ -85,7 +100,7 @@ Computational performance improvements - Make :ref:`threshold_masking` preprocessors lazy (`#2169 `__) `Jörg Benke `__ - Restored usage of numpy in `_mask_with_shp` (`#2209 `__) `Jörg Benke `__ -- Call coord.core_bounds() instead of coord.bounds in ``check.py`` (`#2146 `__) `sloosvel `__ +- Do not realize lazy coordinate bounds in CMOR check (`#2146 `__) `sloosvel `__ - Rechunk between preprocessor steps (`#2205 `__) `Bouwe Andela `__ - Reduce the size of the dask graph created by the ``anomalies`` preprocessor function (`#2200 `__) `Bouwe Andela `__ @@ -100,7 +115,7 @@ Documentation - Remove meercode badge from README because their API is broken (`#2224 `__) `Valeriu Predoi `__ - Correct usage help text of version command (`#2232 `__) `James Frost `__ - Add ``navigation_with_keys: False`` to ``html_theme_options`` in Readthedocs ``conf.py`` (`#2245 `__) `Valeriu Predoi `__ -- Replace squarey badge with roundy shield for Anaconda sticker in README (`#2233 `__) `Valeriu Predoi `__ +- Replace squarey badge with roundy shield for Anaconda sticker in README (`#2233 `__, `#2260 `__) `Valeriu Predoi `__ Fixes for datasets ~~~~~~~~~~~~~~~~~~ @@ -113,6 +128,7 @@ Installation - Clean-up how pins are written in conda environment file (`#2125 `__) `Valeriu Predoi `__ - Use importlib.metadata instead of deprecated pkg_resources (`#2096 `__) `Bouwe Andela `__ - Pin shapely to >=2.0 (`#2075 `__) `Valeriu Predoi `__ +- Pin Python to <3.12 in conda environment (`#2272 `__) `Bouwe Andela `__ Preprocessor ~~~~~~~~~~~~ @@ -140,7 +156,7 @@ Improvements - Add file encoding (and some read modes) at open file step (`#2219 `__) `Valeriu Predoi `__ - Check type of argument passed to :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2217 `__) `Valeriu Predoi `__ - Dynamic HTML output for monitoring (`#2062 `__) `Brei Soliño `__ - +- Use PyPI's trusted publishers authentication (`#2269 `__) `Valeriu Predoi `__ .. _changelog-v2-9-0: From def815d9b6223bf0bfd92e70fbe698d8c9125d9e Mon Sep 17 00:00:00 2001 From: Manuel Schlund <32543114+schlunma@users.noreply.github.com> Date: Tue, 19 Dec 2023 18:31:59 +0100 Subject: [PATCH 07/14] Updated iris pin to `iris>=3.6.1` (#2286) --- environment.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/environment.yml b/environment.yml index 4dfac03a39..93582e968c 100644 --- a/environment.yml +++ b/environment.yml @@ -20,7 +20,7 @@ dependencies: - geopy - humanfriendly - importlib_metadata # required for Python < 3.10 - - iris >=3.6.0 + - iris >=3.6.1 - iris-esmf-regrid >=0.7.0 - isodate - jinja2 diff --git a/setup.py b/setup.py index 84379ea008..f8c3e28550 100755 --- a/setup.py +++ b/setup.py @@ -58,7 +58,7 @@ 'scipy>=1.6', # See the following issue for info on the iris pin below: # https://github.com/ESMValGroup/ESMValTool/issues/3239#issuecomment-1613298587 - 'scitools-iris>=3.4.0', + 'scitools-iris>=3.6.1', 'shapely>=2.0.0', 'stratify>=0.3', 'yamale', From 127666eda90034e2b735681d5fd66d970e7aef87 Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Wed, 20 Dec 2023 15:17:34 +0100 Subject: [PATCH 08/14] Use short links in changelog (#2287) --- doc/changelog.rst | 1445 +++++++++++++++++----------------- doc/conf.py | 31 + doc/quickstart/configure.rst | 3 +- 3 files changed, 750 insertions(+), 729 deletions(-) diff --git a/doc/changelog.rst b/doc/changelog.rst index 0f5a3e060f..7160637390 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -33,40 +33,40 @@ This release includes Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Remove the deprecated option ``use_legacy_supplementaries`` (`#2202 `__) `Bouwe Andela `__ +- Remove the deprecated option ``use_legacy_supplementaries`` (:pull:`2202`) by :user:`bouweandela` - The recommended upgrade procedure is to remove ``use_legacy_supplementaries`` from config-user.yml (if it was there) and remove any mention of ``fx_variables`` from the recipe. If automatically defining the required supplementary variables does not work, define them in the variable or (``additional_``) ``datasets`` section as described in :ref:`supplementary_variables`. -- Use smarter (units-aware) weights (`#2139 `__) `Manuel Schlund `__ +- Use smarter (units-aware) weights (:pull:`2139`) by :user:`schlunma` - Some preprocessors handle units better. For details, see the pull request. -- Removed deprecated configuration option ``offline`` (`#2213 `__) `Manuel Schlund `__ +- Removed deprecated configuration option ``offline`` (:pull:`2213`) by :user:`schlunma` - In :ref:`changelog-v2-8-0`, we replaced the old ``offline`` configuration option. From this version on, it stops working. Please refer to :ref:`changelog-v2-8-0` for upgrade instructions. -- Fix issue with CORDEX datasets requiring different dataset tags for downloads and fixes (`#2066 `__) `Joakim Löw `__ +- Fix issue with CORDEX datasets requiring different dataset tags for downloads and fixes (:pull:`2066`) by :user:`ljoakim` - Due to the different facets for CORDEX datasets, there was an inconsistency in the fixing mechanism. This change requires changes to existing recipes that use CORDEX datasets. Please refer to the pull request for detailed update instructions. - For the following changes, no user change is necessary - - Remove deprecated way of calling :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2201 `__) `Bouwe Andela `__ + - Remove deprecated way of calling :func:`~esmvalcore.cmor.table.read_cmor_tables` (:pull:`2201`) by :user:`bouweandela` - - Remove deprecated callback argument from preprocessor ``load`` function (`#2207 `__) `Bouwe Andela `__ + - Remove deprecated callback argument from preprocessor ``load`` function (:pull:`2207`) by :user:`bouweandela` - - Remove deprecated preprocessor function `cleanup` (`#2215 `__) `Bouwe Andela `__ + - Remove deprecated preprocessor function `cleanup` (:pull:`2215`) by :user:`bouweandela` Deprecations ~~~~~~~~~~~~ -- Clearly separate fixes and CMOR checks (`#2157 `__) `Manuel Schlund `__ -- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (`#2191 `__) `Manuel Schlund `__ +- Clearly separate fixes and CMOR checks (:pull:`2157`) by :user:`schlunma` +- Added new operators for statistics preprocessor (e.g., ``'percentile'``) and allowed passing additional arguments (:pull:`2191`) by :user:`schlunma` - This harmonizes the operators for all statistics preprocessors. From this version, the new names can be used; the old arguments will stop working from version 2.12.0. Please refer to :ref:`stat_preprocs` for a detailed description. @@ -74,89 +74,89 @@ Deprecations Bug fixes ~~~~~~~~~ -- Re-add correctly region-extracted cell measures and ancillary variables after :ref:`extract_region` (`#2166 `__) `Valeriu Predoi `__, `Manuel Schlund `__ +- Re-add correctly region-extracted cell measures and ancillary variables after :ref:`extract_region` (:pull:`2166`) by :user:`valeriupredoi`, :user:`schlunma` - Fix sorting of datasets - - Fix sorting of ensemble members in :func:`~esmvalcore.dataset.datasets_to_recipe` (`#2095 `__) `Bouwe Andela `__ - - Fix a problem with sorting datasets that have a mix of facet types (`#2238 `__) `Bouwe Andela `__ - - Avoid a crash if dataset has supplementary variables (`#2198 `__) `Bouwe Andela `__ + - Fix sorting of ensemble members in :func:`~esmvalcore.dataset.datasets_to_recipe` (:pull:`2095`) by :user:`bouweandela` + - Fix a problem with sorting datasets that have a mix of facet types (:pull:`2238`) by :user:`bouweandela` + - Avoid a crash if dataset has supplementary variables (:pull:`2198`) by :user:`bouweandela` CMOR standard ~~~~~~~~~~~~~ -- ERA5 on-the-fly CMORizer: changed sign of variables ``evspsbl`` and ``evspsblpot`` (`#2115 `__) `katjaweigel `__ -- Add ``ch4`` surface custom cmor table entry (`#2168 `__) `Birgit Hassler `__ -- Add CMIP3 institutes names used at NCI (`#2152 `__) `Romain Beucher `__ -- Added :func:`~esmvalcore.cmor.fixes.get_time_bounds` and :func:`~esmvalcore.cmor.fixes.get_next_month` to public API (`#2214 `__) `Manuel Schlund `__ +- ERA5 on-the-fly CMORizer: changed sign of variables ``evspsbl`` and ``evspsblpot`` (:pull:`2115`) by :user:`katjaweigel` +- Add ``ch4`` surface custom cmor table entry (:pull:`2168`) by :user:`hb326` +- Add CMIP3 institutes names used at NCI (:pull:`2152`) by :user:`rbeucher` +- Added :func:`~esmvalcore.cmor.fixes.get_time_bounds` and :func:`~esmvalcore.cmor.fixes.get_next_month` to public API (:pull:`2214`) by :user:`schlunma` - Improve concatenation checks - - Relax concatenation checks for ``--check_level=relax`` and ``--check_level=ignore`` (`#2144 `__) `sloosvel `__ - - Fix ``concatenate`` preprocessor function (`#2240 `__) `Bouwe Andela `__ - - Fix time overlap handling in concatenation (`#2247 `__) `Klaus Zimmermann `__ + - Relax concatenation checks for ``--check_level=relax`` and ``--check_level=ignore`` (:pull:`2144`) by :user:`sloosvel` + - Fix ``concatenate`` preprocessor function (:pull:`2240`) by :user:`bouweandela` + - Fix time overlap handling in concatenation (:pull:`2247`) by :user:`zklaus` Computational performance improvements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Make :ref:`threshold_masking` preprocessors lazy (`#2169 `__) `Jörg Benke `__ +- Make :ref:`threshold_masking` preprocessors lazy (:pull:`2169`) by :user:`joergbenke` - - Restored usage of numpy in `_mask_with_shp` (`#2209 `__) `Jörg Benke `__ -- Do not realize lazy coordinate bounds in CMOR check (`#2146 `__) `sloosvel `__ -- Rechunk between preprocessor steps (`#2205 `__) `Bouwe Andela `__ -- Reduce the size of the dask graph created by the ``anomalies`` preprocessor function (`#2200 `__) `Bouwe Andela `__ + - Restored usage of numpy in `_mask_with_shp` (:pull:`2209`) by :user:`joergbenke` +- Do not realize lazy coordinate bounds in CMOR check (:pull:`2146`) by :user:`sloosvel` +- Rechunk between preprocessor steps (:pull:`2205`) by :user:`bouweandela` +- Reduce the size of the dask graph created by the ``anomalies`` preprocessor function (:pull:`2200`) by :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Add reference to release v2.9.0 in the changelog (`#2130 `__) `Rémi Kazeroni `__ -- Add merge instructions to release instructions (`#2131 `__) `Klaus Zimmermann `__ -- Update `mamba` before building environment during Readthedocs build (`#2149 `__) `Valeriu Predoi `__ -- Ensure compatible zstandard and zstd versions for .conda support (`#2204 `__) `Klaus Zimmermann `__ -- Remove outdated documentation (`#2210 `__) `Bouwe Andela `__ -- Remove meercode badge from README because their API is broken (`#2224 `__) `Valeriu Predoi `__ -- Correct usage help text of version command (`#2232 `__) `James Frost `__ -- Add ``navigation_with_keys: False`` to ``html_theme_options`` in Readthedocs ``conf.py`` (`#2245 `__) `Valeriu Predoi `__ -- Replace squarey badge with roundy shield for Anaconda sticker in README (`#2233 `__, `#2260 `__) `Valeriu Predoi `__ +- Add reference to release v2.9.0 in the changelog (:pull:`2130`) by :user:`remi-kazeroni` +- Add merge instructions to release instructions (:pull:`2131`) by :user:`zklaus` +- Update `mamba` before building environment during Readthedocs build (:pull:`2149`) by :user:`valeriupredoi` +- Ensure compatible zstandard and zstd versions for .conda support (:pull:`2204`) by :user:`zklaus` +- Remove outdated documentation (:pull:`2210`) by :user:`bouweandela` +- Remove meercode badge from README because their API is broken (:pull:`2224`) by :user:`valeriupredoi` +- Correct usage help text of version command (:pull:`2232`) by :user:`jfrost-mo` +- Add ``navigation_with_keys: False`` to ``html_theme_options`` in Readthedocs ``conf.py`` (:pull:`2245`) by :user:`valeriupredoi` +- Replace squarey badge with roundy shield for Anaconda sticker in README (:pull:`2233`, :pull:`2260`) by :user:`valeriupredoi` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Updated doc about fixes and added type hints to fix functions (`#2160 `__) `Manuel Schlund `__ +- Updated doc about fixes and added type hints to fix functions (:pull:`2160`) by :user:`schlunma` Installation ~~~~~~~~~~~~ -- Clean-up how pins are written in conda environment file (`#2125 `__) `Valeriu Predoi `__ -- Use importlib.metadata instead of deprecated pkg_resources (`#2096 `__) `Bouwe Andela `__ -- Pin shapely to >=2.0 (`#2075 `__) `Valeriu Predoi `__ -- Pin Python to <3.12 in conda environment (`#2272 `__) `Bouwe Andela `__ +- Clean-up how pins are written in conda environment file (:pull:`2125`) by :user:`valeriupredoi` +- Use importlib.metadata instead of deprecated pkg_resources (:pull:`2096`) by :user:`bouweandela` +- Pin shapely to >=2.0 (:pull:`2075`) by :user:`valeriupredoi` +- Pin Python to <3.12 in conda environment (:pull:`2272`) by :user:`bouweandela` Preprocessor ~~~~~~~~~~~~ -- Improve preprocessor output sorting code (`#2111 `__) `Bouwe Andela `__ -- Preprocess datasets in the same order as they are listed in the recipe (`#2103 `__) `Bouwe Andela `__ +- Improve preprocessor output sorting code (:pull:`2111`) by :user:`bouweandela` +- Preprocess datasets in the same order as they are listed in the recipe (:pull:`2103`) by :user:`bouweandela` Automatic testing ~~~~~~~~~~~~~~~~~ -- [Github Actions] Compress all bash shell setters into one default option per workflow (`#2126 `__) `Valeriu Predoi `__ -- [Github Actions] Fix Monitor Tests Github Action (`#2135 `__) `Valeriu Predoi `__ -- [condalock] update conda lock file (`#2141 `__) `Valeriu Predoi `__ -- [Condalock] make sure mamba/conda are at latest version by forcing a pinned mamba install (`#2136 `__) `Valeriu Predoi `__ -- Update code coverage orbs (`#2206 `__) `Bouwe Andela `__ -- Revisit the comment-triggered Github Actions test (`#2243 `__) `Valeriu Predoi `__ -- Remove workflow that runs Github Actions tests from PR comment (`#2244 `__) `Valeriu Predoi `__ +- [Github Actions] Compress all bash shell setters into one default option per workflow (:pull:`2126`) by :user:`valeriupredoi` +- [Github Actions] Fix Monitor Tests Github Action (:pull:`2135`) by :user:`valeriupredoi` +- [condalock] update conda lock file (:pull:`2141`) by :user:`valeriupredoi` +- [Condalock] make sure mamba/conda are at latest version by forcing a pinned mamba install (:pull:`2136`) by :user:`valeriupredoi` +- Update code coverage orbs (:pull:`2206`) by :user:`bouweandela` +- Revisit the comment-triggered Github Actions test (:pull:`2243`) by :user:`valeriupredoi` +- Remove workflow that runs Github Actions tests from PR comment (:pull:`2244`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Merge v2.9.x into main (`#2128 `__) `Manuel Schlund `__ -- Fix typo in citation file (`#2182 `__) `Bouwe Andela `__ -- Cleaned and extended function that extracts datetimes from paths (`#2181 `__) `Manuel Schlund `__ -- Add file encoding (and some read modes) at open file step (`#2219 `__) `Valeriu Predoi `__ -- Check type of argument passed to :func:`~esmvalcore.cmor.table.read_cmor_tables` (`#2217 `__) `Valeriu Predoi `__ -- Dynamic HTML output for monitoring (`#2062 `__) `Brei Soliño `__ -- Use PyPI's trusted publishers authentication (`#2269 `__) `Valeriu Predoi `__ +- Merge v2.9.x into main (:pull:`2128`) by :user:`schlunma` +- Fix typo in citation file (:pull:`2182`) by :user:`bouweandela` +- Cleaned and extended function that extracts datetimes from paths (:pull:`2181`) by :user:`schlunma` +- Add file encoding (and some read modes) at open file step (:pull:`2219`) by :user:`valeriupredoi` +- Check type of argument passed to :func:`~esmvalcore.cmor.table.read_cmor_tables` (:pull:`2217`) by :user:`valeriupredoi` +- Dynamic HTML output for monitoring (:pull:`2062`) by :user:`bsolino` +- Use PyPI's trusted publishers authentication (:pull:`2269`) by :user:`valeriupredoi` .. _changelog-v2-9-0: @@ -172,15 +172,14 @@ which can Configuration examples and advice are available in :ref:`our documentation `. More work on improving the computational performance is planned, so please share -your experiences, good and bad, with this new feature in -`ESMValGroup/ESMValCore#1763 `__. +your experiences, good and bad, with this new feature in :discussion:`1763`. This release includes Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Remove deprecated configuration options (`#2056 `__) `Bouwe Andela `__ +- Remove deprecated configuration options (:pull:`2056`) by :user:`bouweandela` - The module ``esmvalcore.experimental.config`` has been removed. To upgrade, import the module from :mod:`esmvalcore.config` instead. @@ -194,52 +193,52 @@ Backwards incompatible changes Bug fixes ~~~~~~~~~ -- Respect ``ignore_warnings`` settings from the :ref:`project configuration ` in :func:`esmvalcore.dataset.Dataset.load` (`#2046 `__) `Manuel Schlund `__ -- Fixed usage of custom location for :ref:`custom CMOR tables ` (`#2052 `__) `Manuel Schlund `__ -- Fix issue with writing index.html when :ref:`running a recipe ` with ``--resume-from`` (`#2055 `__) `Bouwe Andela `__ -- Fixed bug in ICON CMORizer that lead to shifted time coordinates (`#2038 `__) `Manuel Schlund `__ -- Include ``-`` in allowed characters for bibtex references (`#2097 `__) `Alistair Sellar `__ -- Do not raise an exception if the requested version of a file is not available for all matching files on ESGF (`#2105 `__) `Bouwe Andela `__ +- Respect ``ignore_warnings`` settings from the :ref:`project configuration ` in :func:`esmvalcore.dataset.Dataset.load` (:pull:`2046`) by :user:`schlunma` +- Fixed usage of custom location for :ref:`custom CMOR tables ` (:pull:`2052`) by :user:`schlunma` +- Fix issue with writing index.html when :ref:`running a recipe ` with ``--resume-from`` (:pull:`2055`) by :user:`bouweandela` +- Fixed bug in ICON CMORizer that lead to shifted time coordinates (:pull:`2038`) by :user:`schlunma` +- Include ``-`` in allowed characters for bibtex references (:pull:`2097`) by :user:`alistairsellar` +- Do not raise an exception if the requested version of a file is not available for all matching files on ESGF (:pull:`2105`) by :user:`bouweandela` Computational performance improvements ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Add support for :ref:`configuring Dask distributed ` (`#2049 `__, `#2122 `__) `Bouwe Andela `__ -- Make :func:`esmvalcore.preprocessor.extract_levels` lazy (`#1761 `__) `Bouwe Andela `__ -- Lazy implementation of :func:`esmvalcore.preprocessor.multi_model_statistics` and :func:`esmvalcore.preprocessor.ensemble_statistics` (`#968 `__ and `#2087 `__) `Peter Kalverla `__ -- Avoid realizing data in preprocessor function :func:`esmvalcore.preprocessor.concatenate` when cubes overlap (`#2109 `__) `Bouwe Andela `__ +- Add support for :ref:`configuring Dask distributed ` (:pull:`2049`, :pull:`2122`) by :user:`bouweandela` +- Make :func:`esmvalcore.preprocessor.extract_levels` lazy (:pull:`1761`) by :user:`bouweandela` +- Lazy implementation of :func:`esmvalcore.preprocessor.multi_model_statistics` and :func:`esmvalcore.preprocessor.ensemble_statistics` (:pull:`968` and :pull:`2087`) by :user:`Peter9192` +- Avoid realizing data in preprocessor function :func:`esmvalcore.preprocessor.concatenate` when cubes overlap (:pull:`2109`) by :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Remove unneeded sphinxcontrib extension (`#2047 `__) `Valeriu Predoi `__ -- Show ESMValTool logo on `PyPI webpage `__ (`#2065 `__) `Valeriu Predoi `__ -- Fix gitter badge in README (`#2118 `__) `Rémi Kazeroni `__ -- Add changelog for v2.9.0 (`#2088 `__ and `#2123 `__) `Bouwe Andela `__ +- Remove unneeded sphinxcontrib extension (:pull:`2047`) by :user:`valeriupredoi` +- Show ESMValTool logo on `PyPI webpage `__ (:pull:`2065`) by :user:`valeriupredoi` +- Fix gitter badge in README (:pull:`2118`) by :user:`remi-kazeroni` +- Add changelog for v2.9.0 (:pull:`2088` and :pull:`2123`) by :user:`bouweandela` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Pass the :obj:`esmvalcore.config.Session` to fixes (`#1988 `__) `Manuel Schlund `__ -- ICON: Allowed specifying vertical grid information in recipe (`#2067 `__) `Manuel Schlund `__ -- Allow specifying ``raw_units`` for CESM2, EMAC, and ICON CMORizers (`#2043 `__) `Manuel Schlund `__ -- ICON: allow specifying horizontal grid file in recipe/extra facets (`#2078 `__) `Manuel Schlund `__ -- Fix tas/tos CMIP6: FIO, KACE, MIROC, IITM (`#2061 `__) `Pep Cos `__ -- Add fix for EC-Earth3-Veg tos calendar (`#2100 `__) `Bouwe Andela `__ -- Correct GISS-E2-1-G ``tos`` units (`#2099 `__) `Bouwe Andela `__ +- Pass the :obj:`esmvalcore.config.Session` to fixes (:pull:`1988`) by :user:`schlunma` +- ICON: Allowed specifying vertical grid information in recipe (:pull:`2067`) by :user:`schlunma` +- Allow specifying ``raw_units`` for CESM2, EMAC, and ICON CMORizers (:pull:`2043`) by :user:`schlunma` +- ICON: allow specifying horizontal grid file in recipe/extra facets (:pull:`2078`) by :user:`schlunma` +- Fix tas/tos CMIP6: FIO, KACE, MIROC, IITM (:pull:`2061`) by :user:`pepcos` +- Add fix for EC-Earth3-Veg tos calendar (:pull:`2100`) by :user:`bouweandela` +- Correct GISS-E2-1-G ``tos`` units (:pull:`2099`) by :user:`bouweandela` Installation ~~~~~~~~~~~~ -- Drop support for Python 3.8 (`#2053 `__) `Bouwe Andela `__ -- Add python 3.11 to Github Actions package (conda and PyPI) installation tests (`#2083 `__) `Valeriu Predoi `__ -- Remove ``with_mypy`` or ``with-mypy`` optional tool for prospector (`#2108 `__) `Valeriu Predoi `__ +- Drop support for Python 3.8 (:pull:`2053`) by :user:`bouweandela` +- Add python 3.11 to Github Actions package (conda and PyPI) installation tests (:pull:`2083`) by :user:`valeriupredoi` +- Remove ``with_mypy`` or ``with-mypy`` optional tool for prospector (:pull:`2108`) by :user:`valeriupredoi` Preprocessor ~~~~~~~~~~~~ -- Added ``period='hourly'`` for :func:`esmvalcore.preprocessor.climate_statistics` and :func:`esmvalcore.preprocessor.anomalies` (`#2068 `__) `Manuel Schlund `__ -- Support IPCC AR6 regions in :func:`esmvalcore.preprocessor.extract_shape` (`#2008 `__) `Manuel Schlund `__ +- Added ``period='hourly'`` for :func:`esmvalcore.preprocessor.climate_statistics` and :func:`esmvalcore.preprocessor.anomalies` (:pull:`2068`) by :user:`schlunma` +- Support IPCC AR6 regions in :func:`esmvalcore.preprocessor.extract_shape` (:pull:`2008`) by :user:`schlunma` .. _changelog-v2-8-1: @@ -255,37 +254,37 @@ This release includes: Bug fixes ~~~~~~~~~ -- Pin numpy !=1.24.3 (`#2011 `__) `Valeriu Predoi `__ -- Fix a bug in recording provenance for the ``mask_multimodel`` preprocessor (`#1984 `__) `Manuel Schlund `__ -- Fix ICON hourly data rounding issues (`#2022 `__) `Julian Bauer `__ -- Use the default SSL context when using the ``extract_location`` preprocessor (`#2023 `__) `Emma Hogan `__ -- Make time-related CMOR fixes work with time dimensions `time1`, `time2`, `time3` (`#1971 `__) `Manuel Schlund `__ -- Always create a cache directory for storing ICON grid files (`#2030 `__) `Manuel Schlund `__ -- Fixed altitude <--> pressure level conversion for masked arrays in the ``extract_levels`` preprocessor (`#1999 `__) `Manuel Schlund `__ -- Allowed ignoring of scalar time coordinates in the ``multi_model_statistics`` preprocessor (`#1961 `__) `Manuel Schlund `__ +- Pin numpy !=1.24.3 (:pull:`2011`) by :user:`valeriupredoi` +- Fix a bug in recording provenance for the ``mask_multimodel`` preprocessor (:pull:`1984`) by :user:`schlunma` +- Fix ICON hourly data rounding issues (:pull:`2022`) by :user:`BauerJul` +- Use the default SSL context when using the ``extract_location`` preprocessor (:pull:`2023`) by :user:`ehogan` +- Make time-related CMOR fixes work with time dimensions `time1`, `time2`, `time3` (:pull:`1971`) by :user:`schlunma` +- Always create a cache directory for storing ICON grid files (:pull:`2030`) by :user:`schlunma` +- Fixed altitude <--> pressure level conversion for masked arrays in the ``extract_levels`` preprocessor (:pull:`1999`) by :user:`schlunma` +- Allowed ignoring of scalar time coordinates in the ``multi_model_statistics`` preprocessor (:pull:`1961`) by :user:`schlunma` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Add support for hourly ICON data (`#1990 `__) `Julian Bauer `__ -- Fix areacello in BCC-CSM2-MR (`#1993 `__) `Rémi Kazeroni `__ +- Add support for hourly ICON data (:pull:`1990`) by :user:`BauerJul` +- Fix areacello in BCC-CSM2-MR (:pull:`1993`) by :user:`remi-kazeroni` Installation ~~~~~~~~~~~~ -- Add support for Python=3.11 (`#1832 `__) `Valeriu Predoi `__ -- Modernize conda lock file creation workflow with mamba, Mambaforge etc (`#2027 `__) `Valeriu Predoi `__ -- Pin `libnetcdf!=4.9.1` (`#2072 `__) `Rémi Kazeroni `__ +- Add support for Python=3.11 (:pull:`1832`) by :user:`valeriupredoi` +- Modernize conda lock file creation workflow with mamba, Mambaforge etc (:pull:`2027`) by :user:`valeriupredoi` +- Pin `libnetcdf!=4.9.1` (:pull:`2072`) by :user:`remi-kazeroni` Documentation ~~~~~~~~~~~~~ -- Add changelog for v2.8.1 (`#2079 `__) `Bouwe Andela `__ +- Add changelog for v2.8.1 (:pull:`2079`) by :user:`bouweandela` Automatic testing ~~~~~~~~~~~~~~~~~ -- Use mocked `geopy.geocoders.Nominatim` to avoid `ReadTimeoutError` (`#2005 `__) `Manuel Schlund `__ -- Update pre-commit hooks (`#2020 `__) `Bouwe Andela `__ +- Use mocked `geopy.geocoders.Nominatim` to avoid `ReadTimeoutError` (:pull:`2005`) by :user:`schlunma` +- Update pre-commit hooks (:pull:`2020`) by :user:`bouweandela` .. _changelog-v2-8-0: @@ -298,22 +297,22 @@ Highlights - ESMValCore now supports wildcards in recipes and offers improved support for ancillary variables and dataset versioning thanks to contributions by - `Bouwe Andela `__. For details, see + :user:`bouweandela`. For details, see :ref:`Automatically populating a recipe with all available datasets ` and :ref:`Defining supplementary variables `. - Support for CORDEX datasets in a rotated pole coordinate system has been - added by `sloosvel `__. + added by :user:`sloosvel`. - Native :ref:`ICON ` output is now made UGRID-compliant on-the-fly to unlock the use of more sophisticated regridding algorithms, - thanks to `Manuel Schlund `__. + thanks to :user:`schlunma`. - The Python API has been extended with the addition of three modules: :mod:`esmvalcore.config`, :mod:`esmvalcore.dataset`, and :mod:`esmvalcore.local`, all these features courtesy of - `Bouwe Andela `__. For details, see our new + :user:`bouweandela`. For details, see our new example :doc:`example-notebooks`. - The preprocessor :func:`~esmvalcore.preprocessor.multi_model_statistics` has been extended to support more use-cases thanks to contributions by - `Manuel Schlund `__. For details, see + :user:`schlunma`. For details, see :ref:`Multi-model statistics `. This release includes: @@ -323,9 +322,7 @@ Backwards incompatible changes Please read the descriptions of the linked pull requests for detailed upgrade instructions. - The algorithm for automatically defining the ancillary variables and cell - measures has been improved - (`#1609 `_) - `Bouwe Andela `__. + measures has been improved (:pull:`1609`) by :user:`bouweandela`. If this does not work as expected, more examples of how to adapt your recipes are given `here `__ @@ -333,167 +330,161 @@ Please read the descriptions of the linked pull requests for detailed upgrade in :ref:`recipe documentation ` and the :ref:`preprocessor documentation `. - Remove deprecated features scheduled for removal in v2.8.0 or earlier - (`#1826 `__) - `Manuel Schlund `__. + (:pull:`1826`) by :user:`schlunma`. Removed ``esmvalcore.iris_helpers.var_name_constraint`` (has been deprecated in v2.6.0; please use :class:`iris.NameConstraint` with the keyword argument ``var_name`` instead) and the option ``always_use_ne_mask`` for :func:`esmvalcore.preprocessor.mask_landsea` (has been deprecated in v2.5.0; the same behavior can now be achieved by specifying ``supplementary_variables``. - No files will be found if a non-existent version of a dataset is specified - (`#1835 `_) - `Bouwe Andela `__. If a ``version`` of a + (:pull:`1835`) by :user:`bouweandela`. If a ``version`` of a dataset is specified in the recipe, the tool will now search for exactly that version, instead of simply using the latest version. Therefore, it is necessary to make sure that the version number in the directory tree matches with the version number in the recipe to find the files. - The default filename template for obs4MIPs has been updated to better match - filenames used in this project in - (`#1866 `__) - `Bouwe Andela `__. This may cause issues - if you are storing all the files for obs4MIPs in a directory with no - subdirectories per dataset. + filenames used in this project in (:pull:`1866`) by :user:`bouweandela`. This + may cause issues if you are storing all the files for obs4MIPs in a + directory with no subdirectories per dataset. Deprecations ~~~~~~~~~~~~ Please read the descriptions of the linked pull requests for detailed upgrade instructions. - Various configuration related options that are now available through - :mod:`esmvalcore.config` have been deprecated (`#1769 `_) `Bouwe Andela `__. + :mod:`esmvalcore.config` have been deprecated (:pull:`1769`) by :user:`bouweandela`. - The ``fx_variables`` preprocessor argument and related features have been - deprecated (`#1609`_) - `Bouwe Andela `__. - See `here `__ - for more information. + deprecated (:pull:`1609`) by :user:`bouweandela`. + See :pull:`1609#Deprecations` for more information. - Combined ``offline`` and ``always_search_esgf`` into a single option ``search_esgf`` - (`#1935 `_) - `Manuel Schlund `__. The configuration + (:pull:`1935`) + :user:`schlunma`. The configuration option/command line argument ``offline`` has been deprecated in favor of ``search_esgf``. The previous ``offline: true`` is now ``search_esgf: never`` (the default); the previous ``offline: false`` is now ``search_esgf: when_missing``. More details on how to adapt your workflow - regarding these new options are given in `#1935`_ and the + regarding these new options are given in :pull:`1935` and the `documentation `__. -- :func:`esmvalcore.preprocessor.cleanup` has been deprecated (`#1949 `_) - `Manuel Schlund `__. Please do not use this +- :func:`esmvalcore.preprocessor.cleanup` has been deprecated (:pull:`1949`) + :user:`schlunma`. Please do not use this anymore in the recipe (it is not necessary). Python API ~~~~~~~~~~ -- Support searching ESGF for a specific version of a file and add :obj:`esmvalcore.esgf.ESGFFile.facets` (`#1822 `__) `Bouwe Andela `__ -- Fix issues with searching for files on ESGF (`#1863 `__) `Bouwe Andela `__ -- Move the :mod:`esmvalcore.experimental.config` module to :mod:`esmvalcore.config` (`#1769`_) `Bouwe Andela `__ -- Add :mod:`esmvalcore.local`, a module to search data on the local filesystem (`#1835`_) `Bouwe Andela `__ -- Add :mod:`esmvalcore.dataset` module (`#1877 `__) `Bouwe Andela `__ +- Support searching ESGF for a specific version of a file and add :obj:`esmvalcore.esgf.ESGFFile.facets` (:pull:`1822`) by :user:`bouweandela` +- Fix issues with searching for files on ESGF (:pull:`1863`) by :user:`bouweandela` +- Move the :mod:`esmvalcore.experimental.config` module to :mod:`esmvalcore.config` (:pull:`1769`) by :user:`bouweandela` +- Add :mod:`esmvalcore.local`, a module to search data on the local filesystem (:pull:`#1835`) by :user:`bouweandela` +- Add :mod:`esmvalcore.dataset` module (:pull:`1877`) by :user:`bouweandela` Bug fixes ~~~~~~~~~ -- Import from :mod:`esmvalcore.config` in the :mod:`esmvalcore.experimental` module (`#1816 `__) `Bouwe Andela `__ -- Added scalar coords of input cubes to output of esmpy_regrid (`#1811 `__) `Manuel Schlund `__ -- Fix severe bug in :func:`esmvalcore.preprocessor.mask_fillvalues` (`#1823 `__) `Manuel Schlund `__ -- Fix LWP of ICON on-the-fly CMORizer (`#1839 `__) `Manuel Schlund `__ -- Fixed issue in irregular regridding regarding scalar coordinates (`#1845 `__) `Manuel Schlund `__ -- Update product attributes and `metadata.yml` with cube metadata before saving files (`#1837 `__) `Manuel Schlund `__ -- Remove an extra space character from a filename (`#1883 `__) `Bouwe Andela `__ -- Improve resilience of ESGF search (`#1869 `__) `Bouwe Andela `__ -- Fix issue with no files found if timerange start/end differs in length (`#1880 `__) `Bouwe Andela `__ -- Add `driver` and `sub_experiment` tags to generate dataset aliases (`#1886 `__) `sloosvel `__ -- Fixed time points of native CESM2 output (`#1772 `__) `Manuel Schlund `__ -- Fix type hints for Python versions < 3.10 (`#1897 `__) `Bouwe Andela `__ -- Fixed `set_range_in_0_360` for dask arrays (`#1919 `__) `Manuel Schlund `__ -- Made equalized attributes in concatenated cubes consistent across runs (`#1783 `__) `Manuel Schlund `__ -- Fix issue with reading dates from files (`#1936 `__) `Bouwe Andela `__ -- Add institute name used on ESGF for CMIP5 CanAM4, CanCM4, and CanESM2 (`#1937 `__) `Bouwe Andela `__ -- Fix issue where data was not loaded and saved (`#1962 `__) `Bouwe Andela `__ -- Fix type hints for Python 3.8 (`#1795 `__) `Bouwe Andela `__ -- Update the institute facet of the CSIRO-Mk3L-1-2 model (`#1966 `__) `Rémi Kazeroni `__ -- Fixed race condition that may result in errors in :func:`esmvalcore.preprocessor.cleanup` (`#1949`_) `Manuel Schlund `__ -- Update notebook so it uses supplementaries instead of ancillaries (`#1945 `__) `Bouwe Andela `__ +- Import from :mod:`esmvalcore.config` in the :mod:`esmvalcore.experimental` module (:pull:`1816`) by :user:`bouweandela` +- Added scalar coords of input cubes to output of esmpy_regrid (:pull:`1811`) by :user:`schlunma` +- Fix severe bug in :func:`esmvalcore.preprocessor.mask_fillvalues` (:pull:`1823`) by :user:`schlunma` +- Fix LWP of ICON on-the-fly CMORizer (:pull:`1839`) by :user:`schlunma` +- Fixed issue in irregular regridding regarding scalar coordinates (:pull:`1845`) by :user:`schlunma` +- Update product attributes and `metadata.yml` with cube metadata before saving files (:pull:`1837`) by :user:`schlunma` +- Remove an extra space character from a filename (:pull:`1883`) by :user:`bouweandela` +- Improve resilience of ESGF search (:pull:`1869`) by :user:`bouweandela` +- Fix issue with no files found if timerange start/end differs in length (:pull:`1880`) by :user:`bouweandela` +- Add `driver` and `sub_experiment` tags to generate dataset aliases (:pull:`1886`) by :user:`sloosvel` +- Fixed time points of native CESM2 output (:pull:`1772`) by :user:`schlunma` +- Fix type hints for Python versions < 3.10 (:pull:`1897`) by :user:`bouweandela` +- Fixed `set_range_in_0_360` for dask arrays (:pull:`1919`) by :user:`schlunma` +- Made equalized attributes in concatenated cubes consistent across runs (:pull:`1783`) by :user:`schlunma` +- Fix issue with reading dates from files (:pull:`1936`) by :user:`bouweandela` +- Add institute name used on ESGF for CMIP5 CanAM4, CanCM4, and CanESM2 (:pull:`1937`) by :user:`bouweandela` +- Fix issue where data was not loaded and saved (:pull:`1962`) by :user:`bouweandela` +- Fix type hints for Python 3.8 (:pull:`1795`) by :user:`bouweandela` +- Update the institute facet of the CSIRO-Mk3L-1-2 model (:pull:`1966`) by :user:`remi-kazeroni` +- Fixed race condition that may result in errors in :func:`esmvalcore.preprocessor.cleanup` (:pull:`1949`) by :user:`schlunma` +- Update notebook so it uses supplementaries instead of ancillaries (:pull:`1945`) by :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Fix anaconda badge in README (`#1759 `__) `Valeriu Predoi `__ -- Fix mistake in the documentation of :obj:`esmvalcore.esgf.find_files` (`#1784 `__) `Bouwe Andela `__ -- Support linking to "stable" ESMValTool version on readthedocs (`#1608 `__) `Bouwe Andela `__ -- Updated ICON doc with information on usage of extract_levels preprocessor (`#1903 `__) `Manuel Schlund `__ -- Add changelog for latest released version v2.7.1 (`#1905 `__) `Valeriu Predoi `__ -- Update `preprocessor.rst` due to renaming of NCEP dataset to NCEP-NCAR-R1 (`#1908 `__) `Birgit Hassler `__ -- Replace timerange nested lists in docs with overview table (`#1940 `__) `Klaus Zimmermann `__ -- Updated section "backward compatibility" in `contributing.rst` (`#1918 `__) `Axel Lauer `__ -- Add link to ESMValTool release procedure steps (`#1957 `__) `Rémi Kazeroni `__ -- Synchronize documentation table of contents with ESMValTool (`#1958 `__) `Bouwe Andela `__ +- Fix anaconda badge in README (:pull:`1759`) by :user:`valeriupredoi` +- Fix mistake in the documentation of :obj:`esmvalcore.esgf.find_files` (:pull:`1784`) by :user:`bouweandela` +- Support linking to "stable" ESMValTool version on readthedocs (:pull:`1608`) by :user:`bouweandela` +- Updated ICON doc with information on usage of extract_levels preprocessor (:pull:`1903`) by :user:`schlunma` +- Add changelog for latest released version v2.7.1 (:pull:`1905`) by :user:`valeriupredoi` +- Update `preprocessor.rst` due to renaming of NCEP dataset to NCEP-NCAR-R1 (:pull:`1908`) by :user:`hb326` +- Replace timerange nested lists in docs with overview table (:pull:`1940`) by :user:`zklaus` +- Updated section "backward compatibility" in `contributing.rst` (:pull:`1918`) by :user:`axel-lauer` +- Add link to ESMValTool release procedure steps (:pull:`1957`) by :user:`remi-kazeroni` +- Synchronize documentation table of contents with ESMValTool (:pull:`1958`) by :user:`bouweandela` Improvements ~~~~~~~~~~~~ -- Support wildcards in the recipe and improve support for ancillary variables and dataset versioning (`#1609`_) `Bouwe Andela `__. More details on how to adapt your recipes are given in the corresponding pull request description and in the corresponding sections of the `recipe documentation `__ and the `preprocessor documentation `__. -- Create a session directory with suffix "-1", "-2", etc if it already exists (`#1818 `__) `Bouwe Andela `__ -- Message for users when they use esmvaltool executable from esmvalcore only (`#1831 `__) `Valeriu Predoi `__ -- Order recipe output in index.html (`#1899 `__) `Bouwe Andela `__ -- Improve reading facets from ESGF search results (`#1920 `__) `Bouwe Andela `__ +- Support wildcards in the recipe and improve support for ancillary variables and dataset versioning (:pull:`1609`) by :user:`bouweandela`. More details on how to adapt your recipes are given in the corresponding pull request description and in the corresponding sections of the `recipe documentation `__ and the `preprocessor documentation `__. +- Create a session directory with suffix "-1", "-2", etc if it already exists (:pull:`1818`) by :user:`bouweandela` +- Message for users when they use esmvaltool executable from esmvalcore only (:pull:`1831`) by :user:`valeriupredoi` +- Order recipe output in index.html (:pull:`1899`) by :user:`bouweandela` +- Improve reading facets from ESGF search results (:pull:`1920`) by :user:`bouweandela` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Fix rotated coordinate grids and `tas` and `pr` for CORDEX datasets (`#1765 `__) `sloosvel `__ -- Made ICON output UGRID-compliant (on-the-fly) (`#1664 `__) `Manuel Schlund `__ -- Fix automatic download of ICON grid file and make ICON UGRIDization optional (`default: true`) (`#1922 `__) `Manuel Schlund `__ -- Add siconc fixes for EC-Earth3-Veg and EC-Earth3-Veg-LR models (`#1771 `__) `Evgenia Galytska `__ -- Fix siconc in KIOST-ESM (`#1829 `__) `Lisa Bock `__ -- Extension of ERA5 CMORizer (variable cl) (`#1850 `__) `Axel Lauer `__ -- Add standard variable names for EMAC (`#1853 `__) `FranziskaWinterstein `__ -- Fix for FGOALS-f3-L clt (`#1928 `__) `Lisa Bock `__ +- Fix rotated coordinate grids and `tas` and `pr` for CORDEX datasets (:pull:`1765`) by :user:`sloosvel` +- Made ICON output UGRID-compliant (on-the-fly) (:pull:`1664`) by :user:`schlunma` +- Fix automatic download of ICON grid file and make ICON UGRIDization optional (`default: true`) (:pull:`1922`) by :user:`schlunma` +- Add siconc fixes for EC-Earth3-Veg and EC-Earth3-Veg-LR models (:pull:`1771`) by :user:`egalytska` +- Fix siconc in KIOST-ESM (:pull:`1829`) by :user:`LisaBock` +- Extension of ERA5 CMORizer (variable cl) (:pull:`1850`) by :user:`axel-lauer` +- Add standard variable names for EMAC (:pull:`1853`) by :user:`FranziskaWinterstein` +- Fix for FGOALS-f3-L clt (:pull:`1928`) by :user:`LisaBock` Installation ~~~~~~~~~~~~ -- Add all deps to the conda-forge environment and suppress installing and reinstalling deps with pip at readthedocs builds (`#1786 `__) `Valeriu Predoi `__ -- Pin netCDF4<1.6.1 (`#1805 `__) `Bouwe Andela `__ -- Unpin NetCF4 (`#1814 `__) `Valeriu Predoi `__ -- Unpin flake8 (`#1820 `__) `Valeriu Predoi `__ -- Add iris-esmf-regrid as a dependency (`#1809 `__) `sloosvel `__ -- Pin esmpy<8.4 (`#1871 `__) `Klaus Zimmermann `__ -- Update esmpy import for ESMF v8.4.0 (`#1876 `__) `Bouwe Andela `__ +- Add all deps to the conda-forge environment and suppress installing and reinstalling deps with pip at readthedocs builds (:pull:`1786`) by :user:`valeriupredoi` +- Pin netCDF4<1.6.1 (:pull:`1805`) by :user:`bouweandela` +- Unpin NetCF4 (:pull:`1814`) by :user:`valeriupredoi` +- Unpin flake8 (:pull:`1820`) by :user:`valeriupredoi` +- Add iris-esmf-regrid as a dependency (:pull:`1809`) by :user:`sloosvel` +- Pin esmpy<8.4 (:pull:`1871`) by :user:`zklaus` +- Update esmpy import for ESMF v8.4.0 (:pull:`1876`) by :user:`bouweandela` Preprocessor ~~~~~~~~~~~~ -- Allow :func:`esmvalcore.preprocessor.multi_model_statistics` on cubes with arbitrary dimensions (`#1808 `__) `Manuel Schlund `__ -- Smarter removal of coordinate metadata in :func:`esmvalcore.preprocessor.multi_model_statistics` preprocessor (`#1813 `__) `Manuel Schlund `__ -- Allowed usage of :func:`esmvalcore.preprocessor.multi_model_statistics` on single cubes/products (`#1849 `__) `Manuel Schlund `__ -- Allowed usage of :func:`esmvalcore.preprocessor.multi_model_statistics` on cubes with identical ``name()`` and ``units`` (but e.g. different long_name) (`#1921 `__) `Manuel Schlund `__ -- Allowed ignoring scalar coordinates in :func:`esmvalcore.preprocessor.multi_model_statistics` (`#1934 `__) `Manuel Schlund `__ -- Refactored :func:`esmvalcore.preprocessor.regrid` and removed unnecessary code not needed anymore due to new iris version (`#1898 `__) `Manuel Schlund `__ -- Do not realise coordinates during CMOR check (`#1912 `__) `sloosvel `__ -- Make :func:`esmvalcore.preprocessor.extract_volume` work with closed and mixed intervals and allow nearest value selection (`#1930 `__) `sloosvel `__ +- Allow :func:`esmvalcore.preprocessor.multi_model_statistics` on cubes with arbitrary dimensions (:pull:`1808`) by :user:`schlunma` +- Smarter removal of coordinate metadata in :func:`esmvalcore.preprocessor.multi_model_statistics` preprocessor (:pull:`1813`) by :user:`schlunma` +- Allowed usage of :func:`esmvalcore.preprocessor.multi_model_statistics` on single cubes/products (:pull:`1849`) by :user:`schlunma` +- Allowed usage of :func:`esmvalcore.preprocessor.multi_model_statistics` on cubes with identical ``name()`` and ``units`` (but e.g. different long_name) (:pull:`1921`) by :user:`schlunma` +- Allowed ignoring scalar coordinates in :func:`esmvalcore.preprocessor.multi_model_statistics` (:pull:`1934`) by :user:`schlunma` +- Refactored :func:`esmvalcore.preprocessor.regrid` and removed unnecessary code not needed anymore due to new iris version (:pull:`1898`) by :user:`schlunma` +- Do not realise coordinates during CMOR check (:pull:`1912`) by :user:`sloosvel` +- Make :func:`esmvalcore.preprocessor.extract_volume` work with closed and mixed intervals and allow nearest value selection (:pull:`1930`) by :user:`sloosvel` Release ~~~~~~~ -- Changelog for `v2.8.0rc1` (`#1952 `__) `Rémi Kazeroni `__ -- Increase version number for ESMValCore `v2.8.0rc1` (`#1955 `__) `Rémi Kazeroni `__ -- Changelog for `v2.8.0rc2` (`#1959 `__) `Rémi Kazeroni `__ -- Increase version number for ESMValCore `v2.8.0rc2` (`#1973 `__) `Rémi Kazeroni `__ -- Changelog for `v2.8.0` (`#1978 `__) `Rémi Kazeroni `__ -- Increase version number for ESMValCore `v2.8.0` (`#1983 `__) `Rémi Kazeroni `__ +- Changelog for `v2.8.0rc1` (:pull:`1952`) by :user:`remi-kazeroni` +- Increase version number for ESMValCore `v2.8.0rc1` (:pull:`1955`) by :user:`remi-kazeroni` +- Changelog for `v2.8.0rc2` (:pull:`1959`) by :user:`remi-kazeroni` +- Increase version number for ESMValCore `v2.8.0rc2` (:pull:`1973`) by :user:`remi-kazeroni` +- Changelog for `v2.8.0` (:pull:`1978`) by :user:`remi-kazeroni` +- Increase version number for ESMValCore `v2.8.0` (:pull:`1983`) by :user:`remi-kazeroni` Automatic testing ~~~~~~~~~~~~~~~~~ -- Set implicit optional to true in `mypy` config to avert side effects and test fails from new mypy version (`#1790 `__) `Valeriu Predoi `__ -- Remove duplicate `implicit_optional = True` line in ``setup.cfg`` (`#1791 `__) `Valeriu Predoi `__ -- Fix failing test due to missing sample data (`#1797 `__) `Bouwe Andela `__ -- Remove outdated cmor_table facet from data finder tests (`#1798 `__) `Bouwe Andela `__ -- Modernize tests for :func:`esmvalcore.preprocessor.save` (`#1799 `__) `Bouwe Andela `__ -- No more sequential tests since SegFaults were not noticed anymore (`#1819 `__) `Valeriu Predoi `__ -- Update pre-commit configuration (`#1821 `__) `Bouwe Andela `__ -- Updated URL of ICON grid file used for testing (`#1914 `__) `Manuel Schlund `__ +- Set implicit optional to true in `mypy` config to avert side effects and test fails from new mypy version (:pull:`1790`) by :user:`valeriupredoi` +- Remove duplicate `implicit_optional = True` line in ``setup.cfg`` (:pull:`1791`) by :user:`valeriupredoi` +- Fix failing test due to missing sample data (:pull:`1797`) by :user:`bouweandela` +- Remove outdated cmor_table facet from data finder tests (:pull:`1798`) by :user:`bouweandela` +- Modernize tests for :func:`esmvalcore.preprocessor.save` (:pull:`1799`) by :user:`bouweandela` +- No more sequential tests since SegFaults were not noticed anymore (:pull:`1819`) by :user:`valeriupredoi` +- Update pre-commit configuration (:pull:`1821`) by :user:`bouweandela` +- Updated URL of ICON grid file used for testing (:pull:`1914`) by :user:`schlunma` Variable Derivation ~~~~~~~~~~~~~~~~~~~ -- Add derivation of sea ice extent (`#1695 `__) `sloosvel `__ +- Add derivation of sea ice extent (:pull:`1695`) by :user:`sloosvel` .. _changelog-v2-7-1: @@ -509,19 +500,19 @@ This is a bugfix release where we unpin `cf-units` to allow the latest `iris=3.4 Installation ~~~~~~~~~~~~ -- Set the version number on the development branches to one minor version more than the previous release (`#1854 `__) `Bouwe Andela `__ -- Unpin cf-units (`#1770 `__) `Bouwe Andela `__ +- Set the version number on the development branches to one minor version more than the previous release (:pull:`1854`) by :user:`bouweandela` +- Unpin cf-units (:pull:`1770`) by :user:`bouweandela` Bug fixes ~~~~~~~~~ -- Improve error handling if an esgf index node is offline (`#1834 `__) `Bouwe Andela `__ +- Improve error handling if an esgf index node is offline (:pull:`1834`) by :user:`bouweandela` Automatic testing ~~~~~~~~~~~~~~~~~ -- Removed unnecessary test that fails with iris 3.4.0 (`#1846 `__) `Manuel Schlund `__ -- Update CEDA ESGF index node hostname (`#1838 `__) `Valeriu Predoi `__ +- Removed unnecessary test that fails with iris 3.4.0 (:pull:`1846`) by :user:`schlunma` +- Update CEDA ESGF index node hostname (:pull:`1838`) by :user:`valeriupredoi` .. _changelog-v2-7-0: @@ -532,67 +523,67 @@ v2.7.0 Highlights ~~~~~~~~~~ -- We have a new preprocessor function called `'rolling_window_statistics' `__ implemented by `Liza Malinina `__ -- We have improved the support for native models, refactored native model fixes by adding common base class `NativeDatasetFix`, changed default DRS for reading native ICON output, and added tests for input/output filenames for `ICON `__ and `EMAC `__ on-the-fly CMORizer, all these features courtesy of `Manuel Schlund `__ -- Performance of preprocessor functions that use time dimensions has been sped up by **two orders of magnitude** thanks to contributions by `Bouwe Andela `__ +- We have a new preprocessor function called `'rolling_window_statistics' `__ implemented by :user:`malininae` +- We have improved the support for native models, refactored native model fixes by adding common base class `NativeDatasetFix`, changed default DRS for reading native ICON output, and added tests for input/output filenames for `ICON `__ and `EMAC `__ on-the-fly CMORizer, all these features courtesy of :user:`schlunma` +- Performance of preprocessor functions that use time dimensions has been sped up by **two orders of magnitude** thanks to contributions by :user:`bouweandela` This release includes: Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Change default DRS for reading native ICON output (`#1705 `__) `Manuel Schlund `__ +- Change default DRS for reading native ICON output (:pull:`1705`) by :user:`schlunma` Bug fixes ~~~~~~~~~ -- Add support for regions stored as MultiPolygon to extract_shape preprocessor (`#1670 `__) `Bouwe Andela `__ -- Fixed type annotations for Python 3.8 (`#1700 `__) `Manuel Schlund `__ -- Core `_io.concatenate()` may fail due to case when one of the cubes is scalar - this fixes that (`#1715 `__) `Valeriu Predoi `__ -- Pick up esmvalcore badge instead of esmvaltool one in README (`#1749 `__) `Valeriu Predoi `__ -- Restore support for scalar cubes to time selection preprocessor functions (`#1750 `__) `Bouwe Andela `__ -- Fix calculation of precipitation flux in EMAC on-the-fly CMORizer (`#1755 `__) `Manuel Schlund `__ +- Add support for regions stored as MultiPolygon to extract_shape preprocessor (:pull:`1670`) by :user:`bouweandela` +- Fixed type annotations for Python 3.8 (:pull:`1700`) by :user:`schlunma` +- Core `_io.concatenate()` may fail due to case when one of the cubes is scalar - this fixes that (:pull:`1715`) by :user:`valeriupredoi` +- Pick up esmvalcore badge instead of esmvaltool one in README (:pull:`1749`) by :user:`valeriupredoi` +- Restore support for scalar cubes to time selection preprocessor functions (:pull:`1750`) by :user:`bouweandela` +- Fix calculation of precipitation flux in EMAC on-the-fly CMORizer (:pull:`1755`) by :user:`schlunma` Deprecations ~~~~~~~~~~~~ -- Remove deprecation warning for regrid schemes already deprecated for v2.7.0 (`#1753 `__) `Valeriu Predoi `__ +- Remove deprecation warning for regrid schemes already deprecated for v2.7.0 (:pull:`1753`) by :user:`valeriupredoi` Documentation ~~~~~~~~~~~~~ -- Add Met Office Installation Method (`#1692 `__) `mo-tgeddes `__ -- Add MO-paths to config file (`#1709 `__) `mo-tgeddes `__ -- Update MO obs4MIPs paths in the user configuration file (`#1734 `__) `mo-tgeddes `__ -- Update `Making a release` section of the documentation (`#1689 `__) `sloosvel `__ -- Added changelog for v2.7.0 (`#1746 `__) `Valeriu Predoi `__ -- update CITATION.cff file with 2.7.0 release info (`#1757 `__) `Valeriu Predoi `__ +- Add Met Office Installation Method (:pull:`1692`) by :user:`mo-tgeddes` +- Add MO-paths to config file (:pull:`1709`) by :user:`mo-tgeddes` +- Update MO obs4MIPs paths in the user configuration file (:pull:`1734`) by :user:`mo-tgeddes` +- Update `Making a release` section of the documentation (:pull:`1689`) by :user:`sloosvel` +- Added changelog for v2.7.0 (:pull:`1746`) by :user:`valeriupredoi` +- update CITATION.cff file with 2.7.0 release info (:pull:`1757`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- New preprocessor function 'rolling_window_statistics' (`#1702 `__) `Liza Malinina `__ -- Remove `pytest_flake8` plugin and use `flake8` instead (`#1722 `__) `Valeriu Predoi `__ -- Added CESM2 CMORizer (`#1678 `__) `Manuel Schlund `__ -- Speed up functions that use time dimension (`#1713 `__) `Bouwe Andela `__ -- Modernize and minimize pylint configuration (`#1726 `__) `Bouwe Andela `__ +- New preprocessor function 'rolling_window_statistics' (:pull:`1702`) by :user:`malininae` +- Remove `pytest_flake8` plugin and use `flake8` instead (:pull:`1722`) by :user:`valeriupredoi` +- Added CESM2 CMORizer (:pull:`1678`) by :user:`schlunma` +- Speed up functions that use time dimension (:pull:`1713`) by :user:`bouweandela` +- Modernize and minimize pylint configuration (:pull:`1726`) by :user:`bouweandela` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Refactored native model fixes by adding common base class `NativeDatasetFix` (`#1694 `__) `Manuel Schlund `__ +- Refactored native model fixes by adding common base class `NativeDatasetFix` (:pull:`1694`) by :user:`schlunma` Installation ~~~~~~~~~~~~ -- Pin `netCDF4 != 1.6.1` since that seems to throw a flurry of Segmentation Faults (`#1724 `__) `Valeriu Predoi `__ +- Pin `netCDF4 != 1.6.1` since that seems to throw a flurry of Segmentation Faults (:pull:`1724`) by :user:`valeriupredoi` Automatic testing ~~~~~~~~~~~~~~~~~ -- Pin `flake8<5.0.0` since Circle CI tests are failing copiously (`#1698 `__) `Valeriu Predoi `__ -- Added tests for input/output filenames for ICON and EMAC on-the-fly CMORizer (`#1718 `__) `Manuel Schlund `__ -- Fix failed tests for Python<3.10 resulting from typing (`#1748 `__) `Manuel Schlund `__ +- Pin `flake8<5.0.0` since Circle CI tests are failing copiously (:pull:`1698`) by :user:`valeriupredoi` +- Added tests for input/output filenames for ICON and EMAC on-the-fly CMORizer (:pull:`1718`) by :user:`schlunma` +- Fix failed tests for Python<3.10 resulting from typing (:pull:`1748`) by :user:`schlunma` .. _changelog-v2-6-0: @@ -610,109 +601,109 @@ This release includes Deprecations ~~~~~~~~~~~~ -- Deprecate the function `esmvalcore.var_name_constraint` (`#1592 `__) `Manuel Schlund `__. This function is scheduled for removal in v2.8.0. Please use :class:`iris.NameConstraint` with the keyword argument `var_name` instead: this is an exact replacement. +- Deprecate the function `esmvalcore.var_name_constraint` (:pull:`1592`) by :user:`schlunma`. This function is scheduled for removal in v2.8.0. Please use :class:`iris.NameConstraint` with the keyword argument `var_name` instead: this is an exact replacement. Bug fixes ~~~~~~~~~ -- Added `start_year` and `end_year` attributes to derived variables (`#1547 `__) `Manuel Schlund `__ -- Show all results on recipe results webpage (`#1560 `__) `Bouwe Andela `__ -- Regridding regular grids with similar coordinates (`#1567 `__) `Tomas Lovato `__ -- Fix timerange wildcard search when deriving variables or downloading files (`#1562 `__) `sloosvel `__ -- Fix `force_derivation` bug (`#1627 `__) `sloosvel `__ -- Correct `build-and-deploy-on-pypi` action (`#1634 `__) `sloosvel `__ -- Apply `clip_timerange` to time dependent fx variables (`#1603 `__) `sloosvel `__ -- Correctly handle requests.exceptions.ConnectTimeout when an ESGF index node is offline (`#1638 `__) `Bouwe Andela `__ +- Added `start_year` and `end_year` attributes to derived variables (:pull:`1547`) by :user:`schlunma` +- Show all results on recipe results webpage (:pull:`1560`) by :user:`bouweandela` +- Regridding regular grids with similar coordinates (:pull:`1567`) by :user:`tomaslovato` +- Fix timerange wildcard search when deriving variables or downloading files (:pull:`1562`) by :user:`sloosvel` +- Fix `force_derivation` bug (:pull:`1627`) by :user:`sloosvel` +- Correct `build-and-deploy-on-pypi` action (:pull:`1634`) by :user:`sloosvel` +- Apply `clip_timerange` to time dependent fx variables (:pull:`1603`) by :user:`sloosvel` +- Correctly handle requests.exceptions.ConnectTimeout when an ESGF index node is offline (:pull:`1638`) by :user:`bouweandela` CMOR standard ~~~~~~~~~~~~~ -- Added custom CMOR tables used for EMAC CMORizer (`#1599 `__) `Manuel Schlund `__ -- Extended ICON CMORizer (`#1549 `__) `Manuel Schlund `__ -- Add CMOR check exception for a basin coord named sector (`#1612 `__) `David Hohn `__ -- Custom user-defined location for custom CMOR tables (`#1625 `__) `Manuel Schlund `__ +- Added custom CMOR tables used for EMAC CMORizer (:pull:`1599`) by :user:`schlunma` +- Extended ICON CMORizer (:pull:`1549`) by :user:`schlunma` +- Add CMOR check exception for a basin coord named sector (:pull:`1612`) by :user:`dhohn` +- Custom user-defined location for custom CMOR tables (:pull:`1625`) by :user:`schlunma` Containerization ~~~~~~~~~~~~~~~~ -- Remove update command in Dockerfile (`#1630 `__) `sloosvel `__ +- Remove update command in Dockerfile (:pull:`1630`) by :user:`sloosvel` Community ~~~~~~~~~ -- Add David Hohn to contributors' list (`#1586 `__) `Valeriu Predoi `__ +- Add David Hohn to contributors' list (:pull:`1586`) by :user:`valeriupredoi` Documentation ~~~~~~~~~~~~~ -- [Github Actions Docs] Full explanation on how to use the GA test triggered by PR comment and added docs link for GA hosted runners (`#1553 `__) `Valeriu Predoi `__ -- Update the command for building the documentation (`#1556 `__) `Bouwe Andela `__ -- Update documentation on running the tool (`#1400 `__) `Bouwe Andela `__ -- Add support for DKRZ-Levante (`#1558 `__) `Rémi Kazeroni `__ -- Improved documentation on native dataset support (`#1559 `__) `Manuel Schlund `__ -- Tweak `extract_point` preprocessor: explain what it returns if one point coord outside cube and add explicit test (`#1584 `__) `Valeriu Predoi `__ -- Update CircleCI, readthedocs, and Docker configuration (`#1588 `__) `Bouwe Andela `__ -- Remove support for Mistral in `config-user.yml` (`#1620 `__) `Rémi Kazeroni `__ -- Add changelog for v2.6.0rc1 (`#1633 `__) `sloosvel `__ -- Add a note on transferring permissions to the release manager (`#1645 `__) `Bouwe Andela `__ -- Add documentation on building and uploading Docker images (`#1644 `__) `Bouwe Andela `__ -- Update documentation on ESMValTool module at DKRZ (`#1647 `__) `Rémi Kazeroni `__ -- Expanded information on deprecations in changelog (`#1658 `__) `Manuel Schlund `__ +- [Github Actions Docs] Full explanation on how to use the GA test triggered by PR comment and added docs link for GA hosted runners (:pull:`1553`) by :user:`valeriupredoi` +- Update the command for building the documentation (:pull:`1556`) by :user:`bouweandela` +- Update documentation on running the tool (:pull:`1400`) by :user:`bouweandela` +- Add support for DKRZ-Levante (:pull:`1558`) by :user:`remi-kazeroni` +- Improved documentation on native dataset support (:pull:`1559`) by :user:`schlunma` +- Tweak `extract_point` preprocessor: explain what it returns if one point coord outside cube and add explicit test (:pull:`1584`) by :user:`valeriupredoi` +- Update CircleCI, readthedocs, and Docker configuration (:pull:`1588`) by :user:`bouweandela` +- Remove support for Mistral in `config-user.yml` (:pull:`1620`) by :user:`remi-kazeroni` +- Add changelog for v2.6.0rc1 (:pull:`1633`) by :user:`sloosvel` +- Add a note on transferring permissions to the release manager (:pull:`1645`) by :user:`bouweandela` +- Add documentation on building and uploading Docker images (:pull:`1644`) by :user:`bouweandela` +- Update documentation on ESMValTool module at DKRZ (:pull:`1647`) by :user:`remi-kazeroni` +- Expanded information on deprecations in changelog (:pull:`1658`) by :user:`schlunma` Improvements ~~~~~~~~~~~~ -- Removed trailing whitespace in custom CMOR tables (`#1564 `__) `Manuel Schlund `__ -- Try searching multiple ESGF index nodes (`#1561 `__) `Bouwe Andela `__ -- Add CMIP6 `amoc` derivation case and add a test (`#1577 `__) `Valeriu Predoi `__ -- Added EMAC CMORizer (`#1554 `__) `Manuel Schlund `__ -- Improve performance of `volume_statistics` (`#1545 `__) `sloosvel `__ +- Removed trailing whitespace in custom CMOR tables (:pull:`1564`) by :user:`schlunma` +- Try searching multiple ESGF index nodes (:pull:`1561`) by :user:`bouweandela` +- Add CMIP6 `amoc` derivation case and add a test (:pull:`1577`) by :user:`valeriupredoi` +- Added EMAC CMORizer (:pull:`1554`) by :user:`schlunma` +- Improve performance of `volume_statistics` (:pull:`1545`) by :user:`sloosvel` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Fixes of ocean variables in multiple CMIP6 datasets (`#1566 `__) `Tomas Lovato `__ -- Ensure lat/lon bounds in FGOALS-l3 atmos variables are contiguous (`#1571 `__) `sloosvel `__ -- Added `AllVars` fix for CMIP6's ICON-ESM-LR (`#1582 `__) `Manuel Schlund `__ +- Fixes of ocean variables in multiple CMIP6 datasets (:pull:`1566`) by :user:`tomaslovato` +- Ensure lat/lon bounds in FGOALS-l3 atmos variables are contiguous (:pull:`1571`) by :user:`sloosvel` +- Added `AllVars` fix for CMIP6's ICON-ESM-LR (:pull:`1582`) by :user:`schlunma` Installation ~~~~~~~~~~~~ -- Removed `package/meta.yml` (`#1540 `__) `Manuel Schlund `__ -- Pinned iris>=3.2.1 (`#1552 `__) `Manuel Schlund `__ -- Use setuptools-scm to automatically generate the version number (`#1578 `__) `Bouwe Andela `__ -- Pin cf-units to lower than 3.1.0 to temporarily avoid changes within new version related to calendars (`#1659 `__) `Valeriu Predoi `__ +- Removed `package/meta.yml` (:pull:`1540`) by :user:`schlunma` +- Pinned iris>=3.2.1 (:pull:`1552`) by :user:`schlunma` +- Use setuptools-scm to automatically generate the version number (:pull:`1578`) by :user:`bouweandela` +- Pin cf-units to lower than 3.1.0 to temporarily avoid changes within new version related to calendars (:pull:`1659`) by :user:`valeriupredoi` Preprocessor ~~~~~~~~~~~~ -- Allowed special case for unit conversion of precipitation (`kg m-2 s-1` <--> `mm day-1`) (`#1574 `__) `Manuel Schlund `__ -- Add general `extract_coordinate_points` preprocessor (`#1581 `__) `sloosvel `__ -- Add preprocessor `accumulate_coordinate` (`#1281 `__) `Javier Vegas-Regidor `__ -- Add `axis_statistics` and improve `depth_integration` (`#1589 `__) `sloosvel `__ +- Allowed special case for unit conversion of precipitation (`kg m-2 s-1` <--> `mm day-1`) (:pull:`1574`) by :user:`schlunma` +- Add general `extract_coordinate_points` preprocessor (:pull:`1581`) by :user:`sloosvel` +- Add preprocessor `accumulate_coordinate` (:pull:`1281`) by :user:`jvegreg` +- Add `axis_statistics` and improve `depth_integration` (:pull:`1589`) by :user:`sloosvel` Release ~~~~~~~ -- Increase version number for ESMValCore v2.6.0rc1 (`#1632 `__) `sloosvel `__ -- Update changelog and version for 2.6rc3 (`#1646 `__) `sloosvel `__ -- Add changelog for rc4 (`#1662 `__) `sloosvel `__ +- Increase version number for ESMValCore v2.6.0rc1 (:pull:`1632`) by :user:`sloosvel` +- Update changelog and version for 2.6rc3 (:pull:`1646`) by :user:`sloosvel` +- Add changelog for rc4 (:pull:`1662`) by :user:`sloosvel` Automatic testing ~~~~~~~~~~~~~~~~~ -- Refresh CircleCI cache weekly (`#1597 `__) `Bouwe Andela `__ -- Use correct cache restore key on CircleCI (`#1598 `__) `Bouwe Andela `__ -- Install git and ssh before checking out code on CircleCI (`#1601 `__) `Bouwe Andela `__ -- Fetch all history in Github Action tests (`#1622 `__) `sloosvel `__ -- Test Github Actions dashboard badge from meercode.io (`#1640 `__) `Valeriu Predoi `__ -- Improve esmvalcore.esgf unit test (`#1650 `__) `Bouwe Andela `__ +- Refresh CircleCI cache weekly (:pull:`1597`) by :user:`bouweandela` +- Use correct cache restore key on CircleCI (:pull:`1598`) by :user:`bouweandela` +- Install git and ssh before checking out code on CircleCI (:pull:`1601`) by :user:`bouweandela` +- Fetch all history in Github Action tests (:pull:`1622`) by :user:`sloosvel` +- Test Github Actions dashboard badge from meercode.io (:pull:`1640`) by :user:`valeriupredoi` +- Improve esmvalcore.esgf unit test (:pull:`1650`) by :user:`bouweandela` Variable Derivation ~~~~~~~~~~~~~~~~~~~ -- Added derivation of `hfns` (`#1594 `__) `Manuel Schlund `__ +- Added derivation of `hfns` (:pull:`1594`) by :user:`schlunma` .. _changelog-v2-5-0: @@ -731,115 +722,115 @@ This release includes Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Update Cordex section in `config-developer.yml` (`#1303 `__) `francesco-cmcc `__. This changes the naming convention of ESMValCore's output files from CORDEX dataset. This only affects recipes that use CORDEX data. Most likely, no changes in diagnostics are necessary; however, if code relies on the specific naming convention of files, it might need to be adapted. -- Dropped Python 3.7 (`#1530 `__) `Manuel Schlund `__. ESMValCore v2.5.0 dropped support for Python 3.7. From now on Python >=3.8 is required to install ESMValCore. The main reason for this is that conda-forge dropped support for Python 3.7 for OSX and arm64 (more details are given `here `__). +- Update Cordex section in `config-developer.yml` (:pull:`1303`) by :user:`francesco-cmcc`. This changes the naming convention of ESMValCore's output files from CORDEX dataset. This only affects recipes that use CORDEX data. Most likely, no changes in diagnostics are necessary; however, if code relies on the specific naming convention of files, it might need to be adapted. +- Dropped Python 3.7 (:pull:`1530`) by :user:`schlunma`. ESMValCore v2.5.0 dropped support for Python 3.7. From now on Python >=3.8 is required to install ESMValCore. The main reason for this is that conda-forge dropped support for Python 3.7 for OSX and arm64 (more details are given `here `__). Bug fixes ~~~~~~~~~ -- Fix `extract_shape` when fx vars are present (`#1403 `__) `sloosvel `__ -- Added support of `extra_facets` to fx variables added by the preprocessor (`#1399 `__) `Manuel Schlund `__ -- Augmented input for derived variables with extra_facets (`#1412 `__) `Manuel Schlund `__ -- Correctly use masked arrays after `unstructured_nearest` regridding (`#1414 `__) `Manuel Schlund `__ -- Fixing the broken derivation script for XCH4 (and XCO2) (`#1428 `__) `Birgit Hassler `__ -- Ignore `.pymon-journal` file in test discovery (`#1436 `__) `Valeriu Predoi `__ -- Fixed bug that caused automatic download to fail in rare cases (`#1442 `__) `Manuel Schlund `__ -- Add new `JULIA_LOAD_PATH` to diagnostic task test (`#1444 `__) `Valeriu Predoi `__ -- Fix provenance file permissions (`#1468 `__) `Bouwe Andela `__ -- Fixed usage of `statistics=std_dev` option in multi-model statistics preprocessors (`#1478 `__) `Manuel Schlund `__ -- Removed scalar coordinates `p0` and `ptop` prior to merge in `multi_model_statistics` (`#1471 `__) `Axel Lauer `__ -- Added `dataset` and `alias` attributes to `multi_model_statistics` output (`#1483 `__) `Manuel Schlund `__ -- Fixed issues with multi-model-statistics timeranges (`#1486 `__) `Manuel Schlund `__ -- Fixed output messages for CMOR logging (`#1494 `__) `Manuel Schlund `__ -- Fixed `clip_timerange` if only a single time point is extracted (`#1497 `__) `Manuel Schlund `__ -- Fixed chunking in `multi_model_statistics` (`#1500 `__) `Manuel Schlund `__ -- Fixed renaming of auxiliary coordinates in `multi_model_statistics` if coordinates are equal (`#1502 `__) `Manuel Schlund `__ -- Fixed timerange selection for automatic downloads (`#1517 `__) `Manuel Schlund `__ -- Fixed chunking in `multi_model_statistics` (`#1524 `__) `Manuel Schlund `__ +- Fix `extract_shape` when fx vars are present (:pull:`1403`) by :user:`sloosvel` +- Added support of `extra_facets` to fx variables added by the preprocessor (:pull:`1399`) by :user:`schlunma` +- Augmented input for derived variables with extra_facets (:pull:`1412`) by :user:`schlunma` +- Correctly use masked arrays after `unstructured_nearest` regridding (:pull:`1414`) by :user:`schlunma` +- Fixing the broken derivation script for XCH4 (and XCO2) (:pull:`1428`) by :user:`hb326` +- Ignore `.pymon-journal` file in test discovery (:pull:`1436`) by :user:`valeriupredoi` +- Fixed bug that caused automatic download to fail in rare cases (:pull:`1442`) by :user:`schlunma` +- Add new `JULIA_LOAD_PATH` to diagnostic task test (:pull:`1444`) by :user:`valeriupredoi` +- Fix provenance file permissions (:pull:`1468`) by :user:`bouweandela` +- Fixed usage of `statistics=std_dev` option in multi-model statistics preprocessors (:pull:`1478`) by :user:`schlunma` +- Removed scalar coordinates `p0` and `ptop` prior to merge in `multi_model_statistics` (:pull:`1471`) by :user:`axel-lauer` +- Added `dataset` and `alias` attributes to `multi_model_statistics` output (:pull:`1483`) by :user:`schlunma` +- Fixed issues with multi-model-statistics timeranges (:pull:`1486`) by :user:`schlunma` +- Fixed output messages for CMOR logging (:pull:`1494`) by :user:`schlunma` +- Fixed `clip_timerange` if only a single time point is extracted (:pull:`1497`) by :user:`schlunma` +- Fixed chunking in `multi_model_statistics` (:pull:`1500`) by :user:`schlunma` +- Fixed renaming of auxiliary coordinates in `multi_model_statistics` if coordinates are equal (:pull:`1502`) by :user:`schlunma` +- Fixed timerange selection for automatic downloads (:pull:`1517`) by :user:`schlunma` +- Fixed chunking in `multi_model_statistics` (:pull:`1524`) by :user:`schlunma` Deprecations ~~~~~~~~~~~~ -- Renamed vertical regridding schemes (`#1429 `__) `Manuel Schlund `__. Old regridding schemes are supported until v2.7.0. For details, see :ref:`Vertical interpolation schemes `. +- Renamed vertical regridding schemes (:pull:`1429`) by :user:`schlunma`. Old regridding schemes are supported until v2.7.0. For details, see :ref:`Vertical interpolation schemes `. Documentation ~~~~~~~~~~~~~ -- Remove duplicate entries in changelog (`#1391 `__) `Klaus Zimmermann `__ -- Documentation on how to use HPC central installations (`#1409 `__) `Valeriu Predoi `__ -- Correct brackets in preprocessor documentation for list of seasons (`#1420 `__) `Bouwe Andela `__ -- Add Python=3.10 to package info, update Circle CI auto install and documentation for Python=3.10 (`#1432 `__) `Valeriu Predoi `__ -- Reverted unintentional change in `.zenodo.json` (`#1452 `__) `Manuel Schlund `__ -- Synchronized config-user.yml with version from ESMValTool (`#1453 `__) `Manuel Schlund `__ -- Solved issues in configuration files (`#1457 `__) `Manuel Schlund `__ -- Add direct link to download conda lock file in the install documentation (`#1462 `__) `Valeriu Predoi `__ -- CITATION.cff fix and automatic validation of citation metadata (`#1467 `__) `Valeriu Predoi `__ -- Updated documentation on how to deprecate features (`#1426 `__) `Manuel Schlund `__ -- Added reference hook to conda lock in documentation install section (`#1473 `__) `Valeriu Predoi `__ -- Increased ESMValCore version to 2.5.0rc1 (`#1477 `__) `Manuel Schlund `__ -- Added changelog for v2.5.0 release (`#1476 `__) `Manuel Schlund `__ -- Increased ESMValCore version to 2.5.0rc2 (`#1487 `__) `Manuel Schlund `__ -- Added some authors to citation and zenodo files (`#1488 `__) `SarahAlidoost `__ -- Restored `scipy` intersphinx mapping (`#1491 `__) `Manuel Schlund `__ -- Increased ESMValCore version to 2.5.0rc3 (`#1504 `__) `Manuel Schlund `__ -- Fix download instructions for the MSWEP dataset (`#1506 `__) `Rémi Kazeroni `__ -- Documentation updated for the new cmorizer framework (`#1417 `__) `Rémi Kazeroni `__ -- Added tests for duplicates in changelog and removed duplicates (`#1508 `__) `Manuel Schlund `__ -- Increased ESMValCore version to 2.5.0rc4 (`#1519 `__) `Manuel Schlund `__ -- Add Github Actions Test badge in README (`#1526 `__) `Valeriu Predoi `__ -- Increased ESMValCore version to 2.5.0rc5 (`#1529 `__) `Manuel Schlund `__ -- Increased ESMValCore version to 2.5.0rc6 (`#1532 `__) `Manuel Schlund `__ +- Remove duplicate entries in changelog (:pull:`1391`) by :user:`zklaus` +- Documentation on how to use HPC central installations (:pull:`1409`) by :user:`valeriupredoi` +- Correct brackets in preprocessor documentation for list of seasons (:pull:`1420`) by :user:`bouweandela` +- Add Python=3.10 to package info, update Circle CI auto install and documentation for Python=3.10 (:pull:`1432`) by :user:`valeriupredoi` +- Reverted unintentional change in `.zenodo.json` (:pull:`1452`) by :user:`schlunma` +- Synchronized config-user.yml with version from ESMValTool (:pull:`1453`) by :user:`schlunma` +- Solved issues in configuration files (:pull:`1457`) by :user:`schlunma` +- Add direct link to download conda lock file in the install documentation (:pull:`1462`) by :user:`valeriupredoi` +- CITATION.cff fix and automatic validation of citation metadata (:pull:`1467`) by :user:`valeriupredoi` +- Updated documentation on how to deprecate features (:pull:`1426`) by :user:`schlunma` +- Added reference hook to conda lock in documentation install section (:pull:`1473`) by :user:`valeriupredoi` +- Increased ESMValCore version to 2.5.0rc1 (:pull:`1477`) by :user:`schlunma` +- Added changelog for v2.5.0 release (:pull:`1476`) by :user:`schlunma` +- Increased ESMValCore version to 2.5.0rc2 (:pull:`1487`) by :user:`schlunma` +- Added some authors to citation and zenodo files (:pull:`1488`) by :user:`SarahAlidoost` +- Restored `scipy` intersphinx mapping (:pull:`1491`) by :user:`schlunma` +- Increased ESMValCore version to 2.5.0rc3 (:pull:`1504`) by :user:`schlunma` +- Fix download instructions for the MSWEP dataset (:pull:`1506`) by :user:`remi-kazeroni` +- Documentation updated for the new cmorizer framework (:pull:`1417`) by :user:`remi-kazeroni` +- Added tests for duplicates in changelog and removed duplicates (:pull:`1508`) by :user:`schlunma` +- Increased ESMValCore version to 2.5.0rc4 (:pull:`1519`) by :user:`schlunma` +- Add Github Actions Test badge in README (:pull:`1526`) by :user:`valeriupredoi` +- Increased ESMValCore version to 2.5.0rc5 (:pull:`1529`) by :user:`schlunma` +- Increased ESMValCore version to 2.5.0rc6 (:pull:`1532`) by :user:`schlunma` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Added fix for AIRS v2.1 (obs4mips) (`#1472 `__) `Axel Lauer `__ +- Added fix for AIRS v2.1 (obs4mips) (:pull:`1472`) by :user:`axel-lauer` Preprocessor ~~~~~~~~~~~~ -- Added bias preprocessor (`#1406 `__) `Manuel Schlund `__ -- Improve error messages when a preprocessor is failing (`#1408 `__) `Manuel Schlund `__ -- Added option to explicitly not use fx variables in preprocessors (`#1416 `__) `Manuel Schlund `__ -- Add `extract_location` preprocessor to extract town, city, mountains etc - anything specifiable by a location (`#1251 `__) `Javier Vegas-Regidor `__ -- Add ensemble statistics preprocessor and 'groupby' option for multimodel (`#673 `__) `sloosvel `__ -- Generic regridding preprocessor (`#1448 `__) `Klaus Zimmermann `__ +- Added bias preprocessor (:pull:`1406`) by :user:`schlunma` +- Improve error messages when a preprocessor is failing (:pull:`1408`) by :user:`schlunma` +- Added option to explicitly not use fx variables in preprocessors (:pull:`1416`) by :user:`schlunma` +- Add `extract_location` preprocessor to extract town, city, mountains etc - anything specifiable by a location (:pull:`1251`) by :user:`jvegreg` +- Add ensemble statistics preprocessor and 'groupby' option for multimodel (:pull:`673`) by :user:`sloosvel` +- Generic regridding preprocessor (:pull:`1448`) by :user:`zklaus` Automatic testing ~~~~~~~~~~~~~~~~~ -- Add `pandas` as dependency :panda_face: (`#1402 `__) `Valeriu Predoi `__ -- Fixed tests for python 3.7 (`#1410 `__) `Manuel Schlund `__ -- Remove accessing `.xml()` cube method from test (`#1419 `__) `Valeriu Predoi `__ -- Remove flag to use pip 2020 solver from Github Action pip install command on OSX (`#1357 `__) `Valeriu Predoi `__ -- Add Python=3.10 to Github Actions and switch to Python=3.10 for the Github Action that builds the PyPi package (`#1430 `__) `Valeriu Predoi `__ -- Pin `flake8<4` to keep getting relevant error traces when tests fail with FLAKE8 issues (`#1434 `__) `Valeriu Predoi `__ -- Implementing conda lock (`#1164 `__) `Valeriu Predoi `__ -- Relocate `pytest-monitor` outputted database `.pymon` so `.pymon-journal` file should not be looked for by `pytest` (`#1441 `__) `Valeriu Predoi `__ -- Switch to Mambaforge in Github Actions tests (`#1438 `__) `Valeriu Predoi `__ -- Turn off conda lock file creation on any push on `main` branch from Github Action test (`#1489 `__) `Valeriu Predoi `__ -- Add DRS path test for IPSLCM files (`#1490 `__) `Stéphane Sénési `__ -- Add a test module that runs tests of `iris` I/O every time we notice serious bugs there (`#1510 `__) `Valeriu Predoi `__ -- [Github Actions] Trigger Github Actions tests (`run-tests.yml` workflow) from a comment in a PR (`#1520 `__) `Valeriu Predoi `__ +- Add `pandas` as dependency :panda_face: (:pull:`1402`) by :user:`valeriupredoi` +- Fixed tests for python 3.7 (:pull:`1410`) by :user:`schlunma` +- Remove accessing `.xml()` cube method from test (:pull:`1419`) by :user:`valeriupredoi` +- Remove flag to use pip 2020 solver from Github Action pip install command on OSX (:pull:`1357`) by :user:`valeriupredoi` +- Add Python=3.10 to Github Actions and switch to Python=3.10 for the Github Action that builds the PyPi package (:pull:`1430`) by :user:`valeriupredoi` +- Pin `flake8<4` to keep getting relevant error traces when tests fail with FLAKE8 issues (:pull:`1434`) by :user:`valeriupredoi` +- Implementing conda lock (:pull:`1164`) by :user:`valeriupredoi` +- Relocate `pytest-monitor` outputted database `.pymon` so `.pymon-journal` file should not be looked for by `pytest` (:pull:`1441`) by :user:`valeriupredoi` +- Switch to Mambaforge in Github Actions tests (:pull:`1438`) by :user:`valeriupredoi` +- Turn off conda lock file creation on any push on `main` branch from Github Action test (:pull:`1489`) by :user:`valeriupredoi` +- Add DRS path test for IPSLCM files (:pull:`1490`) by :user:`senesis` +- Add a test module that runs tests of `iris` I/O every time we notice serious bugs there (:pull:`1510`) by :user:`valeriupredoi` +- [Github Actions] Trigger Github Actions tests (`run-tests.yml` workflow) from a comment in a PR (:pull:`1520`) by :user:`valeriupredoi` - Update Linux condalock file (various pull requests) github-actions[bot] Installation ~~~~~~~~~~~~ -- Move `nested-lookup` dependency to `environment.yml` to be installed from conda-forge instead of PyPi (`#1481 `__) `Valeriu Predoi `__ -- Pinned `iris` (`#1511 `__) `Manuel Schlund `__ -- Updated dependencies (`#1521 `__) `Manuel Schlund `__ -- Pinned iris<3.2.0 (`#1525 `__) `Manuel Schlund `__ +- Move `nested-lookup` dependency to `environment.yml` to be installed from conda-forge instead of PyPi (:pull:`1481`) by :user:`valeriupredoi` +- Pinned `iris` (:pull:`1511`) by :user:`schlunma` +- Updated dependencies (:pull:`1521`) by :user:`schlunma` +- Pinned iris<3.2.0 (:pull:`1525`) by :user:`schlunma` Improvements ~~~~~~~~~~~~ -- Allow to load all files, first X years or last X years in an experiment (`#1133 `__) `sloosvel `__ -- Filter tasks earlier (`#1264 `__) `Javier Vegas-Regidor `__ -- Added earlier validation for command line arguments (`#1435 `__) `Manuel Schlund `__ -- Remove `profile_diagnostic` from diagnostic settings and increase test coverage of `_task.py` (`#1404 `__) `Valeriu Predoi `__ -- Add `output2` to the `product` extra facet of CMIP5 data (`#1514 `__) `Rémi Kazeroni `__ -- Speed up ESGF search (`#1512 `__) `Bouwe Andela `__ +- Allow to load all files, first X years or last X years in an experiment (:pull:`1133`) by :user:`sloosvel` +- Filter tasks earlier (:pull:`1264`) by :user:`jvegreg` +- Added earlier validation for command line arguments (:pull:`1435`) by :user:`schlunma` +- Remove `profile_diagnostic` from diagnostic settings and increase test coverage of `_task.py` (:pull:`1404`) by :user:`valeriupredoi` +- Add `output2` to the `product` extra facet of CMIP5 data (:pull:`1514`) by :user:`remi-kazeroni` +- Speed up ESGF search (:pull:`1512`) by :user:`bouweandela` .. _changelog-v2-4-0: @@ -858,108 +849,108 @@ This release includes Bug fixes ~~~~~~~~~ -- Crop on the ID-selected region(s) and not on the whole shapefile (`#1151 `__) `Stef Smeets `__ -- Add 'comment' to list of removed attributes (`#1244 `__) `Peter Kalverla `__ -- Speed up multimodel statistics and fix bug in peak computation (`#1301 `__) `Bouwe Andela `__ -- No longer make plots of provenance (`#1307 `__) `Bouwe Andela `__ -- No longer embed provenance in output files (`#1306 `__) `Bouwe Andela `__ -- Removed automatic addition of areacello to obs4mips datasets (`#1316 `__) `Manuel Schlund `__ -- Pin docutils <0.17 to fix bullet lists on readthedocs (`#1320 `__) `Klaus Zimmermann `__ -- Fix obs4MIPs capitalization (`#1328 `__) `Bouwe Andela `__ -- Fix Python 3.7 tests (`#1330 `__) `Bouwe Andela `__ -- Handle fx variables in `extract_levels` and some time operations (`#1269 `__) `sloosvel `__ -- Refactored mask regridding for irregular grids (fixes #772) (`#865 `__) `Klaus Zimmermann `__ -- Fix `da.broadcast_to` call when the fx cube has different shape than target data cube (`#1350 `__) `Valeriu Predoi `__ -- Add tests for _aggregate_time_fx (`#1354 `__) `sloosvel `__ -- Fix extra facets (`#1360 `__) `Bouwe Andela `__ -- Pin pip!=21.3 to avoid pypa/pip#10573 with editable installs (`#1359 `__) `Klaus Zimmermann `__ -- Add a custom `date2num` function to deal with changes in cftime (`#1373 `__) `Klaus Zimmermann `__ -- Removed custom version of `AtmosphereSigmaFactory` (`#1382 `__) `Manuel Schlund `__ +- Crop on the ID-selected region(s) and not on the whole shapefile (:pull:`1151`) by :user:`stefsmeets` +- Add 'comment' to list of removed attributes (:pull:`1244`) by :user:`Peter9192` +- Speed up multimodel statistics and fix bug in peak computation (:pull:`1301`) by :user:`bouweandela` +- No longer make plots of provenance (:pull:`1307`) by :user:`bouweandela` +- No longer embed provenance in output files (:pull:`1306`) by :user:`bouweandela` +- Removed automatic addition of areacello to obs4mips datasets (:pull:`1316`) by :user:`schlunma` +- Pin docutils <0.17 to fix bullet lists on readthedocs (:pull:`1320`) by :user:`zklaus` +- Fix obs4MIPs capitalization (:pull:`1328`) by :user:`bouweandela` +- Fix Python 3.7 tests (:pull:`1330`) by :user:`bouweandela` +- Handle fx variables in `extract_levels` and some time operations (:pull:`1269`) by :user:`sloosvel` +- Refactored mask regridding for irregular grids (fixes #772) (:pull:`865`) by :user:`zklaus` +- Fix `da.broadcast_to` call when the fx cube has different shape than target data cube (:pull:`1350`) by :user:`valeriupredoi` +- Add tests for _aggregate_time_fx (:pull:`1354`) by :user:`sloosvel` +- Fix extra facets (:pull:`1360`) by :user:`bouweandela` +- Pin pip!=21.3 to avoid pypa/pip#10573 with editable installs (:pull:`1359`) by :user:`zklaus` +- Add a custom `date2num` function to deal with changes in cftime (:pull:`1373`) by :user:`zklaus` +- Removed custom version of `AtmosphereSigmaFactory` (:pull:`1382`) by :user:`schlunma` Deprecations ~~~~~~~~~~~~ -- Remove write_netcdf and write_plots from config-user.yml (`#1300 `__) `Bouwe Andela `__ +- Remove write_netcdf and write_plots from config-user.yml (:pull:`1300`) by :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Add link to plot directory in index.html (`#1256 `__) `Stef Smeets `__ -- Work around issue with yapf not following PEP8 (`#1277 `__) `Bouwe Andela `__ -- Update the core development team (`#1278 `__) `Bouwe Andela `__ -- Update the documentation of the provenance interface (`#1305 `__) `Bouwe Andela `__ -- Update version number to first release candidate 2.4.0rc1 (`#1363 `__) `Klaus Zimmermann `__ -- Update to new ESMValTool logo (`#1374 `__) `Klaus Zimmermann `__ -- Update version number for third release candidate 2.4.0rc3 (`#1384 `__) `Klaus Zimmermann `__ -- Update changelog for 2.4.0rc3 (`#1385 `__) `Klaus Zimmermann `__ -- Update version number to final 2.4.0 release (`#1389 `__) `Klaus Zimmermann `__ -- Update changelog for 2.4.0 (`#1366 `__) `Klaus Zimmermann `__ +- Add link to plot directory in index.html (:pull:`1256`) by :user:`stefsmeets` +- Work around issue with yapf not following PEP8 (:pull:`1277`) by :user:`bouweandela` +- Update the core development team (:pull:`1278`) by :user:`bouweandela` +- Update the documentation of the provenance interface (:pull:`1305`) by :user:`bouweandela` +- Update version number to first release candidate 2.4.0rc1 (:pull:`1363`) by :user:`zklaus` +- Update to new ESMValTool logo (:pull:`1374`) by :user:`zklaus` +- Update version number for third release candidate 2.4.0rc3 (:pull:`1384`) by :user:`zklaus` +- Update changelog for 2.4.0rc3 (:pull:`1385`) by :user:`zklaus` +- Update version number to final 2.4.0 release (:pull:`1389`) by :user:`zklaus` +- Update changelog for 2.4.0 (:pull:`1366`) by :user:`zklaus` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Add fix for differing latitude coordinate between historical and ssp585 in MPI-ESM1-2-HR r2i1p1f1 (`#1292 `__) `Bouwe Andela `__ -- Add fixes for time and latitude coordinate of EC-Earth3 r3i1p1f1 (`#1290 `__) `Bouwe Andela `__ -- Apply latitude fix to all CCSM4 variables (`#1295 `__) `Bouwe Andela `__ -- Fix lat and lon bounds for FGOALS-g3 mrsos (`#1289 `__) `Thomas Crocker `__ -- Add grid fix for tos in fgoals-f3-l (`#1326 `__) `sloosvel `__ -- Add fix for CIESM pr (`#1344 `__) `Bouwe Andela `__ -- Fix DRS for IPSLCM : split attribute 'freq' into : 'out' and 'freq' (`#1304 `__) `Stéphane Sénési - work `__ +- Add fix for differing latitude coordinate between historical and ssp585 in MPI-ESM1-2-HR r2i1p1f1 (:pull:`1292`) by :user:`bouweandela` +- Add fixes for time and latitude coordinate of EC-Earth3 r3i1p1f1 (:pull:`1290`) by :user:`bouweandela` +- Apply latitude fix to all CCSM4 variables (:pull:`1295`) by :user:`bouweandela` +- Fix lat and lon bounds for FGOALS-g3 mrsos (:pull:`1289`) by :user:`thomascrocker` +- Add grid fix for tos in fgoals-f3-l (:pull:`1326`) by :user:`sloosvel` +- Add fix for CIESM pr (:pull:`1344`) by :user:`bouweandela` +- Fix DRS for IPSLCM : split attribute 'freq' into : 'out' and 'freq' (:pull:`1304`) by :user:`senesis` CMOR standard ~~~~~~~~~~~~~ -- Remove history attribute from coords (`#1276 `__) `Javier Vegas-Regidor `__ -- Increased flexibility of CMOR checks for datasets with generic alevel coordinates (`#1032 `__) `Manuel Schlund `__ -- Automatically fix small deviations in vertical levels (`#1177 `__) `Bouwe Andela `__ -- Adding standard names to the custom tables of the `rlns` and `rsns` variables (`#1386 `__) `Rémi Kazeroni `__ +- Remove history attribute from coords (:pull:`1276`) by :user:`jvegreg` +- Increased flexibility of CMOR checks for datasets with generic alevel coordinates (:pull:`1032`) by :user:`schlunma` +- Automatically fix small deviations in vertical levels (:pull:`1177`) by :user:`bouweandela` +- Adding standard names to the custom tables of the `rlns` and `rsns` variables (:pull:`1386`) by :user:`remi-kazeroni` Preprocessor ~~~~~~~~~~~~ -- Implemented fully lazy climate_statistics (`#1194 `__) `Manuel Schlund `__ -- Run the multimodel statistics preprocessor last (`#1299 `__) `Bouwe Andela `__ +- Implemented fully lazy climate_statistics (:pull:`1194`) by :user:`schlunma` +- Run the multimodel statistics preprocessor last (:pull:`1299`) by :user:`bouweandela` Automatic testing ~~~~~~~~~~~~~~~~~ -- Improving test coverage for _task.py (`#514 `__) `Valeriu Predoi `__ -- Upload coverage to codecov (`#1190 `__) `Bouwe Andela `__ -- Improve codecov status checks (`#1195 `__) `Bouwe Andela `__ -- Fix curl install in CircleCI (`#1228 `__) `Javier Vegas-Regidor `__ -- Drop support for Python 3.6 (`#1200 `__) `Valeriu Predoi `__ -- Allow more recent version of `scipy` (`#1182 `__) `Manuel Schlund `__ -- Speed up conda build `conda_build` Circle test by using `mamba` solver via `boa` (and use it for Github Actions test too) (`#1243 `__) `Valeriu Predoi `__ -- Fix numpy deprecation warnings (`#1274 `__) `Bouwe Andela `__ -- Unpin upper bound for iris (previously was at <3.0.4) (`#1275 `__) `Valeriu Predoi `__ -- Modernize `conda_install` test on Circle CI by installing from conda-forge with Python 3.9 and change install instructions in documentation (`#1280 `__) `Valeriu Predoi `__ -- Run a nightly Github Actions workflow to monitor tests memory per test (configurable for other metrics too) (`#1284 `__) `Valeriu Predoi `__ -- Speed up tests of tasks (`#1302 `__) `Bouwe Andela `__ -- Fix upper case to lower case variables and functions for flake compliance in `tests/unit/preprocessor/_regrid/test_extract_levels.py` (`#1347 `__) `Valeriu Predoi `__ -- Cleaned up a bit Github Actions workflows (`#1345 `__) `Valeriu Predoi `__ -- Update circleci jobs: renaming tests to more descriptive names and removing conda build test (`#1351 `__) `Klaus Zimmermann `__ -- Pin iris to latest `>=3.1.0` (`#1341 `__) `Valeriu Predoi `__ +- Improving test coverage for _task.py (:pull:`514`) by :user:`valeriupredoi` +- Upload coverage to codecov (:pull:`1190`) by :user:`bouweandela` +- Improve codecov status checks (:pull:`1195`) by :user:`bouweandela` +- Fix curl install in CircleCI (:pull:`1228`) by :user:`jvegreg` +- Drop support for Python 3.6 (:pull:`1200`) by :user:`valeriupredoi` +- Allow more recent version of `scipy` (:pull:`1182`) by :user:`schlunma` +- Speed up conda build `conda_build` Circle test by using `mamba` solver via `boa` (and use it for Github Actions test too) (:pull:`1243`) by :user:`valeriupredoi` +- Fix numpy deprecation warnings (:pull:`1274`) by :user:`bouweandela` +- Unpin upper bound for iris (previously was at <3.0.4) (:pull:`1275`) by :user:`valeriupredoi` +- Modernize `conda_install` test on Circle CI by installing from conda-forge with Python 3.9 and change install instructions in documentation (:pull:`1280`) by :user:`valeriupredoi` +- Run a nightly Github Actions workflow to monitor tests memory per test (configurable for other metrics too) (:pull:`1284`) by :user:`valeriupredoi` +- Speed up tests of tasks (:pull:`1302`) by :user:`bouweandela` +- Fix upper case to lower case variables and functions for flake compliance in `tests/unit/preprocessor/_regrid/test_extract_levels.py` (:pull:`1347`) by :user:`valeriupredoi` +- Cleaned up a bit Github Actions workflows (:pull:`1345`) by :user:`valeriupredoi` +- Update circleci jobs: renaming tests to more descriptive names and removing conda build test (:pull:`1351`) by :user:`zklaus` +- Pin iris to latest `>=3.1.0` (:pull:`1341`) by :user:`valeriupredoi` Installation ~~~~~~~~~~~~ -- Pin esmpy to anything but 8.1.0 since that particular one changes the CPU affinity (`#1310 `__) `Valeriu Predoi `__ +- Pin esmpy to anything but 8.1.0 since that particular one changes the CPU affinity (:pull:`1310`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Add a more friendly and useful message when using default config file (`#1233 `__) `Valeriu Predoi `__ -- Replace os.walk by glob.glob in data finder (only look for data in the specified locations) (`#1261 `__) `Bouwe Andela `__ -- Machine-specific directories for auxiliary data in the `config-user.yml` file (`#1268 `__) `Rémi Kazeroni `__ -- Add an option to download missing data from ESGF (`#1217 `__) `Bouwe Andela `__ -- Speed up provenance recording (`#1327 `__) `Bouwe Andela `__ -- Improve results web page (`#1332 `__) `Bouwe Andela `__ -- Move institutes from config-developer.yml to default extra facets config and add wildcard support for extra facets (`#1259 `__) `Bouwe Andela `__ -- Add support for re-using preprocessor output from previous runs (`#1321 `__) `Bouwe Andela `__ -- Log fewer messages to screen and hide stack trace for known recipe errors (`#1296 `__) `Bouwe Andela `__ -- Log ESMValCore and ESMValTool versions when running (`#1263 `__) `Javier Vegas-Regidor `__ -- Add "grid" as a tag to the output file template for CMIP6 (`#1356 `__) `Klaus Zimmermann `__ -- Implemented ICON project to read native ICON model output (`#1079 `__) `Brei Soliño `__ +- Add a more friendly and useful message when using default config file (:pull:`1233`) by :user:`valeriupredoi` +- Replace os.walk by glob.glob in data finder (only look for data in the specified locations) (:pull:`1261`) by :user:`bouweandela` +- Machine-specific directories for auxiliary data in the `config-user.yml` file (:pull:`1268`) by :user:`remi-kazeroni` +- Add an option to download missing data from ESGF (:pull:`1217`) by :user:`bouweandela` +- Speed up provenance recording (:pull:`1327`) by :user:`bouweandela` +- Improve results web page (:pull:`1332`) by :user:`bouweandela` +- Move institutes from config-developer.yml to default extra facets config and add wildcard support for extra facets (:pull:`1259`) by :user:`bouweandela` +- Add support for re-using preprocessor output from previous runs (:pull:`1321`) by :user:`bouweandela` +- Log fewer messages to screen and hide stack trace for known recipe errors (:pull:`1296`) by :user:`bouweandela` +- Log ESMValCore and ESMValTool versions when running (:pull:`1263`) by :user:`jvegreg` +- Add "grid" as a tag to the output file template for CMIP6 (:pull:`1356`) by :user:`zklaus` +- Implemented ICON project to read native ICON model output (:pull:`1079`) by :user:`bsolino` .. _changelog-v2-3-1: @@ -972,45 +963,45 @@ This release includes Bug fixes ~~~~~~~~~ -- Update config-user.yml template with correct drs entries for CEDA-JASMIN (`#1184 `__) `Valeriu Predoi `__ -- Enhancing MIROC5 fix for hfls and evspsbl (`#1192 `__) `katjaweigel `__ -- Fix alignment of daily data with inconsistent calendars in multimodel statistics (`#1212 `__) `Peter Kalverla `__ -- Pin cf-units, remove github actions test for Python 3.6 and fix test_access1_0 and test_access1_3 to use cf-units for comparisons (`#1197 `__) `Valeriu Predoi `__ -- Fixed search for fx files when no ``mip`` is given (`#1216 `__) `Manuel Schlund `__ -- Make sure climate statistics always returns original dtype (`#1237 `__) `Klaus Zimmermann `__ -- Bugfix for regional regridding when non-integer range is passed (`#1231 `__) `Stef Smeets `__ -- Make sure area_statistics preprocessor always returns original dtype (`#1239 `__) `Klaus Zimmermann `__ -- Add "." (dot) as allowed separation character for the time range group (`#1248 `__) `Klaus Zimmermann `__ +- Update config-user.yml template with correct drs entries for CEDA-JASMIN (:pull:`1184`) by :user:`valeriupredoi` +- Enhancing MIROC5 fix for hfls and evspsbl (:pull:`1192`) by :user:`katjaweigel` +- Fix alignment of daily data with inconsistent calendars in multimodel statistics (:pull:`1212`) by :user:`Peter9192` +- Pin cf-units, remove github actions test for Python 3.6 and fix test_access1_0 and test_access1_3 to use cf-units for comparisons (:pull:`1197`) by :user:`valeriupredoi` +- Fixed search for fx files when no ``mip`` is given (:pull:`1216`) by :user:`schlunma` +- Make sure climate statistics always returns original dtype (:pull:`1237`) by :user:`zklaus` +- Bugfix for regional regridding when non-integer range is passed (:pull:`1231`) by :user:`stefsmeets` +- Make sure area_statistics preprocessor always returns original dtype (:pull:`1239`) by :user:`zklaus` +- Add "." (dot) as allowed separation character for the time range group (:pull:`1248`) by :user:`zklaus` Documentation ~~~~~~~~~~~~~ -- Add a link to the instructions to use pre-installed versions on HPC clusters (`#1186 `__) `Rémi Kazeroni `__ -- Bugfix release: set version to 2.3.1 (`#1253 `__) `Klaus Zimmermann `__ +- Add a link to the instructions to use pre-installed versions on HPC clusters (:pull:`1186`) by :user:`remi-kazeroni` +- Bugfix release: set version to 2.3.1 (:pull:`1253`) by :user:`zklaus` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Set circular attribute in MCM-UA-1-0 fix (`#1178 `__) `sloosvel `__ -- Fixed time coordinate of MIROC-ESM (`#1188 `__) `Manuel Schlund `__ +- Set circular attribute in MCM-UA-1-0 fix (:pull:`1178`) by :user:`sloosvel` +- Fixed time coordinate of MIROC-ESM (:pull:`1188`) by :user:`schlunma` Preprocessor ~~~~~~~~~~~~ -- Filter warnings about collapsing multi-model dimension in multimodel statistics preprocessor function (`#1215 `__) `Bouwe Andela `__ -- Remove fx variables before computing multimodel statistics (`#1220 `__) `sloosvel `__ +- Filter warnings about collapsing multi-model dimension in multimodel statistics preprocessor function (:pull:`1215`) by :user:`bouweandela` +- Remove fx variables before computing multimodel statistics (:pull:`1220`) by :user:`sloosvel` Installation ~~~~~~~~~~~~ -- Pin lower bound for iris to 3.0.2 (`#1206 `__) `Valeriu Predoi `__ -- Pin `iris<3.0.4` to ensure we still (sort of) support Python 3.6 (`#1252 `__) `Valeriu Predoi `__ +- Pin lower bound for iris to 3.0.2 (:pull:`1206`) by :user:`valeriupredoi` +- Pin `iris<3.0.4` to ensure we still (sort of) support Python 3.6 (:pull:`1252`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Add test to verify behaviour for scalar height coord for tas in multi-model (`#1209 `__) `Peter Kalverla `__ -- Sort missing years in "No input data available for years" message (`#1225 `__) `Lee de Mora `__ +- Add test to verify behaviour for scalar height coord for tas in multi-model (:pull:`1209`) by :user:`Peter9192` +- Sort missing years in "No input data available for years" message (:pull:`1225`) by :user:`ledm` .. _changelog-v2-3-0: @@ -1023,24 +1014,24 @@ This release includes Bug fixes ~~~~~~~~~ -- Extend preprocessor multi_model_statistics to handle data with "altitude" coordinate (`#1010 `__) `Axel Lauer `__ -- Remove scripts included with CMOR tables (`#1011 `__) `Bouwe Andela `__ -- Avoid side effects in extract_season (`#1019 `__) `Javier Vegas-Regidor `__ -- Use nearest scheme to avoid interpolation errors with masked data in regression test (`#1021 `__) `Stef Smeets `__ -- Move _get_time_bounds from preprocessor._time to cmor.check to avoid circular import with cmor module (`#1037 `__) `Valeriu Predoi `__ -- Fix test that makes conda build fail (`#1046 `__) `Valeriu Predoi `__ -- Fix 'positive' attribute for rsns/rlns variables (`#1051 `__) `Lukas Brunner `__ -- Added preprocessor mask_multimodel (`#767 `__) `Manuel Schlund `__ -- Fix bug when fixing bounds after fixing longitude values (`#1057 `__) `sloosvel `__ -- Run conda build parallel AND sequential tests (`#1065 `__) `Valeriu Predoi `__ -- Add key to id_prop (`#1071 `__) `Lukas Brunner `__ -- Fix bounds after reversing coordinate values (`#1061 `__) `sloosvel `__ -- Fixed --skip-nonexistent option (`#1093 `__) `Manuel Schlund `__ -- Do not consider CMIP5 variable sit to be the same as sithick from CMIP6 (`#1033 `__) `Bouwe Andela `__ -- Improve finding date range in filenames (enforces separators) (`#1145 `__) `Stéphane Sénési - work `__ -- Review fx handling (`#1147 `__) `sloosvel `__ -- Fix lru cache decorator with explicit call to method (`#1172 `__) `Valeriu Predoi `__ -- Update _volume.py (`#1174 `__) `Lee de Mora `__ +- Extend preprocessor multi_model_statistics to handle data with "altitude" coordinate (:pull:`1010`) by :user:`axel-lauer` +- Remove scripts included with CMOR tables (:pull:`1011`) by :user:`bouweandela` +- Avoid side effects in extract_season (:pull:`1019`) by :user:`jvegreg` +- Use nearest scheme to avoid interpolation errors with masked data in regression test (:pull:`1021`) by :user:`stefsmeets` +- Move _get_time_bounds from preprocessor._time to cmor.check to avoid circular import with cmor module (:pull:`1037`) by :user:`valeriupredoi` +- Fix test that makes conda build fail (:pull:`1046`) by :user:`valeriupredoi` +- Fix 'positive' attribute for rsns/rlns variables (:pull:`1051`) by :user:`lukasbrunner` +- Added preprocessor mask_multimodel (:pull:`767`) by :user:`schlunma` +- Fix bug when fixing bounds after fixing longitude values (:pull:`1057`) by :user:`sloosvel` +- Run conda build parallel AND sequential tests (:pull:`1065`) by :user:`valeriupredoi` +- Add key to id_prop (:pull:`1071`) by :user:`lukasbrunner` +- Fix bounds after reversing coordinate values (:pull:`1061`) by :user:`sloosvel` +- Fixed --skip-nonexistent option (:pull:`1093`) by :user:`schlunma` +- Do not consider CMIP5 variable sit to be the same as sithick from CMIP6 (:pull:`1033`) by :user:`bouweandela` +- Improve finding date range in filenames (enforces separators) (:pull:`1145`) by :user:`senesis` +- Review fx handling (:pull:`1147`) by :user:`sloosvel` +- Fix lru cache decorator with explicit call to method (:pull:`1172`) by :user:`valeriupredoi` +- Update _volume.py (:pull:`1174`) by :user:`ledm` Deprecations ~~~~~~~~~~~~ @@ -1050,53 +1041,53 @@ Deprecations Documentation ~~~~~~~~~~~~~ -- Final changelog for 2.3.0 (`#1163 `__) `Klaus Zimmermann `__ -- Set version to 2.3.0 (`#1162 `__) `Klaus Zimmermann `__ -- Fix documentation build (`#1006 `__) `Bouwe Andela `__ -- Add labels required for linking from ESMValTool docs (`#1038 `__) `Bouwe Andela `__ -- Update contribution guidelines (`#1047 `__) `Bouwe Andela `__ -- Fix basestring references in documentation (`#1106 `__) `Javier Vegas-Regidor `__ -- Updated references master to main (`#1132 `__) `Axel Lauer `__ -- Add instructions how to use the central installation at DKRZ-Mistral (`#1155 `__) `Rémi Kazeroni `__ +- Final changelog for 2.3.0 (:pull:`1163`) by :user:`zklaus` +- Set version to 2.3.0 (:pull:`1162`) by :user:`zklaus` +- Fix documentation build (:pull:`1006`) by :user:`bouweandela` +- Add labels required for linking from ESMValTool docs (:pull:`1038`) by :user:`bouweandela` +- Update contribution guidelines (:pull:`1047`) by :user:`bouweandela` +- Fix basestring references in documentation (:pull:`1106`) by :user:`jvegreg` +- Updated references master to main (:pull:`1132`) by :user:`axel-lauer` +- Add instructions how to use the central installation at DKRZ-Mistral (:pull:`1155`) by :user:`remi-kazeroni` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Added fixes for various CMIP5 datasets, variable cl (3-dim cloud fraction) (`#1017 `__) `Axel Lauer `__ -- Added fixes for hybrid level coordinates of CESM2 models (`#882 `__) `Manuel Schlund `__ -- Extending LWP fix for CMIP6 models (`#1049 `__) `Axel Lauer `__ -- Add fixes for the net & up radiation variables from ERA5 (`#1052 `__) `Lukas Brunner `__ -- Add derived variable rsus (`#1053 `__) `Lukas Brunner `__ -- Supported `mip`-level fixes (`#1095 `__) `Manuel Schlund `__ -- Fix erroneous use of `grid_latitude` and `grid_longitude` and cleaned ocean grid fixes (`#1092 `__) `Manuel Schlund `__ -- Fix for pr of miroc5 (`#1110 `__) `Rémi Kazeroni `__ -- Ocean depth fix for cnrm_esm2_1, gfdl_esm4, ipsl_cm6a_lr datasets + mcm_ua_1_0 (`#1098 `__) `Tomas Lovato `__ -- Fix for uas variable of the MCM_UA_1_0 dataset (`#1102 `__) `Rémi Kazeroni `__ -- Fixes for sos and siconc of BCC models (`#1090 `__) `Rémi Kazeroni `__ -- Run fgco2 fix for all CESM2 models (`#1108 `__) `Lisa Bock `__ -- Fixes for the siconc variable of CMIP6 models (`#1105 `__) `Rémi Kazeroni `__ -- Fix wrong sign for land surface flux (`#1113 `__) `Lisa Bock `__ -- Fix for pr of EC_EARTH (`#1116 `__) `Rémi Kazeroni `__ +- Added fixes for various CMIP5 datasets, variable cl (3-dim cloud fraction) (:pull:`1017`) by :user:`axel-lauer` +- Added fixes for hybrid level coordinates of CESM2 models (:pull:`882`) by :user:`schlunma` +- Extending LWP fix for CMIP6 models (:pull:`1049`) by :user:`axel-lauer` +- Add fixes for the net & up radiation variables from ERA5 (:pull:`1052`) by :user:`lukasbrunner` +- Add derived variable rsus (:pull:`1053`) by :user:`lukasbrunner` +- Supported `mip`-level fixes (:pull:`1095`) by :user:`schlunma` +- Fix erroneous use of `grid_latitude` and `grid_longitude` and cleaned ocean grid fixes (:pull:`1092`) by :user:`schlunma` +- Fix for pr of miroc5 (:pull:`1110`) by :user:`remi-kazeroni` +- Ocean depth fix for cnrm_esm2_1, gfdl_esm4, ipsl_cm6a_lr datasets + mcm_ua_1_0 (:pull:`1098`) by :user:`tomaslovato` +- Fix for uas variable of the MCM_UA_1_0 dataset (:pull:`1102`) by :user:`remi-kazeroni` +- Fixes for sos and siconc of BCC models (:pull:`1090`) by :user:`remi-kazeroni` +- Run fgco2 fix for all CESM2 models (:pull:`1108`) by :user:`LisaBock` +- Fixes for the siconc variable of CMIP6 models (:pull:`1105`) by :user:`remi-kazeroni` +- Fix wrong sign for land surface flux (:pull:`1113`) by :user:`LisaBock` +- Fix for pr of EC_EARTH (:pull:`1116`) by :user:`remi-kazeroni` CMOR standard ~~~~~~~~~~~~~ -- Format cmor related files (`#976 `__) `Javier Vegas-Regidor `__ -- Check presence of time bounds and guess them if needed (`#849 `__) `sloosvel `__ -- Add custom variable "tasaga" (`#1118 `__) `Lisa Bock `__ -- Find files for CMIP6 DCPP startdates (`#771 `__) `sloosvel `__ +- Format cmor related files (:pull:`976`) by :user:`jvegreg` +- Check presence of time bounds and guess them if needed (:pull:`849`) by :user:`sloosvel` +- Add custom variable "tasaga" (:pull:`1118`) by :user:`LisaBock` +- Find files for CMIP6 DCPP startdates (:pull:`771`) by :user:`sloosvel` Preprocessor ~~~~~~~~~~~~ -- Update tests for multimodel statistics preprocessor (`#1023 `__) `Stef Smeets `__ -- Raise in extract_season and extract_month if result is None (`#1041 `__) `Javier Vegas-Regidor `__ -- Allow selection of shapes in extract_shape (`#764 `__) `Javier Vegas-Regidor `__ -- Add option for regional regridding to regrid preprocessor (`#1034 `__) `Stef Smeets `__ -- Load fx variables as cube cell measures / ancillary variables (`#999 `__) `sloosvel `__ -- Check horizontal grid before regridding (`#507 `__) `Benjamin Müller `__ -- Clip irregular grids (`#245 `__) `Bouwe Andela `__ -- Use native iris functions in multi-model statistics (`#1150 `__) `Peter Kalverla `__ +- Update tests for multimodel statistics preprocessor (:pull:`1023`) by :user:`stefsmeets` +- Raise in extract_season and extract_month if result is None (:pull:`1041`) by :user:`jvegreg` +- Allow selection of shapes in extract_shape (:pull:`764`) by :user:`jvegreg` +- Add option for regional regridding to regrid preprocessor (:pull:`1034`) by :user:`stefsmeets` +- Load fx variables as cube cell measures / ancillary variables (:pull:`999`) by :user:`sloosvel` +- Check horizontal grid before regridding (:pull:`507`) by :user:`BenMGeo` +- Clip irregular grids (:pull:`245`) by :user:`bouweandela` +- Use native iris functions in multi-model statistics (:pull:`1150`) by :user:`Peter9192` Notebook API (experimental) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -1106,38 +1097,38 @@ Notebook API (experimental) Automatic testing ~~~~~~~~~~~~~~~~~ -- Report coverage for tests that run on any pull request (`#994 `__) `Bouwe Andela `__ -- Install ESMValTool sample data from PyPI (`#998 `__) `Javier Vegas-Regidor `__ -- Fix tests for multi-processing with spawn method (i.e. macOSX with Python>3.8) (`#1003 `__) `Barbara Vreede `__ -- Switch to running the Github Action test workflow every 3 hours in single thread mode to observe if Segmentation Faults occur (`#1022 `__) `Valeriu Predoi `__ -- Revert to original Github Actions test workflow removing the 3-hourly test run with -n 1 (`#1025 `__) `Valeriu Predoi `__ -- Avoid stale cache for multimodel statistics regression tests (`#1030 `__) `Bouwe Andela `__ -- Add newer Python versions in OSX to Github Actions (`#1035 `__) `Barbara Vreede `__ -- Add tests for type annotations with mypy (`#1042 `__) `Stef Smeets `__ -- Run problematic cmor tests sequentially to avoid segmentation faults on CircleCI (`#1064 `__) `Valeriu Predoi `__ -- Test installation of esmvalcore from conda-forge (`#1075 `__) `Valeriu Predoi `__ -- Added additional test cases for integration tests of data_finder.py (`#1087 `__) `Manuel Schlund `__ -- Pin cf-units and fix tests (cf-units>=2.1.5) (`#1140 `__) `Valeriu Predoi `__ -- Fix failing CircleCI tests (`#1167 `__) `Bouwe Andela `__ -- Fix test failing due to fx files chosen differently on different OS's (`#1169 `__) `Valeriu Predoi `__ -- Compare datetimes instead of strings in _fixes/cmip5/test_access1_X.py (`#1173 `__) `Valeriu Predoi `__ -- Pin Python to 3.9 in environment.yml on CircleCI and skip mypy tests in conda build (`#1176 `__) `Bouwe Andela `__ +- Report coverage for tests that run on any pull request (:pull:`994`) by :user:`bouweandela` +- Install ESMValTool sample data from PyPI (:pull:`998`) by :user:`jvegreg` +- Fix tests for multi-processing with spawn method (i.e. macOSX with Python>3.8) (:pull:`1003`) by :user:`bvreede` +- Switch to running the Github Action test workflow every 3 hours in single thread mode to observe if Segmentation Faults occur (:pull:`1022`) by :user:`valeriupredoi` +- Revert to original Github Actions test workflow removing the 3-hourly test run with -n 1 (:pull:`1025`) by :user:`valeriupredoi` +- Avoid stale cache for multimodel statistics regression tests (:pull:`1030`) by :user:`bouweandela` +- Add newer Python versions in OSX to Github Actions (:pull:`1035`) by :user:`bvreede` +- Add tests for type annotations with mypy (:pull:`1042`) by :user:`stefsmeets` +- Run problematic cmor tests sequentially to avoid segmentation faults on CircleCI (:pull:`1064`) by :user:`valeriupredoi` +- Test installation of esmvalcore from conda-forge (:pull:`1075`) by :user:`valeriupredoi` +- Added additional test cases for integration tests of data_finder.py (:pull:`1087`) by :user:`schlunma` +- Pin cf-units and fix tests (cf-units>=2.1.5) (:pull:`1140`) by :user:`valeriupredoi` +- Fix failing CircleCI tests (:pull:`1167`) by :user:`bouweandela` +- Fix test failing due to fx files chosen differently on different OS's (:pull:`1169`) by :user:`valeriupredoi` +- Compare datetimes instead of strings in _fixes/cmip5/test_access1_X.py (:pull:`1173`) by :user:`valeriupredoi` +- Pin Python to 3.9 in environment.yml on CircleCI and skip mypy tests in conda build (:pull:`1176`) by :user:`bouweandela` Installation ~~~~~~~~~~~~ -- Update yamale to version 3 (`#1059 `__) `Klaus Zimmermann `__ +- Update yamale to version 3 (:pull:`1059`) by :user:`zklaus` Improvements ~~~~~~~~~~~~ -- Refactor diagnostics / tags management (`#939 `__) `Stef Smeets `__ -- Support multiple paths in input_dir (`#1000 `__) `Javier Vegas-Regidor `__ -- Generate HTML report with recipe output (`#991 `__) `Stef Smeets `__ -- Add timeout to requests.get in _citation.py (`#1091 `__) `SarahAlidoost `__ -- Add SYNDA drs for CMIP5 and CMIP6 (closes #582) (`#583 `__) `Klaus Zimmermann `__ -- Add basic support for variable mappings (`#1124 `__) `Klaus Zimmermann `__ -- Handle IPSL-CM6 (`#1153 `__) `Stéphane Sénési - work `__ +- Refactor diagnostics / tags management (:pull:`939`) by :user:`stefsmeets` +- Support multiple paths in input_dir (:pull:`1000`) by :user:`jvegreg` +- Generate HTML report with recipe output (:pull:`991`) by :user:`stefsmeets` +- Add timeout to requests.get in _citation.py (:pull:`1091`) by :user:`SarahAlidoost` +- Add SYNDA drs for CMIP5 and CMIP6 (closes #582) (:pull:`583`) by :user:`zklaus` +- Add basic support for variable mappings (:pull:`1124`) by :user:`zklaus` +- Handle IPSL-CM6 (:pull:`1153`) by :user:`senesis` .. _changelog-v2-2-0: @@ -1162,126 +1153,126 @@ This release includes Bug fixes ~~~~~~~~~ -- Fix path settings for DKRZ/Mistral (`#852 `__) `Bouwe Andela `__ -- Change logic for calling the diagnostic script to avoid problems with scripts where the executable bit is accidentally set (`#877 `__) `Bouwe Andela `__ -- Fix overwriting in generic level check (`#886 `__) `sloosvel `__ -- Add double quotes to script args in rerun screen message when using vprof profiling (`#897 `__) `Valeriu Predoi `__ -- Simplify time handling in multi-model statistics preprocessor (`#685 `__) `Peter Kalverla `__ -- Fix links to Iris documentation (`#966 `__) `Javier Vegas-Regidor `__ -- Bugfix: Fix units for MSWEP data (`#986 `__) `Stef Smeets `__ +- Fix path settings for DKRZ/Mistral (:pull:`852`) by :user:`bouweandela` +- Change logic for calling the diagnostic script to avoid problems with scripts where the executable bit is accidentally set (:pull:`877`) by :user:`bouweandela` +- Fix overwriting in generic level check (:pull:`886`) by :user:`sloosvel` +- Add double quotes to script args in rerun screen message when using vprof profiling (:pull:`897`) by :user:`valeriupredoi` +- Simplify time handling in multi-model statistics preprocessor (:pull:`685`) by :user:`Peter9192` +- Fix links to Iris documentation (:pull:`966`) by :user:`jvegreg` +- Bugfix: Fix units for MSWEP data (:pull:`986`) by :user:`stefsmeets` Deprecations ~~~~~~~~~~~~ -- Deprecate defining write_plots and write_netcdf in config-user file (`#808 `__) `Bouwe Andela `__ +- Deprecate defining write_plots and write_netcdf in config-user file (:pull:`808`) by :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Fix numbering of steps in release instructions (`#838 `__) `Bouwe Andela `__ -- Add labels to changelogs of individual versions for easy reference (`#899 `__) `Klaus Zimmermann `__ -- Make CircleCI badge specific to main branch (`#902 `__) `Bouwe Andela `__ -- Fix docker build badge url (`#906 `__) `Stef Smeets `__ -- Update github PR template (`#909 `__) `Stef Smeets `__ -- Refer to ESMValTool GitHub discussions page in the error message (`#900 `__) `Bouwe Andela `__ -- Support automatically closing issues (`#922 `__) `Bouwe Andela `__ -- Fix checkboxes in PR template (`#931 `__) `Stef Smeets `__ -- Change in config-user defaults and documentation with new location for esmeval OBS data on JASMIN (`#958 `__) `Valeriu Predoi `__ -- Update Core Team info (`#942 `__) `Axel Lauer `__ -- Update iris documentation URL for sphinx (`#964 `__) `Bouwe Andela `__ -- Set version to 2.2.0 (`#977 `__) `Javier Vegas-Regidor `__ -- Add first draft of v2.2.0 changelog (`#983 `__) `Javier Vegas-Regidor `__ -- Add checkbox in PR template to assign labels (`#985 `__) `Javier Vegas-Regidor `__ -- Update install.rst (`#848 `__) `bascrezee `__ -- Change the order of the publication steps (`#984 `__) `Javier Vegas-Regidor `__ -- Add instructions how to use esmvaltool from HPC central installations (`#841 `__) `Valeriu Predoi `__ +- Fix numbering of steps in release instructions (:pull:`838`) by :user:`bouweandela` +- Add labels to changelogs of individual versions for easy reference (:pull:`899`) by :user:`zklaus` +- Make CircleCI badge specific to main branch (:pull:`902`) by :user:`bouweandela` +- Fix docker build badge url (:pull:`906`) by :user:`stefsmeets` +- Update github PR template (:pull:`909`) by :user:`stefsmeets` +- Refer to ESMValTool GitHub discussions page in the error message (:pull:`900`) by :user:`bouweandela` +- Support automatically closing issues (:pull:`922`) by :user:`bouweandela` +- Fix checkboxes in PR template (:pull:`931`) by :user:`stefsmeets` +- Change in config-user defaults and documentation with new location for esmeval OBS data on JASMIN (:pull:`958`) by :user:`valeriupredoi` +- Update Core Team info (:pull:`942`) by :user:`axel-lauer` +- Update iris documentation URL for sphinx (:pull:`964`) by :user:`bouweandela` +- Set version to 2.2.0 (:pull:`977`) by :user:`jvegreg` +- Add first draft of v2.2.0 changelog (:pull:`983`) by :user:`jvegreg` +- Add checkbox in PR template to assign labels (:pull:`985`) by :user:`jvegreg` +- Update install.rst (:pull:`848`) by :user:`bascrezee` +- Change the order of the publication steps (:pull:`984`) by :user:`jvegreg` +- Add instructions how to use esmvaltool from HPC central installations (:pull:`841`) by :user:`valeriupredoi` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Fixing unit for derived variable rsnstcsnorm to prevent overcorrection2 (`#846 `__) `katjaweigel `__ -- Cmip6 fix awi cm 1 1 mr (`#822 `__) `mwjury `__ -- Cmip6 fix ec earth3 veg (`#836 `__) `mwjury `__ -- Changed latitude longitude fix from Tas to AllVars. (`#916 `__) `katjaweigel `__ -- Fix for precipitation (pr) to use ERA5-Land cmorizer (`#879 `__) `katjaweigel `__ -- Cmip6 fix ec earth3 (`#837 `__) `mwjury `__ -- Cmip6_fix_fgoals_f3_l_Amon_time_bnds (`#831 `__) `mwjury `__ -- Fix for FGOALS-f3-L sftlf (`#667 `__) `mwjury `__ -- Improve ACCESS-CM2 and ACCESS-ESM1-5 fixes and add CIESM and CESM2-WACCM-FV2 fixes for cl, clw and cli (`#635 `__) `Axel Lauer `__ -- Add fixes for cl, cli, clw and tas for several CMIP6 models (`#955 `__) `Manuel Schlund `__ -- Dataset fixes for MSWEP (`#969 `__) `Stef Smeets `__ -- Dataset fixes for: ACCESS-ESM1-5, CanESM5, CanESM5 for carbon cycle (`#947 `__) `Bettina Gier `__ -- Fixes for KIOST-ESM (CMIP6) (`#904 `__) `Rémi Kazeroni `__ -- Fixes for AWI-ESM-1-1-LR (CMIP6, piControl) (`#911 `__) `Rémi Kazeroni `__ +- Fixing unit for derived variable rsnstcsnorm to prevent overcorrection2 (:pull:`846`) by :user:`katjaweigel` +- Cmip6 fix awi cm 1 1 mr (:pull:`822`) by :user:`mwjury` +- Cmip6 fix ec earth3 veg (:pull:`836`) by :user:`mwjury` +- Changed latitude longitude fix from Tas to AllVars. (:pull:`916`) by :user:`katjaweigel` +- Fix for precipitation (pr) to use ERA5-Land cmorizer (:pull:`879`) by :user:`katjaweigel` +- Cmip6 fix ec earth3 (:pull:`837`) by :user:`mwjury` +- Cmip6_fix_fgoals_f3_l_Amon_time_bnds (:pull:`831`) by :user:`mwjury` +- Fix for FGOALS-f3-L sftlf (:pull:`667`) by :user:`mwjury` +- Improve ACCESS-CM2 and ACCESS-ESM1-5 fixes and add CIESM and CESM2-WACCM-FV2 fixes for cl, clw and cli (:pull:`635`) by :user:`axel-lauer` +- Add fixes for cl, cli, clw and tas for several CMIP6 models (:pull:`955`) by :user:`schlunma` +- Dataset fixes for MSWEP (:pull:`969`) by :user:`stefsmeets` +- Dataset fixes for: ACCESS-ESM1-5, CanESM5, CanESM5 for carbon cycle (:pull:`947`) by :user:`bettina-gier` +- Fixes for KIOST-ESM (CMIP6) (:pull:`904`) by :user:`remi-kazeroni` +- Fixes for AWI-ESM-1-1-LR (CMIP6, piControl) (:pull:`911`) by :user:`remi-kazeroni` CMOR standard ~~~~~~~~~~~~~ -- CMOR check generic level coordinates in CMIP6 (`#598 `__) `sloosvel `__ -- Update CMIP6 tables to 6.9.33 (`#919 `__) `Javier Vegas-Regidor `__ -- Adding custom variables for tas uncertainty (`#924 `__) `Lisa Bock `__ -- Remove monotonicity coordinate check for unstructured grids (`#965 `__) `Javier Vegas-Regidor `__ +- CMOR check generic level coordinates in CMIP6 (:pull:`598`) by :user:`sloosvel` +- Update CMIP6 tables to 6.9.33 (:pull:`919`) by :user:`jvegreg` +- Adding custom variables for tas uncertainty (:pull:`924`) by :user:`LisaBock` +- Remove monotonicity coordinate check for unstructured grids (:pull:`965`) by :user:`jvegreg` Preprocessor ~~~~~~~~~~~~ -- Added clip_start_end_year preprocessor (`#796 `__) `Manuel Schlund `__ -- Add support for downloading CMIP6 data with Synda (`#699 `__) `Bouwe Andela `__ -- Add multimodel tests using real data (`#856 `__) `Stef Smeets `__ -- Add plev/altitude conversion to extract_levels (`#892 `__) `Axel Lauer `__ -- Add possibility of custom season extraction. (`#247 `__) `mwjury `__ -- Adding the ability to derive xch4 (`#783 `__) `Birgit Hassler `__ -- Add preprocessor function to resample time and compute x-hourly statistics (`#696 `__) `Javier Vegas-Regidor `__ -- Fix duplication in preprocessors DEFAULT_ORDER introduced in #696 (`#973 `__) `Javier Vegas-Regidor `__ -- Use consistent precision in multi-model statistics calculation and update reference data for tests (`#941 `__) `Peter Kalverla `__ -- Refactor multi-model statistics code to facilitate ensemble stats and lazy evaluation (`#949 `__) `Peter Kalverla `__ -- Add option to exclude input cubes in output of multimodel statistics to solve an issue introduced by #949 (`#978 `__) `Peter Kalverla `__ +- Added clip_start_end_year preprocessor (:pull:`796`) by :user:`schlunma` +- Add support for downloading CMIP6 data with Synda (:pull:`699`) by :user:`bouweandela` +- Add multimodel tests using real data (:pull:`856`) by :user:`stefsmeets` +- Add plev/altitude conversion to extract_levels (:pull:`892`) by :user:`axel-lauer` +- Add possibility of custom season extraction. (:pull:`247`) by :user:`mwjury` +- Adding the ability to derive xch4 (:pull:`783`) by :user:`hb326` +- Add preprocessor function to resample time and compute x-hourly statistics (:pull:`696`) by :user:`jvegreg` +- Fix duplication in preprocessors DEFAULT_ORDER introduced in #696 (:pull:`973`) by :user:`jvegreg` +- Use consistent precision in multi-model statistics calculation and update reference data for tests (:pull:`941`) by :user:`Peter9192` +- Refactor multi-model statistics code to facilitate ensemble stats and lazy evaluation (:pull:`949`) by :user:`Peter9192` +- Add option to exclude input cubes in output of multimodel statistics to solve an issue introduced by #949 (:pull:`978`) by :user:`Peter9192` Automatic testing ~~~~~~~~~~~~~~~~~ -- Pin cftime>=1.3.0 to have newer string formatting in and fix two tests (`#878 `__) `Valeriu Predoi `__ -- Switched miniconda conda setup hooks for Github Actions workflows (`#873 `__) `Valeriu Predoi `__ -- Add test for latest version resolver (`#874 `__) `Stef Smeets `__ -- Update codacy coverage reporter to fix coverage (`#905 `__) `Niels Drost `__ -- Avoid hardcoded year in tests and add improvement to plev test case (`#921 `__) `Bouwe Andela `__ -- Pin scipy to less than 1.6.0 until ESMValGroup/ESMValCore/issues/927 gets resolved (`#928 `__) `Valeriu Predoi `__ -- Github Actions: change time when conda install test runs (`#930 `__) `Valeriu Predoi `__ -- Remove redundant test line from test_utils.py (`#935 `__) `Valeriu Predoi `__ -- Removed netCDF4 package from integration tests of fixes (`#938 `__) `Manuel Schlund `__ -- Use new conda environment for installing ESMValCore in Docker containers (`#951 `__) `Bouwe Andela `__ +- Pin cftime>=1.3.0 to have newer string formatting in and fix two tests (:pull:`878`) by :user:`valeriupredoi` +- Switched miniconda conda setup hooks for Github Actions workflows (:pull:`873`) by :user:`valeriupredoi` +- Add test for latest version resolver (:pull:`874`) by :user:`stefsmeets` +- Update codacy coverage reporter to fix coverage (:pull:`905`) by :user:`nielsdrost` +- Avoid hardcoded year in tests and add improvement to plev test case (:pull:`921`) by :user:`bouweandela` +- Pin scipy to less than 1.6.0 until :issue:`927` gets resolved (:pull:`928`) by :user:`valeriupredoi` +- Github Actions: change time when conda install test runs (:pull:`930`) by :user:`valeriupredoi` +- Remove redundant test line from test_utils.py (:pull:`935`) by :user:`valeriupredoi` +- Removed netCDF4 package from integration tests of fixes (:pull:`938`) by :user:`schlunma` +- Use new conda environment for installing ESMValCore in Docker containers (:pull:`951`) by :user:`bouweandela` Notebook API (experimental) ~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Implement importable config object in experimental API submodule (`#868 `__) `Stef Smeets `__ -- Add loading and running recipes to the notebook API (`#907 `__) `Stef Smeets `__ -- Add displaying and loading of recipe output to the notebook API (`#957 `__) `Stef Smeets `__ -- Add functionality to run single diagnostic task to notebook API (`#962 `__) `Stef Smeets `__ +- Implement importable config object in experimental API submodule (:pull:`868`) by :user:`stefsmeets` +- Add loading and running recipes to the notebook API (:pull:`907`) by :user:`stefsmeets` +- Add displaying and loading of recipe output to the notebook API (:pull:`957`) by :user:`stefsmeets` +- Add functionality to run single diagnostic task to notebook API (:pull:`962`) by :user:`stefsmeets` Improvements ~~~~~~~~~~~~ -- Create CODEOWNERS file (`#809 `__) `Javier Vegas-Regidor `__ -- Remove code needed for Python <3.6 (`#844 `__) `Bouwe Andela `__ -- Add requests as a dependency (`#850 `__) `Bouwe Andela `__ -- Pin Python to less than 3.9 (`#870 `__) `Valeriu Predoi `__ -- Remove numba dependency (`#880 `__) `Manuel Schlund `__ -- Add Listing and finding recipes to the experimental notebook API (`#901 `__) `Stef Smeets `__ -- Skip variables that don't have dataset or additional_dataset keys (`#860 `__) `Valeriu Predoi `__ -- Refactor logging configuration (`#933 `__) `Stef Smeets `__ -- Xco2 derivation (`#913 `__) `Bettina Gier `__ -- Working environment for Python 3.9 (pin to !=3.9.0) (`#885 `__) `Valeriu Predoi `__ -- Print source file when using config get_config_user command (`#960 `__) `Valeriu Predoi `__ -- Switch to Iris 3 (`#819 `__) `Stef Smeets `__ -- Refactor tasks (`#959 `__) `Stef Smeets `__ -- Restore task summary in debug log after #959 (`#981 `__) `Bouwe Andela `__ -- Pin pre-commit hooks (`#974 `__) `Stef Smeets `__ -- Improve error messages when data is missing (`#917 `__) `Javier Vegas-Regidor `__ -- Set remove_preproc_dir to false in default config-user (`#979 `__) `Valeriu Predoi `__ -- Move fiona to be installed from conda forge (`#987 `__) `Valeriu Predoi `__ -- Re-added fiona in setup.py (`#990 `__) `Valeriu Predoi `__ +- Create CODEOWNERS file (:pull:`809`) by :user:`jvegreg` +- Remove code needed for Python <3.6 (:pull:`844`) by :user:`bouweandela` +- Add requests as a dependency (:pull:`850`) by :user:`bouweandela` +- Pin Python to less than 3.9 (:pull:`870`) by :user:`valeriupredoi` +- Remove numba dependency (:pull:`880`) by :user:`schlunma` +- Add Listing and finding recipes to the experimental notebook API (:pull:`901`) by :user:`stefsmeets` +- Skip variables that don't have dataset or additional_dataset keys (:pull:`860`) by :user:`valeriupredoi` +- Refactor logging configuration (:pull:`933`) by :user:`stefsmeets` +- Xco2 derivation (:pull:`913`) by :user:`bettina-gier` +- Working environment for Python 3.9 (pin to !=3.9.0) (:pull:`885`) by :user:`valeriupredoi` +- Print source file when using config get_config_user command (:pull:`960`) by :user:`valeriupredoi` +- Switch to Iris 3 (:pull:`819`) by :user:`stefsmeets` +- Refactor tasks (:pull:`959`) by :user:`stefsmeets` +- Restore task summary in debug log after #959 (:pull:`981`) by :user:`bouweandela` +- Pin pre-commit hooks (:pull:`974`) by :user:`stefsmeets` +- Improve error messages when data is missing (:pull:`917`) by :user:`jvegreg` +- Set remove_preproc_dir to false in default config-user (:pull:`979`) by :user:`valeriupredoi` +- Move fiona to be installed from conda forge (:pull:`987`) by :user:`valeriupredoi` +- Re-added fiona in setup.py (:pull:`990`) by :user:`valeriupredoi` .. _changelog-v2-1-0: @@ -1293,57 +1284,57 @@ This release includes Bug fixes ~~~~~~~~~ -- Set unit=1 if anomalies are standardized (`#727 `__) `bascrezee `__ -- Fix crash for FGOALS-g2 variables without longitude coordinate (`#729 `__) `Bouwe Andela `__ -- Improve variable alias management (`#595 `__) `Javier Vegas-Regidor `__ -- Fix area_statistics fx files loading (`#798 `__) `Javier Vegas-Regidor `__ -- Fix units after derivation (`#754 `__) `Manuel Schlund `__ +- Set unit=1 if anomalies are standardized (:pull:`727`) by :user:`bascrezee` +- Fix crash for FGOALS-g2 variables without longitude coordinate (:pull:`729`) by :user:`bouweandela` +- Improve variable alias management (:pull:`595`) by :user:`jvegreg` +- Fix area_statistics fx files loading (:pull:`798`) by :user:`jvegreg` +- Fix units after derivation (:pull:`754`) by :user:`schlunma` Documentation ~~~~~~~~~~~~~ -- Update v2.0.0 release notes with final additions (`#722 `__) `Bouwe Andela `__ -- Update package description in setup.py (`#725 `__) `Mattia Righi `__ -- Add installation instructions for pip installation (`#735 `__) `Bouwe Andela `__ -- Improve config-user documentation (`#740 `__) `Bouwe Andela `__ -- Update the zenodo file with contributors (`#807 `__) `Valeriu Predoi `__ -- Improve command line run documentation (`#721 `__) `Javier Vegas-Regidor `__ -- Update the zenodo file with contributors (continued) (`#810 `__) `Valeriu Predoi `__ +- Update v2.0.0 release notes with final additions (:pull:`722`) by :user:`bouweandela` +- Update package description in setup.py (:pull:`725`) by :user:`mattiarighi` +- Add installation instructions for pip installation (:pull:`735`) by :user:`bouweandela` +- Improve config-user documentation (:pull:`740`) by :user:`bouweandela` +- Update the zenodo file with contributors (:pull:`807`) by :user:`valeriupredoi` +- Improve command line run documentation (:pull:`721`) by :user:`jvegreg` +- Update the zenodo file with contributors (continued) (:pull:`810`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Reduce size of docker image (`#723 `__) `Javier Vegas-Regidor `__ -- Add 'test' extra to installation, used by docker development tag (`#733 `__) `Bouwe Andela `__ -- Correct dockerhub link (`#736 `__) `Bouwe Andela `__ -- Create action-install-from-pypi.yml (`#734 `__) `Valeriu Predoi `__ -- Add pre-commit for linting/formatting (`#766 `__) `Stef Smeets `__ -- Run tests in parallel and when building conda package (`#745 `__) `Bouwe Andela `__ -- Readable exclude pattern for pre-commit (`#770 `__) `Stef Smeets `__ -- Github Actions Tests (`#732 `__) `Valeriu Predoi `__ -- Remove isort setup to fix formatting conflict with yapf (`#778 `__) `Stef Smeets `__ -- Fix yapf-isort import formatting conflict (Fixes #777) (`#784 `__) `Stef Smeets `__ -- Sorted output for `esmvaltool recipes list` (`#790 `__) `Stef Smeets `__ -- Replace vmprof with vprof (`#780 `__) `Valeriu Predoi `__ -- Update CMIP6 tables to 6.9.32 (`#706 `__) `Javier Vegas-Regidor `__ -- Default config-user path now set in config-user read function (`#791 `__) `Javier Vegas-Regidor `__ -- Add custom variable lweGrace (`#692 `__) `bascrezee `__ -- Create Github Actions workflow to build and deploy on Test PyPi and PyPi (`#820 `__) `Valeriu Predoi `__ -- Build and publish the esmvalcore package to conda via Github Actions workflow (`#825 `__) `Valeriu Predoi `__ +- Reduce size of docker image (:pull:`723`) by :user:`jvegreg` +- Add 'test' extra to installation, used by docker development tag (:pull:`733`) by :user:`bouweandela` +- Correct dockerhub link (:pull:`736`) by :user:`bouweandela` +- Create action-install-from-pypi.yml (:pull:`734`) by :user:`valeriupredoi` +- Add pre-commit for linting/formatting (:pull:`766`) by :user:`stefsmeets` +- Run tests in parallel and when building conda package (:pull:`745`) by :user:`bouweandela` +- Readable exclude pattern for pre-commit (:pull:`770`) by :user:`stefsmeets` +- Github Actions Tests (:pull:`732`) by :user:`valeriupredoi` +- Remove isort setup to fix formatting conflict with yapf (:pull:`778`) by :user:`stefsmeets` +- Fix yapf-isort import formatting conflict (Fixes #777) (:pull:`784`) by :user:`stefsmeets` +- Sorted output for `esmvaltool recipes list` (:pull:`790`) by :user:`stefsmeets` +- Replace vmprof with vprof (:pull:`780`) by :user:`valeriupredoi` +- Update CMIP6 tables to 6.9.32 (:pull:`706`) by :user:`jvegreg` +- Default config-user path now set in config-user read function (:pull:`791`) by :user:`jvegreg` +- Add custom variable lweGrace (:pull:`692`) by :user:`bascrezee` +- Create Github Actions workflow to build and deploy on Test PyPi and PyPi (:pull:`820`) by :user:`valeriupredoi` +- Build and publish the esmvalcore package to conda via Github Actions workflow (:pull:`825`) by :user:`valeriupredoi` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Fix cmip6 models (`#629 `__) `npgillett `__ -- Fix siconca variable in EC-Earth3 and EC-Earth3-Veg models in amip simulation (`#702 `__) `Evgenia Galytska `__ +- Fix cmip6 models (:pull:`629`) by :user:`npgillett` +- Fix siconca variable in EC-Earth3 and EC-Earth3-Veg models in amip simulation (:pull:`702`) by :user:`egalytska` Preprocessor ~~~~~~~~~~~~ -- Move cmor_check_data to early in preprocessing chain (`#743 `__) `Bouwe Andela `__ -- Add RMS iris analysis operator to statistics preprocessor functions (`#747 `__) `Pep Cos `__ -- Add surface chlorophyll concentration as a derived variable (`#720 `__) `sloosvel `__ -- Use dask to reduce memory consumption of extract_levels for masked data (`#776 `__) `Valeriu Predoi `__ +- Move cmor_check_data to early in preprocessing chain (:pull:`743`) by :user:`bouweandela` +- Add RMS iris analysis operator to statistics preprocessor functions (:pull:`747`) by :user:`pcosbsc` +- Add surface chlorophyll concentration as a derived variable (:pull:`720`) by :user:`sloosvel` +- Use dask to reduce memory consumption of extract_levels for masked data (:pull:`776`) by :user:`valeriupredoi` .. _changelog-v2-0-0: @@ -1355,81 +1346,81 @@ This release includes Bug fixes ~~~~~~~~~ -- Fixed derivation of co2s (`#594 `__) `Manuel Schlund `__ -- Padding while cropping needs to stay within sane bounds for shapefiles that span the whole Earth (`#626 `__) `Valeriu Predoi `__ -- Fix concatenation of a single cube (`#655 `__) `Bouwe Andela `__ -- Fix mask fx dict handling not to fail if empty list in values (`#661 `__) `Valeriu Predoi `__ -- Preserve metadata during anomalies computation when using iris cubes difference (`#652 `__) `Valeriu Predoi `__ -- Avoid crashing when there is directory 'esmvaltool' in the current working directory (`#672 `__) `Valeriu Predoi `__ -- Solve bug in ACCESS1 dataset fix for calendar. (`#671 `__) `Peter Kalverla `__ -- Fix the syntax for adding multiple ensemble members from the same dataset (`#678 `__) `SarahAlidoost `__ -- Fix bug that made preprocessor with fx files fail in rare cases (`#670 `__) `Manuel Schlund `__ -- Add support for string coordinates (`#657 `__) `Javier Vegas-Regidor `__ -- Fixed the shape extraction to account for wraparound shapefile coords (`#319 `__) `Valeriu Predoi `__ -- Fixed bug in time weights calculation (`#695 `__) `Manuel Schlund `__ -- Fix diagnostic filter (`#713 `__) `Javier Vegas-Regidor `__ +- Fixed derivation of co2s (:pull:`594`) by :user:`schlunma` +- Padding while cropping needs to stay within sane bounds for shapefiles that span the whole Earth (:pull:`626`) by :user:`valeriupredoi` +- Fix concatenation of a single cube (:pull:`655`) by :user:`bouweandela` +- Fix mask fx dict handling not to fail if empty list in values (:pull:`661`) by :user:`valeriupredoi` +- Preserve metadata during anomalies computation when using iris cubes difference (:pull:`652`) by :user:`valeriupredoi` +- Avoid crashing when there is directory 'esmvaltool' in the current working directory (:pull:`672`) by :user:`valeriupredoi` +- Solve bug in ACCESS1 dataset fix for calendar. (:pull:`671`) by :user:`Peter9192` +- Fix the syntax for adding multiple ensemble members from the same dataset (:pull:`678`) by :user:`SarahAlidoost` +- Fix bug that made preprocessor with fx files fail in rare cases (:pull:`670`) by :user:`schlunma` +- Add support for string coordinates (:pull:`657`) by :user:`jvegreg` +- Fixed the shape extraction to account for wraparound shapefile coords (:pull:`319`) by :user:`valeriupredoi` +- Fixed bug in time weights calculation (:pull:`695`) by :user:`schlunma` +- Fix diagnostic filter (:pull:`713`) by :user:`jvegreg` Documentation ~~~~~~~~~~~~~ -- Add pandas as a requirement for building the documentation (`#607 `__) `Bouwe Andela `__ -- Document default order in which preprocessor functions are applied (`#633 `__) `Bouwe Andela `__ -- Add pointers about data loading and CF standards to documentation (`#571 `__) `Valeriu Predoi `__ -- Config file populated with site-specific data paths examples (`#619 `__) `Valeriu Predoi `__ -- Update Codacy badges (`#643 `__) `Bouwe Andela `__ -- Update copyright info on readthedocs (`#668 `__) `Bouwe Andela `__ -- Updated references to documentation (now docs.esmvaltool.org) (`#675 `__) `Axel Lauer `__ -- Add all European grants to Zenodo (`#680 `__) `Bouwe Andela `__ -- Update Sphinx to v3 or later (`#683 `__) `Bouwe Andela `__ -- Increase version to 2.0.0 and add release notes (`#691 `__) `Bouwe Andela `__ -- Update setup.py and README.md for use on PyPI (`#693 `__) `Bouwe Andela `__ -- Suggested Documentation changes (`#690 `__) `Steve Smith `__ +- Add pandas as a requirement for building the documentation (:pull:`607`) by :user:`bouweandela` +- Document default order in which preprocessor functions are applied (:pull:`633`) by :user:`bouweandela` +- Add pointers about data loading and CF standards to documentation (:pull:`571`) by :user:`valeriupredoi` +- Config file populated with site-specific data paths examples (:pull:`619`) by :user:`valeriupredoi` +- Update Codacy badges (:pull:`643`) by :user:`bouweandela` +- Update copyright info on readthedocs (:pull:`668`) by :user:`bouweandela` +- Updated references to documentation (now docs.esmvaltool.org) (:pull:`675`) by :user:`axel-lauer` +- Add all European grants to Zenodo (:pull:`680`) by :user:`bouweandela` +- Update Sphinx to v3 or later (:pull:`683`) by :user:`bouweandela` +- Increase version to 2.0.0 and add release notes (:pull:`691`) by :user:`bouweandela` +- Update setup.py and README.md for use on PyPI (:pull:`693`) by :user:`bouweandela` +- Suggested Documentation changes (:pull:`690`) by :user:`ssmithClimate` Improvements ~~~~~~~~~~~~ -- Reduce the size of conda package (`#606 `__) `Bouwe Andela `__ -- Add a few unit tests for DiagnosticTask (`#613 `__) `Bouwe Andela `__ -- Make ncl or R tests not fail if package not installed (`#610 `__) `Valeriu Predoi `__ -- Pin flake8<3.8.0 (`#623 `__) `Valeriu Predoi `__ -- Log warnings for likely errors in provenance record (`#592 `__) `Bouwe Andela `__ -- Unpin flake8 (`#646 `__) `Bouwe Andela `__ -- More flexible native6 default DRS (`#645 `__) `Bouwe Andela `__ -- Try to use the same python for running diagnostics as for esmvaltool (`#656 `__) `Bouwe Andela `__ -- Fix test for lower python version and add note on lxml (`#659 `__) `Valeriu Predoi `__ -- Added 1m deep average soil moisture variable (`#664 `__) `bascrezee `__ -- Update docker recipe (`#603 `__) `Javier Vegas-Regidor `__ -- Improve command line interface (`#605 `__) `Javier Vegas-Regidor `__ -- Remove utils directory (`#697 `__) `Bouwe Andela `__ -- Avoid pytest version that crashes (`#707 `__) `Bouwe Andela `__ -- Options arg in read_config_user_file now optional (`#716 `__) `Javier Vegas-Regidor `__ -- Produce a readable warning if ancestors are a string instead of a list. (`#711 `__) `katjaweigel `__ -- Pin Yamale to v2 (`#718 `__) `Bouwe Andela `__ -- Expanded cmor public API (`#714 `__) `Manuel Schlund `__ +- Reduce the size of conda package (:pull:`606`) by :user:`bouweandela` +- Add a few unit tests for DiagnosticTask (:pull:`613`) by :user:`bouweandela` +- Make ncl or R tests not fail if package not installed (:pull:`610`) by :user:`valeriupredoi` +- Pin flake8<3.8.0 (:pull:`623`) by :user:`valeriupredoi` +- Log warnings for likely errors in provenance record (:pull:`592`) by :user:`bouweandela` +- Unpin flake8 (:pull:`646`) by :user:`bouweandela` +- More flexible native6 default DRS (:pull:`645`) by :user:`bouweandela` +- Try to use the same python for running diagnostics as for esmvaltool (:pull:`656`) by :user:`bouweandela` +- Fix test for lower python version and add note on lxml (:pull:`659`) by :user:`valeriupredoi` +- Added 1m deep average soil moisture variable (:pull:`664`) by :user:`bascrezee` +- Update docker recipe (:pull:`603`) by :user:`jvegreg` +- Improve command line interface (:pull:`605`) by :user:`jvegreg` +- Remove utils directory (:pull:`697`) by :user:`bouweandela` +- Avoid pytest version that crashes (:pull:`707`) by :user:`bouweandela` +- Options arg in read_config_user_file now optional (:pull:`716`) by :user:`jvegreg` +- Produce a readable warning if ancestors are a string instead of a list. (:pull:`711`) by :user:`katjaweigel` +- Pin Yamale to v2 (:pull:`718`) by :user:`bouweandela` +- Expanded cmor public API (:pull:`714`) by :user:`schlunma` Fixes for datasets ~~~~~~~~~~~~~~~~~~ -- Added various fixes for hybrid height coordinates (`#562 `__) `Manuel Schlund `__ -- Extended fix for cl-like variables of CESM2 models (`#604 `__) `Manuel Schlund `__ -- Added fix to convert "geopotential" to "geopotential height" for ERA5 (`#640 `__) `Evgenia Galytska `__ -- Do not fix longitude values if they are too far from valid range (`#636 `__) `Javier Vegas-Regidor `__ +- Added various fixes for hybrid height coordinates (:pull:`562`) by :user:`schlunma` +- Extended fix for cl-like variables of CESM2 models (:pull:`604`) by :user:`schlunma` +- Added fix to convert "geopotential" to "geopotential height" for ERA5 (:pull:`640`) by :user:`egalytska` +- Do not fix longitude values if they are too far from valid range (:pull:`636`) by :user:`jvegreg` Preprocessor ~~~~~~~~~~~~ -- Implemented concatenation of cubes with derived coordinates (`#546 `__) `Manuel Schlund `__ -- Fix derived variable ctotal calculation depending on project and standard name (`#620 `__) `Valeriu Predoi `__ -- State of the art FX variables handling without preprocessing (`#557 `__) `Valeriu Predoi `__ -- Add max, min and std operators to multimodel (`#602 `__) `Javier Vegas-Regidor `__ -- Added preprocessor to extract amplitude of cycles (`#597 `__) `Manuel Schlund `__ -- Overhaul concatenation and allow for correct concatenation of multiple overlapping datasets (`#615 `__) `Valeriu Predoi `__ -- Change volume stats to handle and output masked array result (`#618 `__) `Valeriu Predoi `__ -- Area_weights for cordex in area_statistics (`#631 `__) `mwjury `__ -- Accept cubes as input in multimodel (`#637 `__) `sloosvel `__ -- Make multimodel work correctly with yearly data (`#677 `__) `Valeriu Predoi `__ -- Optimize time weights in time preprocessor for climate statistics (`#684 `__) `Valeriu Predoi `__ -- Add percentiles to multi-model stats (`#679 `__) `Peter Kalverla `__ +- Implemented concatenation of cubes with derived coordinates (:pull:`546`) by :user:`schlunma` +- Fix derived variable ctotal calculation depending on project and standard name (:pull:`620`) by :user:`valeriupredoi` +- State of the art FX variables handling without preprocessing (:pull:`557`) by :user:`valeriupredoi` +- Add max, min and std operators to multimodel (:pull:`602`) by :user:`jvegreg` +- Added preprocessor to extract amplitude of cycles (:pull:`597`) by :user:`schlunma` +- Overhaul concatenation and allow for correct concatenation of multiple overlapping datasets (:pull:`615`) by :user:`valeriupredoi` +- Change volume stats to handle and output masked array result (:pull:`618`) by :user:`valeriupredoi` +- Area_weights for cordex in area_statistics (:pull:`631`) by :user:`mwjury` +- Accept cubes as input in multimodel (:pull:`637`) by :user:`sloosvel` +- Make multimodel work correctly with yearly data (:pull:`677`) by :user:`valeriupredoi` +- Optimize time weights in time preprocessor for climate statistics (:pull:`684`) by :user:`valeriupredoi` +- Add percentiles to multi-model stats (:pull:`679`) by :user:`Peter9192` .. _changelog-v2-0-0b9: @@ -1441,21 +1432,21 @@ This release includes Bug fixes ~~~~~~~~~ -- Cast dtype float32 to output from zonal and meridional area preprocessors (`#581 `__) `Valeriu Predoi `__ +- Cast dtype float32 to output from zonal and meridional area preprocessors (:pull:`581`) by :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Unpin on Python<3.8 for conda package (run) (`#570 `__) `Valeriu Predoi `__ -- Update pytest installation marker (`#572 `__) `Bouwe Andela `__ -- Remove vmrh2o (`#573 `__) `Mattia Righi `__ -- Restructure documentation (`#575 `__) `Bouwe Andela `__ -- Fix mask in land variables for CCSM4 (`#579 `__) `Klaus Zimmermann `__ -- Fix derive scripts wrt required method (`#585 `__) `Klaus Zimmermann `__ -- Check coordinates do not have repeated standard names (`#558 `__) `Javier Vegas-Regidor `__ -- Added derivation script for co2s (`#587 `__) `Manuel Schlund `__ -- Adapted custom co2s table to match CMIP6 version (`#588 `__) `Manuel Schlund `__ -- Increase version to v2.0.0b9 (`#593 `__) `Bouwe Andela `__ -- Add a method to save citation information (`#402 `__) `SarahAlidoost `__ +- Unpin on Python<3.8 for conda package (run) (:pull:`570`) by :user:`valeriupredoi` +- Update pytest installation marker (:pull:`572`) by :user:`bouweandela` +- Remove vmrh2o (:pull:`573`) by :user:`mattiarighi` +- Restructure documentation (:pull:`575`) by :user:`bouweandela` +- Fix mask in land variables for CCSM4 (:pull:`579`) by :user:`zklaus` +- Fix derive scripts wrt required method (:pull:`585`) by :user:`zklaus` +- Check coordinates do not have repeated standard names (:pull:`558`) by :user:`jvegreg` +- Added derivation script for co2s (:pull:`587`) by :user:`schlunma` +- Adapted custom co2s table to match CMIP6 version (:pull:`588`) by :user:`schlunma` +- Increase version to v2.0.0b9 (:pull:`593`) by :user:`bouweandela` +- Add a method to save citation information (:pull:`402`) by :user:`SarahAlidoost` For older releases, see the release notes on https://github.com/ESMValGroup/ESMValCore/releases. diff --git a/doc/conf.py b/doc/conf.py index 1613a0133b..3f443ced03 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -60,6 +60,7 @@ 'nbsphinx', 'sphinx.ext.autodoc', 'sphinx.ext.doctest', + 'sphinx.ext.extlinks', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', @@ -450,6 +451,36 @@ 'scipy': ('https://docs.scipy.org/doc/scipy/', None), } +# -- Extlinks extension ------------------------------------------------------- +# See https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html + +extlinks = { + "discussion": ( + "https://github.com/ESMValGroup/ESMValCore/discussions/%s", + "Discussion #%s", + ), + "issue": ( + "https://github.com/ESMValGroup/ESMValCore/issues/%s", + "Issue #%s", + ), + "pull": ( + "https://github.com/ESMValGroup/ESMValCore/pull/%s", + "Pull request #%s", + ), + "release": ( + "https://github.com/ESMValGroup/ESMValCore/releases/tag/%s", + "ESMValCore %s", + ), + "team": ( + "https://github.com/orgs/ESMValGroup/teams/%s", + "@ESMValGroup/%s", + ), + "user": ( + "https://github.com/%s", + "@%s", + ), +} + # -- Custom Document processing ---------------------------------------------- sys.path.append(os.path.dirname(__file__)) diff --git a/doc/quickstart/configure.rst b/doc/quickstart/configure.rst index 4a3642f1ca..4caf7e794b 100644 --- a/doc/quickstart/configure.rst +++ b/doc/quickstart/configure.rst @@ -243,8 +243,7 @@ Extensive documentation on setting up Dask Clusters is available If not all preprocessor functions support lazy data, computational performance may be best with the default scheduler. - See `issue #674 `_ for - progress on making all preprocessor functions lazy. + See :issue:`674` for progress on making all preprocessor functions lazy. **Example configurations** From 1f55ec9358df2c6cfcc5e341a1c08f6a3537d43b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 21 Dec 2023 12:04:29 +0200 Subject: [PATCH 09/14] [Condalock] Update Linux condalock file (#2288) Co-authored-by: valeriupredoi --- conda-linux-64.lock | 99 +++++++++++++++++++++++---------------------- 1 file changed, 50 insertions(+), 49 deletions(-) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index 5e83c2bd89..4e34e298d5 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 51d51511fee43ef4c5788963fb665775f78ae1eb863770c1083cdc8c086a0517 +# input_hash: 3292466f2be1f71b7849106e55f7f9736ad253013586e4917a24e159166ba149 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda#01ffc8d36f9eba0ce0b3c1955fa780ee @@ -10,7 +10,7 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77 https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda#6185f640c43843e5ad6fd1c5372c3f80 https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-2.6.32-he073ed8_16.conda#7ca122655873935e02c91279c5b03c8c https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.83.0-ha770c72_0.conda#1fc57b3ba24d18cc75f431d7feb2c785 +https://conda.anaconda.org/conda-forge/linux-64/libboost-headers-1.84.0-ha770c72_0.conda#9c595e87653a36aa4d8c71b4e2f7e586 https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-12.3.0-h8bca6fd_103.conda#1d7f6d1825bd6bf21ee04336ec87a777 https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_103.conda#3f784d2c059e960156d1ab3858cbf200 https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda#937eaed008f6bf2191c5fe76f87755e9 @@ -28,7 +28,7 @@ https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.40-hbdbef99_ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda#23fdf1fef05baeb7eadc2aed5fb0011f https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.10-hd590300_0.conda#93729f7a54b25cb135ac2b67ea3a7603 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.23.0-hd590300_0.conda#d459949bc10f64dee1595c176c2e6291 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.24.0-hd590300_0.conda#f5842b88e9cbfa177abfaeacd457a45d https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.1-h59595ed_0.conda#8c0f4f71f5a59ceb0c6fa9f51501066d https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 @@ -49,8 +49,9 @@ https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172b https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda#d66573916ffcf376178462f1b61c941e https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 +https://conda.anaconda.org/conda-forge/linux-64/libnl-3.9.0-hd590300_0.conda#d27c451db4f1d3c983c78167d2fdabc2 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_3.conda#eda05ab0db8f8490945fd99244183e3a @@ -66,7 +67,6 @@ https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda#603827b39ea2b835268adb8c821b8570 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 -https://conda.anaconda.org/conda-forge/linux-64/rdma-core-49.0-hd3aeb46_1.conda#434d42b3ee35e1aaf6bb42d87730d1a4 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda#0c0533894f21c3d35697cb8378d390e2 https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-hcb278e6_1.conda#2c46deb08ba9b10e90d0a6401ad65deb @@ -106,10 +106,10 @@ https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#332 https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe +https://conda.anaconda.org/conda-forge/linux-64/rdma-core-49.0-hd3aeb46_2.conda#855579013120ad3078e7d5dcadb643e1 https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.0-h06160fa_0.conda#3d1b58d2664d96f9fbc0afe5e1d04632 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc -https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-hae80064_1.conda#c0413425844278251c1cc9459386339b https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 @@ -131,12 +131,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.cond https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.3-h0ab5242_0.conda#3f9b5f4400be3cee11b426a8cd653b7c -https://conda.anaconda.org/conda-forge/linux-64/nss-3.95-h1d7d5a4_0.conda#d3a8067adcc45a923f4b1987c91d69da +https://conda.anaconda.org/conda-forge/linux-64/nss-3.96-h1d7d5a4_0.conda#1c8f8b8eb041ecd54053fc4b6ad57957 https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda#6e6f990b097d3e237e18a8e321d08484 https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.6-hab00c5b_0_cpython.conda#b0dfbe2fcbfdb097d321bfd50ecddab1 +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.7-hab00c5b_0_cpython.conda#bf281a975393266ab95734a8cfd532ec https://conda.anaconda.org/conda-forge/linux-64/re2-2023.06.02-h2873b5e_0.conda#bb2d5e593ef13fe4aff0bc9440f945ae https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda#4f2892c672829693fd978d065db4e8be +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_2.conda#5798de4587dc70fa6db81663e79f176a https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda#6bb8deb138f87c9d48320ac21b87e7a1 https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e @@ -157,11 +158,11 @@ https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/codespell-2.2.6-pyhd8ed1ab_0.conda#a206349b7bb7475ae580f987cb425bdd https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.6-py311hb755f60_0.conda#88cc84238dda72e11285d9cfcbe43e51 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.7-py311hb755f60_0.conda#97b12677eec6c2fd23c7867db1c7a87d https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364 https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2 https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda#5e4f3466526c52bc9af2d2353a1460bd -https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda#db16c66b759a64dc5183d69cc3745a52 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_3.conda#1c33f55e5cdcc2a2b973c432b5225bfe https://conda.anaconda.org/conda-forge/noarch/dodgy-0.2.1-py_0.tar.bz2#62a69d073f7446c90f417b0787122f5b https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d @@ -171,7 +172,7 @@ https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h743c826_0.conda#12e6988845706b2cfbc3bc35c9a61a95 -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.1-pyhca7485f_0.conda#b38946846cdf39f9bce93f75f571d913 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.2-pyhca7485f_0.conda#bf40f2a8835b78b1f91083d306b493d2 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h829c605_4.conda#252a696860674caf7a855e16f680d63a https://conda.anaconda.org/conda-forge/noarch/geographiclib-1.52-pyhd8ed1ab_0.tar.bz2#6880e7100ebae550a33ce26663316d85 https://conda.anaconda.org/conda-forge/linux-64/gfortran-12.3.0-h499e0f7_2.conda#0558a8c44eb7a18e6682bd3a8ae6dcab @@ -185,7 +186,7 @@ https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.b https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f -https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py311h459d7ec_1.conda#7cc99d87755a9e64586a6004c5f0f534 +https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.10.0-py311h459d7ec_0.conda#d39020c78fd00ed774ff9c876e8aba07 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.5.0-hca28451_0.conda#7144d5a828e2cae218e0e3c98d8a0aeb @@ -193,7 +194,7 @@ 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-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda#0ebb65e8d86843865796c7c95a941f34 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_2.conda#76405b658bdd57a05bbdcee11d4714d2 +https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_3.conda#7ac703b3bdee421dc763eb83b9ea2737 https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda#f8e0b648d77bbe44d1fe8af8cc56a590 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2#34fc335fc50eef0b5ea708f2b5f54e0c @@ -211,7 +212,7 @@ https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2# https://conda.anaconda.org/conda-forge/noarch/pkgutil-resolve-name-1.3.10-pyhd8ed1ab_1.conda#405678b942f2481cecdb3e010f4925d9 https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda#45a5065664da0d1dfa8f8cd2eaf05ab9 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h459d7ec_1.conda#490d7fa8675afd1aa6f1b2332d156a45 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.7-py311h459d7ec_0.conda#b4f2d78860bf9c8887b528c10995b427 https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2#359eeb6536da0e687af562ed265ec263 https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.2-pyhd8ed1ab_0.tar.bz2#6784285c7e55cb7212efabc79e4c2883 https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.9.1-pyhd8ed1ab_0.tar.bz2#0191dd7efe1a94262812770183b68892 @@ -227,7 +228,7 @@ https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py311h459d7e https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py311h34ded2d_0.conda#819aa640a0493d4b52faf938e94d129e -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.13.2-py311h46250e7_0.conda#c5f5089dd1fe0000fecaf0d12eca50b9 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.15.2-py311h46250e7_0.conda#1ec6376840c74c230f42e71092851fb6 https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda#5efb3fccda53974aed800b6d575f72ed https://conda.anaconda.org/conda-forge/noarch/setoptconf-tmp-0.3.1-pyhd8ed1ab_0.tar.bz2#af3e36d4effb85b9b9f93cd1db0963df https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 @@ -265,8 +266,8 @@ https://conda.anaconda.org/conda-forge/noarch/asgiref-3.7.2-pyhd8ed1ab_0.conda#5 https://conda.anaconda.org/conda-forge/linux-64/astroid-2.15.8-py311h38be061_0.conda#46d70fcb74472aab178991f0231ee3c6 https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda#5f25798dcefd8252ce5f9dc494d5f571 https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-h538f98c_2.conda#d42aebb91e28e2fee2a0218cfbff2c90 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.10-h35285c7_2.conda#0cca0a3d7dc82f219ac46635478952f6 -https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda#3ccff479c246692468f604df9c85ef26 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.0-h35285c7_0.conda#dc4323c7ecc9eae3823699637258f7ba +https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e @@ -274,12 +275,12 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.cond https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.1-hbdc6101_0.conda#dcea02841b33a9c49f74ca9328de919a https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2#4fd2c6b53934bd7d96d1f3fdaf99b79f https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2#a29b7c141d6b2de4bb67788a5f107734 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py311h459d7ec_0.conda#7b3145fed7adc7c63a0e08f6f29f5480 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.3-py311h459d7ec_0.conda#9db2c1316e96068c0189beaeb716f3fe https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.7.0-h00ab1b0_0.conda#b4537c98cb59f8725b0e1e65816b4a28 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda#afe341dbe834ae76d2c23157ff00e633 https://conda.anaconda.org/conda-forge/noarch/docformatter-1.7.5-pyhd8ed1ab_0.conda#3a941b6083e945aa87e739a9b85c82e9 https://conda.anaconda.org/conda-forge/noarch/fire-0.5.0-pyhd8ed1ab_0.conda#9fd22aae8d2f319e80f68b295ab91d64 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py311h459d7ec_0.conda#a14114f70e23f7fd5ab9941fec45b095 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.47.0-py311h459d7ec_0.conda#f7ec87c448f714f53519fe9c87ba1747 https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.7.0-heb67821_0.conda#7ef7c0f111dad1c8006504a0f1ccd820 https://conda.anaconda.org/conda-forge/noarch/geopy-2.4.1-pyhd8ed1ab_0.conda#c75621ce68f6570fff9a6734cf21c9a7 https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda#623b19f616f2ca0c261441067e18ae40 @@ -287,10 +288,10 @@ https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.c https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/isodate-0.6.1-pyhd8ed1ab_0.tar.bz2#4a62c93c1b5c0b920508ae3fd285eaf5 -https://conda.anaconda.org/conda-forge/noarch/isort-5.12.0-pyhd8ed1ab_1.conda#07ed3421bad60867234c7a9282ea39d4 +https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.0-py311h38be061_0.conda#cee83be29258275f75029125e186ab6d +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.1-py311h38be061_0.conda#1c704ad46ebe0a4cc29445b565bd954d https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda#3f0915b1fb2252ab73686a533c5f9d3f https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2#8d67904973263afd2985ba56aa2d6bb4 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 @@ -299,16 +300,16 @@ https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h5206363_ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 https://conda.anaconda.org/conda-forge/noarch/logilab-common-1.7.3-py_0.tar.bz2#6eafcdf39a7eb90b6d951cfff59e8d3b https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de -https://conda.anaconda.org/conda-forge/linux-64/mypy-1.7.1-py311h459d7ec_0.conda#8f9fd891c222781fc9df8210a2266a52 +https://conda.anaconda.org/conda-forge/linux-64/mypy-1.7.1-py311h459d7ec_1.conda#0a861b29266afe8c315ecdcb92f9e692 https://conda.anaconda.org/conda-forge/noarch/nested-lookup-0.2.25-pyhd8ed1ab_1.tar.bz2#2f59daeb14581d41b1e2dda0895933b2 https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda#2a75b296096adabbabadd5e9782e5fcc https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1 https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py311ha6c5da5_0.conda#83a988daf5c49e57f7d2086fb6781fe8 -https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda#2400c0b86889f43aa52067161e1fb108 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_7.conda#672069c684190f10e5a9bbb5b10d82bb https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda#b5e57a0c643da391bef850922963eece -https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.41-pyha770c72_0.conda#f511a993aa4336bef9dd874ee3403e67 +https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 @@ -318,10 +319,10 @@ https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0 https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2#7c4076e494f0efe76705154ac9302ba6 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda#f8ced8ee63830dec7ecc1be048d1470a https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.conda#c119653cba436d8183c27bf6d190e587 -https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda#297e6a75dc1b6a440cd341a85eab8a00 +https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda#63b80ca78d29380fe69e69412dcbe4ac https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2#cc9f59f147740d88679bf1bd94dbe588 https://conda.anaconda.org/conda-forge/noarch/yamllint-1.33.0-pyhd8ed1ab_0.conda#57d32eb2c4b76ef288f9dd789f8fe5af -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.4-h0448019_0.conda#f27f792aa83c7be3ee96d09a637a6474 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.5-h0448019_0.conda#28a659a52294834426cabec2ee328bcf https://conda.anaconda.org/conda-forge/noarch/cattrs-23.2.3-pyhd8ed1ab_0.conda#91fc4700dcce4a46d439900a132fe4e5 https://conda.anaconda.org/conda-forge/linux-64/compilers-1.7.0-ha770c72_0.conda#81458b3aed8ab8711951ec3c0c04e097 https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.7-py311hcb13ee4_1.conda#ca6e04ac7262ecaec846e483d6fdc6c8 @@ -332,7 +333,7 @@ https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.0-hd8ed1ab_0.conda#12aff14f84c337be5e5636bf612f4140 https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.2-pyhd8ed1ab_0.conda#73884ca36d6d96cbce498cde99fab40f -https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.2-hcd42e92_1.conda#b04c039f0bd511533a0d8bc8a7b6835e +https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda#f7e7077802927590efc8bf7328208f12 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h7385560_2.conda#4260750b280f6f7c38a4459bf0d919ff https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py311h64a7726_0.conda#fd2f142dcd680413b5ede5d0fb799205 @@ -350,20 +351,20 @@ https://conda.anaconda.org/conda-forge/noarch/rdflib-7.0.0-pyhd8ed1ab_0.conda#44 https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/requirements-detector-1.2.2-pyhd8ed1ab_0.conda#6626918380d99292df110f3c91b6e5ec https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af -https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda#7de728789b0aba16018f726dc5ddbec2 +https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h8c794c1_0.conda#e824b951c15a74d0a2d3e42676370791 https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.10-pyhd8ed1ab_0.conda#84dca7318667fa091bbfd8724d22ea99 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.24.11-h5bdc202_2.conda#108e5ec3f64e576d8d2179aec9ede937 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.25.0-h1bbe558_2.conda#f0a484e643219b6738fc86c0f0f5c806 https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.conda#b7e6d52b39e199238c3400cafaabafb3 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py311h9547e67_0.conda#40828c5b36ef52433e21f89943e09f33 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.0-pyhd8ed1ab_0.conda#95eae0785aed72998493140dc0115382 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.1-pyhd8ed1ab_0.conda#bf6ad72d882bc3f04e6a0fb50fd2cce8 https://conda.anaconda.org/conda-forge/noarch/flake8-polyfill-1.0.2-py_0.tar.bz2#a53db35e3d07f0af2eccd59c2a00bffe https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda#93c8f8ceb83827d88deeba796f07fba7 https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda#15c6f45a45f7ac27f6d60b0b084f6761 https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda#1116d79def5268414fb0917520b2bbf1 https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.0-pyhd8ed1ab_0.conda#6bd3f1069cdebb44c7ae9efb900e312d -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hcae7082_1.conda#e96d24ccc597439cda2859fe948aac77 +https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hd0089ee_2.conda#feb838eaf49fd1608413759f7b54c74c https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_103.conda#50f05f98d084805642d24dff910e11e8 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py311h320fe9a_0.conda#e44ccb61b6621bf3f8053ae66eba7397 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 @@ -374,13 +375,13 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-html-4.1.1-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.1.1-pyhd8ed1ab_0.conda#29bf13210ee541c59166cea092b91080 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py311h64a7726_0.conda#9ac5334f1b5ed072d3dbc342503d7868 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py311h2032efe_1.conda#4ba860ff851768615b1a25b788022750 -https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-h967ea9e_4.conda#a70ab7bfe53176ae7b6b3cdd2a0236b3 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-h0853bfa_5.conda#b923ffd222c9bb4bbf93b0fd18beac02 https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.2-pyhd8ed1ab_0.conda#c02a7e79365121bd3bcc25f1b65f48a9 https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_4.conda#1e105c1a8ea2163507726144b401eb1b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.0-pyhd8ed1ab_0.conda#22d620e1079e99c34578cb0c615d2789 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.1-pyhd8ed1ab_0.conda#6b31b9b627f238a0068926d5650ae128 https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.conda#c330e87e698bae8e7381c0315cf25dd0 -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py311h815a124_1.conda#6e9577466e5f1d18bd659746a5d948b7 -https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py311h67923c1_2.conda#36bdf6d2872decceaa4e5c97e128351c +https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h7f000aa_3.conda#0abfa7f9241a0f4fd732bc15773cfb0c https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py311h54ef318_0.conda#9f80753bc008bfc9b95f39d9ff9f1694 https://conda.anaconda.org/conda-forge/noarch/myproxyclient-2.1.1-pyhd8ed1ab_0.conda#bcdbeb2b693eba886583a907840c6421 @@ -394,33 +395,33 @@ https://conda.anaconda.org/conda-forge/noarch/pylint-flask-0.6-py_0.tar.bz2#5a9a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_1.conda#cd36a89a048ad2bcc6d8b43f648fb1d0 https://conda.anaconda.org/conda-forge/noarch/xarray-2023.12.0-pyhd8ed1ab_0.conda#e9b31d3ab1b0dd5fd8c24419f6560b90 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_1.conda#10d1806e20da040c58c36deddf51c70c -https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.6-pyhd8ed1ab_0.conda#2e33e3bdf2b1a79989ad792ac22104d3 +https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.7-pyhd8ed1ab_0.conda#d475dc2fac9652bcd55cec9c387fc139 https://conda.anaconda.org/conda-forge/noarch/dask-jobqueue-0.8.2-pyhd8ed1ab_0.conda#cc344a296a41369bcb05f7216661cec8 https://conda.anaconda.org/conda-forge/noarch/esgf-pyclient-0.3.1-pyhca7485f_3.conda#1d43833138d38ad8324700ce45a7099a https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_2.conda#01464abc0630e2285a799a2fa8370a8e https://conda.anaconda.org/conda-forge/linux-64/graphviz-9.0.0-h78e8752_1.conda#a3f4cd4a512ec5db35ffbf25ba11f537 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.1-h0f82fcc_9_cpu.conda#93ab134816aed65c7e1780175b8cb9f8 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-hfb4d3a9_0_cpu.conda#3fb24292de146d04d471ab88b44630e6 https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.3-pyhd8ed1ab_0.conda#f551d4d859a1d70c6abff8310a655481 https://conda.anaconda.org/conda-forge/noarch/iris-3.7.0-pyha770c72_0.conda#dccc1f660bf455c239adaabf56b91dc9 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.1-h59595ed_9_cpu.conda#a725b257e129ed3d622fec16bab47c2b -https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.1-h120cb0d_9_cpu.conda#3a4fbfe30cd03011864bc8207ea60701 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.1-hacb8726_9_cpu.conda#873471e85479005a88be0c1b74631e14 -https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.1-h352af49_9_cpu.conda#34b461640e180350d47f88ab5d23065d -https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.12.0-pyhd8ed1ab_0.conda#4d67c68fd0d130091ada039bc2d81b33 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_0_cpu.conda#8d23c56e691ff7dfc4b3eb7422976171 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-h120cb0d_0_cpu.conda#5b2207ce6f7a383a094be45e4fab8abd +https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hacb8726_0_cpu.conda#1a59387c247c08029b8ac364c672d645 +https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_0_cpu.conda#2a325960d715af08b098bf4f746bf5c4 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.13.0-pyhd8ed1ab_0.conda#786c2ed88ac4483944ed9013dcba399c https://conda.anaconda.org/conda-forge/noarch/py-cordex-0.6.6-pyhd8ed1ab_0.conda#255f9eac03143526c8aed41d1d091c63 https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda#5c223cb0d9c05552bf9d1586a92720b2 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.1-h59595ed_9_cpu.conda#b7a449691b276d0e569f969d308bc8a2 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.1-h61ff412_9_cpu.conda#4122351074e4dd9f287472d6f0e66f72 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.12.0-pyhd8ed1ab_0.conda#460d7cac50322a39b61a833885a6a8d5 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_0_cpu.conda#6a469f0dcc01b9ca7a19aa3e07bd8ea8 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h61ff412_0_cpu.conda#0c70731f58f42b47940df94cc50e6b7e +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.13.0-pyhd8ed1ab_0.conda#13647ddfc84fd614fa12119a317de280 https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2#aa9b3ad140f6c0668c646f32e20ccf82 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.1-h61ff412_9_cpu.conda#d7af71a020d5ce3d84245083a2942a34 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.12.0-pyhd8ed1ab_0.conda#364e28ab12477494e72839aaa588073d -https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.1-py311h39c9aba_9_cpu.conda#fbc8c2f87576aa3e1206093b819e1e00 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h61ff412_0_cpu.conda#6d789ad04a56815daf8785f7e8517430 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.13.0-pyhd8ed1ab_0.conda#e52eed0a3dac67432a02b8b5b23c8d76 +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_0_cpu.conda#27885a87fe1250c1cfea5dd92f22fcfd https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda -https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.0-pyhd8ed1ab_0.conda#5cfc00e93b71fba459bede86419d0f01 +https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.1-pyhd8ed1ab_0.conda#9a6e8eb1d188bc246883ea11f4fe6a4d https://conda.anaconda.org/conda-forge/noarch/iris-esmf-regrid-0.9.0-pyhd8ed1ab_0.conda#570f2c6e387fd6dac5356a5152f91b3f https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.6-pyhd8ed1ab_0.tar.bz2#4409dd7e06a62c3b2aa9e96782c49c6d https://conda.anaconda.org/conda-forge/noarch/nbsphinx-0.9.3-pyhd8ed1ab_0.conda#0dbaa7d08d3d79b2a1a4dd6a02cc4581 From 0698ef82a41590325f284e3a2302b2ee1078d58f Mon Sep 17 00:00:00 2001 From: Manuel Schlund <32543114+schlunma@users.noreply.github.com> Date: Thu, 21 Dec 2023 13:26:06 +0100 Subject: [PATCH 10/14] New preprocessor: `local_solar_time` (#2258) Co-authored-by: Bouwe Andela --- doc/recipe/preprocessor.rst | 50 ++ esmvalcore/iris_helpers.py | 113 +++- esmvalcore/preprocessor/__init__.py | 6 +- esmvalcore/preprocessor/_time.py | 441 +++++++++++++- .../preprocessor/_time/__init__.py | 0 .../preprocessor/_time/test_time.py | 561 ++++++++++++++++++ tests/unit/preprocessor/_time/test_time.py | 62 +- tests/unit/test_iris_helpers.py | 118 ++++ 8 files changed, 1279 insertions(+), 72 deletions(-) create mode 100644 tests/integration/preprocessor/_time/__init__.py create mode 100644 tests/integration/preprocessor/_time/test_time.py diff --git a/doc/recipe/preprocessor.rst b/doc/recipe/preprocessor.rst index 5c4b14e351..7ad4bdbcec 100644 --- a/doc/recipe/preprocessor.rst +++ b/doc/recipe/preprocessor.rst @@ -1219,6 +1219,7 @@ The ``_time.py`` module contains the following preprocessor functions: * regrid_time_: Aligns the time axis of each dataset to have common time points and calendars. * timeseries_filter_: Allows application of a filter to the time-series data. +* local_solar_time_: Convert cube with UTC time to local solar time. Statistics functions are applied by default in the order they appear in the list. For example, the following example applied to hourly data will retrieve @@ -1653,6 +1654,55 @@ Examples: See also :func:`esmvalcore.preprocessor.timeseries_filter`. +.. _local_solar_time: + +``local_solar_time`` +-------------------- + +Many variables in the Earth system show a strong diurnal cycle. +The reason for that is of course Earth's rotation around its own axis, which +leads to a diurnal cycle of the incoming solar radiation. +While UTC time is a very good absolute time measure, it is not really suited to +analyze diurnal cycles over larger regions. +For example, diurnal cycles over Russia and the USA are phase-shifted by ~180° += 12 hr in UTC time. + +This is where the `local solar time (LST) +`__ comes into play: +For a given location, 12:00 noon LST is defined as the moment when the sun +reaches its highest point in the sky. +By using this definition based on the origin of the diurnal cycle (the sun), we +can directly compare diurnal cycles across the globe. +LST is mainly determined by the longitude of a location, but due to the +eccentricity of Earth's orbit, it also depends on the day of year (see +`equation of time `__). +However, this correction is at most ~15 min, which is usually smaller than the +highest frequency output of CMIP6 models (1 hr) and smaller than the time scale +for diurnal evolution of meteorological phenomena (which is in the order of +hours, not minutes). +Thus, instead, we use the **mean** LST, which solely depends on longitude: + +.. math:: + + LST = UTC + 12 \cdot \frac{lon}{180°} + +where the times are given in hours and `lon` in degrees in the interval [-180, +180]. +To transform data from UTC to LST, this preprocessor shifts data along the time +axis based on the longitude. + +This preprocessor does not need any additional parameters. + +Example: + +.. code-block:: yaml + + calculate_local_solar_time: + local_solar_time: + +See also :func:`esmvalcore.preprocessor.local_solar_time`. + + .. _area operations: Area manipulation diff --git a/esmvalcore/iris_helpers.py b/esmvalcore/iris_helpers.py index e5bc3dbeea..8fbd794b3e 100644 --- a/esmvalcore/iris_helpers.py +++ b/esmvalcore/iris_helpers.py @@ -1,11 +1,14 @@ """Auxiliary functions for :mod:`iris`.""" -from typing import Dict, List, Sequence +from __future__ import annotations + +from typing import Dict, Iterable, List, Literal, Sequence import dask.array as da import iris import iris.cube import iris.util import numpy as np +from iris.coords import Coord from iris.cube import Cube from iris.exceptions import CoordinateMultiDimError @@ -157,3 +160,111 @@ def merge_cube_attributes( # Step 3: modify the cubes in-place for cube in cubes: cube.attributes = final_attributes + + +def _rechunk( + array: da.core.Array, + complete_dims: list[int], + remaining_dims: int | Literal['auto'], +) -> da.core.Array: + """Rechunk a given array so that it is not chunked along given dims.""" + new_chunks: list[str | int] = [remaining_dims] * array.ndim + for dim in complete_dims: + new_chunks[dim] = -1 + return array.rechunk(new_chunks) + + +def _rechunk_dim_metadata( + cube: Cube, + complete_dims: Iterable[int], + remaining_dims: int | Literal['auto'] = 'auto', +) -> None: + """Rechunk dimensional metadata of a cube (in-place).""" + # Non-dimensional coords that span complete_dims + # Note: dimensional coords are always realized (i.e., numpy arrays), so no + # chunking is necessary + for coord in cube.coords(dim_coords=False): + dims = cube.coord_dims(coord) + complete_dims_ = [dims.index(d) for d in complete_dims if d in dims] + if complete_dims_: + if coord.has_lazy_points(): + coord.points = _rechunk( + coord.lazy_points(), complete_dims_, remaining_dims + ) + if coord.has_bounds() and coord.has_lazy_bounds(): + coord.bounds = _rechunk( + coord.lazy_bounds(), complete_dims_, remaining_dims + ) + + # Rechunk cell measures that span complete_dims + for measure in cube.cell_measures(): + dims = cube.cell_measure_dims(measure) + complete_dims_ = [dims.index(d) for d in complete_dims if d in dims] + if complete_dims_ and measure.has_lazy_data(): + measure.data = _rechunk( + measure.lazy_data(), complete_dims_, remaining_dims + ) + + # Rechunk ancillary variables that span complete_dims + for anc_var in cube.ancillary_variables(): + dims = cube.ancillary_variable_dims(anc_var) + complete_dims_ = [dims.index(d) for d in complete_dims if d in dims] + if complete_dims_ and anc_var.has_lazy_data(): + anc_var.data = _rechunk( + anc_var.lazy_data(), complete_dims_, remaining_dims + ) + + +def rechunk_cube( + cube: Cube, + complete_coords: Iterable[Coord | str], + remaining_dims: int | Literal['auto'] = 'auto', +) -> Cube: + """Rechunk cube so that it is not chunked along given dimensions. + + This will rechunk the cube's data, but also all non-dimensional + coordinates, cell measures, and ancillary variables that span at least one + of the given dimensions. + + Note + ---- + This will only rechunk `dask` arrays. `numpy` arrays are not changed. + + Parameters + ---------- + cube: + Input cube. + complete_coords: + (Names of) coordinates along which the output cubes should not be + chunked. The given coordinates must span exactly 1 dimension. + remaining_dims: + Chunksize of the remaining dimensions. + + Returns + ------- + Cube + Rechunked cube. This will always be a copy of the input cube. + + """ + cube = cube.copy() # do not modify input cube + + # Make sure that complete_coords span exactly 1 dimension + complete_dims = [] + for coord in complete_coords: + coord = cube.coord(coord) + dims = cube.coord_dims(coord) + if len(dims) != 1: + raise CoordinateMultiDimError( + f"Complete coordinates must be 1D coordinates, got " + f"{len(dims):d}D coordinate '{coord.name()}'" + ) + complete_dims.append(dims[0]) + + # Rechunk data + if cube.has_lazy_data(): + cube.data = _rechunk(cube.lazy_data(), complete_dims, remaining_dims) + + # Rechunk dimensional metadata + _rechunk_dim_metadata(cube, complete_dims, remaining_dims=remaining_dims) + + return cube diff --git a/esmvalcore/preprocessor/__init__.py b/esmvalcore/preprocessor/__init__.py index 4a5027bce5..2144e5edce 100644 --- a/esmvalcore/preprocessor/__init__.py +++ b/esmvalcore/preprocessor/__init__.py @@ -70,6 +70,7 @@ extract_season, extract_time, hourly_statistics, + local_solar_time, monthly_statistics, regrid_time, resample_hours, @@ -148,8 +149,6 @@ 'extract_volume', 'extract_trajectory', 'extract_transect', - # 'average_zone': average_zone, - # 'cross_section': cross_section, 'detrend', 'extract_named_regions', 'axis_statistics', @@ -157,8 +156,7 @@ 'area_statistics', 'volume_statistics', # Time operations - # 'annual_cycle': annual_cycle, - # 'diurnal_cycle': diurnal_cycle, + 'local_solar_time', 'amplitude', 'zonal_statistics', 'meridional_statistics', diff --git a/esmvalcore/preprocessor/_time.py b/esmvalcore/preprocessor/_time.py index 7d5e7ed603..ca4e95ce56 100644 --- a/esmvalcore/preprocessor/_time.py +++ b/esmvalcore/preprocessor/_time.py @@ -9,6 +9,7 @@ import datetime import logging import warnings +from functools import partial from typing import Iterable, Optional from warnings import filterwarnings @@ -16,18 +17,23 @@ import dask.config import iris import iris.coord_categorisation -import iris.exceptions import iris.util import isodate import numpy as np -from iris.coords import AuxCoord +from cf_units import Unit +from iris.coords import AuxCoord, Coord, DimCoord from iris.cube import Cube, CubeList +from iris.exceptions import CoordinateMultiDimError, CoordinateNotFoundError from iris.time import PartialDateTime +from iris.util import broadcast_to_shape +from numpy.typing import DTypeLike from esmvalcore.cmor.fixes import get_next_month, get_time_bounds -from esmvalcore.iris_helpers import date2num - -from ._shared import get_iris_aggregator, update_weights_kwargs +from esmvalcore.iris_helpers import date2num, rechunk_cube +from esmvalcore.preprocessor._shared import ( + get_iris_aggregator, + update_weights_kwargs, +) logger = logging.getLogger(__name__) @@ -1150,7 +1156,7 @@ def timeseries_filter( """ try: cube.coord('time') - except iris.exceptions.CoordinateNotFoundError: + except CoordinateNotFoundError: logger.error("Cube %s does not have time coordinate", cube) raise @@ -1292,3 +1298,426 @@ def resample_time( raise ValueError( f"Time coordinate {dates} does not contain {requested} for {cube}") return cube + + +def _lin_pad(array: np.ndarray, delta: float, pad_with: int) -> np.ndarray: + """Linearly pad an array on both sides with constant difference.""" + end_values = (array[0] - pad_with * delta, array[-1] + pad_with * delta) + new_array = np.pad(array, pad_with, 'linear_ramp', end_values=end_values) + return new_array + + +def _guess_time_bounds(time_coord: DimCoord) -> None: + """Guess bounds of time coordinate in-place.""" + if time_coord.has_bounds(): + return + try: + time_coord.guess_bounds() + except ValueError: # coordinate has only 1 point + point = time_coord.points[0] + time_coord.bounds = [[point - 0.5, point + 0.5]] + + +def _get_lst_offset(lon_coord: Coord) -> np.ndarray: + """Get offsets to shift UTC time to local solar time (LST). + + Note + ---- + This function expects longitude in degrees. Can be in [0, 360] or [-180, + 180] format. + + """ + # Make sure that longitude is in degrees and shift it to [-180, 180] first + # (do NOT overwrite input coordinate) + lon_coord = lon_coord.copy() + lon_coord.convert_units('degrees') + shifted_lon = (lon_coord.points + 180.0) % 360 - 180.0 + return 12.0 * (shifted_lon / 180.0) + + +def _get_lsts(time_coord: DimCoord, lon_coord: Coord) -> np.ndarray: + """Get array of binned local solar times (LSTs) of shape (lon, time). + + Note + ---- + LSTs outside of the time bins given be the time coordinate bounds are put + into a bin below/above the time coordinate. + + """ + # Pad time coordinate with 1 time step at both sides for the bins for LSTs + # outside of the time coordinate + dtime = np.abs( + time_coord.bounds[0, 1] - time_coord.bounds[0, 0] + ) + new_points = _lin_pad(time_coord.points, dtime, 1) + bnds = time_coord.bounds + new_bounds = np.stack( + (_lin_pad(bnds[:, 0], dtime, 1), _lin_pad(bnds[:, 1], dtime, 1)), + axis=-1, + ) + time_coord = time_coord.copy(new_points, bounds=new_bounds) + + n_time = time_coord.shape[0] + n_lon = lon_coord.shape[0] + + # Calculate LST + time_array = np.broadcast_to(time_coord.points, (n_lon, n_time)) + time_offsets = _get_lst_offset(lon_coord).reshape(-1, 1) + exact_lst_array = time_array + time_offsets # (lon, time) + + # Put LST into bins given be the time coordinate bounds + bins = np.concatenate(([time_coord.bounds[0, 0]], time_coord.bounds[:, 1])) + idx = np.digitize(exact_lst_array, bins) - 1 # (lon, time); idx for time + idx[idx < 0] = 0 # values outside the time coordinate + idx[idx >= n_time] = - 1 # values outside the time coordinate + lst_array = time_coord.points[idx] # (lon, time) + + # Remove time steps again that have been added previously + lst_array = lst_array[:, 1:-1] + + return lst_array + + +def _get_time_index_and_mask( + time_coord: DimCoord, + lon_coord: Coord, +) -> tuple[np.ndarray, np.ndarray]: + """Get advanced index and mask for time dimension of shape (time, lon). + + Note + ---- + The mask considers the fact that not all values for all local solar times + (LSTs) are given. E.g., for hourly data with first time point 01:00:00 + UTC, LST in Berlin is already 02:00:00 (assuming no daylight saving time). + Thus, for 01:00:00 LST on this day, there is no value for Berlin. + + """ + # Make sure that time coordinate has bounds (these are necessary for the + # binning) and uses 'hours' as reference units + time_coord.convert_units( + Unit('hours since 1850-01-01', calendar=time_coord.units.calendar) + ) + _guess_time_bounds(time_coord) + + lsts = _get_lsts(time_coord, lon_coord) # (lon, time) + n_time = time_coord.points.shape[0] + + # We use np.searchsorted to calculate the indices necessary to put the UTC + # times into their corresponding (binned) LSTs. These incides are 2D since + # they depend on time and longitude. + searchsorted_l = partial(np.searchsorted, side='left') + _get_indices_l = np.vectorize(searchsorted_l, signature='(i),(i)->(i)') + time_index_l = _get_indices_l(lsts, time_coord.points) # (lon, time) + + # To calculate the mask, we need to detect which LSTs are outside of the + # time coordinate. Unfortunately, searchsorted can only detect outliers on + # one side of the array. This side is determined by the `side` keyword + # argument. To consistently detect outliers on both sides, we use + # searchsorted again, this time with `side='right'` (the default is + # 'left'). Indices that are the same in both arrays need to be masked, as + # these are the ones outside of the time coordinate. All others will + # change. + searchsorted_r = partial(np.searchsorted, side='right') + _get_indices_r = np.vectorize(searchsorted_r, signature='(i),(i)->(i)') + time_index_r = _get_indices_r(lsts, time_coord.points) # (lon, time) + mask = time_index_l == time_index_r # (lon, time) + + # The index is given by the left indices (these are identical to the right + # indices minus 1) + time_index_l[time_index_l < 0] = 0 # will be masked + time_index_l[time_index_l >= n_time] = -1 # will be masked + + return (time_index_l.T, mask.T) # (time, lon) + + +def _transform_to_lst_eager( + data: np.ndarray, + *, + time_index: np.ndarray, + mask: np.ndarray, + time_dim: int, + lon_dim: int, + **__, +) -> np.ndarray: + """Transform array with UTC coord to local solar time (LST) coord. + + Note + ---- + This function is the eager version of `_transform_to_lst_lazy`. + + `data` needs to be at least 2D. `time_dim` and `lon_dim` correspond to the + dimensions that describe time and longitude dimensions in `data`, + respectively. + + `time_index` is an `advanced index + `__ + for the time dimension of `data` with shape (time, lon). It is used to + reorder the data along the time axis based on the longitude axis. + + `mask` is 2D with shape (time, lon) that will be applied to the final data. + + """ + # Apart from the time index, all other dimensions will stay the same; this + # is ensured with np.ogrid + idx = np.ogrid[tuple(slice(0, d) for d in data.shape)] + time_index = broadcast_to_shape( + time_index, data.shape, (time_dim, lon_dim) + ) + idx[time_dim] = time_index + new_data = data[tuple(idx)] + + # Apply properly broadcasted mask + mask = broadcast_to_shape(mask, new_data.shape, (time_dim, lon_dim)) + new_mask = mask | np.ma.getmaskarray(new_data) + + return np.ma.masked_array(new_data, mask=new_mask) + + +def _transform_to_lst_lazy( + data: da.core.Array, + *, + time_index: np.ndarray, + mask: np.ndarray, + time_dim: int, + lon_dim: int, + output_dtypes: DTypeLike, +) -> da.core.Array: + """Transform array with UTC coord to local solar time (LST) coord. + + Note + ---- + This function is the lazy version of `_transform_to_lst_eager` using + dask's :func:`dask.array.apply_gufunc`. + + `data` needs to be at least 2D. `time_dim` and `lon_dim` correspond to the + dimensions that describe time and longitude dimensions in `data`, + respectively. + + `time_index` is an `advanced index + `__ + for the time dimension of `data` with shape (time, lon). It is used to + reorder the data along the time axis based on the longitude axis. + + `mask` is 2D with shape (time, lon) that will be applied to the final data. + + """ + _transform_chunk_to_lst = partial( + _transform_to_lst_eager, + time_index=time_index, + mask=mask, + time_dim=-2, # this is ensured by da.apply_gufunc + lon_dim=-1, # this is ensured by da.apply_gufunc + ) + new_data = da.apply_gufunc( + _transform_chunk_to_lst, + '(t,y)->(t,y)', + data, + axes=[(time_dim, lon_dim), (time_dim, lon_dim)], + output_dtypes=output_dtypes, + ) + return new_data + + +def _transform_arr_to_lst( + data: np.ndarray | da.core.Array, + *, + time_index: np.ndarray, + mask: np.ndarray, + time_dim: int, + lon_dim: int, + output_dtypes: DTypeLike, +) -> np.ndarray | da.core.Array: + """Transform array with UTC coord to local solar time (LST) coord. + + Note + ---- + This function either calls `_transform_to_lst_eager` or + `_transform_to_lst_lazy` depending on the type of input data. + + """ + if isinstance(data, np.ndarray): + func = _transform_to_lst_eager # type: ignore + else: + func = _transform_to_lst_lazy # type: ignore + new_data = func( + data, # type: ignore + time_index=time_index, + mask=mask, + time_dim=time_dim, + lon_dim=lon_dim, + output_dtypes=output_dtypes, + ) + return new_data + + +def _transform_cube_to_lst(cube: Cube) -> Cube: + """Transform cube to local solar time (LST) coordinate (lazy; in-place).""" + # Rechunk cube properly (it must not be chunked along time and longitude + # dimension); this also creates a new cube so the original input cube is + # not overwritten + complete_coords = [ + cube.coord('time', dim_coords=True), cube.coord('longitude'), + ] + cube = rechunk_cube(cube, complete_coords) + + time_coord = cube.coord('time', dim_coords=True) + lon_coord = cube.coord('longitude') + time_dim = cube.coord_dims(time_coord)[0] + lon_dim = cube.coord_dims(lon_coord)[0] + + # Transform cube data + (time_index, mask) = _get_time_index_and_mask(time_coord, lon_coord) + _transform_arr = partial( + _transform_arr_to_lst, + time_index=time_index, + mask=mask, + ) + cube.data = _transform_arr( + cube.core_data(), + time_dim=time_dim, + lon_dim=lon_dim, + output_dtypes=cube.dtype, + ) + + # Transform aux coords that span time and longitude dimensions + for coord in cube.coords(dim_coords=False): + dims = cube.coord_dims(coord) + if time_dim in dims and lon_dim in dims: + time_dim_ = dims.index(time_dim) + lon_dim_ = dims.index(lon_dim) + coord.points = _transform_arr( + coord.core_points(), + time_dim=time_dim_, + lon_dim=lon_dim_, + output_dtypes=coord.dtype, + ) + if coord.has_bounds(): + coord.bounds = _transform_arr( + coord.core_bounds(), + time_dim=time_dim_, + lon_dim=lon_dim_, + output_dtypes=coord.bounds_dtype, + ) + + # Transform cell measures that span time and longitude dimensions + for cell_measure in cube.cell_measures(): + dims = cube.cell_measure_dims(cell_measure) + if time_dim in dims and lon_dim in dims: + time_dim_ = dims.index(time_dim) + lon_dim_ = dims.index(lon_dim) + cell_measure.data = _transform_arr( + cell_measure.core_data(), + time_dim=time_dim_, + lon_dim=lon_dim_, + output_dtypes=cell_measure.dtype, + ) + + # Transform ancillary variables that span time and longitude dimensions + for anc_var in cube.ancillary_variables(): + dims = cube.ancillary_variable_dims(anc_var) + if time_dim in dims and lon_dim in dims: + time_dim_ = dims.index(time_dim) + lon_dim_ = dims.index(lon_dim) + anc_var.data = _transform_arr( + anc_var.core_data(), + time_dim=time_dim_, + lon_dim=lon_dim_, + output_dtypes=anc_var.dtype, + ) + + return cube + + +def _check_cube_coords(cube): + if not cube.coords('time', dim_coords=True): + raise CoordinateNotFoundError( + f"Input cube {cube.summary(shorten=True)} needs a dimensional " + f"coordinate `time`" + ) + time_coord = cube.coord('time', dim_coords=True) + # The following works since DimCoords are always 1D and monotonic + if time_coord.points[0] > time_coord.points[-1]: + raise ValueError("`time` coordinate must be monotonically increasing") + + if not cube.coords('longitude'): + raise CoordinateNotFoundError( + f"Input cube {cube.summary(shorten=True)} needs a coordinate " + f"`longitude`" + ) + lon_ndim = len(cube.coord_dims('longitude')) + if lon_ndim != 1: + raise CoordinateMultiDimError( + f"Input cube {cube.summary(shorten=True)} needs a 1D coordinate " + f"`longitude`, got {lon_ndim:d}D" + ) + + +def local_solar_time(cube: Cube) -> Cube: + """Convert UTC time coordinate to local solar time (LST). + + This preprocessor transforms input data with a UTC-based time coordinate to + a `local solar time (LST) `__ + coordinate. In LST, 12:00 noon is defined as the moment when the sun + reaches its highest point in the sky. Thus, LST is mainly determined by + longitude of a location. LST is particularly suited to analyze diurnal + cycles across larger regions of the globe, which would be phase-shifted + against each other when using UTC time. + + To transform data from UTC to LST, this function shifts data along the time + axis based on the longitude. In addition to the `cube`'s data, this + function also considers auxiliary coordinates, cell measures and ancillary + variables that span both the time and longitude dimension. + + Note + ---- + This preprocessor preserves the temporal frequency of the input data. For + example, hourly input data will be transformed into hourly output data. For + this, a location's exact LST will be put into corresponding bins defined + by the bounds of the input time coordinate (in this example, the bin size + is 1 hour). If time bounds are not given or cannot be approximated (only + one time step is given), a bin size of 1 hour is assumed. + + LST is approximated as `UTC_time + 12*longitude/180`, where `longitude` is + assumed to be in [-180, 180] (this function automatically calculates the + correct format for the longitude). This is only an approximation since the + exact LST also depends on the day of year due to the eccentricity of + Earth's orbit (see `equation of time + `__). However, since the + corresponding error is ~15 min at most, this is ignored here, as most + climate model data has a courser temporal resolution and the time scale for + diurnal evolution of meteorological phenomena is usually in the order of + hours, not minutes. + + Parameters + ---------- + cube: + Input cube. Needs a 1D monotonically increasing dimensional coordinate + `time` (assumed to refer to UTC time) and a 1D coordinate `longitude`. + + Returns + ------- + Cube + Transformed cube of same shape as input cube with an LST coordinate + instead of UTC time. + + Raises + ------ + iris.exceptions.CoordinateNotFoundError + Input cube does not contain valid `time` and/or `longitude` coordinate. + iris.exceptions.CoordinateMultiDimError + Input cube has multidimensional `longitude` coordinate. + ValueError + `time` coordinate of input cube is not monotonically increasing. + + """ + # Make sure that cube has valid time and longitude coordinates + _check_cube_coords(cube) + + # Transform cube data and all dimensional metadata that spans time AND + # longitude dimensions + cube = _transform_cube_to_lst(cube) + + # Adapt metadata of time coordinate + cube.coord('time', dim_coords=True).long_name = 'Local Solar Time' + + return cube diff --git a/tests/integration/preprocessor/_time/__init__.py b/tests/integration/preprocessor/_time/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/integration/preprocessor/_time/test_time.py b/tests/integration/preprocessor/_time/test_time.py new file mode 100644 index 0000000000..f1da8d45e7 --- /dev/null +++ b/tests/integration/preprocessor/_time/test_time.py @@ -0,0 +1,561 @@ +"""Unit tests for the :func:`esmvalcore.preprocessor._time` module.""" + +import dask.array as da +import numpy as np +import pytest +from cf_units import Unit +from iris.coords import ( + AncillaryVariable, + AuxCoord, + CellMeasure, + CellMethod, + DimCoord, +) +from iris.cube import Cube +from iris.exceptions import CoordinateMultiDimError, CoordinateNotFoundError + +from esmvalcore.preprocessor._time import climate_statistics, local_solar_time +from tests import assert_array_equal + + +@pytest.fixture +def easy_2d_cube(): + """Create easy 2D cube to test statistical operators.""" + time = DimCoord( + [2.0, 3.0], + bounds=[[-0.5, 2.5], [2.5, 3.5]], + standard_name='time', + units='days since 2000-01-01', + ) + lat = DimCoord( + [0.0, 1.0], standard_name='latitude', units='degrees' + ) + cube = Cube( + np.arange(4, dtype=np.float32).reshape(2, 2), + standard_name='air_temperature', + units='K', + dim_coords_and_dims=[(time, 0), (lat, 1)], + ) + return cube + + +@pytest.mark.parametrize( + 'operator,kwargs,expected_data,expected_units', + [ + ('gmean', {}, [0.0, 1.7320509], 'K'), + ('hmean', {}, [0.0, 1.5], 'K'), + ('max', {}, [2.0, 3.0], 'K'), + ('mean', {}, [0.5, 1.5], 'K'), + ('mean', {'weights': False}, [1.0, 2.0], 'K'), + ('median', {}, [1.0, 2.0], 'K'), + ('min', {}, [0.0, 1.0], 'K'), + ('peak', {}, [2.0, 3.0], 'K'), + ('percentile', {'percent': 0.0}, [0.0, 1.0], 'K'), + ('rms', {}, [1.0, 1.7320509], 'K'), + ('rms', {'weights': False}, [1.414214, 2.236068], 'K'), + ('std_dev', {}, [1.414214, 1.414214], 'K'), + ('std_dev', {'ddof': 0}, [1.0, 1.0], 'K'), + ('sum', {}, [2.0, 6.0], 'K day'), + ('sum', {'weights': False}, [2.0, 4.0], 'K'), + ('variance', {}, [2.0, 2.0], 'K2'), + ('variance', {'ddof': 0}, [1.0, 1.0], 'K2'), + ('wpercentile', {'percent': 50.0}, [0.5, 1.5], 'K'), + ] +) +def test_statistical_operators( + operator, kwargs, expected_data, expected_units, easy_2d_cube +): + """Test ``climate_statistics`` with different operators.""" + res = climate_statistics(easy_2d_cube, operator, **kwargs) + + assert res.var_name == easy_2d_cube.var_name + assert res.long_name == easy_2d_cube.long_name + assert res.standard_name == easy_2d_cube.standard_name + assert res.attributes == easy_2d_cube.attributes + assert res.units == expected_units + assert res.coord('latitude') == easy_2d_cube.coord('latitude') + assert res.coord('time').shape == (1, ) + np.testing.assert_allclose(res.data, expected_data, atol=1e-6, rtol=1e-6) + + +@pytest.fixture +def realistic_4d_cube(): + """Create realistic 4D cube.""" + time = DimCoord( + [11.0, 12.0], + standard_name='time', + units=Unit('hours since 1851-01-01', calendar='360_day'), + ) + plev = DimCoord([50000], standard_name='air_pressure', units='Pa') + lat = DimCoord([0.0, 1.0], standard_name='latitude', units='degrees') + lon = DimCoord( + [0.0, 20.0, 345.0], standard_name='longitude', units='degrees' + ) + + aux_2d_data = np.arange(2 * 3).reshape(2, 3) + aux_2d_bounds = np.stack( + (aux_2d_data - 1, aux_2d_data, aux_2d_data + 1), axis=-1 + ) + aux_2d = AuxCoord(aux_2d_data, var_name='aux_2d') + aux_2d_with_bnds = AuxCoord( + aux_2d_data, bounds=aux_2d_bounds, var_name='aux_2d_with_bnds' + ) + aux_time = AuxCoord(['Jan', 'Jan'], var_name='aux_time') + aux_lon = AuxCoord([0, 1, 2], var_name='aux_lon') + + cell_area = CellMeasure( + np.arange(2 * 2 * 3).reshape(2, 2, 3) + 10, + standard_name='cell_area', + units='m2', + measure='area', + ) + type_var = AncillaryVariable( + [['sea', 'land', 'lake'], ['lake', 'sea', 'land']], + var_name='type', + units='no_unit', + ) + + cube = Cube( + np.ma.masked_inside( + np.arange(2 * 1 * 2 * 3).reshape(2, 1, 2, 3), 1, 3 + ), + var_name='ta', + standard_name='air_temperature', + long_name='Air Temperature', + units='K', + cell_methods=[CellMethod('mean', 'time')], + dim_coords_and_dims=[(time, 0), (plev, 1), (lat, 2), (lon, 3)], + aux_coords_and_dims=[ + (aux_2d, (0, 3)), + (aux_2d_with_bnds, (0, 3)), + (aux_time, 0), + (aux_lon, 3), + ], + cell_measures_and_dims=[(cell_area, (0, 2, 3))], + ancillary_variables_and_dims=[(type_var, (0, 3))], + attributes={'test': 1}, + ) + return cube + + +def test_local_solar_time_regular(realistic_4d_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_4d_cube.copy() + + result = local_solar_time(input_cube) + + assert input_cube == realistic_4d_cube + + assert result.metadata == input_cube.metadata + assert result.shape == input_cube.shape + assert result.coord('time') != input_cube.coord('time') + assert result.coord('air_pressure') == input_cube.coord('air_pressure') + assert result.coord('latitude') == input_cube.coord('latitude') + assert result.coord('longitude') == input_cube.coord('longitude') + + assert result.coord('time').standard_name == 'time' + assert result.coord('time').var_name is None + assert result.coord('time').long_name == 'Local Solar Time' + assert result.coord('time').units == Unit( + 'hours since 1850-01-01', calendar='360_day' + ) + assert result.coord('time').attributes == {} + np.testing.assert_allclose( + result.coord('time').points, [8651.0, 8652.0] + ) + np.testing.assert_allclose( + result.coord('time').bounds, [[8650.5, 8651.5], [8651.5, 8652.5]] + ) + + assert result.coord('aux_time') == input_cube.coord('aux_time') + assert result.coord('aux_lon') == input_cube.coord('aux_lon') + assert ( + result.coord('aux_2d').metadata == input_cube.coord('aux_2d').metadata + ) + assert not result.coord('aux_2d').has_lazy_points() + assert_array_equal( + result.coord('aux_2d').points, + np.ma.masked_equal([[0, 99, 5], [3, 1, 99]], 99), + ) + assert not result.coord('aux_2d').has_bounds() + assert ( + result.coord('aux_2d_with_bnds').metadata == + input_cube.coord('aux_2d_with_bnds').metadata + ) + assert not result.coord('aux_2d_with_bnds').has_lazy_points() + assert_array_equal( + result.coord('aux_2d_with_bnds').points, + np.ma.masked_equal([[0, 99, 5], [3, 1, 99]], 99), + ) + assert not result.coord('aux_2d_with_bnds').has_lazy_bounds() + assert_array_equal( + result.coord('aux_2d_with_bnds').bounds, + np.ma.masked_equal( + [ + [[-1, 0, 1], [99, 99, 99], [4, 5, 6]], + [[2, 3, 4], [0, 1, 2], [99, 99, 99]], + ], + 99, + ), + ) + + assert ( + result.cell_measure('cell_area').metadata == + input_cube.cell_measure('cell_area').metadata + ) + assert not result.cell_measure('cell_area').has_lazy_data() + assert_array_equal( + result.cell_measure('cell_area').data, + np.ma.masked_equal( + [ + [[10, 99, 18], [13, 99, 21]], + [[16, 11, 99], [19, 14, 99]], + ], + 99, + ), + ) + assert ( + result.ancillary_variable('type').metadata == + input_cube.ancillary_variable('type').metadata + ) + assert not result.ancillary_variable('type').has_lazy_data() + assert_array_equal( + result.ancillary_variable('type').data, + np.ma.masked_equal( + [['sea', 'miss', 'land'], ['lake', 'land', 'miss']], 'miss' + ), + ) + + assert not result.has_lazy_data() + assert_array_equal( + result.data, + np.ma.masked_equal( + [ + [[[0, 99, 8], [99, 99, 11]]], + [[[6, 99, 99], [9, 4, 99]]], + ], + 99, + ), + ) + + +def test_local_solar_time_1_time_step(realistic_4d_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_4d_cube[[0]] + + result = local_solar_time(input_cube) + + assert input_cube == realistic_4d_cube[[0]] + + assert result.metadata == input_cube.metadata + assert result.shape == input_cube.shape + assert result.coord('time') != input_cube.coord('time') + assert result.coord('air_pressure') == input_cube.coord('air_pressure') + assert result.coord('latitude') == input_cube.coord('latitude') + assert result.coord('longitude') == input_cube.coord('longitude') + + assert result.coord('time').standard_name == 'time' + assert result.coord('time').var_name is None + assert result.coord('time').long_name == 'Local Solar Time' + assert result.coord('time').units == Unit( + 'hours since 1850-01-01', calendar='360_day' + ) + assert result.coord('time').attributes == {} + np.testing.assert_allclose(result.coord('time').points, [8651.0]) + np.testing.assert_allclose(result.coord('time').bounds, [[8650.5, 8651.5]]) + + assert result.coord('aux_time') == input_cube.coord('aux_time') + assert result.coord('aux_lon') == input_cube.coord('aux_lon') + assert ( + result.coord('aux_2d').metadata == input_cube.coord('aux_2d').metadata + ) + assert not result.coord('aux_2d').has_lazy_points() + assert_array_equal( + result.coord('aux_2d').points, np.ma.masked_equal([[0, 99, 99]], 99) + ) + assert not result.coord('aux_2d').has_bounds() + assert ( + result.coord('aux_2d_with_bnds').metadata == + input_cube.coord('aux_2d_with_bnds').metadata + ) + assert not result.coord('aux_2d_with_bnds').has_lazy_points() + assert_array_equal( + result.coord('aux_2d_with_bnds').points, + np.ma.masked_equal([[0, 99, 99]], 99), + ) + assert not result.coord('aux_2d_with_bnds').has_lazy_bounds() + assert_array_equal( + result.coord('aux_2d_with_bnds').bounds, + np.ma.masked_equal([[[-1, 0, 1], [99, 99, 99], [99, 99, 99]]], 99), + ) + + assert ( + result.cell_measure('cell_area').metadata == + input_cube.cell_measure('cell_area').metadata + ) + assert not result.cell_measure('cell_area').has_lazy_data() + assert_array_equal( + result.cell_measure('cell_area').data, + np.ma.masked_equal([[[10, 99, 99], [13, 99, 99]]], 99), + ) + assert ( + result.ancillary_variable('type').metadata == + input_cube.ancillary_variable('type').metadata + ) + assert not result.ancillary_variable('type').has_lazy_data() + assert_array_equal( + result.ancillary_variable('type').data, + np.ma.masked_equal([['sea', 'miss', 'miss']], 'miss'), + ) + + assert not result.has_lazy_data() + assert_array_equal( + result.data, + np.ma.masked_equal([[[[0, 99, 99], [99, 99, 99]]]], 99), + ) + + +@pytest.fixture +def realistic_unstructured_cube(): + """Create realistic unstructured cube.""" + time = DimCoord( + [0.0, 6.0, 12.0, 18.0, 24.0], + bounds=[ + [-3.0, 3.0], [3.0, 9.0], [9.0, 15.0], [15.0, 21.0], [21.0, 27.0] + ], + var_name='time', + standard_name='time', + long_name='time', + units=Unit('hours since 1851-01-01'), + ) + + lat = AuxCoord( + [0.0, 0.0, 0.0, 0.0], + var_name='lat', + standard_name='latitude', + long_name='latitude', + units='degrees_north', + ) + lon = AuxCoord( + [0.0, 80 * np.pi / 180.0, -120 * np.pi / 180.0, 160 * np.pi / 180.0], + var_name='lon', + standard_name='longitude', + long_name='longitude', + units='rad', + ) + aux_2d_data = da.ma.masked_inside(da.arange(4 * 5).reshape(4, 5), 3, 10) + aux_2d_bounds = da.stack((aux_2d_data - 1, aux_2d_data + 1), axis=-1) + aux_2d = AuxCoord(aux_2d_data, var_name='aux_2d') + aux_2d_with_bnds = AuxCoord( + aux_2d_data, bounds=aux_2d_bounds, var_name='aux_2d_with_bnds' + ) + aux_0d = AuxCoord([0], var_name='aux_0d') + + cell_measure_2d = CellMeasure( + da.ma.masked_inside(da.arange(4 * 5).reshape(4, 5), 3, 10), + var_name='cell_measure', + ) + anc_var_2d = AncillaryVariable( + da.ma.masked_inside(da.arange(4 * 5).reshape(4, 5), 3, 10), + var_name='anc_var', + ) + + cube = Cube( + da.arange(4 * 5).reshape(4, 5), + var_name='ta', + standard_name='air_temperature', + long_name='Air Temperature', + units='K', + dim_coords_and_dims=[(time, 1)], + aux_coords_and_dims=[ + (lat, 0), + (lon, 0), + (aux_2d, (0, 1)), + (aux_2d_with_bnds, (0, 1)), + (aux_0d, ()), + ], + cell_measures_and_dims=[(cell_measure_2d, (0, 1))], + ancillary_variables_and_dims=[(anc_var_2d, (0, 1))], + ) + return cube + + +def test_local_solar_time_unstructured(realistic_unstructured_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_unstructured_cube.copy() + + result = local_solar_time(input_cube) + + assert input_cube == realistic_unstructured_cube + + assert result.metadata == input_cube.metadata + assert result.shape == input_cube.shape + assert result.coord('time') != input_cube.coord('time') + assert result.coord('latitude') == input_cube.coord('latitude') + assert result.coord('longitude') == input_cube.coord('longitude') + + assert result.coord('time').standard_name == 'time' + assert result.coord('time').var_name == 'time' + assert result.coord('time').long_name == 'Local Solar Time' + assert result.coord('time').units == 'hours since 1850-01-01' + assert result.coord('time').attributes == {} + np.testing.assert_allclose( + result.coord('time').points, [8760.0, 8766.0, 8772.0, 8778.0, 8784.0] + ) + np.testing.assert_allclose( + result.coord('time').bounds, + [ + [8757.0, 8763.0], + [8763.0, 8769.0], + [8769.0, 8775.0], + [8775.0, 8781.0], + [8781.0, 8787.0], + ], + ) + + assert result.coord('aux_0d') == input_cube.coord('aux_0d') + assert ( + result.coord('aux_2d').metadata == input_cube.coord('aux_2d').metadata + ) + assert result.coord('aux_2d').has_lazy_points() + assert_array_equal( + result.coord('aux_2d').points, + np.ma.masked_equal( + [ + [0, 1, 2, 99, 99], + [99, 99, 99, 99, 99], + [11, 12, 13, 14, 99], + [99, 99, 15, 16, 17], + ], + 99, + ), + ) + assert not result.coord('aux_2d').has_bounds() + assert ( + result.coord('aux_2d_with_bnds').metadata == + input_cube.coord('aux_2d_with_bnds').metadata + ) + assert result.coord('aux_2d_with_bnds').has_lazy_points() + assert_array_equal( + result.coord('aux_2d_with_bnds').points, + np.ma.masked_equal( + [ + [0, 1, 2, 99, 99], + [99, 99, 99, 99, 99], + [11, 12, 13, 14, 99], + [99, 99, 15, 16, 17], + ], + 99, + ), + ) + assert result.coord('aux_2d_with_bnds').has_lazy_bounds() + assert_array_equal( + result.coord('aux_2d_with_bnds').bounds, + np.ma.masked_equal( + [ + [[-1, 1], [0, 2], [1, 3], [99, 99], [99, 99]], + [[99, 99], [99, 99], [99, 99], [99, 99], [99, 99]], + [[10, 12], [11, 13], [12, 14], [13, 15], [99, 99]], + [[99, 99], [99, 99], [14, 16], [15, 17], [16, 18]], + ], + 99, + ), + ) + + assert ( + result.cell_measure('cell_measure').metadata == + input_cube.cell_measure('cell_measure').metadata + ) + assert result.cell_measure('cell_measure').has_lazy_data() + assert_array_equal( + result.cell_measure('cell_measure').data, + np.ma.masked_equal( + [ + [0, 1, 2, 99, 99], + [99, 99, 99, 99, 99], + [11, 12, 13, 14, 99], + [99, 99, 15, 16, 17], + ], + 99, + ), + ) + assert ( + result.ancillary_variable('anc_var').metadata == + input_cube.ancillary_variable('anc_var').metadata + ) + assert result.ancillary_variable('anc_var').has_lazy_data() + assert_array_equal( + result.ancillary_variable('anc_var').data, + np.ma.masked_equal( + [ + [0, 1, 2, 99, 99], + [99, 99, 99, 99, 99], + [11, 12, 13, 14, 99], + [99, 99, 15, 16, 17], + ], + 99, + ), + ) + + assert result.has_lazy_data() + assert_array_equal( + result.data, + np.ma.masked_equal( + [ + [0, 1, 2, 3, 4], + [99, 5, 6, 7, 8], + [11, 12, 13, 14, 99], + [99, 99, 15, 16, 17], + ], + 99, + ), + ) + + +def test_local_solar_time_no_time_fail(realistic_4d_cube): + """Test ``local_solar_time``.""" + realistic_4d_cube.remove_coord('time') + msg = 'needs a dimensional coordinate `time`' + with pytest.raises(CoordinateNotFoundError, match=msg): + local_solar_time(realistic_4d_cube) + + +def test_local_solar_time_scalar_time_fail(realistic_4d_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_4d_cube[0] + msg = 'needs a dimensional coordinate `time`' + with pytest.raises(CoordinateNotFoundError, match=msg): + local_solar_time(input_cube) + + +def test_local_solar_time_time_decreasing_fail(realistic_4d_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_4d_cube[::-1] + msg = '`time` coordinate must be monotonically increasing' + with pytest.raises(ValueError, match=msg): + local_solar_time(input_cube) + + +def test_local_solar_time_no_lon_fail(realistic_4d_cube): + """Test ``local_solar_time``.""" + realistic_4d_cube.remove_coord('longitude') + msg = 'needs a coordinate `longitude`' + with pytest.raises(CoordinateNotFoundError, match=msg): + local_solar_time(realistic_4d_cube) + + +def test_local_solar_time_scalar_lon_fail(realistic_4d_cube): + """Test ``local_solar_time``.""" + input_cube = realistic_4d_cube[..., 0] + msg = 'needs a 1D coordinate `longitude`, got 0D' + with pytest.raises(CoordinateMultiDimError, match=msg): + local_solar_time(input_cube) + + +def test_local_solar_time_2d_lon_fail(easy_2d_cube): + """Test ``local_solar_time``.""" + lon_coord = AuxCoord(easy_2d_cube.data, standard_name='longitude') + easy_2d_cube.add_aux_coord(lon_coord, (0, 1)) + msg = 'needs a 1D coordinate `longitude`, got 2D' + with pytest.raises(CoordinateMultiDimError, match=msg): + local_solar_time(easy_2d_cube) diff --git a/tests/unit/preprocessor/_time/test_time.py b/tests/unit/preprocessor/_time/test_time.py index f9d207ed49..a89c0ba760 100644 --- a/tests/unit/preprocessor/_time/test_time.py +++ b/tests/unit/preprocessor/_time/test_time.py @@ -1518,7 +1518,7 @@ def test_timeseries_filter_timecoord(self): filter_stats='sum') def test_timeseries_filter_implemented(self): - """Test a not implemnted filter.""" + """Test a not implemented filter.""" with self.assertRaises(NotImplementedError): timeseries_filter(self.cube, 7, @@ -2160,65 +2160,5 @@ def test_resample_fails_scalar(self): resample_time(cube, day=16) -@pytest.fixture -def easy_2d_cube(): - """Create easy 2D cube to test statistical operators.""" - time = iris.coords.DimCoord( - [2.0, 3.0], - bounds=[[-0.5, 2.5], [2.5, 3.5]], - standard_name='time', - units='days since 2000-01-01', - ) - lat = iris.coords.DimCoord( - [0.0, 1.0], standard_name='latitude', units='degrees' - ) - cube = Cube( - np.arange(4, dtype=np.float32).reshape(2, 2), - standard_name='air_temperature', - units='K', - dim_coords_and_dims=[(time, 0), (lat, 1)], - ) - return cube - - -@pytest.mark.parametrize( - 'operator,kwargs,expected_data,expected_units', - [ - ('gmean', {}, [0.0, 1.7320509], 'K'), - ('hmean', {}, [0.0, 1.5], 'K'), - ('max', {}, [2.0, 3.0], 'K'), - ('mean', {}, [0.5, 1.5], 'K'), - ('mean', {'weights': False}, [1.0, 2.0], 'K'), - ('median', {}, [1.0, 2.0], 'K'), - ('min', {}, [0.0, 1.0], 'K'), - ('peak', {}, [2.0, 3.0], 'K'), - ('percentile', {'percent': 0.0}, [0.0, 1.0], 'K'), - ('rms', {}, [1.0, 1.7320509], 'K'), - ('rms', {'weights': False}, [1.414214, 2.236068], 'K'), - ('std_dev', {}, [1.414214, 1.414214], 'K'), - ('std_dev', {'ddof': 0}, [1.0, 1.0], 'K'), - ('sum', {}, [2.0, 6.0], 'K day'), - ('sum', {'weights': False}, [2.0, 4.0], 'K'), - ('variance', {}, [2.0, 2.0], 'K2'), - ('variance', {'ddof': 0}, [1.0, 1.0], 'K2'), - ('wpercentile', {'percent': 50.0}, [0.5, 1.5], 'K'), - ] -) -def test_statistical_operators( - operator, kwargs, expected_data, expected_units, easy_2d_cube -): - """Test ``climate_statistics`` with different operators.""" - res = climate_statistics(easy_2d_cube, operator, **kwargs) - - assert res.var_name == easy_2d_cube.var_name - assert res.long_name == easy_2d_cube.long_name - assert res.standard_name == easy_2d_cube.standard_name - assert res.attributes == easy_2d_cube.attributes - assert res.units == expected_units - assert res.coord('latitude') == easy_2d_cube.coord('latitude') - assert res.coord('time').shape == (1, ) - np.testing.assert_allclose(res.data, expected_data, atol=1e-6, rtol=1e-6) - - if __name__ == '__main__': unittest.main() diff --git a/tests/unit/test_iris_helpers.py b/tests/unit/test_iris_helpers.py index 07e81608e8..e91f2f70a1 100644 --- a/tests/unit/test_iris_helpers.py +++ b/tests/unit/test_iris_helpers.py @@ -4,6 +4,7 @@ from itertools import permutations from unittest import mock +import dask.array as da import numpy as np import pytest from cf_units import Unit @@ -21,6 +22,7 @@ add_leading_dim_to_cube, date2num, merge_cube_attributes, + rechunk_cube, ) @@ -220,3 +222,119 @@ def test_merge_cube_attributes_1_cube(): merge_cube_attributes(cubes) assert len(cubes) == 1 assert_attribues_equal(cubes[0].attributes, expected_attributes) + + +@pytest.fixture +def cube_3d(): + """3D sample cube.""" + # DimCoords + x = DimCoord([0, 1, 2], var_name='x') + y = DimCoord([0, 1, 2], var_name='y') + z = DimCoord([0, 1, 2, 3], var_name='z') + + # AuxCoords + aux_x = AuxCoord( + da.ones(3, chunks=1), + bounds=da.ones((3, 3), chunks=(1, 1)), + var_name='aux_x', + ) + aux_z = AuxCoord(da.ones(4, chunks=1), var_name='aux_z') + aux_xy = AuxCoord(da.ones((3, 3), chunks=(1, 1)), var_name='xy') + aux_xz = AuxCoord(da.ones((3, 4), chunks=(1, 1)), var_name='xz') + aux_yz = AuxCoord(da.ones((3, 4), chunks=(1, 1)), var_name='yz') + aux_xyz = AuxCoord( + da.ones((3, 3, 4), chunks=(1, 1, 1)), + bounds=da.ones((3, 3, 4, 3), chunks=(1, 1, 1, 1)), + var_name='xyz', + ) + aux_coords_and_dims = [ + (aux_x, 0), + (aux_z, 2), + (aux_xy, (0, 1)), + (aux_xz, (0, 2)), + (aux_yz, (1, 2)), + (aux_xyz, (0, 1, 2)), + ] + + # CellMeasures and AncillaryVariables + cell_measure = CellMeasure( + da.ones((3, 4), chunks=(1, 1)), var_name='cell_measure' + ) + anc_var = AncillaryVariable( + da.ones((3, 4), chunks=(1, 1)), var_name='anc_var' + ) + + return Cube( + da.ones((3, 3, 4), chunks=(1, 1, 1)), + var_name='cube', + dim_coords_and_dims=[(x, 0), (y, 1), (z, 2)], + aux_coords_and_dims=aux_coords_and_dims, + cell_measures_and_dims=[(cell_measure, (1, 2))], + ancillary_variables_and_dims=[(anc_var, (0, 2))], + ) + + +def test_rechunk_cube_fully_lazy(cube_3d): + """Test ``rechunk_cube``.""" + input_cube = cube_3d.copy() + + x_coord = input_cube.coord('x') + result = rechunk_cube(input_cube, [x_coord, 'y'], remaining_dims=2) + + assert input_cube == cube_3d + assert result == cube_3d + assert result.core_data().chunksize == (3, 3, 2) + assert result.coord('aux_x').core_points().chunksize == (3,) + assert result.coord('aux_z').core_points().chunksize == (1,) + assert result.coord('xy').core_points().chunksize == (3, 3) + assert result.coord('xz').core_points().chunksize == (3, 2) + assert result.coord('yz').core_points().chunksize == (3, 2) + assert result.coord('xyz').core_points().chunksize == (3, 3, 2) + assert result.coord('aux_x').core_bounds().chunksize == (3, 2) + assert result.coord('aux_z').core_bounds() is None + assert result.coord('xy').core_bounds() is None + assert result.coord('xz').core_bounds() is None + assert result.coord('yz').core_bounds() is None + assert result.coord('xyz').core_bounds().chunksize == (3, 3, 2, 2) + assert result.cell_measure('cell_measure').core_data().chunksize == (3, 2) + assert result.ancillary_variable('anc_var').core_data().chunksize == (3, 2) + + +def test_rechunk_cube_partly_lazy(cube_3d): + """Test ``rechunk_cube``.""" + input_cube = cube_3d.copy() + + # Realize some arrays + input_cube.data + input_cube.coord('xyz').points + input_cube.coord('xyz').bounds + input_cube.cell_measure('cell_measure').data + + result = rechunk_cube(input_cube, ['x', 'y'], remaining_dims=2) + + assert input_cube == cube_3d + assert result == cube_3d + assert not result.has_lazy_data() + assert result.coord('aux_x').core_points().chunksize == (3,) + assert result.coord('aux_z').core_points().chunksize == (1,) + assert result.coord('xy').core_points().chunksize == (3, 3) + assert result.coord('xz').core_points().chunksize == (3, 2) + assert result.coord('yz').core_points().chunksize == (3, 2) + assert not result.coord('xyz').has_lazy_points() + assert result.coord('aux_x').core_bounds().chunksize == (3, 2) + assert result.coord('aux_z').core_bounds() is None + assert result.coord('xy').core_bounds() is None + assert result.coord('xz').core_bounds() is None + assert result.coord('yz').core_bounds() is None + assert not result.coord('xyz').has_lazy_bounds() + assert not result.cell_measure('cell_measure').has_lazy_data() + assert result.ancillary_variable('anc_var').core_data().chunksize == (3, 2) + + +def test_rechunk_cube_invalid_coord_fail(cube_3d): + """Test ``rechunk_cube``.""" + msg = ( + "Complete coordinates must be 1D coordinates, got 2D coordinate 'xy'" + ) + with pytest.raises(CoordinateMultiDimError, match=msg): + rechunk_cube(cube_3d, ['xy']) From 39222d80182fb6f38e510e5f0b98d084912570ba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 31 Dec 2023 11:26:03 +0200 Subject: [PATCH 11/14] [Condalock] Update Linux condalock file (#2289) Co-authored-by: valeriupredoi --- conda-linux-64.lock | 49 +++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index 4e34e298d5..65ae7d92b8 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -16,7 +16,7 @@ https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.3.0-h8 https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda#937eaed008f6bf2191c5fe76f87755e9 https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda#d8d7293c5b37f39b2ac32940621c6592 https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda#d786502c97404c94d7d58d258a445a65 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a +https://conda.anaconda.org/conda-forge/noarch/tzdata-2023d-h0c530f3_0.conda#8dee24b8be2d9ff81e7bd4d7d97ff1b0 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda#7124cbb46b13d395bdde68f2d215c989 https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.12-he073ed8_16.conda#071ea8dceff4d30ac511f4a2f8437cd1 @@ -59,6 +59,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar. https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda#5aa797f8787fe7a17d1b0821485b5adc https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac @@ -68,7 +69,7 @@ https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda#6 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda#0c0533894f21c3d35697cb8378d390e2 +https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023d-h3f72095_0.conda#1c63518899838477ebd497e3e3327f81 https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-hcb278e6_1.conda#2c46deb08ba9b10e90d0a6401ad65deb https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 @@ -108,13 +109,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#a https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/rdma-core-49.0-hd3aeb46_2.conda#855579013120ad3078e7d5dcadb643e1 https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 -https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.0-h06160fa_0.conda#3d1b58d2664d96f9fbc0afe5e1d04632 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.4.1-h06160fa_0.conda#54ae57d17d038b6a7aa7fdb55350d338 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.36-he0cd244_2.conda#c930336aa72995f1b5459b51df3ba841 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.36-hb3b01f7_3.conda#e699c37931ecbb452a6d074c1c738b07 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda#39f910d205726805a958da408ca194ba https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb @@ -130,11 +131,11 @@ https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413 https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda#8cdb7d41faa0260875ba92414c487e2d https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd -https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.3-h0ab5242_0.conda#3f9b5f4400be3cee11b426a8cd653b7c +https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.4-h0ab5242_0.conda#813bc75d9c33ddd9c9d5b8d9c560e152 https://conda.anaconda.org/conda-forge/linux-64/nss-3.96-h1d7d5a4_0.conda#1c8f8b8eb041ecd54053fc4b6ad57957 https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda#6e6f990b097d3e237e18a8e321d08484 https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.3-h32600fe_0.conda#8287aeb8462e2d4b235eff788e75919d -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.7-hab00c5b_0_cpython.conda#bf281a975393266ab95734a8cfd532ec +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.7-hab00c5b_1_cpython.conda#27cf681282c11dba7b0b1fd266e8f289 https://conda.anaconda.org/conda-forge/linux-64/re2-2023.06.02-h2873b5e_0.conda#bb2d5e593ef13fe4aff0bc9440f945ae https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda#4f2892c672829693fd978d065db4e8be https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_2.conda#5798de4587dc70fa6db81663e79f176a @@ -145,7 +146,7 @@ https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.11.1-pyhd8e https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8 https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h0bcb0bb_8.conda#21dafb60b5854f82b196f32e5857dec6 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.14-hd268abd_3.conda#0b0f7174a0f94d2c9a02fb24f6fc0d00 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.15-hd268abd_0.conda#7fe29e473e2d4491610ccb51285218c9 https://conda.anaconda.org/conda-forge/linux-64/backports.zoneinfo-0.2.1-py311h38be061_8.conda#5384590f14dfe6ccd02811236afc9f8e https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164 @@ -222,13 +223,13 @@ 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#176f7d56f0cfe9008bdf1bccd7de02fb https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2#92a889dc236a5197612bc85bee6d7174 https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 -https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.0-pyhd8ed1ab_0.conda#e4dbdb3585c0266b4710467fe7b75cf4 -https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda#c79cacf8a06a51552fc651652f170208 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py311h459d7ec_0.conda#60b5332b3989fda37884b92c7afd6a91 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py311h34ded2d_0.conda#819aa640a0493d4b52faf938e94d129e -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.15.2-py311h46250e7_0.conda#1ec6376840c74c230f42e71092851fb6 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.16.2-py311h46250e7_0.conda#79a19e53eae4bc42b7469feb46d90bd4 https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda#5efb3fccda53974aed800b6d575f72ed https://conda.anaconda.org/conda-forge/noarch/setoptconf-tmp-0.3.1-pyhd8ed1ab_0.tar.bz2#af3e36d4effb85b9b9f93cd1db0963df https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 @@ -265,8 +266,8 @@ https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/asgiref-3.7.2-pyhd8ed1ab_0.conda#596932155bf88bb6837141550cb721b0 https://conda.anaconda.org/conda-forge/linux-64/astroid-2.15.8-py311h38be061_0.conda#46d70fcb74472aab178991f0231ee3c6 https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda#5f25798dcefd8252ce5f9dc494d5f571 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-h538f98c_2.conda#d42aebb91e28e2fee2a0218cfbff2c90 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.0-h35285c7_0.conda#dc4323c7ecc9eae3823699637258f7ba +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-hcf8cf63_3.conda#8634ef2e79e9c8065fd69ead7902d27c +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.0-hbafccad_1.conda#b587eb2e3fa4cabcf5b6ea7fd06f1043 https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e @@ -275,7 +276,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.cond https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.1-hbdc6101_0.conda#dcea02841b33a9c49f74ca9328de919a https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2#4fd2c6b53934bd7d96d1f3fdaf99b79f https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2#a29b7c141d6b2de4bb67788a5f107734 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.3-py311h459d7ec_0.conda#9db2c1316e96068c0189beaeb716f3fe +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.0-py311h459d7ec_0.conda#bbaf0376ed2f153a90f167ad908da3d0 https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.7.0-h00ab1b0_0.conda#b4537c98cb59f8725b0e1e65816b4a28 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda#afe341dbe834ae76d2c23157ff00e633 https://conda.anaconda.org/conda-forge/noarch/docformatter-1.7.5-pyhd8ed1ab_0.conda#3a941b6083e945aa87e739a9b85c82e9 @@ -285,13 +286,13 @@ https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.7.0-heb67821_ https://conda.anaconda.org/conda-forge/noarch/geopy-2.4.1-pyhd8ed1ab_0.conda#c75621ce68f6570fff9a6734cf21c9a7 https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.11-pyhd8ed1ab_0.conda#623b19f616f2ca0c261441067e18ae40 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.3-nompi_h4f84152_100.conda#d471a5c3abc984b662d9bae3bb7fd8a5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.1-pyha770c72_0.conda#746623a787e06191d80a2133e5daff17 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/isodate-0.6.1-pyhd8ed1ab_0.tar.bz2#4a62c93c1b5c0b920508ae3fd285eaf5 https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.1-py311h38be061_0.conda#1c704ad46ebe0a4cc29445b565bd954d +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.6.0-py311h38be061_0.conda#20290b0ac04a80c0d84d833fff1c0fd7 https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda#3f0915b1fb2252ab73686a533c5f9d3f https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2#8d67904973263afd2985ba56aa2d6bb4 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 @@ -300,7 +301,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h5206363_ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 https://conda.anaconda.org/conda-forge/noarch/logilab-common-1.7.3-py_0.tar.bz2#6eafcdf39a7eb90b6d951cfff59e8d3b https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de -https://conda.anaconda.org/conda-forge/linux-64/mypy-1.7.1-py311h459d7ec_1.conda#0a861b29266afe8c315ecdcb92f9e692 +https://conda.anaconda.org/conda-forge/linux-64/mypy-1.8.0-py311h459d7ec_0.conda#93b7b2391a045cea0d97772f550f1d77 https://conda.anaconda.org/conda-forge/noarch/nested-lookup-0.2.25-pyhd8ed1ab_1.tar.bz2#2f59daeb14581d41b1e2dda0895933b2 https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda#2a75b296096adabbabadd5e9782e5fcc https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 @@ -322,7 +323,7 @@ https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda#63b80ca78d29380fe69e69412dcbe4ac https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2#cc9f59f147740d88679bf1bd94dbe588 https://conda.anaconda.org/conda-forge/noarch/yamllint-1.33.0-pyhd8ed1ab_0.conda#57d32eb2c4b76ef288f9dd789f8fe5af -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.5-h0448019_0.conda#28a659a52294834426cabec2ee328bcf +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.6-h47b1690_0.conda#a3341b508d58d309a4595f12bd5ef8af https://conda.anaconda.org/conda-forge/noarch/cattrs-23.2.3-pyhd8ed1ab_0.conda#91fc4700dcce4a46d439900a132fe4e5 https://conda.anaconda.org/conda-forge/linux-64/compilers-1.7.0-ha770c72_0.conda#81458b3aed8ab8711951ec3c0c04e097 https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.7-py311hcb13ee4_1.conda#ca6e04ac7262ecaec846e483d6fdc6c8 @@ -331,8 +332,8 @@ https://conda.anaconda.org/conda-forge/noarch/flake8-5.0.4-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda#1d53ee057d8481bd2b4c2c34c8e92aac https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda#6bf74c3b7c13079a91d4bd3da51cefcf https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.0-hd8ed1ab_0.conda#12aff14f84c337be5e5636bf612f4140 -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.2-pyhd8ed1ab_0.conda#73884ca36d6d96cbce498cde99fab40f +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.1-hd8ed1ab_0.conda#4a2f43a20fa404b998859c6a470ba316 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda#a0e4efb5f35786a05af4809a2fb1f855 https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda#f7e7077802927590efc8bf7328208f12 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h7385560_2.conda#4260750b280f6f7c38a4459bf0d919ff @@ -355,13 +356,13 @@ https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h8c794c1_0.conda#e https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.10-pyhd8ed1ab_0.conda#84dca7318667fa091bbfd8724d22ea99 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.25.0-h1bbe558_2.conda#f0a484e643219b6738fc86c0f0f5c806 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.25.0-hfa7cc67_4.conda#04ad4d642e8a2db8f0370b40f35c430f https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.conda#b7e6d52b39e199238c3400cafaabafb3 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py311h9547e67_0.conda#40828c5b36ef52433e21f89943e09f33 https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.1-pyhd8ed1ab_0.conda#bf6ad72d882bc3f04e6a0fb50fd2cce8 https://conda.anaconda.org/conda-forge/noarch/flake8-polyfill-1.0.2-py_0.tar.bz2#a53db35e3d07f0af2eccd59c2a00bffe https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda#93c8f8ceb83827d88deeba796f07fba7 -https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda#15c6f45a45f7ac27f6d60b0b084f6761 +https://conda.anaconda.org/conda-forge/noarch/ipython-8.19.0-pyh707e725_0.conda#29815aa1a9648eb9ad0ce20d0c10232e https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda#1116d79def5268414fb0917520b2bbf1 https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.0-pyhd8ed1ab_0.conda#6bd3f1069cdebb44c7ae9efb900e312d https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hd0089ee_2.conda#feb838eaf49fd1608413759f7b54c74c @@ -410,15 +411,15 @@ https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_0 https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-h120cb0d_0_cpu.conda#5b2207ce6f7a383a094be45e4fab8abd https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hacb8726_0_cpu.conda#1a59387c247c08029b8ac364c672d645 https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_0_cpu.conda#2a325960d715af08b098bf4f746bf5c4 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.13.0-pyhd8ed1ab_0.conda#786c2ed88ac4483944ed9013dcba399c +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.13.1-pyhd8ed1ab_0.conda#165cac4486f9e8542f0b8de32822f328 https://conda.anaconda.org/conda-forge/noarch/py-cordex-0.6.6-pyhd8ed1ab_0.conda#255f9eac03143526c8aed41d1d091c63 https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda#5c223cb0d9c05552bf9d1586a92720b2 https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_0_cpu.conda#6a469f0dcc01b9ca7a19aa3e07bd8ea8 https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h61ff412_0_cpu.conda#0c70731f58f42b47940df94cc50e6b7e -https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.13.0-pyhd8ed1ab_0.conda#13647ddfc84fd614fa12119a317de280 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.13.1-pyhd8ed1ab_0.conda#b97a845d8ee2502842873e7e9d59eb97 https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2#aa9b3ad140f6c0668c646f32e20ccf82 https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h61ff412_0_cpu.conda#6d789ad04a56815daf8785f7e8517430 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.13.0-pyhd8ed1ab_0.conda#e52eed0a3dac67432a02b8b5b23c8d76 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.13.1-pyhd8ed1ab_0.conda#ee7bb8530ad5bda21f34ec6b16d218fc https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_0_cpu.conda#27885a87fe1250c1cfea5dd92f22fcfd https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.1-pyhd8ed1ab_0.conda#9a6e8eb1d188bc246883ea11f4fe6a4d From 54d19f17cf0f712c3d9069dbb16eb1cd14bc81f9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 2 Jan 2024 12:09:15 +0200 Subject: [PATCH 12/14] [Condalock] Update Linux condalock file (#2290) Co-authored-by: valeriupredoi --- conda-linux-64.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index 65ae7d92b8..4c57ee71e6 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -144,7 +144,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.con https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.11.1-pyhd8ed1ab_0.tar.bz2#15109c4977d39ad7aa3423f57243e286 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b -https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8 +https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda#5e4c0743c70186509d1412e03c2d8dfa https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h0bcb0bb_8.conda#21dafb60b5854f82b196f32e5857dec6 https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.15-hd268abd_0.conda#7fe29e473e2d4491610ccb51285218c9 https://conda.anaconda.org/conda-forge/linux-64/backports.zoneinfo-0.2.1-py311h38be061_8.conda#5384590f14dfe6ccd02811236afc9f8e @@ -312,7 +312,7 @@ https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_7.conda https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda#b5e57a0c643da391bef850922963eece https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda#a9d145de8c5f064b5fa68fb34725d9f4 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda#a7b5a535cd614e384594530aee7e6061 https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 @@ -353,7 +353,7 @@ https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/requirements-detector-1.2.2-pyhd8ed1ab_0.conda#6626918380d99292df110f3c91b6e5ec https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h8c794c1_0.conda#e824b951c15a74d0a2d3e42676370791 -https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.10-pyhd8ed1ab_0.conda#84dca7318667fa091bbfd8724d22ea99 +https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.20231231-pyhd8ed1ab_0.conda#d13ef563501307d609a579871cccab0b https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.25.0-hfa7cc67_4.conda#04ad4d642e8a2db8f0370b40f35c430f From 1839787d11233553ef8c969371ec5ab8e0520e1c Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Wed, 10 Jan 2024 15:55:40 +0100 Subject: [PATCH 13/14] Increase resources for testing installation from conda-forge (#2297) --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index e1ad0dd578..8e5f38b84f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -159,7 +159,7 @@ jobs: working_directory: /esmvaltool docker: - image: condaforge/mambaforge - resource_class: small + resource_class: medium steps: - run: command: | From f51516962df2b5e7c8351a2d5281900498a199c0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:10:33 +0000 Subject: [PATCH 14/14] [Condalock] Update Linux condalock file (#2298) Co-authored-by: valeriupredoi --- conda-linux-64.lock | 113 +++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 55 deletions(-) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index 4c57ee71e6..41f3f8fb49 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -28,7 +28,7 @@ https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.40-hbdbef99_ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda#23fdf1fef05baeb7eadc2aed5fb0011f https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.9.10-hd590300_0.conda#93729f7a54b25cb135ac2b67ea3a7603 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.24.0-hd590300_0.conda#f5842b88e9cbfa177abfaeacd457a45d +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.25.0-hd590300_0.conda#89e40af02dd3a0846c0c1131c5126706 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.1-h59595ed_0.conda#8c0f4f71f5a59ceb0c6fa9f51501066d https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 @@ -66,7 +66,7 @@ https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#b https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda#7dbaa197d7ba6032caf7ae7f32c1efa0 https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec11a6454ae19bff5b02ed881a2b1 https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda#603827b39ea2b835268adb8c821b8570 -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.0-h59595ed_0.conda#6b4b43013628634b6cfdee6b74fd696b https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023d-h3f72095_0.conda#1c63518899838477ebd497e3e3327f81 @@ -104,7 +104,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda#4bdace082e911a3e1f1f0b721bed5b56 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.3-h232c23b_0.conda#bc6ac4c0cea148d924f621985bc3892b https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/rdma-core-49.0-hd3aeb46_2.conda#855579013120ad3078e7d5dcadb643e1 @@ -124,13 +124,13 @@ https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-12.3.0-h76fc315_2.c https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-12.3.0-hfcedea8_3.conda#929fbb7d28a3727e96170e613253d2f4 https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_3.conda#b6ce9868fc6c65a18c22fd983e2d7e6f https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 -https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h039dbb9_0.conda#611d6c83d1130ea60c916531adfb11db +https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h2aa1ff5_1.conda#3bf887827d1968275978361a6e405e4f https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 -https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda#8cdb7d41faa0260875ba92414c487e2d https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 -https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.39-h76b75d6_0.conda#e71f31f8cfb0a91439f2086fc8aa0461 https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.4-h0ab5242_0.conda#813bc75d9c33ddd9c9d5b8d9c560e152 https://conda.anaconda.org/conda-forge/linux-64/nss-3.96-h1d7d5a4_0.conda#1c8f8b8eb041ecd54053fc4b6ad57957 https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.2-h4b38347_0.conda#6e6f990b097d3e237e18a8e321d08484 @@ -141,12 +141,12 @@ https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda#4 https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h75e419f_2.conda#5798de4587dc70fa6db81663e79f176a https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda#6bb8deb138f87c9d48320ac21b87e7a1 https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b -https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e +https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda#def531a3ac77b7fb8c21d17bb5d0badb https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.11.1-pyhd8ed1ab_0.tar.bz2#15109c4977d39ad7aa3423f57243e286 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda#5e4c0743c70186509d1412e03c2d8dfa -https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h0bcb0bb_8.conda#21dafb60b5854f82b196f32e5857dec6 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.15-hd268abd_0.conda#7fe29e473e2d4491610ccb51285218c9 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.4.1-h0bcb0bb_1.conda#a0ea3a72521dc6aa29299df56f9ce530 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.8.0-hd268abd_1.conda#1300bac362cf5f8b6d0abd777b70d5a8 https://conda.anaconda.org/conda-forge/linux-64/backports.zoneinfo-0.2.1-py311h38be061_8.conda#5384590f14dfe6ccd02811236afc9f8e https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164 @@ -167,7 +167,7 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda#d https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_3.conda#1c33f55e5cdcc2a2b973c432b5225bfe https://conda.anaconda.org/conda-forge/noarch/dodgy-0.2.1-py_0.tar.bz2#62a69d073f7446c90f417b0787122f5b https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda#e16be50e378d8a4533b989035b196ab8 https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 @@ -195,8 +195,8 @@ 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-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda#0ebb65e8d86843865796c7c95a941f34 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_3.conda#7ac703b3bdee421dc763eb83b9ea2737 -https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda#f8e0b648d77bbe44d1fe8af8cc56a590 +https://conda.anaconda.org/conda-forge/linux-64/lxml-5.1.0-py311h9691dec_0.conda#cee803b62c62e5f3326be31e57161ff5 +https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.3-py311h38e4bf4_0.conda#3910c815fc788621f88b2bdc0fa9f0a6 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 https://conda.anaconda.org/conda-forge/noarch/mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2#34fc335fc50eef0b5ea708f2b5f54e0c https://conda.anaconda.org/conda-forge/noarch/mistune-3.0.2-pyhd8ed1ab_0.conda#5cbee699846772cc939bef23a0d524ed @@ -232,7 +232,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py311h34ded2d_0.con https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.16.2-py311h46250e7_0.conda#79a19e53eae4bc42b7469feb46d90bd4 https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda#5efb3fccda53974aed800b6d575f72ed https://conda.anaconda.org/conda-forge/noarch/setoptconf-tmp-0.3.1-pyhd8ed1ab_0.tar.bz2#af3e36d4effb85b9b9f93cd1db0963df -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 +https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda#40695fdfd15a92121ed2922900d0308b https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2#62f26a3d1387acee31322208f0cfa3e0 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -241,18 +241,18 @@ https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 https://conda.anaconda.org/conda-forge/noarch/sqlparse-0.4.4-pyhd8ed1ab_0.conda#2e2f31b3b1c866c29636377e14f8c4c6 https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda#04eedddeb68ad39871c8127dd1c21f4f -https://conda.anaconda.org/conda-forge/noarch/termcolor-2.3.0-pyhd8ed1ab_0.conda#440d508f025b1692168caaf436504af3 +https://conda.anaconda.org/conda-forge/noarch/termcolor-2.4.0-pyhd8ed1ab_0.conda#a5033708ad9283907c3b1bc1f90d0d0d https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda#074d0ce7a6261ab8b497c3518796ef3e https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda#a700fcb5cedd3e72d0c75d095c7a6eda -https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.0-pyhd8ed1ab_0.conda#886f4a84ddb49b943b1697ac314e85b3 +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.1-pyhd8ed1ab_0.conda#1c6acfdc7ecbfe09954c4216da99c146 https://conda.anaconda.org/conda-forge/noarch/types-pyyaml-6.0.12.12-pyhd8ed1ab_0.conda#0cb14c80f66937df894d60626dd1921f https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda#a92a6440c3fe7052d63244f3aba2a4a7 https://conda.anaconda.org/conda-forge/linux-64/ujson-5.9.0-py311hb755f60_0.conda#36dda52dc99a4fb9cadd3b738ec24848 https://conda.anaconda.org/conda-forge/noarch/untokenize-0.1.1-py_0.tar.bz2#1447ead40f2a01733a9c8dfc32988375 -https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.12-pyhd8ed1ab_0.conda#bf4a1d1a97ca27b0b65bacd9e238b484 +https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda#68f0738df502a14213624b288c60c9ad https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9 https://conda.anaconda.org/conda-forge/noarch/webob-1.8.7-pyhd8ed1ab_0.tar.bz2#a8192f3585f341ea66c60c189580ac67 https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 @@ -266,8 +266,9 @@ https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/asgiref-3.7.2-pyhd8ed1ab_0.conda#596932155bf88bb6837141550cb721b0 https://conda.anaconda.org/conda-forge/linux-64/astroid-2.15.8-py311h38be061_0.conda#46d70fcb74472aab178991f0231ee3c6 https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda#5f25798dcefd8252ce5f9dc494d5f571 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.8-hcf8cf63_3.conda#8634ef2e79e9c8065fd69ead7902d27c -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.0-hbafccad_1.conda#b587eb2e3fa4cabcf5b6ea7fd06f1043 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.11-h0100c56_0.conda#b3002f770a1821d8f0b00f8d248c1a2b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.10.0-hf5d392a_2.conda#18eb32f275d7294045298f69fbed6ad1 +https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.10.3-h91d86a7_0.conda#db7a05c674efad9c19f8a2ff76e4976c https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e @@ -292,7 +293,7 @@ https://conda.anaconda.org/conda-forge/noarch/isodate-0.6.1-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a3be0b2023e1ea8555781f0ad904a2 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.6.0-py311h38be061_0.conda#20290b0ac04a80c0d84d833fff1c0fd7 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.7.1-py311h38be061_0.conda#175a430872841f7c351879f4c4c85b9e https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_0.conda#3f0915b1fb2252ab73686a533c5f9d3f https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2#8d67904973263afd2985ba56aa2d6bb4 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 @@ -306,15 +307,15 @@ https://conda.anaconda.org/conda-forge/noarch/nested-lookup-0.2.25-pyhd8ed1ab_1. https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda#2a75b296096adabbabadd5e9782e5fcc https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py311ha6c5da5_0.conda#83a988daf5c49e57f7d2086fb6781fe8 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.2.0-py311ha6c5da5_0.conda#a5ccd7f2271f28b7d2de0b02b64e3796 https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda#8591c748f98dcc02253003533bc2e4b1 -https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h8972f4a_7.conda#672069c684190f10e5a9bbb5b10d82bb -https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda#b5e57a0c643da391bef850922963eece +https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.1-h7387d8b_7.conda#563017467245a8a02671a5257ad9331e +https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.1-h1d62c97_0.conda#44ec51d0857d9be26158bb85caa74fdb https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.42-pyha770c72_0.conda#0bf64bf10eee21f46ac83c161917fa86 https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.4-pyhd8ed1ab_0.conda#a9d145de8c5f064b5fa68fb34725d9f4 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 -https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda#a7b5a535cd614e384594530aee7e6061 +https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.1-pyhd8ed1ab_0.conda#753a592b4e99d7d2cde6a8fd0797f414 https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.9.0-hd8ed1ab_0.conda#c16524c1b7227dc80b36b4fa6f77cc86 https://conda.anaconda.org/conda-forge/noarch/url-normalize-1.4.3-pyhd8ed1ab_0.tar.bz2#7c4076e494f0efe76705154ac9302ba6 @@ -323,25 +324,26 @@ https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.25.0-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.5-hac6953d_0.conda#63b80ca78d29380fe69e69412dcbe4ac https://conda.anaconda.org/conda-forge/noarch/yamale-4.0.4-pyh6c4a22f_0.tar.bz2#cc9f59f147740d88679bf1bd94dbe588 https://conda.anaconda.org/conda-forge/noarch/yamllint-1.33.0-pyhd8ed1ab_0.conda#57d32eb2c4b76ef288f9dd789f8fe5af -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.6-h47b1690_0.conda#a3341b508d58d309a4595f12bd5ef8af +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.4.7-hf8c57b3_3.conda#b7242f29303e9c7d1c4adfacf524e8c6 +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.5.0-hb858b4b_2.conda#19f23b45d1925a9a8f701a3f6f9cce4f https://conda.anaconda.org/conda-forge/noarch/cattrs-23.2.3-pyhd8ed1ab_0.conda#91fc4700dcce4a46d439900a132fe4e5 https://conda.anaconda.org/conda-forge/linux-64/compilers-1.7.0-ha770c72_0.conda#81458b3aed8ab8711951ec3c0c04e097 https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.7-py311hcb13ee4_1.conda#ca6e04ac7262ecaec846e483d6fdc6c8 -https://conda.anaconda.org/conda-forge/noarch/django-5.0-pyhd8ed1ab_0.conda#9af5d8131de6eb7b0f2f167fba3bdff7 +https://conda.anaconda.org/conda-forge/noarch/django-5.0.1-pyhd8ed1ab_0.conda#1e9684296d2b6082dc5c436af3713ad1 https://conda.anaconda.org/conda-forge/noarch/flake8-5.0.4-pyhd8ed1ab_0.tar.bz2#8079ea7dec0a917dd0cb6c257f7ea9ea -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda#1d53ee057d8481bd2b4c2c34c8e92aac -https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda#6bf74c3b7c13079a91d4bd3da51cefcf +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-h6b2125f_15.conda#218a726155bd9ae1787b26054eed8566 +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda#84874a90c312088f7b5e63402fc44a58 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.1-hd8ed1ab_0.conda#4a2f43a20fa404b998859c6a470ba316 https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda#a0e4efb5f35786a05af4809a2fb1f855 https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.3-h2f55d51_0.conda#f7e7077802927590efc8bf7328208f12 -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h7385560_2.conda#4260750b280f6f7c38a4459bf0d919ff -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py311h64a7726_0.conda#fd2f142dcd680413b5ede5d0fb799205 +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h9612171_113.conda#b2414908e43c442ddc68e6148774a304 +https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h7bd4643_4.conda#127d36f9ee392fa81b45e81867ce30ab +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.3-py311h64a7726_0.conda#231eef4f33640338f64ef9ab690ba08d https://conda.anaconda.org/conda-forge/linux-64/poppler-23.12.0-h590f24d_0.conda#480189ac126a8c6c61e14476c8ba7c9a https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_2.tar.bz2#2099b86a7399c44c0c61cdb6de6915ba https://conda.anaconda.org/conda-forge/noarch/pylint-2.17.7-pyhd8ed1ab_0.conda#3cab6aee60038b3f621bce3e50f52bed -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_4.conda#75d504c6787edc377ebdba087a26a61b +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311hca0b8b9_5.conda#cac429fcb9126d5e6f02c8ba61c2a811 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-env-1.1.3-pyhd8ed1ab_0.conda#1dbdf019d740419852c4a7803fff49d9 https://conda.anaconda.org/conda-forge/noarch/pytest-metadata-3.0.0-pyhd8ed1ab_1.conda#8bdcc0f401561213821bf67513abeeff @@ -352,20 +354,19 @@ https://conda.anaconda.org/conda-forge/noarch/rdflib-7.0.0-pyhd8ed1ab_0.conda#44 https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/requirements-detector-1.2.2-pyhd8ed1ab_0.conda#6626918380d99292df110f3c91b6e5ec https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af -https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.18.2-h8c794c1_0.conda#e824b951c15a74d0a2d3e42676370791 -https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.20231231-pyhd8ed1ab_0.conda#d13ef563501307d609a579871cccab0b +https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.20240106-pyhd8ed1ab_0.conda#946086aaf44ef99601dd9a6ce863fe9b https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.25.0-hfa7cc67_4.conda#04ad4d642e8a2db8f0370b40f35c430f +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.26.0-h600aa22_5.conda#294b2171e20284f4acc07a1261911db7 +https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.10.0-h00ab1b0_0.conda#64eec459779f01803594f5272cdde23c https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.conda#b7e6d52b39e199238c3400cafaabafb3 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py311h9547e67_0.conda#40828c5b36ef52433e21f89943e09f33 https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.1-pyhd8ed1ab_0.conda#bf6ad72d882bc3f04e6a0fb50fd2cce8 https://conda.anaconda.org/conda-forge/noarch/flake8-polyfill-1.0.2-py_0.tar.bz2#a53db35e3d07f0af2eccd59c2a00bffe https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda#93c8f8ceb83827d88deeba796f07fba7 -https://conda.anaconda.org/conda-forge/noarch/ipython-8.19.0-pyh707e725_0.conda#29815aa1a9648eb9ad0ce20d0c10232e +https://conda.anaconda.org/conda-forge/noarch/ipython-8.20.0-pyh707e725_0.conda#c2d2d7453560c80a2138c354610c08ba https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda#1116d79def5268414fb0917520b2bbf1 https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.0-pyhd8ed1ab_0.conda#6bd3f1069cdebb44c7ae9efb900e312d -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.1-hd0089ee_2.conda#feb838eaf49fd1608413759f7b54c74c https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_103.conda#50f05f98d084805642d24dff910e11e8 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py311h320fe9a_0.conda#e44ccb61b6621bf3f8053ae66eba7397 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 @@ -376,14 +377,13 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-html-4.1.1-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.1.1-pyhd8ed1ab_0.conda#29bf13210ee541c59166cea092b91080 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py311h64a7726_0.conda#9ac5334f1b5ed072d3dbc342503d7868 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py311h2032efe_1.conda#4ba860ff851768615b1a25b788022750 -https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-h0853bfa_5.conda#b923ffd222c9bb4bbf93b0fd18beac02 -https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.2-pyhd8ed1ab_0.conda#c02a7e79365121bd3bcc25f1b65f48a9 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.210-h405b101_9.conda#08304621e9a1c3d4deea0b5dda03afca +https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.3-pyhd8ed1ab_0.conda#e6b7ca7e29811c2f72f93e8188171caa https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_4.conda#1e105c1a8ea2163507726144b401eb1b https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.1-pyhd8ed1ab_0.conda#6b31b9b627f238a0068926d5650ae128 https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.conda#c330e87e698bae8e7381c0315cf25dd0 -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.1-py311h67923c1_2.conda#36bdf6d2872decceaa4e5c97e128351c https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h7f000aa_3.conda#0abfa7f9241a0f4fd732bc15773cfb0c -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-he3f83f7_1.conda#03bd1ddcc942867a19528877143b9852 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py311h54ef318_0.conda#9f80753bc008bfc9b95f39d9ff9f1694 https://conda.anaconda.org/conda-forge/noarch/myproxyclient-2.1.1-pyhd8ed1ab_0.conda#bcdbeb2b693eba886583a907840c6421 https://conda.anaconda.org/conda-forge/noarch/nbformat-5.9.2-pyhd8ed1ab_0.conda#61ba076de6530d9301a0053b02f093d2 @@ -394,39 +394,42 @@ https://conda.anaconda.org/conda-forge/noarch/pylint-celery-0.3-py_1.tar.bz2#e29 https://conda.anaconda.org/conda-forge/noarch/pylint-django-2.5.3-pyhd8ed1ab_0.tar.bz2#00d8853fb1f87195722ea6a582cc9b56 https://conda.anaconda.org/conda-forge/noarch/pylint-flask-0.6-py_0.tar.bz2#5a9afd3d0a61b08d59eed70fab859c1b https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_1.conda#cd36a89a048ad2bcc6d8b43f648fb1d0 +https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.19.0-hc1131af_0.conda#51f6de9ca86bdeeb92e89e4abccd03e8 https://conda.anaconda.org/conda-forge/noarch/xarray-2023.12.0-pyhd8ed1ab_0.conda#e9b31d3ab1b0dd5fd8c24419f6560b90 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_1.conda#10d1806e20da040c58c36deddf51c70c https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.7-pyhd8ed1ab_0.conda#d475dc2fac9652bcd55cec9c387fc139 https://conda.anaconda.org/conda-forge/noarch/dask-jobqueue-0.8.2-pyhd8ed1ab_0.conda#cc344a296a41369bcb05f7216661cec8 https://conda.anaconda.org/conda-forge/noarch/esgf-pyclient-0.3.1-pyhca7485f_3.conda#1d43833138d38ad8324700ce45a7099a https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 -https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_2.conda#01464abc0630e2285a799a2fa8370a8e https://conda.anaconda.org/conda-forge/linux-64/graphviz-9.0.0-h78e8752_1.conda#a3f4cd4a512ec5db35ffbf25ba11f537 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-hfb4d3a9_0_cpu.conda#3fb24292de146d04d471ab88b44630e6 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-14.0.2-h84dd17c_2_cpu.conda#571e88947e7cadb42bfacb517c346662 +https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.8.3-hcd1fc54_0.conda#ef5ae0528509a7987cf29e8827f46938 https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.3-pyhd8ed1ab_0.conda#f551d4d859a1d70c6abff8310a655481 +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.8.3-py311h39b4e0e_0.conda#a0119e816e54d16b8403bbe4594e8904 https://conda.anaconda.org/conda-forge/noarch/iris-3.7.0-pyha770c72_0.conda#dccc1f660bf455c239adaabf56b91dc9 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_0_cpu.conda#8d23c56e691ff7dfc4b3eb7422976171 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-h120cb0d_0_cpu.conda#5b2207ce6f7a383a094be45e4fab8abd -https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hacb8726_0_cpu.conda#1a59387c247c08029b8ac364c672d645 -https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_0_cpu.conda#2a325960d715af08b098bf4f746bf5c4 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.13.1-pyhd8ed1ab_0.conda#165cac4486f9e8542f0b8de32822f328 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-14.0.2-h59595ed_2_cpu.conda#4b00f12f1f3c7350a0345aa9c18798d6 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-14.0.2-h120cb0d_2_cpu.conda#e03930dbf4508a5153cd0fc237756a75 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-gandiva-14.0.2-hacb8726_2_cpu.conda#db1a164476c3b26f4425542ab9ce11df +https://conda.anaconda.org/conda-forge/linux-64/libparquet-14.0.2-h352af49_2_cpu.conda#b265698e6c69269fe78a8cc972269c35 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.14.0-pyhd8ed1ab_0.conda#bf099b894a9fd1dc65c881940a2f4e69 https://conda.anaconda.org/conda-forge/noarch/py-cordex-0.6.6-pyhd8ed1ab_0.conda#255f9eac03143526c8aed41d1d091c63 -https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda#5c223cb0d9c05552bf9d1586a92720b2 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_0_cpu.conda#6a469f0dcc01b9ca7a19aa3e07bd8ea8 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h61ff412_0_cpu.conda#0c70731f58f42b47940df94cc50e6b7e -https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.13.1-pyhd8ed1ab_0.conda#b97a845d8ee2502842873e7e9d59eb97 +https://conda.anaconda.org/conda-forge/linux-64/pydot-2.0.0-py311h38be061_0.conda#cdfd23a54a18f3c8d5320d7717f4ed52 +https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hf8e0aa6_3.conda#a5277325e005e9d014eca37187b3f4a2 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-14.0.2-h59595ed_2_cpu.conda#5561fbdff1a630b3768fcbcd1307bcc2 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-flight-sql-14.0.2-h61ff412_2_cpu.conda#1afaafe003abec8aec34f46ec418980a +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.14.0-pyhd8ed1ab_0.conda#fe3613d8ff5d0553ae7097ffcd364fdd https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2#aa9b3ad140f6c0668c646f32e20ccf82 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h61ff412_0_cpu.conda#6d789ad04a56815daf8785f7e8517430 -https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.13.1-pyhd8ed1ab_0.conda#ee7bb8530ad5bda21f34ec6b16d218fc -https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_0_cpu.conda#27885a87fe1250c1cfea5dd92f22fcfd +https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-14.0.2-h61ff412_2_cpu.conda#838d3d33c458225578f64e59c4410a9f +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.14.0-pyhd8ed1ab_0.conda#c48d304428e46ec8d597fd483256e74f +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-14.0.2-py311h39c9aba_2_cpu.conda#07fb7193fa96aab8e61c4483b9e61e51 https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.1-pyhd8ed1ab_0.conda#9a6e8eb1d188bc246883ea11f4fe6a4d https://conda.anaconda.org/conda-forge/noarch/iris-esmf-regrid-0.9.0-pyhd8ed1ab_0.conda#570f2c6e387fd6dac5356a5152f91b3f https://conda.anaconda.org/conda-forge/noarch/autodocsumm-0.2.6-pyhd8ed1ab_0.tar.bz2#4409dd7e06a62c3b2aa9e96782c49c6d https://conda.anaconda.org/conda-forge/noarch/nbsphinx-0.9.3-pyhd8ed1ab_0.conda#0dbaa7d08d3d79b2a1a4dd6a02cc4581 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.4-pyhd8ed1ab_0.conda#c79b8443908032263ffb40ee6215e9e4 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.1-pyhd8ed1ab_0.conda#0fabe529030c483e4d9eb885667ce47f https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.7-pyhd8ed1ab_0.conda#aebfabcb60c33a89c1f9290cab49bc93 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8ed1ab_0.conda#ebf08f5184d8eaa486697bc060031953 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8ed1ab_0.conda#a9a89000dfd19656ad004b937eeb6828