diff --git a/.circleci/config.yml b/.circleci/config.yml index 47e87cf517..5be43d58c6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -27,6 +27,7 @@ commands: name: Log versions command: | . /opt/conda/etc/profile.d/conda.sh + conda env export --name base > /logs/base_environment.yml conda activate esmvaltool esmvaltool version dpkg -l > /logs/versions.txt @@ -40,6 +41,7 @@ commands: command: | . /opt/conda/etc/profile.d/conda.sh conda activate esmvaltool + mamba --version pytest -n 4 --junitxml=test-reports/report.xml esmvaltool version esmvaltool -- --help @@ -232,7 +234,7 @@ jobs: # Test building documentation docker: - image: condaforge/mambaforge:latest - resource_class: small + resource_class: medium steps: - checkout - run: @@ -265,7 +267,7 @@ jobs: # Install prerequisites mkdir /logs # Install ESMValTool in a new conda environment - mamba create -y --name esmvaltool -c conda-forge esmvaltool julia 'python=3.10' >> /logs/conda.txt 2>&1 + mamba create -y --name esmvaltool -c conda-forge esmvaltool julia 'python=3.11' >> /logs/conda.txt 2>&1 # Activate the environment set +x; conda activate esmvaltool; set -x # install the Julia dependencies diff --git a/README.md b/README.md index 694dab6a82..4fbe8aa84e 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/79bf6932c2e844eea15d0fb1ed7e415c)](https://www.codacy.com/gh/ESMValGroup/ESMValTool?utm_source=github.com&utm_medium=referral&utm_content=ESMValGroup/ESMValTool&utm_campaign=Badge_Coverage) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/79bf6932c2e844eea15d0fb1ed7e415c)](https://www.codacy.com/gh/ESMValGroup/ESMValTool?utm_source=github.com&utm_medium=referral&utm_content=ESMValGroup/ESMValTool&utm_campaign=Badge_Grade) [![Docker Build Status](https://img.shields.io/docker/cloud/build/esmvalgroup/esmvaltool.svg)](https://hub.docker.com/r/esmvalgroup/esmvaltool/) -[![Anaconda-Server Badge](https://img.shields.io/badge/Anaconda.org-2.9.0-blue.svg)](https://anaconda.org/conda-forge/esmvaltool) +[![Anaconda-Server Badge](https://img.shields.io/conda/vn/conda-forge/ESMValTool?color=blue&label=conda-forge&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/esmvaltool) ![stand with Ukraine](https://badgen.net/badge/stand%20with/UKRAINE/?color=0057B8&labelColor=FFD700) ![esmvaltoollogo](https://raw.githubusercontent.com/ESMValGroup/ESMValTool/main/doc/sphinx/source/figures/ESMValTool-logo-2.png) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index 42d1ec03fc..b0facf9382 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -10,7 +10,7 @@ https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_2.conda https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb -https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 +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/noarch/libgcc-devel_linux-64-13.2.0-ha9c7c90_103.conda#db8cd1a871a07404d94f7dcc78c21a61 @@ -30,7 +30,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.cond https://conda.anaconda.org/conda-forge/linux-64/aom-3.5.0-h27087fc_0.tar.bz2#a08150fd2298460cd1fcccf626305642 https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.8.23-hd590300_0.conda#cc4f06f7eedb1523f3b83fd0fb3942ff 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.22.1-hd590300_0.conda#8430bd266c7b2cfbda403f7585d5ee86 +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/charls-2.4.2-h59595ed_0.conda#4336bd67920dd504cd8c6761d6a99645 https://conda.anaconda.org/conda-forge/linux-64/dav1d-1.2.1-hd590300_0.conda#418c6ca5929a611cbd69204907a83995 https://conda.anaconda.org/conda-forge/linux-64/freexl-1.0.6-h166bdaf_1.tar.bz2#897e772a157faf3330d72dd291486f62 @@ -53,7 +53,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda#12 https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2#c965a5aa0d5c1c37ffc62dff36e28400 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172bf1cd1ff8629f2b1179945ed45055 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 @@ -75,7 +75,7 @@ https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318 https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac https://conda.anaconda.org/conda-forge/linux-64/make-4.3-hd18ef5c_1.tar.bz2#4049ebfd3190b580dffe76daed26155a https://conda.anaconda.org/conda-forge/linux-64/mbedtls-3.3.0-hcb278e6_0.conda#cc1213f464c357b647cc5dde5cfca881 -https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-h59595ed_1007.conda#40ccb8318df2500f83bd868dd8fcd201 +https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.1-h59595ed_2.conda#9ba5910c34210e7ad60736d172bbcd4c https://conda.anaconda.org/conda-forge/linux-64/nccl-2.19.4.1-h6103f9b_0.conda#2946f0e841f1f0be90c90bc67877d417 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 @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_0.con https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.23.3-hd1fb520_1.conda#78c10e8637a6f8d377f9989327d0267d https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-h0d5128d_13.conda#e1d6139ff0500977a760567a4bec1ce9 -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.0-h2797004_0.conda#b58e6816d137f3aabf77d341dd5d732b +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf 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 @@ -149,7 +149,7 @@ https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#00 https://conda.anaconda.org/conda-forge/linux-64/boost-cpp-1.78.0-h6582d0a_3.conda#d3c3c7698d0b878aab1b86db95407c8e https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.conda#d47dee1856d9cb955b8076eeff304a5b https://conda.anaconda.org/conda-forge/linux-64/bwidget-1.9.14-ha770c72_1.tar.bz2#5746d6202ba2abad4a4707f2a2462795 -https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.11.2-hb4ffafa_0.conda#aa776e4716e54633d1279cf7599c3711 +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.11.3-hb4ffafa_0.conda#f394ac64ab0e1fcb0152cc9c16df3d85 https://conda.anaconda.org/conda-forge/linux-64/fftw-3.3.10-nompi_hc118613_108.conda#6fa90698000b05dfe8ce6515794fe71a https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-13.2.0-h76e1118_3.conda#4a04c8f0a51d525776f267112198684d @@ -161,16 +161,16 @@ https://conda.anaconda.org/conda-forge/linux-64/libgit2-1.5.1-h1f77430_0.conda#1 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-hebfc3b9_0.conda#ddd09e8904fde46b85f41896621803e6 https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.56.2-h3905398_1.conda#0b01e6ff8002994bd4ddbffcdbec7856 https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda#6e4ef6ca28655124dcde9bd500e44c32 +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/libopenblas-ilp64-0.3.25-pthreads_h384dd9e_0.conda#637ee73ecb26ad42c38278a6619a20ca https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd -https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.95-h1d7d5a4_0.conda#d3a8067adcc45a923f4b1987c91d69da https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h385abfd_1.conda#2cd5aac7ef1b4c6ac51bf521251a89b3 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/sqlite-3.44.0-h2c6b66d_0.conda#df56c636df4a98990462d66ac7be2330 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda#4f2892c672829693fd978d065db4e8be https://conda.anaconda.org/conda-forge/linux-64/tktable-2.10-h0c5db8f_5.conda#9464044754ea25557a9c93f0327d90a6 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 @@ -195,28 +195,28 @@ https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz https://conda.anaconda.org/conda-forge/noarch/config-0.5.1-pyhd8ed1ab_0.tar.bz2#97275d4898af65967b1ad57923cef770 https://conda.anaconda.org/conda-forge/noarch/configargparse-1.7-pyhd8ed1ab_0.conda#0d07dc29b1c1cc973f76b74beb44915f 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.5-py311hb755f60_0.conda#25b42509a68f96e612534af3fe2cf033 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.6-py311hb755f60_0.conda#88cc84238dda72e11285d9cfcbe43e51 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/linux-64/docutils-0.20.1-py311h38be061_2.conda#33f8066e53679dd4be2355fec849bf01 +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/ecmwf-api-client-1.6.3-pyhd8ed1ab_0.tar.bz2#15621abf59053e184114d3e1d4f9d01e https://conda.anaconda.org/conda-forge/noarch/entrypoints-0.4-pyhd8ed1ab_0.tar.bz2#3cf04868fee0a029769bd41f4b2fbf2d https://conda.anaconda.org/conda-forge/noarch/et_xmlfile-1.1.0-pyhd8ed1ab_0.conda#a2f2138597905eaa72e561d8efb42cf3 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/fasteners-0.17.3-pyhd8ed1ab_0.tar.bz2#348e27e78a5e39090031448c72f66d5e https://conda.anaconda.org/conda-forge/noarch/filelock-3.13.1-pyhd8ed1ab_0.conda#0c1729b74a8152fde6a38ba0a2ab9f45 https://conda.anaconda.org/conda-forge/noarch/findlibs-0.0.5-pyhd8ed1ab_0.conda#8f325f63020af6f7acbe2c4cb4c920db https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.0-py311h459d7ec_1.conda#23d0b2d02252b32ee14e5063ccfb41e2 -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.10.0-pyhca7485f_0.conda#5b86cf1ceaaa9be2ec4627377e538db1 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.1-pyhca7485f_0.conda#b38946846cdf39f9bce93f75f571d913 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b https://conda.anaconda.org/conda-forge/noarch/geographiclib-1.52-pyhd8ed1ab_0.tar.bz2#6880e7100ebae550a33ce26663316d85 https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/humanfriendly-10.0-pyhd8ed1ab_6.conda#2ed1fe4b9079da97c44cfe9c2e5078fd -https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed +https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 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 @@ -224,7 +224,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1 https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py311h459d7ec_1.conda#7cc99d87755a9e64586a6004c5f0f534 https://conda.anaconda.org/conda-forge/noarch/lazy_loader-0.3-pyhd8ed1ab_0.conda#69ea1d0fa7ab33b48c88394ad1dead65 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda#420f4e9be59d0dc9133a0f43f7bab3f3 +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.1.2-h409715c_0.conda#50c873c9660ed116707ae15b663928d8 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.3-hbcd7760_1.conda#8afb2a97d256ffde95b91a6283bc598c https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 @@ -235,7 +235,7 @@ https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#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 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py311h9547e67_0.conda#e826b71bf3dc8c91ee097663e2bcface +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.7-py311h9547e67_0.conda#3ac85c6c226e2a2e4b17864fc2ca88ff https://conda.anaconda.org/conda-forge/linux-64/multidict-6.0.4-py311h459d7ec_1.conda#3dc76316237c8f7e7231d61b76c62b7c https://conda.anaconda.org/conda-forge/noarch/munch-4.0.0-pyhd8ed1ab_0.conda#376b32e8f9d3eacbd625f37d39bd507d https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 @@ -246,15 +246,15 @@ https://conda.anaconda.org/conda-forge/linux-64/openblas-ilp64-0.3.25-pthreads_h https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 https://conda.anaconda.org/conda-forge/noarch/pandocfilters-1.5.0-pyhd8ed1ab_0.tar.bz2#457c2c8c08e54905d6954e79cb5b5db9 -https://conda.anaconda.org/conda-forge/noarch/pathspec-0.11.2-pyhd8ed1ab_0.conda#e41debb259e68490e3ab81e46b639ab6 +https://conda.anaconda.org/conda-forge/noarch/pathspec-0.12.1-pyhd8ed1ab_0.conda#17064acba08d3686f1135b5ec1b32b12 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/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2#b4613d7e7a493916d867842a6a148054 https://conda.anaconda.org/conda-forge/noarch/pycodestyle-2.9.1-pyhd8ed1ab_0.tar.bz2#0191dd7efe1a94262812770183b68892 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pyflakes-2.5.0-pyhd8ed1ab_0.tar.bz2#1b3bef4313288ae8d35b1dfba4cd84a3 -https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.1-pyhd8ed1ab_0.conda#5bb8a4f4162594af97cee1434d39f500 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e 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 @@ -263,8 +263,8 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0. 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.1-py311h34ded2d_2.conda#ea365280db99687905b4d76cf6a3568c -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.13.1-py311h46250e7_0.conda#b1924481122f7cb41cb001f5c96bf3f6 +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/ruamel.yaml.clib-0.2.7-py311h459d7ec_2.conda#56bc3fe5180c0b23e05c7a5708153ac7 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 @@ -277,8 +277,8 @@ https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_ https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561 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/linux-64/tbb-2021.10.0-h00ab1b0_2.conda#eb0d5c122f42714f86a7058d1ce7b2e6 -https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_0.conda#fde515afbbe6e36eb4564965c20b1058 +https://conda.anaconda.org/conda-forge/noarch/tblib-3.0.0-pyhd8ed1ab_0.conda#04eedddeb68ad39871c8127dd1c21f4f https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b https://conda.anaconda.org/conda-forge/noarch/termcolor-2.3.0-pyhd8ed1ab_0.conda#440d508f025b1692168caaf436504af3 https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 @@ -287,14 +287,14 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5 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.13.0-pyhd8ed1ab_0.conda#8a9953c15e1e5a7c1baddbbf4511a567 -https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2023.11.14-pyhd8ed1ab_0.conda#dee8232c4bb962881f8e67588cd31670 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/ujson-5.8.0-py311hb755f60_0.conda#91e67c62c48444e4efc08fb61835abe8 +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.0-pyhd8ed1ab_0.conda#886f4a84ddb49b943b1697ac314e85b3 +https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2023.11.29-pyhd8ed1ab_0.conda#b355907cec4e6a516f2909396add77c8 +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/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.41.3-pyhd8ed1ab_0.conda#3fc026b9c87d091c4b34a6c997324ae8 +https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.16.0-py311h459d7ec_0.conda#6669b5529d206c1f880b642cdd17ae05 https://conda.anaconda.org/conda-forge/noarch/xlsxwriter-3.1.9-pyhd8ed1ab_0.conda#70e533db62a710ae216fdaccc4a983c8 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -325,23 +325,24 @@ https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.c https://conda.anaconda.org/conda-forge/noarch/docformatter-1.7.5-pyhd8ed1ab_0.conda#3a941b6083e945aa87e739a9b85c82e9 https://conda.anaconda.org/conda-forge/noarch/docrep-0.3.2-pyh44b312d_0.tar.bz2#235523955bc1bfb019d7ec8a2bb58f9a 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.45.0-py311h459d7ec_0.conda#316e188c8068e6d9c55d23bbead5d6c3 -https://conda.anaconda.org/conda-forge/noarch/geopy-2.4.0-pyhd8ed1ab_0.conda#90faaa7eaeba3cc877074c0916efe30c +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py311h459d7ec_0.conda#a14114f70e23f7fd5ab9941fec45b095 +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.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946 +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/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc -https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40 +https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.0-py311h38be061_0.conda#cee83be29258275f75029125e186ab6d +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-19_linux64_openblas.conda#d12374af44575413fbbd4a217d46ea33 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.0-hac7e632_1003.conda#50c389a09b6b7babaef531eb7cb5e0ca https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h840a212_1.conda#03c225a73835f5aa68c13e62eb360406 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda#9f100edf65436e3eabc2a51fc00b2c37 +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/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 @@ -357,27 +358,28 @@ https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.0.0-pyhd8ed1ab_0 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 https://conda.anaconda.org/conda-forge/noarch/python-utils-3.8.1-pyhd8ed1ab_0.conda#4dc77041fea14c63ecea50ce0eb92873 -https://conda.anaconda.org/conda-forge/noarch/referencing-0.31.0-pyhd8ed1ab_0.conda#38c2b9b24e9a58725a233f1fa32c23e9 +https://conda.anaconda.org/conda-forge/noarch/referencing-0.32.0-pyhd8ed1ab_0.conda#a7b5a535cd614e384594530aee7e6061 https://conda.anaconda.org/conda-forge/noarch/retrying-1.3.3-py_2.tar.bz2#a11f356d6f93b74b4a84e9501afd48b4 https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml-0.18.5-py311h459d7ec_0.conda#1101ec27377f8e45d8431a5f21d744f1 https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.1-pyhd8ed1ab_0.conda#03c97908b976498dcae97eb4e4f3149c -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 +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 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-h8d71039_2.conda#6d5edbe22b07abae2ea0a9065ef6be12 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.7.10-h7f98852_0.tar.bz2#e77615e5141cad5a2acaa043d1cf0ca5 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxmu-1.1.3-h7f98852_0.tar.bz2#3cdb89236358326adfce12be820a8af3 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxpm-3.5.17-hd590300_0.conda#12bf78e12f71405775e1c092902959d3 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/yarl-1.9.2-py311h459d7ec_1.conda#132637a291f818a0e99c8ca468e92eb8 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.3-py311h459d7ec_0.conda#96f995652440b0a9266d66a691d9eff9 +https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.9.1-py311h459d7ec_0.conda#a51ceb9a9219e3c11af56b2b77794839 https://conda.anaconda.org/conda-forge/linux-64/arpack-3.7.0-hdefa2d7_2.tar.bz2#8763fe86163198ef1778d1d8d22bb078 -https://conda.anaconda.org/conda-forge/noarch/async-timeout-4.0.3-pyhd8ed1ab_0.conda#3ce482ec3066e6d809dbbb1d1679f215 https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b -https://conda.anaconda.org/conda-forge/noarch/cattrs-23.2.1-pyhd8ed1ab_0.conda#4b85ef7c94054bdbcb5c3e5861f9dcc3 -https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.5-py311h63ff55d_0.conda#22584e5c97ed8f1a6b63a0ff43dba827 -https://conda.anaconda.org/conda-forge/noarch/django-4.2.7-pyhd8ed1ab_0.conda#107fbbd296283091c717acd51a3a87fd +https://conda.anaconda.org/conda-forge/noarch/cattrs-23.2.3-pyhd8ed1ab_0.conda#91fc4700dcce4a46d439900a132fe4e5 +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/flake8-5.0.4-pyhd8ed1ab_0.tar.bz2#8079ea7dec0a917dd0cb6c257f7ea9ea https://conda.anaconda.org/conda-forge/linux-64/freeglut-3.2.2-hac7e632_2.conda#6e553df297f6e64668efb54302e0f139 https://conda.anaconda.org/conda-forge/noarch/funcargparse-0.2.5-pyhd8ed1ab_0.tar.bz2#e557b70d736251fa0bbb7c4497852a92 @@ -387,99 +389,99 @@ https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/gsl-2.7-he838d99_0.tar.bz2#fec079ba39c9cca093bf4c00001825de https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/linux-64/hdfeos5-5.1.16-h8b5b2df_13.conda#29a96d50cb53638a5b4806b5ca6e4b1d -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.1-pyhd8ed1ab_0.conda#094ff9cf36957f95bb74cee42ab140b2 +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.1-h3845be2_3.conda#f38e5e47f62d6633166040192ad420a1 https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h0f3d0bb_105.conda#b5d412441b84305460e9df8a016a3392 https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.0.1-hca56755_27.conda#918a735059cab21b96fc13a8d04fbcd8 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py311h64a7726_0.conda#bf16a9f625126e378302f08e7ed67517 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py311h64a7726_0.conda#fd2f142dcd680413b5ede5d0fb799205 https://conda.anaconda.org/conda-forge/linux-64/poppler-23.05.0-hd18248d_1.conda#09e0de1aa7330fe697eed76eaeef666d https://conda.anaconda.org/conda-forge/noarch/progressbar2-4.2.0-pyhd8ed1ab_0.tar.bz2#d883564cf1e9ba190f6b285036c5f949 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-py311ha169711_0.conda#ad4b6e9be79a89959bb6d7d308027ff2 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.1-pyhd8ed1ab_0.conda#0a4d7e888fae7b7d75243414b15d0c50 +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 https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.12.0-pyhd8ed1ab_0.conda#ac9fedc9a0c397f2318e82525491dd83 -https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.4.0-pyhd8ed1ab_0.conda#b8dc6f9db1b9670e564b68277a79ffeb +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.5.0-pyhd8ed1ab_0.conda#d5f595da2daead898ca958ac62f0307b https://conda.anaconda.org/conda-forge/noarch/python-build-1.0.3-pyhd8ed1ab_0.conda#d9ccabf228cb98419ca3d5694b25e1a2 https://conda.anaconda.org/conda-forge/noarch/rdflib-7.0.0-pyhd8ed1ab_0.conda#44d14ef95495b3d4438f28998e0296a9 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/linux-64/suitesparse-5.10.1-h9e50725_1.tar.bz2#a3a685b5f9aeb890ed874502fe56accf +https://conda.anaconda.org/conda-forge/linux-64/suitesparse-5.10.1-h3ec001c_2.conda#9b37d27528c5f86ee09bf1fc6834da8e https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.13.2-hd532e3d_0.conda#6d97164f19dbd27575ef1899b02dc1e0 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/linux-64/xorg-libxaw-1.0.14-h7f98852_1.tar.bz2#45b68dc2fc7549c16044d533ceaf340e -https://conda.anaconda.org/conda-forge/linux-64/aiohttp-3.8.6-py311h459d7ec_1.conda#7d4b63a745f293029b5689b0b5d8aa15 +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.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d https://conda.anaconda.org/conda-forge/noarch/cdsapi-0.6.1-pyhd8ed1ab_0.conda#454ed214cec806066097ae245a409171 https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.conda#b7e6d52b39e199238c3400cafaabafb3 https://conda.anaconda.org/conda-forge/noarch/chart-studio-1.1.0-pyh9f0ad1d_0.tar.bz2#acd9a12a35e5a0221bdf39eb6e4811dc https://conda.anaconda.org/conda-forge/noarch/colorspacious-1.1.2-pyh24bf2e0_0.tar.bz2#b73afa0d009a51cabd3ec99c4d2ef4f3 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.11.0-pyhd8ed1ab_0.conda#3bf8f5c3fbab9e0cfffdf5914f021854 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.0-pyhd8ed1ab_0.conda#95eae0785aed72998493140dc0115382 https://conda.anaconda.org/conda-forge/noarch/eofs-1.4.0-py_0.tar.bz2#6e166cd37cfeadefcfca1ffe00f222bb 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.32-pyhd8ed1ab_0.conda#3ef8e9bab1bfaf900bb0a5db8c0c742c +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda#93c8f8ceb83827d88deeba796f07fba7 https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.8.12-py311h67b54e4_0.conda#363e5c2f2c67ff69d717aba54422b03d https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda#6820ccf6a3a27df348f18c85dd89014a https://conda.anaconda.org/conda-forge/linux-64/jasper-4.0.0-h32699f2_1.conda#fdde5424ecef5f7ad310b4242229291c https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.20.0-pyhd8ed1ab_0.conda#1116d79def5268414fb0917520b2bbf1 https://conda.anaconda.org/conda-forge/linux-64/julia-1.8.5-h783901f_0.conda#98c05ba7ca9c15d22216f730499e167a -https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.5.0-py311h38be061_0.conda#cee83be29258275f75029125e186ab6d +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.7.0-h5418a03_2.conda#30ddbe080c260fb36da8509e3fd6c45f https://conda.anaconda.org/conda-forge/noarch/magics-python-1.5.8-pyhd8ed1ab_1.conda#3fd7e3db129f12362642108f23fde521 https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_h4f3791c_100.conda#405c5b3ad4ef53eb0d93043b54206dd7 https://conda.anaconda.org/conda-forge/linux-64/numba-0.58.1-py311h96b013e_0.conda#06a0313ff3d2ec956a25767ccaf7c9f6 https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.12.1-py311hb755f60_0.conda#38a2ff8ea433fe8792279b45e84b3730 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.3-py311h320fe9a_0.conda#3ea3486e16d559dfcb539070ed330a1e +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-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb +https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.4-pyhd8ed1ab_0.conda#1184267eddebb57e47f8e1419c225595 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed -https://conda.anaconda.org/conda-forge/noarch/pylint-2.17.7-pyhd8ed1ab_0.conda#3cab6aee60038b3f621bce3e50f52bed +https://conda.anaconda.org/conda-forge/noarch/pylint-plugin-utils-0.7-pyhd8ed1ab_0.tar.bz2#1657976383aee04dbb3ae3bdf654bb58 https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.3.0-pyhd8ed1ab_0.conda#7819533e674dbbc51468f3228b9b1bb6 https://conda.anaconda.org/conda-forge/noarch/pyroma-4.2-pyhd8ed1ab_0.conda#fe2aca9a5d4cb08105aefc451ef96950 -https://conda.anaconda.org/conda-forge/noarch/pytest-html-3.2.0-pyhd8ed1ab_1.tar.bz2#d5c7a941dfbceaab4b172a56d7918eb0 +https://conda.anaconda.org/conda-forge/noarch/pytest-html-4.1.1-pyhd8ed1ab_0.conda#4d2040212307d18392a2687772b3a96d https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311h1f0f07a_1.conda#86b71ff85f3e4c8a98b5bace6d9c4565 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.3-py311h64a7726_1.conda#e4b4d3b764e2d029477d0db88248a8b5 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py311h64a7726_0.conda#9ac5334f1b5ed072d3dbc342503d7868 https://conda.anaconda.org/conda-forge/noarch/seawater-3.3.4-py_1.tar.bz2#a9e101e1601faf5e5a119ab2bd7617a4 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311h54d622a_1.conda#a894c65b48676c4973e9ee8b59bceb9e https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-py_0.tar.bz2#cb83a3d6ecf73f50117635192414426a https://conda.anaconda.org/conda-forge/linux-64/tempest-remap-2.2.0-h43474b4_0.conda#fd815765a86daf44db1e15c6f6edf5e6 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.6-pyhd8ed1ab_0.conda#fb1fc875719e217ed799a7aae11d3be4 -https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-hbc2ea52_17.conda#452c7b08c21eea2ef01f4fd364d6affc -https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.1-pyhd8ed1ab_0.conda#682d698da77e896c5e986b334ce8f0a5 +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.11.0-pyhd8ed1ab_0.conda#a1ee8e3043eee1649f98704ea3e6feae +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.0-pyhd8ed1ab_0.conda#22d620e1079e99c34578cb0c615d2789 https://conda.anaconda.org/conda-forge/linux-64/eccodes-2.30.2-h1f30a5c_0.conda#21ee8444a7f629924ea8cfe52a622cbd https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h20110ff_0.conda#11f5169aeff54ad7277476be8ba19ff7 https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.0-py311h281082f_2.conda#fde4fad3c517cc80f32995696f45198d https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.6.0-pyhd8ed1ab_0.conda#6bd3f1069cdebb44c7ae9efb900e312d 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.0-pyhd8ed1ab_2.tar.bz2#363b0816e411feb0df925d4f224f026a +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 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311h4d7c953_100.conda#c03492d0342e512e58aa2d6c5fdaaa91 -https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.3-pyhd8ed1ab_0.tar.bz2#50ef6b29b1fb0768ca82c5aeb4fb2d96 https://conda.anaconda.org/conda-forge/noarch/pep8-naming-0.10.0-pyh9f0ad1d_0.tar.bz2#b3c5536e4f9f58a4b16adb6f1e11732d -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.5.0-pyha770c72_0.conda#964e3d762e427661c59263435a14c492 -https://conda.anaconda.org/conda-forge/noarch/pylint-plugin-utils-0.7-pyhd8ed1ab_0.tar.bz2#1657976383aee04dbb3ae3bdf654bb58 +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda#473a7cfca197da0a10cff3f6dded7d4b +https://conda.anaconda.org/conda-forge/noarch/pylint-celery-0.3-py_1.tar.bz2#e29456a611a62d3f26105a2f9c68f759 +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/r-base-4.1.3-hfabd6f2_9.conda#0ab4cf54fbddc0cc9ff260c6f77f8c84 https://conda.anaconda.org/conda-forge/linux-64/rasterio-1.3.8-py311h41e4db2_0.conda#b35deb26af1d7e0d98438c8ac5c6b7b2 -https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py311hc009520_1.conda#6b92d3d0680eae9d1d9860a721f7fb51 +https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.3.2-py311hc009520_2.conda#9821f8e497a791858226f535e5e0be62 https://conda.anaconda.org/conda-forge/noarch/sparse-0.14.0-pyhd8ed1ab_0.conda#ee01b310177a0612554b9d20e537fdbe -https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda#d133bea7d8ac17552492a0629229eeb1 -https://conda.anaconda.org/conda-forge/noarch/xarray-2023.11.0-pyhd8ed1ab_0.conda#f445b20bac3db8f604a48592087b2d8f +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.0-py311h1f0f07a_2.conda#8f1e772e5430ce48229740ec00a90b61 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.12.9-pyhd8ed1ab_0.conda#454bc0aff84f35fa53ba9e0369737a9b +https://conda.anaconda.org/conda-forge/noarch/xarray-2023.12.0-pyhd8ed1ab_0.conda#e9b31d3ab1b0dd5fd8c24419f6560b90 https://conda.anaconda.org/conda-forge/noarch/zarr-2.16.1-pyhd8ed1ab_0.conda#59ec835edbee50266b7bdbadab7ba335 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/cmocean-3.0.3-pyhd8ed1ab_0.conda#eec7df83d725696d32c7bf99aff21d82 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-pyh1a96a4e_2.tar.bz2#64068564a9c2932bf30e9b4ec567927d +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.4-py311hbac4ec9_0.conda#1d3445f5f7fa002a1c149c405376f012 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb @@ -489,11 +491,9 @@ https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda# https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/ncl-6.6.2-hf70af60_47.conda#ee27133164cb9f5e74681bdb8839688f https://conda.anaconda.org/conda-forge/linux-64/nco-5.1.6-hd62b316_0.conda#af7780f76ee37325d264327e21a478f5 +https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.3-pyhd8ed1ab_0.conda#f551d4d859a1d70c6abff8310a655481 https://conda.anaconda.org/conda-forge/linux-64/psyplot-1.4.3-py311h38be061_1.tar.bz2#f0c9a1067c03e8f05e53ef0c5ad5fab3 https://conda.anaconda.org/conda-forge/linux-64/py-xgboost-1.7.6-cuda118_py311h0be3a32_6.conda#e9989e03af742084940a11c7c3c395a5 -https://conda.anaconda.org/conda-forge/noarch/pylint-celery-0.3-py_1.tar.bz2#e29456a611a62d3f26105a2f9c68f759 -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/noarch/r-abind-1.4_5-r41hc72bb7e_1004.tar.bz2#831186670e5786df30f8ddeb5a623c5a https://conda.anaconda.org/conda-forge/linux-64/r-backports-1.4.1-r41h06615bd_1.tar.bz2#9a00c3283f8fb4bce68deffe08fbe09d https://conda.anaconda.org/conda-forge/noarch/r-bigmemory.sri-0.1.6-r41hc72bb7e_0.tar.bz2#926471a5be30d287a25f2d10446d6066 @@ -559,14 +559,12 @@ https://conda.anaconda.org/conda-forge/noarch/r-xmlparsedata-1.0.5-r41hc72bb7e_1 https://conda.anaconda.org/conda-forge/linux-64/r-yaml-2.3.7-r41h133d619_0.conda#4af88071a607237aa73a3cbd51788a39 https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.22.0-py311h320fe9a_2.conda#e94b7f09b52628b89e66cdbd8c3029dd https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.0-pyhd8ed1ab_0.conda#082666331726b2438986cfe33ae9a8ee -https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.0-py311h1f0f07a_2.conda#8f1e772e5430ce48229740ec00a90b61 https://conda.anaconda.org/conda-forge/linux-64/cdo-2.2.0-he026af2_4.conda#6c00b0a21b3de8a149eee137e83465d3 https://conda.anaconda.org/conda-forge/linux-64/imagemagick-7.1.1_15-pl5321hf48ede7_0.conda#53c9f7169b61e615d5f41c8d70a72c00 https://conda.anaconda.org/conda-forge/noarch/iris-3.7.0-pyha770c72_0.conda#dccc1f660bf455c239adaabf56b91dc9 https://conda.anaconda.org/conda-forge/noarch/lime-0.2.0.1-pyhd8ed1ab_1.tar.bz2#789ce01416721a5533fb74aa4361fd13 https://conda.anaconda.org/conda-forge/noarch/mapgenerator-1.0.7-pyhd8ed1ab_0.conda#d18db96ef2a920b0ecefe30282b0aecf -https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.11.0-pyhd8ed1ab_0.conda#d59e0cb1ca993f8f910cfdf393232acf -https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.3-pyhd8ed1ab_0.conda#f551d4d859a1d70c6abff8310a655481 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.12.0-pyhd8ed1ab_0.conda#4d67c68fd0d130091ada039bc2d81b33 https://conda.anaconda.org/conda-forge/linux-64/psy-simple-1.4.1-py311h38be061_2.tar.bz2#4c9101d329f6bc09c2617a80e3eb9c89 https://conda.anaconda.org/conda-forge/noarch/py-cordex-0.6.6-pyhd8ed1ab_0.conda#255f9eac03143526c8aed41d1d091c63 https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.1-py311h39c9aba_7_cpu.conda#d513ab8d10ec5f3ee45b419c836195ec @@ -600,11 +598,11 @@ https://conda.anaconda.org/conda-forge/linux-64/r-zoo-1.8_12-r41h133d619_0.conda https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.0-hd8ed1ab_0.conda#ebd31a95a7008b7e164dad9dbbb5bb5a https://conda.anaconda.org/conda-forge/noarch/xesmf-0.8.2-pyhd8ed1ab_0.conda#8e765a0eca0ce1cfa889cd9af82a23a8 https://conda.anaconda.org/conda-forge/linux-64/xgboost-1.7.6-cuda118_py311h0be3a32_6.conda#f061993f8ed8ca90d2bb6a547a47109f -https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.11.0-pyhd8ed1ab_0.conda#51bd005efab7e5c5c2af2570327bd213 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.12.0-pyhd8ed1ab_0.conda#460d7cac50322a39b61a833885a6a8d5 https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2#aa9b3ad140f6c0668c646f32e20ccf82 https://conda.anaconda.org/conda-forge/noarch/psy-maps-1.4.2-pyhd8ed1ab_0.tar.bz2#3ed13103dfd46f71dc870d188bd0b276 https://conda.anaconda.org/conda-forge/linux-64/psy-reg-1.4.0-py311h38be061_3.conda#6f7871722c07922028043144e8873b37 -https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.5-pyhd8ed1ab_0.conda#a172245c7fdb6696f2ab357501e6d13e +https://conda.anaconda.org/conda-forge/noarch/pyarrow-hotfix-0.6-pyhd8ed1ab_0.conda#ccc06e6ef2064ae129fab3286299abda https://conda.anaconda.org/conda-forge/noarch/python-cdo-1.6.0-pyhd8ed1ab_0.conda#3fd1a0b063c1fbbe4b7bd5a5a7601e84 https://conda.anaconda.org/conda-forge/linux-64/r-akima-0.6_2.3-r41h92ddd45_0.tar.bz2#bac0b7627ef744c98f4bc48885f52e72 https://conda.anaconda.org/conda-forge/noarch/r-callr-3.7.3-r41hc72bb7e_0.tar.bz2#af0891cc9b87e2954c9a3c66f144992d @@ -623,8 +621,8 @@ https://conda.anaconda.org/conda-forge/noarch/r-scales-1.2.1-r41hc72bb7e_1.tar.b https://conda.anaconda.org/conda-forge/linux-64/r-specsverification-0.5_3-r41ha503ecb_3.conda#2bc51f0d44b98092ba57cf2f8671b490 https://conda.anaconda.org/conda-forge/linux-64/r-splancs-2.01_43-r41h8da6f51_1.tar.bz2#3a6aad0706541141d10e3b514467a080 https://conda.anaconda.org/conda-forge/linux-64/r-vctrs-0.6.2-r41ha503ecb_0.conda#1f7610a1863648cab254a9f85bd29dcd -https://conda.anaconda.org/conda-forge/noarch/dask-2023.11.0-pyhd8ed1ab_0.conda#b77d7b91f78b3c50cceb19eb1611a6cf -https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.11.0-pyhd8ed1ab_0.conda#e492b36cbea1c83d1663fa73a8abff9b +https://conda.anaconda.org/conda-forge/noarch/dask-2023.12.0-pyhd8ed1ab_0.conda#5cfc00e93b71fba459bede86419d0f01 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.12.0-pyhd8ed1ab_0.conda#364e28ab12477494e72839aaa588073d https://conda.anaconda.org/conda-forge/noarch/r-cyclocomp-1.1.0-r41hc72bb7e_1005.tar.bz2#800e1da5bf774be48934b8865dd78d33 https://conda.anaconda.org/conda-forge/noarch/r-gridextra-2.3-r41hc72bb7e_1004.tar.bz2#71ebed7e976df735ff3443bb88bd154f https://conda.anaconda.org/conda-forge/noarch/r-httr-1.4.6-r41hc72bb7e_0.conda#53dbb769c96782db54bf2d414fc9b239 @@ -652,7 +650,7 @@ https://conda.anaconda.org/conda-forge/noarch/r-lintr-3.0.2-r41hc72bb7e_0.tar.bz https://conda.anaconda.org/conda-forge/noarch/r-s2dverification-2.10.3-r41hc72bb7e_1.tar.bz2#2253f130c8dab435824d6ddb10a41c73 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.3-pyhd8ed1ab_1.conda#fbe2993dd48f14724b90bf12e92cc164 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.4-pyhd8ed1ab_0.conda#c79b8443908032263ffb40ee6215e9e4 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 diff --git a/doc/sphinx/source/api/esmvaltool.diag_scripts.monitor.rst b/doc/sphinx/source/api/esmvaltool.diag_scripts.monitor.rst index bb43997c43..3b1e3e6548 100644 --- a/doc/sphinx/source/api/esmvaltool.diag_scripts.monitor.rst +++ b/doc/sphinx/source/api/esmvaltool.diag_scripts.monitor.rst @@ -11,6 +11,7 @@ Examples -------- * :ref:`recipe_monitor` +* :ref:`recipe_model_evaluation` Diagnostic scripts diff --git a/doc/sphinx/source/community/code_documentation.rst b/doc/sphinx/source/community/code_documentation.rst index 82f8c3a8f7..1c211daf39 100644 --- a/doc/sphinx/source/community/code_documentation.rst +++ b/doc/sphinx/source/community/code_documentation.rst @@ -442,7 +442,10 @@ name to the list of authors in ``CITATION.cff`` and generate the entry for the :: pip install cffconvert - cffconvert --format zenodo --outfile .zenodo.json + cffconvert --infile CITATION.cff --format zenodo --outfile .zenodo.json + +Presently, this method unfortunately discards entries `communities` +and `grants` from that file; please restore them manually. Note that authors of recipes and/or diagnostics also need to be added to the file `esmvaltool/config-references.yml `__, diff --git a/doc/sphinx/source/faq.rst b/doc/sphinx/source/faq.rst index 15d69192ca..10c72bd2cb 100644 --- a/doc/sphinx/source/faq.rst +++ b/doc/sphinx/source/faq.rst @@ -113,9 +113,15 @@ a symbolic link to it so it gets picked up at every re-run iteration: Can ESMValTool plot arbitrary model output? =========================================== -Recipe :ref:`recipe_monitor` allows for the plotting of any preprocessed model. -The plotting parameters are set through a yaml configuration file, and the -type of plots to be generated are determined in the recipe. +:ref:`recipe_model_evaluation` provides a set of recipes that can be used for a +basic climate model evaluation with observational data. +This is especially useful to get an overview of the general performance of a +simulation. + +Furthermore, recipe :ref:`recipe_monitor` allows for the plotting of any +preprocessed model. +The plotting parameters are set through a yaml configuration file, and the type +of plots to be generated are determined in the recipe. Moreover, recipe :ref:`recipes_psyplot_diag` and the corresponding diagnostic :ref:`psyplot_diag.py ` provide a diff --git a/doc/sphinx/source/input.rst b/doc/sphinx/source/input.rst index 5606bd2113..23a7f9ee16 100644 --- a/doc/sphinx/source/input.rst +++ b/doc/sphinx/source/input.rst @@ -112,6 +112,13 @@ ESMValTool currently supports two ways to perform this reformatting (aka checks and fixes'). Details on this second method are given at the :ref:`end of this chapter `. +A collection of readily CMORized OBS and OBS6 datasets can be accessed directly on CEDA/JASMIN and DKRZ. At CEDA/JASMIN +OBS and OBS6 data is stored in the `esmeval` Group Workspace (GWS), and to be granted read (and execute) permissions to the +GWS, one must apply at https://accounts.jasmin.ac.uk/services/group_workspaces/esmeval/ ; after permission has been granted, the user +is encouraged to use the data locally, and not move it elsewhere, to minimize both data transfers and +stale disk usage; to note that Tier 3 data is subject to data protection restrictions; for further inquiries, +the GWS is adminstered by [Valeriu Predoi](mailto:valeriu.predoi@ncas.ac.uk). + Using a CMORizer script ----------------------- @@ -397,7 +404,7 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NOAAGlobalTemp | tasa (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| NSIDC-0116-[nh|sh] | usi, vsi (day) | 3 | Python | +| NSIDC-0116-[nh|sh] [#note4]_ | usi, vsi (day) | 3 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | OceanSODA-ETHZ | areacello (Ofx), co3os, dissicos, fgco2, phos, spco2, talkos (Omon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ @@ -437,6 +444,10 @@ A list of the datasets for which a CMORizers is available is provided in the fol can be found in the corresponding section of `recipe_check_obs.yml `__. +.. [#note4] The cmoriser requires PROJ>=9.3. Previous version of PROJ will return an error: + ``Internal Proj Error: proj_create: unhandled axis direction: UNKNOWN)`` + You can check the version of PROJ in your conda environment by running: + ``conda list PROJ``. .. _inputdata_native_datasets: diff --git a/doc/sphinx/source/recipes/figures/model_evaluation/annual_cycle_clt_southerocean_Amon.jpg b/doc/sphinx/source/recipes/figures/model_evaluation/annual_cycle_clt_southerocean_Amon.jpg new file mode 100644 index 0000000000..0e1e8a4531 Binary files /dev/null and b/doc/sphinx/source/recipes/figures/model_evaluation/annual_cycle_clt_southerocean_Amon.jpg differ diff --git a/doc/sphinx/source/recipes/figures/model_evaluation/map_swcre_MPI-ESM1-2-HR_Amon.jpg b/doc/sphinx/source/recipes/figures/model_evaluation/map_swcre_MPI-ESM1-2-HR_Amon.jpg new file mode 100644 index 0000000000..f6abf01516 Binary files /dev/null and b/doc/sphinx/source/recipes/figures/model_evaluation/map_swcre_MPI-ESM1-2-HR_Amon.jpg differ diff --git a/doc/sphinx/source/recipes/figures/model_evaluation/map_tas_MPI-ESM1-2-HR_Amon.jpg b/doc/sphinx/source/recipes/figures/model_evaluation/map_tas_MPI-ESM1-2-HR_Amon.jpg new file mode 100644 index 0000000000..50b5ebbd20 Binary files /dev/null and b/doc/sphinx/source/recipes/figures/model_evaluation/map_tas_MPI-ESM1-2-HR_Amon.jpg differ diff --git a/doc/sphinx/source/recipes/figures/model_evaluation/timeseries_rtnt_ambiguous_dataset_Amon.jpg b/doc/sphinx/source/recipes/figures/model_evaluation/timeseries_rtnt_ambiguous_dataset_Amon.jpg new file mode 100644 index 0000000000..2b65fe97e7 Binary files /dev/null and b/doc/sphinx/source/recipes/figures/model_evaluation/timeseries_rtnt_ambiguous_dataset_Amon.jpg differ diff --git a/doc/sphinx/source/recipes/figures/model_evaluation/variable_vs_lat_pr_Amon.jpg b/doc/sphinx/source/recipes/figures/model_evaluation/variable_vs_lat_pr_Amon.jpg new file mode 100644 index 0000000000..4e252d7904 Binary files /dev/null and b/doc/sphinx/source/recipes/figures/model_evaluation/variable_vs_lat_pr_Amon.jpg differ diff --git a/doc/sphinx/source/recipes/index.rst b/doc/sphinx/source/recipes/index.rst index c8e6b4a320..edcc48977a 100644 --- a/doc/sphinx/source/recipes/index.rst +++ b/doc/sphinx/source/recipes/index.rst @@ -21,6 +21,7 @@ large variety of input data. .. toctree:: :maxdepth: 1 + recipe_model_evaluation recipe_monitor recipe_psyplot recipe_seaborn diff --git a/doc/sphinx/source/recipes/recipe_model_evaluation.rst b/doc/sphinx/source/recipes/recipe_model_evaluation.rst new file mode 100644 index 0000000000..9e199815e0 --- /dev/null +++ b/doc/sphinx/source/recipes/recipe_model_evaluation.rst @@ -0,0 +1,98 @@ +.. _recipe_model_evaluation: + +General model evaluation +======================== + +Overview +-------- + +These recipes and diagnostics provide a basic climate model evaluation with +observational data. +This is especially useful to get an overview of the performance of a +simulation. +The diagnostics used here allow plotting arbitrary preprocessor output, i.e., +arbitrary variables from arbitrary datasets. + + +Available recipes and diagnostics +--------------------------------- + +Recipes are stored in `recipes/model_evaluation` + +* recipe_model_evaluation_basics.yml +* recipe_model_evaluation_clouds_clim.yml +* recipe_model_evaluation_clouds_cycles.yml +* recipe_model_evaluation_precip_zonal.yml + +Diagnostics are stored in `diag_scripts/monitor/` + +* :ref:`multi_datasets.py + `: + Monitoring diagnostic to show multiple datasets in one plot (incl. biases). + + +User settings +------------- + +It is recommended to use a vector graphic file type (e.g., SVG) for the output +format when running this recipe, i.e., run the recipe with the command line +option ``--output_file_type=svg`` or use ``output_file_type: svg`` in your +:ref:`esmvalcore:user configuration file`. +Note that map and profile plots are rasterized by default. +Use ``rasterize: false`` in the recipe to disable +this. + + +Recipe settings +~~~~~~~~~~~~~~~ + +A list of all possible configuration options that can be specified in the +recipe is given for each diagnostic individually (see links given for the +available diagnostics in the previous section). + + +Variables +--------- + +Any, but the variables' number of dimensions should match the ones expected by +each diagnostic (see links given for the available diagnostics in the previous +section). + + +Example plots +------------- + +.. _fig_1: +.. figure:: /recipes/figures/model_evaluation/map_tas_MPI-ESM1-2-HR_Amon.jpg + :align: center + :width: 14cm + +Global climatology of 2m near-surface air temperature. + +.. _fig_2: +.. figure:: /recipes/figures/model_evaluation/map_swcre_MPI-ESM1-2-HR_Amon.jpg + :align: center + :width: 14cm + +Global climatology of the shortwave cloud radiative effect (SWCRE). + +.. _fig_3: +.. figure:: /recipes/figures/model_evaluation/timeseries_rtnt_ambiguous_dataset_Amon.jpg + :align: center + :width: 14cm + +Time series of the global mean top-of-the-atmosphere net radiative flux. + +.. _fig_4: +.. figure:: /recipes/figures/model_evaluation/variable_vs_lat_pr_Amon.jpg + :align: center + :width: 14cm + +Zonal mean precipitation. + +.. _fig_5: +.. figure:: /recipes/figures/model_evaluation/annual_cycle_clt_southerocean_Amon.jpg + :align: center + :width: 14cm + +Annual cycle of Southern Ocean total cloud cover. diff --git a/doc/sphinx/source/recipes/recipe_monitor.rst b/doc/sphinx/source/recipes/recipe_monitor.rst index 9bdfd5d40b..ee3b9b44fa 100644 --- a/doc/sphinx/source/recipes/recipe_monitor.rst +++ b/doc/sphinx/source/recipes/recipe_monitor.rst @@ -18,19 +18,18 @@ Available recipes and diagnostics Recipes are stored in `recipes/monitor` - * recipe_monitor.yml - * recipe_monitor_with_refs.yml +* recipe_monitor.yml +* recipe_monitor_with_refs.yml Diagnostics are stored in `diag_scripts/monitor/` - * :ref:`monitor.py `: - Monitoring diagnostic to plot arbitrary preprocessor output. - * :ref:`compute_eofs.py `: - Monitoring diagnostic to plot EOF maps and associated PC timeseries. - * :ref:`multi_datasets.py - `: - Monitoring diagnostic to show multiple datasets in one plot (incl. - biases). +* :ref:`monitor.py `: + Monitoring diagnostic to plot arbitrary preprocessor output. +* :ref:`compute_eofs.py `: + Monitoring diagnostic to plot EOF maps and associated PC timeseries. +* :ref:`multi_datasets.py + `: + Monitoring diagnostic to show multiple datasets in one plot (incl. biases). User settings diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_calc_zonal_cont_diff_mmm_stippandhatch.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_calc_zonal_cont_diff_mmm_stippandhatch.ncl index 1952cff668..dbe89529b6 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_calc_zonal_cont_diff_mmm_stippandhatch.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_calc_zonal_cont_diff_mmm_stippandhatch.ncl @@ -78,13 +78,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_map_diff_mmm_stipp.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_map_diff_mmm_stipp.ncl index 720840ff12..77f6441f59 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_map_diff_mmm_stipp.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_map_diff_mmm_stipp.ncl @@ -51,13 +51,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_ts_line_mean_spread.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_ts_line_mean_spread.ncl index 838888ae74..20a5e277ea 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_ts_line_mean_spread.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_ts_line_mean_spread.ncl @@ -48,13 +48,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -251,11 +244,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -279,7 +271,7 @@ begin authors = (/"lorenz_ruth"/) references = (/"collins13ipcc"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_zonal_diff_mmm_stipp.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_zonal_diff_mmm_stipp.ncl index e58ae142c7..261082f79f 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_zonal_diff_mmm_stipp.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_plot_zonal_diff_mmm_stipp.ncl @@ -48,12 +48,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_snw_area_change_fig12-32.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_snw_area_change_fig12-32.ncl index 51c0dcc787..4834f5ccf0 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_snw_area_change_fig12-32.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_snw_area_change_fig12-32.ncl @@ -66,13 +66,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/ipcc_ar5/ch12_ts_line_mean_spread.ncl b/esmvaltool/diag_scripts/ipcc_ar5/ch12_ts_line_mean_spread.ncl index c47902d8bb..e488d3a07f 100644 --- a/esmvaltool/diag_scripts/ipcc_ar5/ch12_ts_line_mean_spread.ncl +++ b/esmvaltool/diag_scripts/ipcc_ar5/ch12_ts_line_mean_spread.ncl @@ -47,13 +47,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/monitor/monitor_base.py b/esmvaltool/diag_scripts/monitor/monitor_base.py index 135027f374..21dc159619 100644 --- a/esmvaltool/diag_scripts/monitor/monitor_base.py +++ b/esmvaltool/diag_scripts/monitor/monitor_base.py @@ -97,7 +97,9 @@ def __init__(self, config): ) plot_folder = plot_folder.replace('{plot_dir}', self.cfg[names.PLOT_DIR]) - self.plot_folder = os.path.abspath(plot_folder) + self.plot_folder = os.path.abspath( + os.path.expandvars(os.path.expanduser(plot_folder)) + ) self.plot_filename = config.get( 'plot_filename', '{plot_type}_{real_name}_{dataset}_{mip}_{exp}_{ensemble}') @@ -293,11 +295,7 @@ def get_plot_folder(self, var_info): 'real_name': self._real_name(var_info['variable_group']), **var_info } - folder = os.path.expandvars( - os.path.expanduser( - list(_replace_tags(self.plot_folder, info))[0] - ) - ) + folder = list(_replace_tags(self.plot_folder, info))[0] if self.plot_folder.startswith('/'): folder = '/' + folder if not os.path.isdir(folder): diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_table_changes.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_table_changes.ncl index a2fc676d9b..0064e2da01 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_table_changes.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_table_changes.ncl @@ -53,13 +53,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_table_warming_level.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_table_warming_level.ncl index 01fb0b5c41..942a725275 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_table_warming_level.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_table_warming_level.ncl @@ -55,13 +55,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_across_realization_stddev_runave.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_across_realization_stddev_runave.ncl index 4e772935e7..5cf278a046 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_across_realization_stddev_runave.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_across_realization_stddev_runave.ncl @@ -56,13 +56,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_runave.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_runave.ncl index e3c92d5458..ceda4512fb 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_runave.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_runave.ncl @@ -55,13 +55,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp4.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp4.ncl index a64e5204ef..74baee5d88 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp4.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp4.ncl @@ -54,13 +54,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp5.ncl b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp5.ncl index 938158d37d..0ec3479508 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp5.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/calc_timeseries_mean_spread_ssp5.ncl @@ -54,13 +54,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_pattern.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_pattern.ncl index 109975882b..cd5aeb93c6 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_pattern.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_pattern.ncl @@ -58,13 +58,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_table_changes.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_table_changes.ncl index 115d04b130..60b1e731be 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_table_changes.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_table_changes.ncl @@ -57,13 +57,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -159,13 +152,12 @@ begin gsn_table(wks, ncr4, x4, y4, text4, res4) draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; Collect meta-data netcdf_dir = diag_script_info@input_files(1) datapath = netcdf_dir + "/" + variable_info[0]@diagnostic + ".nc" nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type caption = "Table of global annual mean" + \ variable_info[0]@long_name + " anomalies (relative to " + \ diag_script_info@begin_ref_year + "-" + diag_script_info@end_ref_year + \ @@ -177,7 +169,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") end diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_table_warming_level.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_table_warming_level.ncl index 2d7da64ac5..4bd691b6ea 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_table_warming_level.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_table_warming_level.ncl @@ -55,13 +55,6 @@ begin end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -160,13 +153,12 @@ begin gsn_table(wks, ncr4, x4, y4, text4, res4) draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; Collect meta-data netcdf_dir = diag_script_info@input_files(1) datapath = netcdf_dir + "/" + variable_info[0]@diagnostic + ".nc" nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type caption = text4 statistics = ("mean") domains = ("global") @@ -174,7 +166,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_across_realization_stddev_runave.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_across_realization_stddev_runave.ncl index 04f3f90dab..c562115c2c 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_across_realization_stddev_runave.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_across_realization_stddev_runave.ncl @@ -57,13 +57,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -108,9 +101,9 @@ begin ; *********** PLOTTING ************ ; Create plot variables outfile = var0 + "_ts_line_" + syears(0) + "_" + eyears(nperiods - 1) - wks_type = file_type + wks_type = 0 wks_type@wkPaperSize = "A4" - wks = gsn_open_wks(wks_type, plot_dir + outfile) + wks = get_wks(wks_type, DIAG_SCRIPT, outfile) if(isatt(diag_script_info, "colormap")) then colormap = RGBtoCmap(diag_script_info@colormap) else @@ -229,18 +222,17 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type statistics = ("stddev") domains = ("global") plot_types = ("times") authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread.ncl index 8caaf9c62f..780de8a235 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread.ncl @@ -55,13 +55,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -265,11 +258,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -282,7 +274,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_3scenarios.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_3scenarios.ncl index c95da587a4..6311d01782 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_3scenarios.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_3scenarios.ncl @@ -55,13 +55,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -261,11 +254,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -278,7 +270,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_constrained_projections.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_constrained_projections.ncl index 938804358a..0254d53e03 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_constrained_projections.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_constrained_projections.ncl @@ -67,13 +67,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -334,11 +327,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -351,7 +343,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_rightaxis_5scen.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_rightaxis_5scen.ncl index 475f9cbf56..72990171bc 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_rightaxis_5scen.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_rightaxis_5scen.ncl @@ -58,13 +58,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -279,11 +272,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -296,7 +288,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp4.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp4.ncl index 4162ec01c4..be50e29bb2 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp4.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp4.ncl @@ -55,13 +55,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -268,11 +261,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -285,7 +277,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp5.ncl b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp5.ncl index edbf881e49..9570b09ae4 100644 --- a/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp5.ncl +++ b/esmvaltool/diag_scripts/tebaldi21esd/plot_timeseries_mean_spread_ssp5.ncl @@ -55,13 +55,6 @@ end begin - ; Get environment variables - if (isatt(diag_script_info, "plot_type")) then - file_type = diag_script_info@plot_type - else - file_type = "pdf" - end if - ; Output netcdf directory work_dir = config_user_info@work_dir system("mkdir -p " + work_dir) @@ -253,11 +246,10 @@ begin draw(wks) frame(wks) - log_info(" Wrote " + plot_dir + "/" + outfile + "." + file_type) + log_info(" Wrote " + wks@fullname) ; collect meta-data nc_file = datapath - plot_file = plot_dir + "/" + outfile + "." + file_type if (isatt(diag_script_info, "spread")) then spread_str = diag_script_info@spread @@ -270,7 +262,7 @@ begin authors = (/"debeire_kevin"/) references = (/"tebaldi21esd"/) infiles = metadata_att_as_array(info_items, "filename") - log_provenance(nc_file, plot_file, caption, statistics, domains, \ + log_provenance(nc_file, wks@fullname, caption, statistics, domains, \ plot_types, authors, references, infiles) leave_msg(DIAG_SCRIPT, "") diff --git a/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_basics.yml b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_basics.yml new file mode 100644 index 0000000000..06f8ad3b12 --- /dev/null +++ b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_basics.yml @@ -0,0 +1,260 @@ +# ESMValTool +--- +documentation: + title: Basic Model Evaluation. + description: > + Show plots of several variables that can be used for basic model + evaluations ("sanity checks"). + authors: + - hassler_birgit + - lauer_axel + - bonnet_pauline + - schlund_manuel + maintainer: + - hassler_birgit + + +# Note: The following models are just examples +datasets: + - {project: CMIP6, dataset: MPI-ESM1-2-HR, exp: historical, ensemble: r1i1p1f1, grid: gn} + - {project: CMIP6, dataset: MPI-ESM1-2-LR, exp: historical, ensemble: r1i1p1f1, grid: gn} + +# Note: for some observational datasets, we use preset time ranges due to +# their limited temporal availability +timerange_for_models: &time_period + timerange: '2003/2007' # can be specified, this is just an example + + +preprocessors: + + timeseries_regular: &pp_timeseries_regular + area_statistics: + operator: mean + + timeseries_regular_ann: + <<: *pp_timeseries_regular + annual_statistics: + operator: mean + + timeseries_regular_pr: + <<: *pp_timeseries_regular + convert_units: + units: mm day-1 + + full_climatology: &pp_full_climatology + climate_statistics: + period: full + regrid: + target_grid: 2x2 + scheme: + reference: esmf_regrid.schemes:ESMFAreaWeighted + + full_climatology_pr: + <<: *pp_full_climatology + convert_units: + units: mm day-1 + + zonal_mean: + custom_order: true # makes preprocessor much faster since input for extract_levels is smaller + climate_statistics: + period: full + extract_levels: + levels: {cmor_table: CMIP6, coordinate: plev19} + scheme: linear + coordinate: air_pressure + regrid: + scheme: + reference: esmf_regrid.schemes:ESMFAreaWeighted + target_grid: 2x2 + zonal_statistics: + operator: mean + + +diagnostics: + + # Climatologies - maps (full climatology) + + plot_maps_with_references_tas: + description: Plot climatology maps including reference datasets for tas. + variables: + tas: + <<: *time_period + mip: Amon + preprocessor: full_climatology + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: &plot_multi_dataset_default + plot_folder: '{plot_dir}' + plot_filename: '{plot_type}_{real_name}_{dataset}_{mip}' + script: monitor/multi_datasets.py + plots: + map: + common_cbar: true + + plot_maps_with_references_pr: + description: Plot climatology maps including reference datasets for pr. + variables: + pr: + <<: *time_period + mip: Amon + preprocessor: full_climatology_pr + additional_datasets: + - {project: OBS, dataset: GPCP-SG, type: atmos, version: 2.3, tier: 2, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + script: monitor/multi_datasets.py + plots: + map: + common_cbar: true + plot_kwargs: + default: + cmap: Blues + + # Climatologies (zonal means) + + plot_zonal_mean_profiles_with_references_ta: + description: Plot 2D zonal mean profiles including reference datasets. + variables: + ta: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + script: monitor/multi_datasets.py + plots: + zonal_mean_profile: + common_cbar: true + + plot_zonal_mean_profiles_with_references_ua: + description: Plot 2D zonal mean profiles including reference datasets. + variables: + ua: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + script: monitor/multi_datasets.py + plots: + zonal_mean_profile: + common_cbar: true + plot_kwargs: + default: + cmap: Blues + + plot_zonal_mean_profiles_with_references_hus: + description: Plot 2D zonal mean profiles including reference datasets. + variables: + hus: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + script: monitor/multi_datasets.py + plots: + zonal_mean_profile: + common_cbar: true + plot_kwargs: + default: + cmap: Blues + + # Time series of global averages (monthly) + + plot_multiple_timeseries: + description: Plot time series including reference datasets. + variables: + tas: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + clt: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular + additional_datasets: + - {project: OBS, dataset: ESACCI-CLOUD, type: sat, version: AVHRR-AMPM-fv3.0, tier: 2, reference_for_monitor_diags: true} + rsut: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular + additional_datasets: + - {project: OBS, dataset: CERES-EBAF, type: sat, version: Ed4.1, tier: 2, reference_for_monitor_diags: true} + rlut: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular + additional_datasets: + - {project: OBS, dataset: CERES-EBAF, type: sat, version: Ed4.1, tier: 2, reference_for_monitor_diags: true} + rtnt: + derive: true + force_derivation: true + mip: Amon + preprocessor: timeseries_regular_ann + timerange: '1995/2014' + prw: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular + # timerange MUST NOT start before 2003 since the observations are not available before 2003 + additional_datasets: + - {project: OBS, dataset: ESACCI-WATERVAPOUR, type: sat, version: CDR2-L3S-05deg_fv3.1, tier: 3, timerange: '2003/2007', reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + group_variables_by: variable_group + script: monitor/multi_datasets.py + plots: + timeseries: + annual_mean_kwargs: false + plot_kwargs: + MPI-ESM1-2-HR: + color: C0 + MPI-ESM1-2-LR: + color: C1 + ERA5: + color: black + ESACCI-CLOUD: + color: black + CERES-EBAF: + color: black + ESACCI-WATERVAPOUR: + color: black + + plot_multiple_timeseries_pr: + description: Plot time series including reference datasets. + variables: + pr: + <<: *time_period + mip: Amon + preprocessor: timeseries_regular_pr + additional_datasets: + - {project: OBS, dataset: GPCP-SG, type: atmos, version: 2.3, tier: 2, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + script: monitor/multi_datasets.py + plots: + timeseries: + annual_mean_kwargs: false + plot_kwargs: + MPI-ESM1-2-HR: + color: C0 + MPI-ESM1-2-LR: + color: C1 + GPCP-SG: + color: black diff --git a/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_clim.yml b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_clim.yml new file mode 100644 index 0000000000..fd2d08781f --- /dev/null +++ b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_clim.yml @@ -0,0 +1,226 @@ +# ESMValTool +--- +documentation: + title: Model evaluation with focus on clouds. + description: > + Plot climatologies several cloud-related variables of multi-year + simulations. + authors: + - bonnet_pauline + - lauer_axel + - hassler_birgit + - schlund_manuel + maintainer: + - lauer_axel + + +# Note: the following models are just examples +datasets: + - {project: CMIP6, dataset: MPI-ESM1-2-HR, exp: historical, ensemble: r1i1p1f1, grid: gn} + - {project: CMIP6, dataset: MPI-ESM1-2-LR, exp: historical, ensemble: r1i1p1f1, grid: gn} + +# Note: for some observational datasets, we use preset time ranges due to +# their limited temporal availability +timerange_for_models: &time_period + timerange: '2005/2014' # can be specified, this is just an example + + +preprocessors: + + full_climatology: &full_climatology_diag + climate_statistics: + period: full + regrid: + target_grid: 2x2 + scheme: + reference: esmf_regrid.schemes:ESMFAreaWeighted + + full_climatology_pr: + <<: *full_climatology_diag + convert_units: + units: mm day-1 + + zonal_mean: + custom_order: true # makes preprocessor much faster since input for extract_levels is smaller + climate_statistics: + period: full + extract_levels: + levels: {cmor_table: CMIP6, coordinate: plev19} + scheme: linear + coordinate: air_pressure + regrid: + scheme: + reference: esmf_regrid.schemes:ESMFAreaWeighted + target_grid: 2x2 + zonal_statistics: + operator: mean + + +diagnostics: + + plot_clt_maps: + description: Plot clt climatology maps including reference datasets. + variables: + clt: + <<: *time_period + mip: Amon + preprocessor: full_climatology + additional_datasets: + - {dataset: ESACCI-CLOUD, project: OBS, type: sat, version: AVHRR-AMPM-fv3.0, tier: 2, reference_for_monitor_diags: true} + scripts: + plot: &plot_multi_dataset_default + script: monitor/multi_datasets.py + plot_folder: '{plot_dir}' + plot_filename: '{plot_type}_{real_name}_{dataset}_{mip}' + plots: + map: + common_cbar: true + + plot_lwcre_maps: + description: Plot lwcre climatology maps including reference datasets. + variables: + lwcre: + <<: *time_period + mip: Amon + preprocessor: full_climatology + derive: true + additional_datasets: + - {dataset: CERES-EBAF, project: obs4MIPs, level: L3B, timerange: '2001/2010', tier: 1, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + + plot_swcre_maps: + description: Plot swcre climatology maps including reference datasets. + variables: + swcre: + <<: *time_period + mip: Amon + preprocessor: full_climatology + derive: true + additional_datasets: + - {dataset: CERES-EBAF, project: obs4MIPs, level: L3B, tier: 1, timerange: '2001/2010', reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + + plot_lwp_maps: + description: Plot lwp climatology maps including reference datasets. + variables: + lwp: + <<: *time_period + mip: Amon + preprocessor: full_climatology + derive: true + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + fontsize: 6 + + plot_clivi_maps: + description: Plot clivi climatology maps including reference datasets. + variables: + clivi: + <<: *time_period + mip: Amon + preprocessor: full_climatology + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + + plot_prw_maps: + description: Plot prw climatology maps including reference datasets. + variables: + prw: + <<: *time_period + mip: Amon + preprocessor: full_climatology + additional_datasets: + - {dataset: ESACCI-WATERVAPOUR, project: OBS, type: sat, version: CDR2-L3S-05deg_fv3.1, tier: 3, timerange: '2003/2017', reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + + plot_pr_maps: + description: Plot prw climatology maps including reference datasets. + variables: + pr: + <<: *time_period + mip: Amon + preprocessor: full_climatology_pr + additional_datasets: + - {dataset: GPCP-SG, project: OBS, type: atmos, version: 2.3, tier: 2, + timerange: '2003/2017', reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + map: + common_cbar: true + + plot_clw_profiles: + description: Plot clw vertical profiles including reference datasets. + variables: + clw: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {dataset: CLOUDSAT-L2, project: OBS, type: sat, version: P1-R05-gridbox-average-noprecip, timerange: '2006/2017', tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + profile: + common_cbar: true + + plot_cli_profiles: + description: Plot cli vertical profiles including reference datasets. + variables: + cli: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {dataset: CALIPSO-ICECLOUD, project: OBS, type: sat, version: 1-00, timerange: '2007/2015', tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + profile: + common_cbar: true + + plot_cl_profiles: + description: Plot cl vertical profiles including reference datasets. + variables: + cl: + <<: *time_period + mip: Amon + preprocessor: zonal_mean + additional_datasets: + - {project: native6, dataset: ERA5, type: reanaly, version: v1, tier: 3, reference_for_monitor_diags: true} + scripts: + plot: + <<: *plot_multi_dataset_default + plots: + profile: + common_cbar: true diff --git a/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_cycles.yml b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_cycles.yml new file mode 100644 index 0000000000..ed52fd7d3c --- /dev/null +++ b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_clouds_cycles.yml @@ -0,0 +1,178 @@ +# ESMValTool +--- +documentation: + title: Model evaluation with focus on clouds. + description: > + Plot annual cycles of several cloud-related variables of multi-year simulations. + authors: + - lauer_axel + - schlund_manuel + maintainer: + - lauer_axel + + +# Note: the following models are just examples +datasets: + - {project: CMIP6, dataset: MPI-ESM1-2-HR, exp: historical, ensemble: r1i1p1f1, grid: gn} + - {project: CMIP6, dataset: MPI-ESM1-2-LR, exp: historical, ensemble: r1i1p1f1, grid: gn} + +# Note: for some observational datasets, we use preset time ranges due to +# their limited temporal availability +timerange_for_models: &time_period + timerange: '2000/2014' # can be specified, this is just an example + + +preprocessors: + + pp_global: &global_settings + area_statistics: + operator: mean + climate_statistics: + period: month + + pp_SEPacific: + <<: *global_settings + extract_region: + start_longitude: 265 + end_longitude: 275 + start_latitude: -25 + end_latitude: -5 + mask_landsea: + mask_out: land + + pp_SouthernOcean: + <<: *global_settings + extract_region: + start_longitude: 0 + end_longitude: 360 + start_latitude: -65 + end_latitude: -30 + mask_landsea: + mask_out: land + + pp_StormTracks: + <<: *global_settings + extract_region: + start_longitude: 0 + end_longitude: 360 + start_latitude: 45 + end_latitude: 60 + + +diagnostics: + + anncyc: + description: Plot annual cycles including reference datasets. + variables: + clt_global: &clt_settings + <<: *time_period + preprocessor: pp_global + short_name: clt + mip: Amon + additional_datasets: + - {dataset: ESACCI-CLOUD, project: OBS, type: sat, version: AVHRR-AMPM-fv3.0, tier: 2} + clt_tropics: + <<: *clt_settings + clt_sepacific: + <<: *clt_settings + preprocessor: pp_SEPacific + clt_southerocean: + <<: *clt_settings + preprocessor: pp_SouthernOcean + clt_stormtracks: + <<: *clt_settings + preprocessor: pp_StormTracks + clivi_global: &clivi_settings + <<: *time_period + preprocessor: pp_global + short_name: clivi + mip: Amon + additional_datasets: + - {dataset: ESACCI-CLOUD, project: OBS, type: sat, version: AVHRR-AMPM-fv3.0, tier: 2} + clivi_tropics: + <<: *clivi_settings + clivi_sepacific: + <<: *clivi_settings + preprocessor: pp_SEPacific + clivi_southerocean: + <<: *clivi_settings + preprocessor: pp_SouthernOcean + clivi_stormtracks: + <<: *clivi_settings + preprocessor: pp_StormTracks + lwp_global: &lwp_settings + <<: *time_period + preprocessor: pp_global + short_name: lwp + derive: true + mip: Amon + additional_datasets: + - {dataset: ESACCI-CLOUD, project: OBS, type: sat, version: AVHRR-AMPM-fv3.0, tier: 2} + lwp_tropics: + <<: *lwp_settings + lwp_sepacific: + <<: *lwp_settings + preprocessor: pp_SEPacific + lwp_southerocean: + <<: *lwp_settings + preprocessor: pp_SouthernOcean + lwp_stormtracks: + <<: *lwp_settings + preprocessor: pp_StormTracks + swcre_global: &swcre_settings + <<: *time_period + preprocessor: pp_global + short_name: swcre + derive: true + mip: Amon + additional_datasets: + - {dataset: CERES-EBAF, project: OBS, type: sat, version: Ed4.1, tier: 2} + swcre_tropics: + <<: *swcre_settings + swcre_sepacific: + <<: *swcre_settings + preprocessor: pp_SEPacific + swcre_southerocean: + <<: *swcre_settings + preprocessor: pp_SouthernOcean + swcre_stormtracks: + <<: *swcre_settings + preprocessor: pp_StormTracks + lwcre_global: &lwcre_settings + <<: *time_period + preprocessor: pp_global + short_name: lwcre + derive: true + mip: Amon + additional_datasets: + - {dataset: CERES-EBAF, project: OBS, type: sat, version: Ed4.1, tier: 2} + lwcre_tropics: + <<: *lwcre_settings + lwcre_sepacific: + <<: *lwcre_settings + preprocessor: pp_SEPacific + lwcre_southerocean: + <<: *lwcre_settings + preprocessor: pp_SouthernOcean + lwcre_stormtracks: + <<: *lwcre_settings + preprocessor: pp_StormTracks + scripts: + allplots: + script: monitor/multi_datasets.py + plot_folder: '{plot_dir}' + plot_filename: '{plot_type}_{real_name}_{mip}' + group_variables_by: variable_group + plots: + annual_cycle: + legend_kwargs: + loc: upper right + plot_kwargs: + MPI-ESM1-2-HR: + color: C0 + MPI-ESM1-2-LR: + color: C1 + ESACCI-CLOUD: + color: black + pyplot_kwargs: + title: '{short_name}' diff --git a/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_precip_zonal.yml b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_precip_zonal.yml new file mode 100644 index 0000000000..6bd1231046 --- /dev/null +++ b/esmvaltool/recipes/model_evaluation/recipe_model_evaluation_precip_zonal.yml @@ -0,0 +1,72 @@ +# ESMValTool +--- +documentation: + title: Model evaluation with focus on precipitation. + description: > + Plot zonal mean plots of precipitation. + authors: + - lauer_axel + - schlund_manuel + maintainer: + - lauer_axel + + +# Note: the following models are just examples +datasets: + - {project: CMIP6, dataset: MPI-ESM1-2-HR, exp: historical, ensemble: r1i1p1f1, grid: gn} + - {project: CMIP6, dataset: MPI-ESM1-2-LR, exp: historical, ensemble: r1i1p1f1, grid: gn} + +# Note: for some observational datasets, we use preset time ranges due to +# their limited temporal availability +timerange_for_models: &time_period + timerange: '2000/2014' # can be specified, this is just an example + + +preprocessors: + + pp_zonal: + regrid: + target_grid: 2x2 + scheme: + reference: esmf_regrid.schemes:ESMFAreaWeighted + zonal_statistics: + operator: mean + climate_statistics: + operator: mean + period: full + convert_units: + units: mm day-1 + + +diagnostics: + + zonal: + description: Plot annual cycles including reference datasets. + variables: + pr: + <<: *time_period + preprocessor: pp_zonal + mip: Amon + additional_datasets: + - {dataset: ERA5, project: native6, type: reanaly, version: 'v1', tier: 3} + - {dataset: GPCP-SG, project: obs4MIPs, level: L3, version: v2.3, tier: 1} + scripts: + allplots: + script: monitor/multi_datasets.py + plot_folder: '{plot_dir}' + plot_filename: '{plot_type}_{real_name}_{mip}' + group_variables_by: variable_group + plots: + variable_vs_lat: + legend_kwargs: + loc: upper right + plot_kwargs: + MPI-ESM1-2-HR: + color: C0 + MPI-ESM1-2-LR: + color: C1 + ERA5: + color: black + linestyle: dotted + GPCP-SG: + color: black diff --git a/esmvaltool/recipes/monitor/recipe_monitor_with_refs.yml b/esmvaltool/recipes/monitor/recipe_monitor_with_refs.yml index e75cc763da..681277310c 100644 --- a/esmvaltool/recipes/monitor/recipe_monitor_with_refs.yml +++ b/esmvaltool/recipes/monitor/recipe_monitor_with_refs.yml @@ -1,7 +1,7 @@ # ESMValTool --- documentation: - title: Model Monitoring + title: Example recipe for model monitoring with reference datasets. description: | Show plots that include multiple datasets that can be used to monitor (ongoing) model simulations. diff --git a/esmvaltool/recipes/recipe_landcover.yml b/esmvaltool/recipes/recipe_landcover.yml index d324c02dc9..75c892b37c 100644 --- a/esmvaltool/recipes/recipe_landcover.yml +++ b/esmvaltool/recipes/recipe_landcover.yml @@ -67,5 +67,5 @@ diagnostics: landcover: script: landcover/landcover.py comparison: variable - colorscheme: seaborn-darkgrid + colorscheme: seaborn-v0_8-darkgrid diff --git a/esmvaltool/recipes/recipe_psyplot.yml b/esmvaltool/recipes/recipe_psyplot.yml index 4a07f4c558..c34ee203f0 100644 --- a/esmvaltool/recipes/recipe_psyplot.yml +++ b/esmvaltool/recipes/recipe_psyplot.yml @@ -2,13 +2,13 @@ # recipe_psyplot.yml --- documentation: - title: > - Create arbitrary Psyplot plots. + title: Example recipe for the Psyplot diagnostic. description: > This recipes showcases the use of the Psyplot diagnostic that provides a high-level interface to Psyplot for ESMValTool recipes. For each input - dataset, an individual plot is created. + dataset, an individual plot is created. With the Psyplot diagnostic, + arbitrary Psyplot plots can be created. authors: - schlund_manuel diff --git a/esmvaltool/recipes/recipe_seaborn.yml b/esmvaltool/recipes/recipe_seaborn.yml index faf0f07085..983efae0be 100644 --- a/esmvaltool/recipes/recipe_seaborn.yml +++ b/esmvaltool/recipes/recipe_seaborn.yml @@ -2,14 +2,14 @@ # recipe_seaborn.yml --- documentation: - title: > - Create arbitrary Seaborn plots. + title: Example recipe for the Seaborn diagnostic. description: > This recipe showcases the use of the Seaborn diagnostic that provides a high-level interface to Seaborn for ESMValTool recipes. For this, the input data is arranged into a single `pandas.DataFrame`, which is then used as - input for the Seaborn function defined by the option `seaborn_func`. + input for the Seaborn function defined by the option `seaborn_func`. With + the Seaborn diagnostic, arbitrary Seaborn plots can be created. authors: - schlund_manuel diff --git a/esmvaltool/utils/recipe_filler.py b/esmvaltool/utils/recipe_filler.py index 91033a12c8..40f637c6d5 100755 --- a/esmvaltool/utils/recipe_filler.py +++ b/esmvaltool/utils/recipe_filler.py @@ -291,16 +291,31 @@ def read_config_user_file(config_file, folder_name, options=None): } +def _get_download_dir(yamlconf, cmip_era): + """Get the Download Directory from user config file.""" + if 'download_dir' in yamlconf: + return os.path.join(yamlconf['download_dir'], cmip_era) + return False + + def _get_site_rootpath(cmip_era): """Get site (drs) from config-user.yml.""" config_yml = get_args().config_file with open(config_yml, 'r') as yamf: yamlconf = yaml.safe_load(yamf) drs = yamlconf['drs'][cmip_era] - rootdir = yamlconf['rootpath'][cmip_era] + + download_dir = _get_download_dir(yamlconf, cmip_era) + rootdir = [yamlconf['rootpath'][cmip_era], ] + + if download_dir: + rootdir.append(download_dir) logger.debug("%s root directory %s", cmip_era, rootdir) if drs == 'default' and 'default' in yamlconf['rootpath']: - rootdir = yamlconf['rootpath']['default'] + rootdir = [yamlconf['rootpath']['default'], ] + if download_dir: + rootdir.append(download_dir) + logger.debug("Using drs default and " "default: %s data directory", rootdir) @@ -327,6 +342,7 @@ def _determine_basepath(cmip_era): rootpaths = _get_site_rootpath(cmip_era)[1] else: rootpaths = [_get_site_rootpath(cmip_era)[1]] + basepaths = [] for rootpath in rootpaths: if _get_input_dir(cmip_era) != os.path.sep: