diff --git a/.github/workflows/create-condalock-file.yml b/.github/workflows/create-condalock-file.yml index 9ab4443cd7..9aefad7498 100644 --- a/.github/workflows/create-condalock-file.yml +++ b/.github/workflows/create-condalock-file.yml @@ -97,7 +97,4 @@ jobs: automatedPR assignees: valeriupredoi reviewers: valeriupredoi - team-reviewers: | - owners - maintainers draft: false diff --git a/CITATION.cff b/CITATION.cff index 147e3acd17..5c253e3bb5 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -388,11 +388,11 @@ authors: orcid: "https://orcid.org/0000-0003-3780-0784" cff-version: 1.2.0 -date-released: 2023-07-06 +date-released: 2023-12-20 doi: "10.5281/zenodo.3401363" license: "Apache-2.0" message: "If you use this software, please cite it using these metadata." repository-code: "https://github.com/ESMValGroup/ESMValTool/" title: ESMValTool -version: "v2.9.0" +version: "v2.10.0" ... diff --git a/conda-linux-64.lock b/conda-linux-64.lock index b0facf9382..ecaa328e4f 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -1,11 +1,11 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 05ccb0eb21a22bcda85523e4fc91a3c5d43c69b2fc56e17f5c81159b2e906d6b +# input_hash: e484ece0f2a2f8e9f3009df8b9de1be258c70868b9df17114bb859f15f903ccf @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/_py-xgboost-mutex-2.0-gpu_0.tar.bz2#7702188077361f43a4d61e64c694f850 https://conda.anaconda.org/conda-forge/noarch/_r-mutex-1.0.1-anacondar_1.tar.bz2#19f9db5f4f1b7f5ef5f6d67207f25f38 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda#01ffc8d36f9eba0ce0b3c1955fa780ee +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.2.2-hbcca054_0.conda#2f4327a1cbe7f022401b236e915a5fef https://conda.anaconda.org/conda-forge/noarch/cuda-version-11.8-h70ddcb2_2.conda#601900ec9ff06f62f76a247148e52c04 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 @@ -13,24 +13,25 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77 https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda#6185f640c43843e5ad6fd1c5372c3f80 https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-2.6.32-he073ed8_16.conda#7ca122655873935e02c91279c5b03c8c https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.2.0-ha9c7c90_103.conda#db8cd1a871a07404d94f7dcc78c21a61 -https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.2.0-ha9c7c90_103.conda#46947f93254fdedc5ae0725b11ca3610 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda#937eaed008f6bf2191c5fe76f87755e9 +https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-13.2.0-ha9c7c90_105.conda#3bc29a967fee57e193ce51f51c598bca +https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-13.2.0-ha9c7c90_105.conda#66383205c2e1bdf013df52fa9e3e6763 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_5.conda#f6f6600d18a4047b54f803cf708b868a +https://conda.anaconda.org/conda-forge/linux-64/pandoc-3.1.11.1-ha770c72_0.conda#0e2f14aff42adf4675bcd5335d644a5f https://conda.anaconda.org/conda-forge/noarch/poppler-data-0.4.12-hd8ed1ab_0.conda#d8d7293c5b37f39b2ac32940621c6592 https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda#d786502c97404c94d7d58d258a445a65 -https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a +https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda#161081fc7cec0bfda0d86d7cb595f8d8 https://conda.anaconda.org/conda-forge/linux-64/xorg-imake-1.0.7-0.tar.bz2#23acfc5a339a6a34cc2241f64e4111be https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda#7124cbb46b13d395bdde68f2d215c989 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_5.conda#d211c42b9ce49aee3734fdc828731689 https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.12-he073ed8_16.conda#071ea8dceff4d30ac511f4a2f8437cd1 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-hf600244_0.conda#33084421a8c0af6aef1b439707f7662a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda#23fdf1fef05baeb7eadc2aed5fb0011f +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_5.conda#d4ff227c46917d3b4565302a2bbb276b 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.23.0-hd590300_0.conda#d459949bc10f64dee1595c176c2e6291 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.26.0-hd590300_0.conda#a86d90025198fd411845fc245ebc06c8 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 @@ -45,7 +46,7 @@ https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.t https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 https://conda.anaconda.org/conda-forge/linux-64/jbig-2.1-h7f98852_2003.tar.bz2#1aa0cee79792fa97b7ff4545110b60bf https://conda.anaconda.org/conda-forge/linux-64/json-c-0.16-hc379101_0.tar.bz2#0e2bca6857cb73acec30387fef7c3142 -https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-h7f98852_2.tar.bz2#8e787b08fe19986d99d034b839df2961 +https://conda.anaconda.org/conda-forge/linux-64/jxrlib-1.1-hd590300_3.conda#5aeabe88534ea4169d4c49998f293d6c https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h59595ed_0.conda#d1db1b8be7c3a8983dcbbbfe4f0765de @@ -56,60 +57,61 @@ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda 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 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_5.conda#7a6bd7a12a4bd359e2afe6c0fa1acace +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda#d66573916ffcf376178462f1b61c941e https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-hd590300_1.conda#323e90742f0f48fc22bea908735f55e6 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 https://conda.anaconda.org/conda-forge/linux-64/libopenlibm4-0.8.1-hd590300_1.conda#e6af610e01d04927a5060c95ce4e0875 -https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.2.0-h7e041cc_3.conda#c63848839569bb82a3eff11f01e5de00 +https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-13.2.0-h7e041cc_5.conda#3f686300a92604d1bdff9a29dd4a6639 https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 https://conda.anaconda.org/conda-forge/linux-64/libunwind-1.6.2-h9c3ff4c_0.tar.bz2#a730b2badd586580c5752cc73842e068 https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.1-hd590300_0.conda#82bf6f63eb15ef719b556b63feec3a77 +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda#5aa797f8787fe7a17d1b0821485b5adc https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/libzopfli-1.0.3-h9c3ff4c_0.tar.bz2#c66fe2d123249af7651ebde8984c51c2 https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/lzo-2.10-h516909a_1000.tar.bz2#bb14fcb13341b81d5eb386423b9d2bac 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.1-h59595ed_2.conda#9ba5910c34210e7ad60736d172bbcd4c +https://conda.anaconda.org/conda-forge/linux-64/mbedtls-3.5.1-h59595ed_0.conda#a7b444a6e008b804b35521895e3440e2 +https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-h59595ed_1007.conda#40ccb8318df2500f83bd868dd8fcd201 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 -https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.4-hd590300_0.conda#412ba6938c3e2abaca8b1129ea82e238 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.5-hd590300_0.conda#a6057a9b8f0bba4ab6ee3347a9b26b94 https://conda.anaconda.org/conda-forge/linux-64/p7zip-16.02-h9c3ff4c_1001.tar.bz2#941066943c0cac69d5aa52189451aa5f -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda#71004cbf7924e19c02746ccde9fd7123 https://conda.anaconda.org/conda-forge/linux-64/pkg-config-0.29.2-h36c2ea0_1008.tar.bz2#fbef41ff6a4c8140c30057466a1cdd47 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e https://conda.anaconda.org/conda-forge/linux-64/sed-4.8-he412f7d_0.tar.bz2#7362f0042e95681f5d371c46c83ebd08 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda#0c0533894f21c3d35697cb8378d390e2 +https://conda.anaconda.org/conda-forge/linux-64/tzcode-2024a-h3f72095_0.conda#32146e34aaec3745a08b6f49af3f41b0 https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-hcb278e6_1.conda#2c46deb08ba9b10e90d0a6401ad65deb https://conda.anaconda.org/conda-forge/linux-64/xorg-inputproto-2.3.2-h7f98852_1002.tar.bz2#bcd1b3396ec6960cbc1d2855a9e60b2b https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2#be93aabceefa2fac576e971aef407908 -https://conda.anaconda.org/conda-forge/linux-64/xorg-makedepend-1.0.8-h59595ed_0.conda#eb9b80b3efdb29ad359dc0438e6755fa +https://conda.anaconda.org/conda-forge/linux-64/xorg-makedepend-1.0.9-h59595ed_0.conda#71c756cfcc6649ed7614eb07712bfce0 https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda#bce9f945da8ad2ae9b1d7165a64d0f87 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2#b4a4381d54784606820704f7b5f05a15 https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f08fb5c89edfc4aadee1c81d4cfb1fa1 https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae -https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h59595ed_4.conda#9cfbafab420f42b572f3c032ad59da85 +https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.1-h59595ed_0.conda#fd486bffbf0d6841cf1456a8f2e3a995 https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.0-h93469e0_0.conda#580a52a05f5be28ce00764149017c6d4 https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h862ab75_1.conda#0013fcee7acb3cfc801c5929824feb3c https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.11-h862ab75_1.conda#6fbc9bd49434eb36d3a59c5020f4af95 https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.16-h862ab75_1.conda#f883d61afbc95c50f7b3f62546da4235 https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.2.0-h338b0a0_3.conda#79ae2d39f23e568b18be949973e9a025 +https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-13.2.0-h338b0a0_5.conda#a6be13181cb66a78544b1d5f7bac97d0 https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libavif-0.11.1-h8182462_2.conda#41c399ed4c439e37b844c24ab5621b5a @@ -117,24 +119,24 @@ https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.co https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda#73031c79546ad06f1fe62e57fdd021bc +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_5.conda#e73e9cfd1191783392131e6238bdb3e9 https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h01aab08_1016.conda#4d0907546d556ef7f14b1dcfa0e217ce https://conda.anaconda.org/conda-forge/linux-64/libllvm14-14.0.6-hcd5def8_4.conda#73301c133ded2bf71906aa2104edae8b https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_0.conda#9b13d5ee90fc9f09d54fd403247342b4 -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.42-h2797004_0.conda#d67729828dc6ff7ba44a61062ad79880 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.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.45.1-h2797004_0.conda#fc4ccadfbf6d4784de88c41704792562 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda#4bdace082e911a3e1f1f0b721bed5b56 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxgboost-1.7.6-cuda118_hd3b444d_6.conda#78509401d0879ef5aac72b8d1e104493 +https://conda.anaconda.org/conda-forge/linux-64/libxgboost-2.0.3-cuda118_hd3b444d_1.conda#5a03d2c691df2f689f919b5a3693af0b https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.1-h9458935_0.conda#4c28f3210b30250037a4a627eeee9e0f https://conda.anaconda.org/conda-forge/linux-64/openlibm-0.8.1-hd590300_1.conda#6eba22eb06d69e53d0ca01eef42bc675 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b -https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-4_hd590300_perl5.conda#3e785bff761095eb7f8676f4694bd1b1 +https://conda.anaconda.org/conda-forge/linux-64/perl-5.32.1-7_hd590300_perl5.conda#f2cfec9406850991f4e3d960cc9e3321 https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.46-h06160fa_0.conda#413d96a0b655c8f8aacc36473a2dbb04 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda#d453b98d9c83e71da0741bb0ff4d76bc @@ -149,11 +151,11 @@ 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.3-hb4ffafa_0.conda#f394ac64ab0e1fcb0152cc9c16df3d85 +https://conda.anaconda.org/conda-forge/linux-64/c-blosc2-2.13.2-hb4ffafa_0.conda#976aaf1afd331ed7346d649da5c5c1ee 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 -https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.2.0-h338b0a0_3.conda#a5e463121f06f300e5462f98b82d0709 +https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-13.2.0-h76e1118_5.conda#4685e2c6393800ce0d88d3876ceb7416 +https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-13.2.0-h338b0a0_5.conda#88d0ccab114eb0e837725bd48cdddae5 https://conda.anaconda.org/conda-forge/linux-64/hdfeos2-2.20-hebf79cf_1003.conda#23bb57b64a629bc3b33379beece7f0d7 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.6.2-h039dbb9_1.conda#29cf970521d30d113f3425b84cb250f6 @@ -161,31 +163,30 @@ 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.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/libopenblas-0.3.26-pthreads_h413a1c8_0.conda#760ae35415f5ba8b15d09df5afe8b23a +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-ilp64-0.3.26-pthreads_h384dd9e_0.conda#4510b0d48d80db41d0614726a5683070 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.95-h1d7d5a4_0.conda#d3a8067adcc45a923f4b1987c91d69da +https://conda.anaconda.org/conda-forge/linux-64/nss-3.97-h1d7d5a4_0.conda#b916d71a3032416e3f9136090d814472 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.2-h2c6b66d_0.conda#4f2892c672829693fd978d065db4e8be +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.45.1-h2c6b66d_0.conda#93acf31b379acebada263b9bce3dc6ed 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 https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_0.conda#ae5f4ad87126c55ba3f690ef07f81d64 -https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e +https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda#def531a3ac77b7fb8c21d17bb5d0badb https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.11.1-pyhd8ed1ab_0.tar.bz2#15109c4977d39ad7aa3423f57243e286 https://conda.anaconda.org/conda-forge/noarch/asciitree-0.3.3-py_2.tar.bz2#c0481c9de49f040272556e2cedf42816 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b -https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8 +https://conda.anaconda.org/conda-forge/noarch/attrs-23.2.0-pyh71513ae_0.conda#5e4c0743c70186509d1412e03c2d8dfa https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.1-h9599702_1.conda#a8820ce2dbe6f7d54f6540d9a3a0028a https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.11-hbe98c3e_0.conda#067641478d8f706b80a5a434a22b82be https://conda.anaconda.org/conda-forge/linux-64/backports.zoneinfo-0.2.1-py311h38be061_8.conda#5384590f14dfe6ccd02811236afc9f8e https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py311ha362b79_9.conda#ced5340f5dc6cff43a80deac8d0e398f -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda#2011bcf45376341dd1d690263fdbc789 +https://conda.anaconda.org/conda-forge/noarch/certifi-2024.2.2-pyhd8ed1ab_0.conda#0876280e409658fc6f9e75d035960333 https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_0.tar.bz2#ebb5f5f7dc4f1a3780ef7ea7738db08c https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca @@ -195,23 +196,23 @@ 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.6-py311hb755f60_0.conda#88cc84238dda72e11285d9cfcbe43e51 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.8-py311hb755f60_0.conda#28778bfea41b0f34141208783882649b https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2 -https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda#5e4f3466526c52bc9af2d2353a1460bd -https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 +https://conda.anaconda.org/conda-forge/noarch/dill-0.3.8-pyhd8ed1ab_0.conda#78745f157d56877a2c6e7b386f66f3e2 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.8-pyhd8ed1ab_0.conda#db16c66b759a64dc5183d69cc3745a52 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py311h38be061_3.conda#1c33f55e5cdcc2a2b973c432b5225bfe https://conda.anaconda.org/conda-forge/noarch/dodgy-0.2.1-py_0.tar.bz2#62a69d073f7446c90f417b0787122f5b https://conda.anaconda.org/conda-forge/noarch/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.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_2.conda#8d652ea2ee8eaee02ed8dc820bc794aa https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/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.12.1-pyhca7485f_0.conda#b38946846cdf39f9bce93f75f571d913 +https://conda.anaconda.org/conda-forge/linux-64/frozenlist-1.4.1-py311h459d7ec_0.conda#b267e553a337e1878512621e374845c5 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2024.2.0-pyhca7485f_0.conda#fad86b90138cf5d82c6f5a2ed6e683d9 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 @@ -221,36 +222,36 @@ https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.b https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/itsdangerous-2.1.2-pyhd8ed1ab_0.tar.bz2#3c3de74912f11d2b590184f03c7cd09b https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f -https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.9.0-py311h459d7ec_1.conda#7cc99d87755a9e64586a6004c5f0f534 +https://conda.anaconda.org/conda-forge/linux-64/lazy-object-proxy-1.10.0-py311h459d7ec_0.conda#d39020c78fd00ed774ff9c876e8aba07 https://conda.anaconda.org/conda-forge/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-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda#0ac9f44fc096772b0aa092119b00c3ca 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 -https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.41.1-py311ha6695c7_0.conda#60fa8c1f3fb0d99dd10a9af2aff9c400 +https://conda.anaconda.org/conda-forge/linux-64/llvmlite-0.42.0-py311ha6695c7_1.conda#d6e13a53b4f0cc38f4a348f47bfd5b97 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_1.conda#aab51e50d994e58efdfa5382139b0468 -https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda#f8e0b648d77bbe44d1fe8af8cc56a590 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 +https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.3-py311h38e4bf4_0.conda#3910c815fc788621f88b2bdc0fa9f0a6 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda#a322b4185121935c871d201ae00ac143 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.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/linux-64/multidict-6.0.5-py311h459d7ec_0.conda#4288ea5cbe686d1b18fc3efb36c009a5 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 https://conda.anaconda.org/conda-forge/noarch/mypy_extensions-1.0.0-pyha770c72_0.conda#4eccaeba205f0aed9ac3a9ea58568ca3 https://conda.anaconda.org/conda-forge/noarch/natsort-8.4.0-pyhd8ed1ab_0.conda#70959cd1db3cf77b2a27a0836cfd08a7 https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c -https://conda.anaconda.org/conda-forge/linux-64/openblas-ilp64-0.3.25-pthreads_h3d04fff_0.conda#29bd5f6106f71fbaa5c557b4c22c9e0c +https://conda.anaconda.org/conda-forge/linux-64/openblas-ilp64-0.3.26-pthreads_h3d04fff_0.conda#7f76d98a5d8bb155d1150d817691f320 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.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/platformdirs-4.2.0-pyhd8ed1ab_0.conda#a0bc3eec34b0fab84be6b2da94e98e20 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.4.0-pyhd8ed1ab_0.conda#139e9feb65187e916162917bb2484976 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.8-py311h459d7ec_0.conda#9bc62d25dcf64eec484974a3123c9d57 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 @@ -258,17 +259,17 @@ https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda#176f7d56f0cfe9008bdf1bccd7de02fb https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2#92a889dc236a5197612bc85bee6d7174 https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 -https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.0-pyhd8ed1ab_0.conda#e4dbdb3585c0266b4710467fe7b75cf4 -https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 +https://conda.anaconda.org/conda-forge/noarch/python-fastjsonschema-2.19.1-pyhd8ed1ab_0.conda#4d3ceee3af4b0f9a1f48f57176bf8625 +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.4-pyhd8ed1ab_0.conda#c79cacf8a06a51552fc651652f170208 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py311h459d7ec_0.conda#60b5332b3989fda37884b92c7afd6a91 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 +https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda#3eeeeb9e4827ace8c0c1419c85d590ad https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.2-py311h34ded2d_0.conda#819aa640a0493d4b52faf938e94d129e -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.13.2-py311h46250e7_0.conda#c5f5089dd1fe0000fecaf0d12eca50b9 -https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.7-py311h459d7ec_2.conda#56bc3fe5180c0b23e05c7a5708153ac7 +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.17.1-py311h46250e7_0.conda#a206e8c500a27fa82adae7c2f1929675 +https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.8-py311h459d7ec_0.conda#7865c897d89a39abc0056d89e37bd9e9 https://conda.anaconda.org/conda-forge/noarch/semver-3.0.2-pyhd8ed1ab_0.conda#5efb3fccda53974aed800b6d575f72ed https://conda.anaconda.org/conda-forge/noarch/setoptconf-tmp-0.3.1-pyhd8ed1ab_0.tar.bz2#af3e36d4effb85b9b9f93cd1db0963df -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 +https://conda.anaconda.org/conda-forge/noarch/setuptools-69.0.3-pyhd8ed1ab_0.conda#40695fdfd15a92121ed2922900d0308b https://conda.anaconda.org/conda-forge/linux-64/simplejson-3.19.2-py311h459d7ec_0.conda#d6478cbce002db6303f0d749860f3e22 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2#62f26a3d1387acee31322208f0cfa3e0 @@ -277,18 +278,18 @@ 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.11.0-h00ab1b0_0.conda#fde515afbbe6e36eb4564965c20b1058 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_1.conda#4531d2927578e7e254ff3bcf6457518c 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/termcolor-2.4.0-pyhd8ed1ab_0.conda#a5033708ad9283907c3b1bc1f90d0d0d https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/tomlkit-0.12.3-pyha770c72_0.conda#074d0ce7a6261ab8b497c3518796ef3e -https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 +https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda#2fcb582444635e2c402e8569bb94e039 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda#a700fcb5cedd3e72d0c75d095c7a6eda -https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.0-pyhd8ed1ab_0.conda#886f4a84ddb49b943b1697ac314e85b3 -https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2023.11.29-pyhd8ed1ab_0.conda#b355907cec4e6a516f2909396add77c8 +https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.1-pyhd8ed1ab_0.conda#1c6acfdc7ecbfe09954c4216da99c146 +https://conda.anaconda.org/conda-forge/noarch/trove-classifiers-2024.1.31-pyhd8ed1ab_0.conda#d0835afcdea2f83b7b1326058f7dc671 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 @@ -310,8 +311,8 @@ https://conda.anaconda.org/conda-forge/noarch/asgiref-3.7.2-pyhd8ed1ab_0.conda#5 https://conda.anaconda.org/conda-forge/linux-64/astroid-2.15.8-py311h38be061_0.conda#46d70fcb74472aab178991f0231ee3c6 https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.0-hf8751d9_2.conda#deb12196f0c64c441bb3d083d06d0cf8 https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.8.14-h2e270ba_2.conda#58bbee5fd6cf2d4fffbead1bc33a5d3b -https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda#3ccff479c246692468f604df9c85ef26 -https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 +https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda#9669586875baeced8fc30c0826c3270e +https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda#332493000404d8411859539a5a630865 https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e https://conda.anaconda.org/conda-forge/linux-64/brunsli-0.1-h9c3ff4c_0.tar.bz2#c1ac6229d0bfd14f8354ff9ad2a26cad https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -319,97 +320,97 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.cond https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.2.0-hd9d235c_0.conda#8c57a9adbafd87f5eff842abde599cb4 https://conda.anaconda.org/conda-forge/noarch/click-plugins-1.1.1-py_0.tar.bz2#4fd2c6b53934bd7d96d1f3fdaf99b79f https://conda.anaconda.org/conda-forge/noarch/cligj-0.7.2-pyhd8ed1ab_1.tar.bz2#a29b7c141d6b2de4bb67788a5f107734 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py311h459d7ec_0.conda#7b3145fed7adc7c63a0e08f6f29f5480 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.4.1-py311h459d7ec_0.conda#9caf3270065a2d40fd9a443ba1568e96 https://conda.anaconda.org/conda-forge/linux-64/curl-8.1.2-h409715c_0.conda#9f88cfb15b7d08b25880b138f91e0eb4 -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda#afe341dbe834ae76d2c23157ff00e633 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.3-py311h459d7ec_0.conda#13d385f635d7fbe9acc93600f67a6cb4 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.46.0-py311h459d7ec_0.conda#a14114f70e23f7fd5ab9941fec45b095 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.48.1-py311h459d7ec_0.conda#36363685b6e56682b1b256eb0ad503f6 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-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.1-pyha770c72_0.conda#746623a787e06191d80a2133e5daff17 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/isodate-0.6.1-pyhd8ed1ab_0.tar.bz2#4a62c93c1b5c0b920508ae3fd285eaf5 -https://conda.anaconda.org/conda-forge/noarch/isort-5.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/isort-5.13.2-pyhd8ed1ab_0.conda#1d25ed2b95b92b026aaa795eabec8d91 +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda#e7d8df6509ba635247ff9aea31134262 https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc -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/linux-64/jupyter_core-5.7.1-py311h38be061_0.conda#175a430872841f7c351879f4c4c85b9e +https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.3.0-pyhd8ed1ab_1.conda#afcd1b53bcac8844540358e33f33d28f https://conda.anaconda.org/conda-forge/noarch/latexcodec-2.0.1-pyh9f0ad1d_0.tar.bz2#8d67904973263afd2985ba56aa2d6bb4 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda#4a3816d06451c4946e2db26b86472cb6 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-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda#1a42f305615c3867684e049e85927531 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 https://conda.anaconda.org/conda-forge/linux-64/openpyxl-3.1.2-py311h459d7ec_1.conda#5c809fb753f06a04c2f114394404769e https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py311h0b84326_0.conda#4b24acdc1fbbae9da03147e7d2cf8c8a -https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda#2400c0b86889f43aa52067161e1fb108 +https://conda.anaconda.org/conda-forge/noarch/pip-24.0-pyhd8ed1ab_0.conda#f586ac1e56c8638b64f9c8122a7b8a67 https://conda.anaconda.org/conda-forge/noarch/plotly-5.18.0-pyhd8ed1ab_0.conda#9f6a8664f1fe752f79473eeb9bf33a60 https://conda.anaconda.org/conda-forge/linux-64/postgresql-15.3-hd458b1d_1.conda#4a4b5dede4d2e075e9aa5a44a9fd9f20 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 https://conda.anaconda.org/conda-forge/noarch/pyproject_hooks-1.0.0-pyhd8ed1ab_0.conda#21de50391d584eb7f4441b9de1ad773f -https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 +https://conda.anaconda.org/conda-forge/noarch/pytest-8.0.0-pyhd8ed1ab_0.conda#5ba1cc5b924226349d4a49fb547b7579 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.32.0-pyhd8ed1ab_0.conda#a7b5a535cd614e384594530aee7e6061 +https://conda.anaconda.org/conda-forge/noarch/python-utils-3.8.2-pyhd8ed1ab_0.conda#89703b4f38bd1c0353881f085bc8fdaa +https://conda.anaconda.org/conda-forge/noarch/referencing-0.33.0-pyhd8ed1ab_0.conda#bc415a1c6cf049166215d6b596e0fcbe 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/linux-64/ruamel.yaml-0.18.6-py311h459d7ec_0.conda#4dccc0bc3bb4d6e5c30bccbd053c4f90 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/tqdm-4.66.2-pyhd8ed1ab_0.conda#2b8dfb969f984497f3f98409a9545776 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/urllib3-2.2.0-pyhd8ed1ab_0.conda#6a7e0694921f668a030d52f0c47baebd 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.3-py311h459d7ec_0.conda#96f995652440b0a9266d66a691d9eff9 +https://conda.anaconda.org/conda-forge/noarch/yamllint-1.34.0-pyhd8ed1ab_0.conda#262273faaed1e4bdf0c61209c38abd15 +https://conda.anaconda.org/conda-forge/linux-64/yarl-1.9.4-py311h459d7ec_0.conda#fff0f2058e9d86c8bf5848ee93917a8d 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/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b 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/linux-64/cryptography-42.0.2-py311hcb13ee4_0.conda#c61fd9e9fcfa599ea5a8b1de42b147a8 +https://conda.anaconda.org/conda-forge/noarch/django-5.0.2-pyhd8ed1ab_0.conda#596031b6473e1fead388589348472748 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 https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-h22adcc9_11.conda#514167b60f598eaed3f7a60e1dceb9ee https://conda.anaconda.org/conda-forge/linux-64/git-2.42.0-pl5321h86e50cf_0.conda#96ad24c67e0056d171385859c43218a2 -https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda#6bf74c3b7c13079a91d4bd3da51cefcf +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.41-pyhd8ed1ab_0.conda#84874a90c312088f7b5e63402fc44a58 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-7.0.0-hd8ed1ab_0.conda#12aff14f84c337be5e5636bf612f4140 -https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.11.2-pyhd8ed1ab_0.conda#73884ca36d6d96cbce498cde99fab40f +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.1-hd8ed1ab_0.conda#4a2f43a20fa404b998859c6a470ba316 +https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.12.1-pyhd8ed1ab_0.conda#a0e4efb5f35786a05af4809a2fb1f855 https://conda.anaconda.org/conda-forge/linux-64/kealib-1.5.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.2-py311h64a7726_0.conda#fd2f142dcd680413b5ede5d0fb799205 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.4-py311h64a7726_0.conda#a502d7aad449a1206efb366d6a12c52d 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/progressbar2-4.3.2-pyhd8ed1ab_0.conda#d55cd7adfc98beaef0c717c61fa3d294 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.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-metadata-3.1.0-pyhd8ed1ab_0.conda#d87474b01a3e2b8e919a24b922463056 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.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-h3ec001c_2.conda#9b37d27528c5f86ee09bf1fc6834da8e +https://conda.anaconda.org/conda-forge/linux-64/suitesparse-5.10.1-h5a4f163_3.conda#f363554b9084fb9d5e3366fbbc0d18e0 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 @@ -420,40 +421,40 @@ https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.3-py311h1f0f07a_0.con 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.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/dask-core-2024.2.0-pyhd8ed1ab_0.conda#5973bc565e2aea620c3a431cafdde032 +https://conda.anaconda.org/conda-forge/noarch/eofs-1.4.1-pyhd8ed1ab_1.conda#5fc43108dee4106f23050acc7a101233 https://conda.anaconda.org/conda-forge/noarch/flake8-polyfill-1.0.2-py_0.tar.bz2#a53db35e3d07f0af2eccd59c2a00bffe -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.33-pyhd8ed1ab_0.conda#93c8f8ceb83827d88deeba796f07fba7 +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.34-pyhd8ed1ab_0.conda#048ba98aa7b16ef0d8866f8c87d7c5b8 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/noarch/imageio-2.33.1-pyh8c1a49c_0.conda#1c34d58ac469a34e7e96832861368bce 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/noarch/jsonschema-4.21.1-pyhd8ed1ab_0.conda#8a3a3d01629da20befa340919e3dd2c4 https://conda.anaconda.org/conda-forge/linux-64/julia-1.8.5-h783901f_0.conda#98c05ba7ca9c15d22216f730499e167a 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/numba-0.59.0-py311h96b013e_1.conda#488276429185c4fa1266e6a4a24a61af 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.4-py311h320fe9a_0.conda#e44ccb61b6621bf3f8053ae66eba7397 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.2.0-py311h320fe9a_0.conda#b9e7a2cb2c47bbb99c05d1892500be45 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/patsy-0.5.6-pyhd8ed1ab_0.conda#a5b55d1cb110cdcedc748b5c3e16e687 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed 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/pyopenssl-24.0.0-pyhd8ed1ab_0.conda#b50aec2c744a5c493c09cce9e2e7533e https://conda.anaconda.org/conda-forge/noarch/pyroma-4.2-pyhd8ed1ab_0.conda#fe2aca9a5d4cb08105aefc451ef96950 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.4-py311h64a7726_0.conda#9ac5334f1b5ed072d3dbc342503d7868 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.12.0-py311h64a7726_2.conda#24ca5107ab75c5521067b8ba505dfae5 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/linux-64/aws-sdk-cpp-1.10.57-hbc2ea52_17.conda#452c7b08c21eea2ef01f4fd364d6affc -https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.2-pyhd8ed1ab_0.conda#c02a7e79365121bd3bcc25f1b65f48a9 +https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.4-pyhd8ed1ab_0.conda#6cc92bba68b7bb5a3b180e96508f9480 https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_4.conda#1e105c1a8ea2163507726144b401eb1b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.12.0-pyhd8ed1ab_0.conda#22d620e1079e99c34578cb0c615d2789 +https://conda.anaconda.org/conda-forge/noarch/distributed-2024.2.0-pyhd8ed1ab_0.conda#81c14e12f44f94613fe5922403e32341 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 @@ -464,22 +465,22 @@ https://conda.anaconda.org/conda-forge/noarch/myproxyclient-2.1.1-pyhd8ed1ab_0.c 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/pep8-naming-0.10.0-pyh9f0ad1d_0.tar.bz2#b3c5536e4f9f58a4b16adb6f1e11732d -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.0-pyha770c72_0.conda#473a7cfca197da0a10cff3f6dded7d4b +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.6.1-pyha770c72_0.conda#4efd2c755bf2079e5651e57e1999db6c 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_2.conda#9821f8e497a791858226f535e5e0be62 -https://conda.anaconda.org/conda-forge/noarch/sparse-0.14.0-pyhd8ed1ab_0.conda#ee01b310177a0612554b9d20e537fdbe -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/linux-64/scikit-learn-1.4.0-py311hc009520_0.conda#00dddf34e32a268242365329d51fb0f7 +https://conda.anaconda.org/conda-forge/noarch/sparse-0.15.1-pyhd8ed1ab_1.conda#780a42534f1429b802b5d1f51880b619 +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.1-py311h1f0f07a_0.conda#11ea602c16ad004033edf648ce054f9e +https://conda.anaconda.org/conda-forge/noarch/tifffile-2024.1.30-pyhd8ed1ab_0.conda#9ae618ad19f5b39955c9f2e43b8d03c3 +https://conda.anaconda.org/conda-forge/noarch/xarray-2024.1.1-pyhd8ed1ab_0.conda#38b5de3877d1f28089b231d24622dd64 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/cf_xarray-0.8.9-pyhd8ed1ab_0.conda#f9f82c2c3d1b3588e8ab34976f98af91 +https://conda.anaconda.org/conda-forge/noarch/cmocean-3.1.3-pyhd8ed1ab_0.conda#671543f081d6be0b6b3e99b586386b44 https://conda.anaconda.org/conda-forge/noarch/dask-jobqueue-0.8.2-pyhd8ed1ab_0.conda#cc344a296a41369bcb05f7216661cec8 https://conda.anaconda.org/conda-forge/noarch/esgf-pyclient-0.3.1-pyhca7485f_3.conda#1d43833138d38ad8324700ce45a7099a https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 @@ -493,7 +494,7 @@ https://conda.anaconda.org/conda-forge/linux-64/ncl-6.6.2-hf70af60_47.conda#ee27 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/py-xgboost-2.0.3-cuda118_pyhedeaf28_1.conda#f56da7b20ce1701d239cb82a4f91109f 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 @@ -502,7 +503,7 @@ https://conda.anaconda.org/conda-forge/linux-64/r-cli-3.6.1-r41h38f115c_0.conda# https://conda.anaconda.org/conda-forge/noarch/r-codetools-0.2_19-r41hc72bb7e_0.conda#401ac0ee6310d69deac481b2d2148458 https://conda.anaconda.org/conda-forge/linux-64/r-colorspace-2.1_0-r41h133d619_0.conda#b6f5d77e5e0334a8adda752364bc760e https://conda.anaconda.org/conda-forge/linux-64/r-contfrac-1.1_12-r41h06615bd_1003.tar.bz2#c9cbc66278bea99ce3ce9f8be9e8c0ad -https://conda.anaconda.org/conda-forge/noarch/r-cpp11-0.4.3-r41hc72bb7e_0.tar.bz2#2362e0b8e003b884686fe27cf18c9a81 +https://conda.anaconda.org/conda-forge/noarch/r-cpp11-0.4.7-r41hc72bb7e_0.conda#a81541ceb9c2c3d40695e746b2777961 https://conda.anaconda.org/conda-forge/noarch/r-crayon-1.5.2-r41hc72bb7e_1.tar.bz2#8cf94f6451aaadf3aa1119b29115b0c7 https://conda.anaconda.org/conda-forge/linux-64/r-curl-4.3.3-r41hf9611b0_2.conda#c4047e3aa1b795a4cb5adbb5c59b3972 https://conda.anaconda.org/conda-forge/linux-64/r-desolve-1.35-r41hb20cf53_0.conda#e475d0dbe391fa76fbf742ebee6ad449 @@ -558,17 +559,17 @@ https://conda.anaconda.org/conda-forge/linux-64/r-xfun-0.39-r41ha503ecb_0.conda# https://conda.anaconda.org/conda-forge/noarch/r-xmlparsedata-1.0.5-r41hc72bb7e_1.tar.bz2#921c0ef7104d8df0ab506f1bb81a062c 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/noarch/seaborn-base-0.13.2-pyhd8ed1ab_0.conda#0918a9201e824211cdf444dbf8d55752 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.12.0-pyhd8ed1ab_0.conda#4d67c68fd0d130091ada039bc2d81b33 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.16.0-pyhd8ed1ab_0.conda#de2255e7a38fad6eaf457739c6599413 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 -https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda#5c223cb0d9c05552bf9d1586a92720b2 +https://conda.anaconda.org/conda-forge/linux-64/pydot-2.0.0-py311h38be061_0.conda#cdfd23a54a18f3c8d5320d7717f4ed52 https://conda.anaconda.org/conda-forge/linux-64/r-askpass-1.1-r41h06615bd_3.tar.bz2#c8ec8683302ad9a2345cb31ab28e6c6b https://conda.anaconda.org/conda-forge/linux-64/r-bigmemory-4.6.1-r41h7525677_1.tar.bz2#6a956b57b027b49b7a9ca48031a8bbd6 https://conda.anaconda.org/conda-forge/linux-64/r-checkmate-2.2.0-r41h57805ef_0.conda#dc314ad76563387e70e0117c5398a15a @@ -595,10 +596,10 @@ https://conda.anaconda.org/conda-forge/linux-64/r-spam-2.9_1-r41hb20cf53_1.conda https://conda.anaconda.org/conda-forge/linux-64/r-timechange-0.2.0-r41h38f115c_0.conda#04a4229419d779a1e27395d70d493571 https://conda.anaconda.org/conda-forge/linux-64/r-xml2-1.3.4-r41h1ad5fc0_1.conda#82c1446591783493d65273a158e8ce28 https://conda.anaconda.org/conda-forge/linux-64/r-zoo-1.8_12-r41h133d619_0.conda#1d432d2eba171727afd03507faa5e2f6 -https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.0-hd8ed1ab_0.conda#ebd31a95a7008b7e164dad9dbbb5bb5a +https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_0.conda#fd31ebf5867914de597f9961c478e482 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.12.0-pyhd8ed1ab_0.conda#460d7cac50322a39b61a833885a6a8d5 +https://conda.anaconda.org/conda-forge/noarch/xgboost-2.0.3-cuda118_pyh5ebfdf7_1.conda#9ca04fca5cb67e6f2e51d0eb0277cf67 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.16.0-pyhd8ed1ab_0.conda#28dde45c295b3f110bc6bb425472137b 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 @@ -621,8 +622,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.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/dask-2024.2.0-pyhd8ed1ab_0.conda#085d464298ca31a98193af99ee5e75e7 +https://conda.anaconda.org/conda-forge/noarch/nbconvert-7.16.0-pyhd8ed1ab_0.conda#342ba1099325da21a811e80397006461 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 @@ -635,7 +636,7 @@ https://conda.anaconda.org/conda-forge/noarch/r-r.cache-0.16.0-r41hc72bb7e_1.tar https://conda.anaconda.org/conda-forge/noarch/iris-esmf-regrid-0.9.0-pyhd8ed1ab_0.conda#570f2c6e387fd6dac5356a5152f91b3f https://conda.anaconda.org/conda-forge/noarch/r-climprojdiags-0.3.2-r41hc72bb7e_0.conda#9922b863cd10035cbb75e3c2edae64a7 https://conda.anaconda.org/conda-forge/linux-64/r-tibble-3.2.1-r41h133d619_1.conda#3ae9b78fb1d8a44deed24a27cce33ebf -https://conda.anaconda.org/conda-forge/label/esmvalcore_rc/noarch/esmvalcore-2.10.0rc1-pyh39db41b_0.conda#b973ee8c35712a7d21830ed06bdbc42d +https://conda.anaconda.org/conda-forge/noarch/esmvalcore-2.10.0-pyhd8ed1ab_0.conda#18bc5ed0e0583cb0b212927795debea7 https://conda.anaconda.org/conda-forge/noarch/r-ggplot2-3.4.2-r41hc72bb7e_0.conda#c2b04f4ff351d84bf51fd5a77b5c9b6c https://conda.anaconda.org/conda-forge/noarch/r-rematch2-2.1.2-r41hc72bb7e_2.tar.bz2#f67eae0562ffc808b82f1590776c25f5 https://conda.anaconda.org/conda-forge/noarch/r-styler-1.10.1-r41hc72bb7e_0.conda#c12b81cff8bb8745ffbe7aeb9dfd795f @@ -650,10 +651,10 @@ 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.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 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.2-pyhd8ed1ab_0.conda#ce99859070b0e17ccc63234ca58f3ed8 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.8-pyhd8ed1ab_0.conda#611a35a27914fac3aa37611a6fe40bb5 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.6-pyhd8ed1ab_0.conda#d7e4954df0d3aea2eacc7835ad12671d +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.5-pyhd8ed1ab_0.conda#7e1e7437273682ada2ed5e9e9714b140 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.7-pyhd8ed1ab_0.conda#26acae54b06f178681bfb551760f5dd1 https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda#bbfd1120d1824d2d073bc65935f0e4c0 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda#e507335cb4ca9cff4c3d0fa9cdab255e diff --git a/doc/sphinx/source/changelog.rst b/doc/sphinx/source/changelog.rst index 52c3aa3086..d1180d3b8b 100644 --- a/doc/sphinx/source/changelog.rst +++ b/doc/sphinx/source/changelog.rst @@ -3,6 +3,116 @@ Changelog ========= +v2.10.0 +------- +Highlights + +- Add a realistic IPCC example recipe that reproduces figure 9.3 from AR6. It + computes the mean sea-surface temperature anomaly between 1850-2100 over all + available CMIP6 models. See the :ref:`recipe documentation ` + or read the `blog post `__ + for more information. + +- Added more plot types to monitoring diagnostic: Hovmoeller Z vs. time, + Hovmoeller time vs latlon, variable vs. latitude are now available. See the + :ref:`recipe documentation ` for more information. + +- Add support for 4 new datasets: + + - NOAA-CIRES-20CR v3 reanalysis + - NASA MERRA reanalysis + - NOAA marine boundary layer data for CH4 + - MOBO-DIC2004-2019 + + See :ref:`supported_datasets` and :ref:`inputdata_observations` for more + information. + +- Many recipes now have up-to-date obs4MIPs dataset names so required data can + automatically be downloaded from ESGF. + +This release includes + +Bug fixes +~~~~~~~~~ + +- Update recipe shapeselect to work with shapely v2 (:pull:`3283`) :user:`lukruh` +- Correctly handle ``~`` when reading ``plot_folder`` option of monitoring diagnostic (:pull:`3449`) :user:`schlunma` +- Fixed provenance tracking for NCL multipanel PNGs (:pull:`3332`) :user:`schlunma` +- Fixed plot paths in NCL provenance tracking (:pull:`3422`) :user:`schlunma` +- Fix erroneous file_type handling in certain NCL diagnostics (:pull:`3474`) :user:`zklaus` +- Fix NCL provenance tracking (:pull:`3477`) :user:`schlunma` +- Fix plots and provenance in Russell diagnostics (:pull:`3479`) :user:`schlunma` + +Documentation +~~~~~~~~~~~~~ + +- Add merge instructions to release instructions (:pull:`3292`) :user:`remi-kazeroni` +- Update release schedule after release of v2.9.0 (:pull:`3289`) :user:`remi-kazeroni` +- Add list of failing recipes for v2.9.0 release (:pull:`3294`) :user:`remi-kazeroni` +- Update ``mamba`` version in readthedocs configuration docs builds (:pull:`3310`) :user:`valeriupredoi` +- Add Romain Beucher to citation file as contributor (:pull:`3318`) :user:`valeriupredoi` +- Removed recipe_carvalhais14nat from list of broken recipes (:pull:`3319`) :user:`remi-kazeroni` +- Add `OBS-maintainers `__ team to documentation on OBS data maintenance and CMORizer reviews (:pull:`3335`) :user:`remi-kazeroni` +- Add Pauline Bonnet to citation file (:pull:`3347`) :user:`Paulinebonnet111` +- Ensure compatible zstandard and zstd in readthedocs builds (:pull:`3362`) :user:`zklaus` +- Fix documentation build (:pull:`3397`) :user:`bouweandela` +- Minor updates to release tools (:pull:`3216`) :user:`bouweandela` +- Enhance provenance documentation (:pull:`3305`) :user:`alistairsellar` +- Re-add communities and grants in zenodo file (:pull:`3416`) :user:`valeriupredoi` +- Update Anconda badge in README (:pull:`3375`, :pull:`3453`) :user:`valeriupredoi` + +Diagnostics +~~~~~~~~~~~ + +- Slight refactoring of diagnostic script ``galytska23/select_variables_for_tigramite.py`` for generality and portability (:pull:`3298`) :user:`valeriupredoi` and :user:`egalytska` +- Allow custom variable grouping in diagnostic script ``monitor/multi_datasets.py`` (:pull:`3343`) :user:`schlunma` +- Extended monitor diagnostic with plot type variable vs. latitude (:pull:`3340`) :user:`ellensarauer` +- Add Hovmoeller Z vs. time plot to monitoring diagnostic (:pull:`3345`) :user:`cubeme` and :user:`helgehr` +- Adding Hovmoeller time vs latlon plots to monitoring recipes (:pull:`3341`) :user:`lukruh` and :user:`jeremykraftdlr` +- Implied heat transport new diagnostic (:pull:`3177`) :user:`mo-abodas` +- Recipe changes for new statistics preprocessors (percentiles) (:pull:`3351`) :user:`schlunma` +- Add a realistic example recipe (:pull:`3356`) :user:`Peter9191` and :user:`bouweandela` +- Support ``CenteredNorm`` in diagnostic monitor/multidatasets.py (:pull:`3415`) :user:`schlunma` +- Use new preprocessor statistics calling convention for recipe_easy_ipcc.yml (:pull:`3418`) :user:`bouweandela` +- Adapt to changed style scheme name in matplotlib (:pull:`3475`) :user:`zklaus` +- Add version to dataset in python example recipe to avoid "Unknown file format" issue on JASMIN (:pull:`3322`) :user:`ehogan` +- Add the dataset version in the heatwaves_coldwaves recipe to avoid the "Unknown file format" issue on JASMIN (:pull:`3373`) :user:`ehogan` + +Observational and re-analysis dataset support +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +- Cmorizer for NOAA-CIRES-20CR v3 reanalysis (clt, clwvi, hus, prw, rlut, rlutcs, rsut, rsutcs) (:pull:`3137`) :user:`LisaBock` +- CMORizer for NASA MERRA reanalysis (:pull:`3039`) :user:`axel-lauer` +- Download and formatting of NOAA marine boundary layer data for CH4 (NOAA-MBL-CH4) (:pull:`3301`) :user:`FranziskaWinterstein` +- Added CMORizer for MOBO-DIC2004-2019 (:pull:`3297`) :user:`schlunma` +- Update obs4MIPs dataset names in quantilebias recipe (:pull:`3330`) :user:`rbeucher` +- Update obs4MIPs dataset names in Schlund20esd recipe (:pull:`3329`) :user:`rbeucher` +- Update obs4MIPs dataset names in flatoipcc recipes (:pull:`3328`) :user:`rbeucher` +- Update obs4mips dataset names in clouds recipes (:pull:`3326`) :user:`rbeucher` +- Update Obs4MIPs dataset names in ECS recipes (:pull:`3327`) :user:`rbeucher` +- Update obs4mips dataset names in Bock et al recipes (:pull:`3324`, :pull:`3389` and :pull:`3473`) :user:`rbeucher` and :user:`bouweandela` +- Update obs4mips dataset names in radiation budget recipe (:pull:`3323`) :user:`rbeucher` +- Update Obs4MIPs dataset names in perfmetrics CMIP5 recipe (:pull:`3325`) :user:`rbeucher` + +Automatic testing +~~~~~~~~~~~~~~~~~ + +- Made sklearn test backwards-compatible with sklearn < 1.3 (:pull:`3285`) :user:`schlunma` +- Update conda lock creation Github Action workflow and ship updated conda-lock file (:pull:`3307`, :pull:`3407`) :user:`valeriupredoi` +- Compress all bash shell setters into one default option per GitHub Action workflow (:pull:`3315`) :user:`valeriupredoi` +- Remove deprecated option ``offline`` from CI configuration (:pull:`3367`) :user:`schlunma` + +Installation +~~~~~~~~~~~~ + +- Use ESMValCore v2.10 (:pull:`3486`) :user:`bouweandela` + +Improvements +~~~~~~~~~~~~ + +- Merge v2.9.x into main (:pull:`3286`) :user:`schlunma` +- Allow NCL unit conversion `kg s-1` -> `GtC y-1` (:pull:`3300`) :user:`schlunma` + .. _changelog-v2-9-0: v2.9.0 @@ -46,70 +156,70 @@ This release includes Bug fixes ~~~~~~~~~ -- Fixed usage of ``work_dir`` in some CMORizer scripts (`#3192 `__) `Rémi Kazeroni `__ -- Realize data for scalar cube in `recipe_carvalhais14nat` to avert issue from dask latest (2023.6.0) (`#3265 `__) `Valeriu Predoi `__ -- Fix failing ``mlr`` diagnostic test by adding new scikit-learn default tag (`#3273 `__) `Rémi Kazeroni `__ -- Fix ordering of models in perfmetrics diagnostic script (`#3275 `__) `Lisa Bock `__ +- Fixed usage of ``work_dir`` in some CMORizer scripts (:pull:`3192`) :user:`remi-kazeroni` +- Realize data for scalar cube in `recipe_carvalhais14nat` to avert issue from dask latest (2023.6.0) (:pull:`3265`) :user:`valeriupredoi` +- Fix failing ``mlr`` diagnostic test by adding new scikit-learn default tag (:pull:`3273`) :user:`remi-kazeroni` +- Fix ordering of models in perfmetrics diagnostic script (:pull:`3275`) :user:`LisaBock` Documentation ~~~~~~~~~~~~~ -- Update release schedule after v2.8.0 (`#3138 `__) `Rémi Kazeroni `__ -- Added reference entry for Winterstein (`#3154 `__) `FranziskaWinterstein `__ -- Show logo on PyPI (`#3185 `__) `Valeriu Predoi `__ -- Add Release Managers for v2.9.0 and v2.10.0 (`#3184 `__) `Rémi Kazeroni `__ -- Fix readthedocs build with esmpy>=8.4.0 and missing ESMFMKFILE variable (`#3205 `__) `Valeriu Predoi `__ -- Add ESMValCore release v2.8.1 into the documentation (`#3235 `__) `Rémi Kazeroni `__ -- Modified links to the tutorial (`#3236 `__) `Rémi Kazeroni `__ -- Fix gitter badge in README (`#3258 `__) `Rémi Kazeroni `__ -- Add release notes for v2.9.0 (`#3266 `__) `Bouwe Andela `__ +- Update release schedule after v2.8.0 (:pull:`3138`) :user:`remi-kazeroni` +- Added reference entry for Winterstein (:pull:`3154`) :user:`FranziskaWinterstein` +- Show logo on PyPI (:pull:`3185`) :user:`valeriupredoi` +- Add Release Managers for v2.9.0 and v2.10.0 (:pull:`3184`) :user:`remi-kazeroni` +- Fix readthedocs build with esmpy>=8.4.0 and missing ESMFMKFILE variable (:pull:`3205`) :user:`valeriupredoi` +- Add ESMValCore release v2.8.1 into the documentation (:pull:`3235`) :user:`remi-kazeroni` +- Modified links to the tutorial (:pull:`3236`) :user:`remi-kazeroni` +- Fix gitter badge in README (:pull:`3258`) :user:`remi-kazeroni` +- Add release notes for v2.9.0 (:pull:`3266`) :user:`bouweandela` Diagnostics ~~~~~~~~~~~ -- New plot_type 1d_profile in monitor (`#3178 `__) `FranziskaWinterstein `__ -- Add Seaborn diagnostic (`#3155 `__) `Manuel Schlund `__ -- New recipe and diagnostic for Arctic-midlatitude research (`#3021 `__) `Evgenia Galytska `__ -- Generate climatology on the fly for AutoAssess soil moisture (`#3197 `__) `Alistair Sellar `__ -- Remove "fx_variables" from recipe_tebaldi21esd.yml (`#3211 `__) `Birgit Hassler `__ -- Remove "fx_variables" from ipccwg1ar5ch9 recipes (`#3215 `__) `katjaweigel `__ -- Remove "fx_variables" from recipe_wenzel14jgr.yml (`#3212 `__) `Birgit Hassler `__ -- Update obs4MIPs dataset to the current naming scheme in recipe_smpi.yml (`#2991 `__) `Bouwe Andela `__ -- Fixed pandas diagnostics for pandas>=2.0.0 (`#3209 `__) `Manuel Schlund `__ -- Update recipe_impact.yml to work with newer versions of `pandas` (`#3220 `__) `Bouwe Andela `__ -- Add variable long names to provenance record in monitoring diagnostics (`#3222 `__) `Brei Soliño `__ +- New plot_type 1d_profile in monitor (:pull:`3178`) :user:`FranziskaWinterstein` +- Add Seaborn diagnostic (:pull:`3155`) :user:`schlunma` +- New recipe and diagnostic for Arctic-midlatitude research (:pull:`3021`) :user:`egalytska` +- Generate climatology on the fly for AutoAssess soil moisture (:pull:`3197`) :user:`alistairsellar` +- Remove "fx_variables" from recipe_tebaldi21esd.yml (:pull:`3211`) :user:`hb326` +- Remove "fx_variables" from ipccwg1ar5ch9 recipes (:pull:`3215`) :user:`katjaweigel` +- Remove "fx_variables" from recipe_wenzel14jgr.yml (:pull:`3212`) :user:`hb326` +- Update obs4MIPs dataset to the current naming scheme in recipe_smpi.yml (:pull:`2991`) :user:`bouweandela` +- Fixed pandas diagnostics for pandas>=2.0.0 (:pull:`3209`) :user:`schlunma` +- Update recipe_impact.yml to work with newer versions of `pandas` (:pull:`3220`) :user:`bouweandela` +- Add variable long names to provenance record in monitoring diagnostics (:pull:`3222`) :user:`bsolino` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Add CMORizer for GPCP-SG (pr) (`#3150 `__) `FranziskaWinterstein `__ -- Extension of NASA MERRA2 CMORizer (cl, cli, clivi, clw, clwvi) (`#3167 `__) `Axel Lauer `__ +- Add CMORizer for GPCP-SG (pr) (:pull:`3150`) :user:`FranziskaWinterstein` +- Extension of NASA MERRA2 CMORizer (cl, cli, clivi, clw, clwvi) (:pull:`3167`) :user:`axel-lauer` Automatic testing ~~~~~~~~~~~~~~~~~ -- Add a CircleCI-testing-specific ``recipe_python_for_CI.yml`` to avoid calling geolocator/Nominatim over CI (`#3159 `__) `Valeriu Predoi `__ -- Check if Python minor version changed after Julia install in development installation test (`#3213 `__) `Valeriu Predoi `__ -- Fix tests using deprecated ``esmvalcore._config`` module that has been removed in ESMValCore v2.9 (`#3204 `__) `Valeriu Predoi `__ +- Add a CircleCI-testing-specific ``recipe_python_for_CI.yml`` to avoid calling geolocator/Nominatim over CI (:pull:`3159`) :user:`valeriupredoi` +- Check if Python minor version changed after Julia install in development installation test (:pull:`3213`) :user:`valeriupredoi` +- Fix tests using deprecated ``esmvalcore._config`` module that has been removed in ESMValCore v2.9 (:pull:`3204`) :user:`valeriupredoi` Installation ~~~~~~~~~~~~ -- Add support for Python=3.11 (`#3173 `__) `Valeriu Predoi `__ -- Drop python=3.8 support (`#3193 `__) `Valeriu Predoi `__ -- Repair generation of conda lock files (`#3148 `__) `Valeriu Predoi `__ -- Modernize lock creation script and repair lock generation (`#3174 `__) `Valeriu Predoi `__ -- Pin numpy !=1.24.3 due to severe masking bug (`#3182 `__) `Valeriu Predoi `__ -- Update xesmf to versions >= 0.4.0 (`#2728 `__) `Klaus Zimmermann `__ -- Update esmpy import for ESMF version 8.4.0 or larger (`#3188 `__) `Valeriu Predoi `__ -- Relax the pin on iris to allow the use of older versions for performance reasons (`#3270 `__) `Bouwe Andela `__ -- Use ESMValCore v2.9.0 (`#3274 `__) `Bouwe Andela `__ +- Add support for Python=3.11 (:pull:`3173`) :user:`valeriupredoi` +- Drop python=3.8 support (:pull:`3193`) :user:`valeriupredoi` +- Repair generation of conda lock files (:pull:`3148`) :user:`valeriupredoi` +- Modernize lock creation script and repair lock generation (:pull:`3174`) :user:`valeriupredoi` +- Pin numpy !=1.24.3 due to severe masking bug (:pull:`3182`) :user:`valeriupredoi` +- Update xesmf to versions >= 0.4.0 (:pull:`2728`) :user:`zklaus` +- Update esmpy import for ESMF version 8.4.0 or larger (:pull:`3188`) :user:`valeriupredoi` +- Relax the pin on iris to allow the use of older versions for performance reasons (:pull:`3270`) :user:`bouweandela` +- Use ESMValCore v2.9.0 (:pull:`3274`) :user:`bouweandela` Improvements ~~~~~~~~~~~~ -- Update pre-commit hooks (`#3189 `__) `Bouwe Andela `__ -- Add support for using a dask distributed scheduler (`#3151 `__) `Bouwe Andela `__ +- Update pre-commit hooks (:pull:`3189`) :user:`bouweandela` +- Add support for using a dask distributed scheduler (:pull:`3151`) :user:`bouweandela` .. _changelog-v2-8-0: @@ -152,22 +262,22 @@ Backwards incompatible changes Please read the descriptions of the linked pull requests for detailed upgrade instructions. - Deprecated features scheduled for removal in v2.8.0 or earlier have now been removed - (`#2941 `__) - `Manuel Schlund `__. + (:pull:`2941`) + :user:`schlunma`. Removed ``esmvaltool.iris_helpers.var_name_constraint`` (has been deprecated in v2.6.0; please use :class:`iris.NameConstraint` with the keyword argument ``var_name`` instead). Removed `write_netcdf` and `write_plots` from `recipe_filer.py`. - No files from the ``native6`` project will be found if a non-existent version of a dataset is specified (`#3041 `_) - `Rémi Kazeroni `__. + :user:`remi-kazeroni`. The tool now searches for exact ``version`` of ``native6`` datasets. Therefore, it is necessary to make sure that the version number in the directory tree matches with the version number in the recipe to find the files. - The conversion of precipitation units from monitoring diagnostic is now done at the preprocessor stage (`#3049 `_) - `Manuel Schlund `__. + :user:`schlunma`. To use the unit conversion for precipitation in the new version of this diagnostic, add it as a preprocessor for the precipitation dataset to the recipe. @@ -175,145 +285,145 @@ Please read the descriptions of the linked pull requests for detailed upgrade in Bug fixes ~~~~~~~~~ -- Fix for provenance records from `seaice_tsline.ncl` (`#2938 `__) `Axel Lauer `__ -- Fix in `validation.py` for resolving datasets with identical names by using distinct aliases (`#2955 `__) `FranziskaWinterstein `__ -- Bugfix: masking of non-significant differences in `zonal.ncl` (perfmetrics) (`#2957 `__) `Axel Lauer `__ -- Fix typo in `perfmetrics/main.ncl` to add tropopause (`#2966 `__) `FranziskaWinterstein `__ -- Fix .png bug in `wenzel16nat` diagnostics (`#2976 `__) `Axel Lauer `__ -- `Recipe_ocean_Landschuetzer2016`: Fix typo in filename to run model vs OBS diagnostics (`#2997 `__) `Tomas Torsvik `__ -- Fix read_cmor in NCL utilities (`#3007 `__) `Axel Lauer `__ -- Removed usages of deprecated features that cause diagnostic crashes (`#3009 `__) `Manuel Schlund `__ -- Replace removed `matplotlib.pyplot.savefig` option `additional_artists` (`#3075 `__) `Manuel Schlund `__ -- Added missing comma to `sommer17joss.bibtex` (`#3078 `__) `Manuel Schlund `__ -- Fix call of output_type in `aux_plotting.ncl` (`#3083 `__) `Lisa Bock `__ -- Remove colorbar from `bbox_extra_artists` (`#3087 `__) `Manuel Schlund `__ -- Fix `MPI-ESM1-2-HR` entries in `recipe_tebaldi21esd` (`#3093 `__) `Rémi Kazeroni `__ -- Fix bug in provenance writing of `perfmetrics` recipes v2.8.0 (`#3098 `__) `Axel Lauer `__ -- Fix `recipe_sea_surface_salinity` for v2.8 (`#3102 `__) `sloosvel `__ -- Fix variable `short_name` and metadata for ESACCI-LST CMORizer (`#3104 `__) `Rémi Kazeroni `__ -- Fix `recipe_carvalhais14`: replace outline patch with splines (`#3111 `__) `Valeriu Predoi `__ -- Replace deprecated function `cm.register_cmap` with `mpl.colormaps.register` for `recipe_ arctic_ocean` (`#3112 `__) `Tomas Torsvik `__ -- Fix `recipe_extract_shape.yml` (lacking caption for provenance) (`#3126 `__) `Valeriu Predoi `__ +- Fix for provenance records from `seaice_tsline.ncl` (:pull:`2938`) :user:`axel-lauer` +- Fix in `validation.py` for resolving datasets with identical names by using distinct aliases (:pull:`2955`) :user:`FranziskaWinterstein` +- Bugfix: masking of non-significant differences in `zonal.ncl` (perfmetrics) (:pull:`2957`) :user:`axel-lauer` +- Fix typo in `perfmetrics/main.ncl` to add tropopause (:pull:`2966`) :user:`FranziskaWinterstein` +- Fix .png bug in `wenzel16nat` diagnostics (:pull:`2976`) :user:`axel-lauer` +- `Recipe_ocean_Landschuetzer2016`: Fix typo in filename to run model vs OBS diagnostics (:pull:`2997`) :user:`TomasTorsvik` +- Fix read_cmor in NCL utilities (:pull:`3007`) :user:`axel-lauer` +- Removed usages of deprecated features that cause diagnostic crashes (:pull:`3009`) :user:`schlunma` +- Replace removed `matplotlib.pyplot.savefig` option `additional_artists` (:pull:`3075`) :user:`schlunma` +- Added missing comma to `sommer17joss.bibtex` (:pull:`3078`) :user:`schlunma` +- Fix call of output_type in `aux_plotting.ncl` (:pull:`3083`) :user:`LisaBock` +- Remove colorbar from `bbox_extra_artists` (:pull:`3087`) :user:`schlunma` +- Fix `MPI-ESM1-2-HR` entries in `recipe_tebaldi21esd` (:pull:`3093`) :user:`remi-kazeroni` +- Fix bug in provenance writing of `perfmetrics` recipes v2.8.0 (:pull:`3098`) :user:`axel-lauer` +- Fix `recipe_sea_surface_salinity` for v2.8 (:pull:`3102`) :user:`sloosvel` +- Fix variable `short_name` and metadata for ESACCI-LST CMORizer (:pull:`3104`) :user:`remi-kazeroni` +- Fix `recipe_carvalhais14`: replace outline patch with splines (:pull:`3111`) :user:`valeriupredoi` +- Replace deprecated function `cm.register_cmap` with `mpl.colormaps.register` for `recipe_ arctic_ocean` (:pull:`3112`) :user:`TomasTorsvik` +- Fix `recipe_extract_shape.yml` (lacking caption for provenance) (:pull:`3126`) :user:`valeriupredoi` Community ~~~~~~~~~ -- Update documentation on pre-installed versions on HPC clusters (`#2934 `__) `Rémi Kazeroni `__ +- Update documentation on pre-installed versions on HPC clusters (:pull:`2934`) :user:`remi-kazeroni` Deprecations ~~~~~~~~~~~~ -- Remove radiation recipes that have been superseded by :ref:`recipe_radiation_budget ` along with associated diagnostic scripts (`#3115 `_) `Alistair Sellar `__ +- Remove radiation recipes that have been superseded by :ref:`recipe_radiation_budget ` along with associated diagnostic scripts (`#3115 `_) :user:`alistairsellar` Documentation ~~~~~~~~~~~~~ -- Backward compatibility policy (`#2879 `__) `Alistair Sellar `__ -- Suppress installing and reinstalling dependencies with pip during readthedocs builds (`#2913 `__) `Valeriu Predoi `__ -- Update installation instructions (`#2939 `__) `Bouwe Andela `__ -- Update documentation for `recipe_extreme_index` (`#2951 `__) `katjaweigel `__ -- Update documentation and `recipe_check_obs` (ERA5) (`#2952 `__) `Axel Lauer `__ -- Updated ICON dataset entry in documentation (`#2954 `__) `Manuel Schlund `__ -- Add Franziska Winterstein as collaborator in CITATION file (`#3001 `__) `Valeriu Predoi `__ -- Update release schedule for v2.7.0 and v2.8.0 (`#3010 `__) `Rémi Kazeroni `__ -- Add ESMValCore Bugfix release v2.7.1 to the release overview table (`#3028 `__) `Valeriu Predoi `__ -- Detailed instructions for release procedure: running recipes and analyzing the output (`#3032 `__) `Valeriu Predoi `__ -- Link backward compatibility policy to top level of ESMValCore changelog (`#3052 `__) `Alistair Sellar `__ -- Update release instructions (`#3066 `__) `Rémi Kazeroni `__ -- Updated docs and tests regarding new `search_esgf` option (`#3069 `__) `Manuel Schlund `__ -- Update script to draft release notes (`#3070 `__) `Rémi Kazeroni `__ -- Synchronize documentation table of contents with ESMValCore (`#3073 `__) `Bouwe Andela `__ -- Update environment handling in release documentation (`#3096 `__) `Rémi Kazeroni `__ -- Clarify use (or not) of Jasmin climatology files by soil moisture & permafrost recipes (`#3103 `__) `Alistair Sellar `__ -- Add link to recipe portal in the gallery page (`#3113 `__) `Rémi Kazeroni `__ -- Improve stratosphere documentation (`#3114 `__) `Alistair Sellar `__ -- Added note to documentation that not all datasets used in `schlund20jgr` recipes are available on ESGF (`#3121 `__) `Manuel Schlund `__ -- Draft changelog for `v2.8.0` (`#3124 `__) `Rémi Kazeroni `__ -- Documenting broken recipes after recipe testing for releases (`#3129 `__) `Rémi Kazeroni `__ -- Increase ESMValTool version to 2.8.0 and update release dates (`#3136 `__) `Rémi Kazeroni `__ +- Backward compatibility policy (:pull:`2879`) :user:`alistairsellar` +- Suppress installing and reinstalling dependencies with pip during readthedocs builds (:pull:`2913`) :user:`valeriupredoi` +- Update installation instructions (:pull:`2939`) :user:`bouweandela` +- Update documentation for `recipe_extreme_index` (:pull:`2951`) :user:`katjaweigel` +- Update documentation and `recipe_check_obs` (ERA5) (:pull:`2952`) :user:`axel-lauer` +- Updated ICON dataset entry in documentation (:pull:`2954`) :user:`schlunma` +- Add Franziska Winterstein as collaborator in CITATION file (:pull:`3001`) :user:`valeriupredoi` +- Update release schedule for v2.7.0 and v2.8.0 (:pull:`3010`) :user:`remi-kazeroni` +- Add ESMValCore Bugfix release v2.7.1 to the release overview table (:pull:`3028`) :user:`valeriupredoi` +- Detailed instructions for release procedure: running recipes and analyzing the output (:pull:`3032`) :user:`valeriupredoi` +- Link backward compatibility policy to top level of ESMValCore changelog (:pull:`3052`) :user:`alistairsellar` +- Update release instructions (:pull:`3066`) :user:`remi-kazeroni` +- Updated docs and tests regarding new `search_esgf` option (:pull:`3069`) :user:`schlunma` +- Update script to draft release notes (:pull:`3070`) :user:`remi-kazeroni` +- Synchronize documentation table of contents with ESMValCore (:pull:`3073`) :user:`bouweandela` +- Update environment handling in release documentation (:pull:`3096`) :user:`remi-kazeroni` +- Clarify use (or not) of Jasmin climatology files by soil moisture & permafrost recipes (:pull:`3103`) :user:`alistairsellar` +- Add link to recipe portal in the gallery page (:pull:`3113`) :user:`remi-kazeroni` +- Improve stratosphere documentation (:pull:`3114`) :user:`alistairsellar` +- Added note to documentation that not all datasets used in `schlund20jgr` recipes are available on ESGF (:pull:`3121`) :user:`schlunma` +- Draft changelog for `v2.8.0` (:pull:`3124`) :user:`remi-kazeroni` +- Documenting broken recipes after recipe testing for releases (:pull:`3129`) :user:`remi-kazeroni` +- Increase ESMValTool version to 2.8.0 and update release dates (:pull:`3136`) :user:`remi-kazeroni` Diagnostics ~~~~~~~~~~~ -- Cloud diagnostics for Lauer et al. (2023) (`#2750 `__) `Axel Lauer `__ -- Splitting of `flato13ipcc.yml` into separate recipes and adding recipes for regional Figures (`#2156 `__) `katjaweigel `__ -- Adding IPCC AR6 Chapter 3 Figure 3.43 - Pattern Correlation (`#2772 `__) `Lisa Bock `__ -- Adding IPCC AR6 Chapter 3 Fig. 3.42 - Perfmetrics (`#2856 `__) `Lisa Bock `__ -- Comment missing datasets and remove deprecated argument in `recipe_climate_change_hotspot` (`#2920 `__) `sloosvel `__ -- Add plot type `annual_cycle` to multi-dataset monitoring diagnostic (`#2922 `__) `Manuel Schlund `__ -- Adding IPCC AR6 Chapter 3 Fig. 3.19 - Speed-Up Of Zonal Mean Wind (`#2984 `__) `Lisa Bock `__ -- Adding IPCC AR6 Chapter 3 Fig. 3.9 - Attribution (`#2986 `__) `Lisa Bock `__ -- Obs4mips CERES-EBAF: update version to latest available through esgf in `recipe_validation.yml` (`#3002 `__) `Valeriu Predoi `__ -- Improve flexibility of cloud diagnostics (`#3016 `__) `Axel Lauer `__ -- Let `recipe_impact.yml` write a CSV file that can directly be used in C4I portal (`#2258 `__) `Peter Kalverla `__ -- Fix version numbers of native6 datasets in recipes (`#3041`_) `Rémi Kazeroni `__ -- Removed automatic conversion of precipitation units from monitoring diagnostic (`#3049`_) `Manuel Schlund `__. -- Updated recipes for ESMValCore v2.8 (`#3064 `__) `Manuel Schlund `__ -- Fix `cos22esd` for release of 2.8 (`#3097 `__) `sloosvel `__ -- Diagnostic for `recipe_autoassess_stratosphere.yml`: remove unused feature incompatible with Matplotlib=3.7.1 (`#3089 `__) `Valeriu Predoi `__ -- Fix numpy deprecation in `hype` diagnostic (`#3101 `__) `Peter Kalverla `__ -- Remove superseded radiation recipes (`#3115`_) `Alistair Sellar `__ -- Removed `fx_variables` in `recipe_mpqb_xch4` and `recipe_lauer22jclim_fig8` (`#3117 `__) `Axel Lauer `__ -- Update Python example recipe (`#3119 `__) `Bouwe Andela `__ -- Updated figure settings to account for newer matplotlib version (`#3133 `__) `katjaweigel `__ +- Cloud diagnostics for Lauer et al. (2023) (:pull:`2750`) :user:`axel-lauer` +- Splitting of `flato13ipcc.yml` into separate recipes and adding recipes for regional Figures (:pull:`2156`) :user:`katjaweigel` +- Adding IPCC AR6 Chapter 3 Figure 3.43 - Pattern Correlation (:pull:`2772`) :user:`LisaBock` +- Adding IPCC AR6 Chapter 3 Fig. 3.42 - Perfmetrics (:pull:`2856`) :user:`LisaBock` +- Comment missing datasets and remove deprecated argument in `recipe_climate_change_hotspot` (:pull:`2920`) :user:`sloosvel` +- Add plot type `annual_cycle` to multi-dataset monitoring diagnostic (:pull:`2922`) :user:`schlunma` +- Adding IPCC AR6 Chapter 3 Fig. 3.19 - Speed-Up Of Zonal Mean Wind (:pull:`2984`) :user:`LisaBock` +- Adding IPCC AR6 Chapter 3 Fig. 3.9 - Attribution (:pull:`2986`) :user:`LisaBock` +- Obs4mips CERES-EBAF: update version to latest available through esgf in `recipe_validation.yml` (:pull:`3002`) :user:`valeriupredoi` +- Improve flexibility of cloud diagnostics (:pull:`3016`) :user:`axel-lauer` +- Let `recipe_impact.yml` write a CSV file that can directly be used in C4I portal (:pull:`2258`) :user:`Peter9192` +- Fix version numbers of native6 datasets in recipes (`#3041`_) :user:`remi-kazeroni` +- Removed automatic conversion of precipitation units from monitoring diagnostic (`#3049`_) :user:`schlunma`. +- Updated recipes for ESMValCore v2.8 (:pull:`3064`) :user:`schlunma` +- Fix `cos22esd` for release of 2.8 (:pull:`3097`) :user:`sloosvel` +- Diagnostic for `recipe_autoassess_stratosphere.yml`: remove unused feature incompatible with Matplotlib=3.7.1 (:pull:`3089`) :user:`valeriupredoi` +- Fix numpy deprecation in `hype` diagnostic (:pull:`3101`) :user:`Peter9192` +- Remove superseded radiation recipes (`#3115`_) :user:`alistairsellar` +- Removed `fx_variables` in `recipe_mpqb_xch4` and `recipe_lauer22jclim_fig8` (:pull:`3117`) :user:`axel-lauer` +- Update Python example recipe (:pull:`3119`) :user:`bouweandela` +- Updated figure settings to account for newer matplotlib version (:pull:`3133`) :user:`katjaweigel` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Earth System Data Cube (ESDC) cmorizer (`#2799 `__) `Brei Soliño `__ -- Added CMORizer for Landschützer2020 (spco2) (`#2908 `__) `Manuel Schlund `__ -- Added CMORizer for MOBO-DIC_MPIM (dissic) (`#2909 `__) `Manuel Schlund `__ -- Added CMORizer for OceanSODA-ETHZ (areacello, co3os, dissicos, fgco2, phos, spco2, talkos) (`#2915 `__) `Manuel Schlund `__ -- Extension of ERA-Interim CMORizer (cl, cli, clw, lwp, rlut, rlutcs, rsut, rsutcs) (`#2923 `__) `Axel Lauer `__ -- Add JRA-25 cmorizer (clt, hus, prw, rlut, rlutcs, rsut, rsutcs) (`#2927 `__) `Lisa Bock `__ -- New CMORizers for datasets from the NCEP family (NCEP-DOE-R2, NCEP-NCAR-R1, NOAA-CIRES-20CR) (`#2931 `__) `Birgit Hassler `__ -- Updates to the recipes that use the NCEP reanalysis dataset (`#2932 `__) `Birgit Hassler `__ -- MERRA2 cmorizer convert vertical level coordinate units from hPa to Pa (`#3003 `__) `Valeriu Predoi `__ -- MERRA2 cmorizer set UNLIMITED time coordinate (`#3006 `__) `Valeriu Predoi `__ -- Added CMORizers for TCOM-CH4 (CH4) and TCOM-N2O (N2O) (`#3014 `__) `Manuel Schlund `__ -- Update HadISST cmorizer to include recent years (`#3027 `__) `Rémi Kazeroni `__ +- Earth System Data Cube (ESDC) cmorizer (:pull:`2799`) :user:`bsolino` +- Added CMORizer for Landschützer2020 (spco2) (:pull:`2908`) :user:`schlunma` +- Added CMORizer for MOBO-DIC_MPIM (dissic) (:pull:`2909`) :user:`schlunma` +- Added CMORizer for OceanSODA-ETHZ (areacello, co3os, dissicos, fgco2, phos, spco2, talkos) (:pull:`2915`) :user:`schlunma` +- Extension of ERA-Interim CMORizer (cl, cli, clw, lwp, rlut, rlutcs, rsut, rsutcs) (:pull:`2923`) :user:`axel-lauer` +- Add JRA-25 cmorizer (clt, hus, prw, rlut, rlutcs, rsut, rsutcs) (:pull:`2927`) :user:`LisaBock` +- New CMORizers for datasets from the NCEP family (NCEP-DOE-R2, NCEP-NCAR-R1, NOAA-CIRES-20CR) (:pull:`2931`) :user:`hb326` +- Updates to the recipes that use the NCEP reanalysis dataset (:pull:`2932`) :user:`hb326` +- MERRA2 cmorizer convert vertical level coordinate units from hPa to Pa (:pull:`3003`) :user:`valeriupredoi` +- MERRA2 cmorizer set UNLIMITED time coordinate (:pull:`3006`) :user:`valeriupredoi` +- Added CMORizers for TCOM-CH4 (CH4) and TCOM-N2O (N2O) (:pull:`3014`) :user:`schlunma` +- Update HadISST cmorizer to include recent years (:pull:`3027`) :user:`remi-kazeroni` Automatic testing ~~~~~~~~~~~~~~~~~ -- Add DKRZ/Levante batch scripts for release recipe running (`#2883 `__) `Valeriu Predoi `__ -- Remove `pytest-flake8` and call the use of `flake8` straight (`#2904 `__) `Valeriu Predoi `__ -- Unpin `flake8` (`#2937 `__) `Valeriu Predoi `__ -- Fix failing tests that use deprecated feature of `sklearn` (`#2961 `__) `Manuel Schlund `__ -- Fix recipe loading tests for esmvalcore before and after version 2.8 (`#3020 `__) `Valeriu Predoi `__ -- Update recipe load test for v2.8 (`#3040 `__) `Bouwe Andela `__ -- Test running recipes with the development version of ESMValCore (`#3072 `__) `Bouwe Andela `__ -- Fix `test_naming.py` so it doesn't let through directories that need be ignored (`#3082 `__) `Valeriu Predoi `__ -- Conda environment files for interim use of `esmvalcore=2.8.0rc1` (`#3090 `__) `Valeriu Predoi `__ -- Move `flake8` check to a step separate from installation on CircleCI (`#3105 `__) `Bouwe Andela `__ -- Recreate conda lock file to harpoon esmvalcore=2.8.0rc1 (`#3108 `__) `Valeriu Predoi `__ -- Update batch script generation to run all recipes in one command (`#3130 `__) `Rémi Kazeroni `__ +- Add DKRZ/Levante batch scripts for release recipe running (:pull:`2883`) :user:`valeriupredoi` +- Remove `pytest-flake8` and call the use of `flake8` straight (:pull:`2904`) :user:`valeriupredoi` +- Unpin `flake8` (:pull:`2937`) :user:`valeriupredoi` +- Fix failing tests that use deprecated feature of `sklearn` (:pull:`2961`) :user:`schlunma` +- Fix recipe loading tests for esmvalcore before and after version 2.8 (:pull:`3020`) :user:`valeriupredoi` +- Update recipe load test for v2.8 (:pull:`3040`) :user:`bouweandela` +- Test running recipes with the development version of ESMValCore (:pull:`3072`) :user:`bouweandela` +- Fix `test_naming.py` so it doesn't let through directories that need be ignored (:pull:`3082`) :user:`valeriupredoi` +- Conda environment files for interim use of `esmvalcore=2.8.0rc1` (:pull:`3090`) :user:`valeriupredoi` +- Move `flake8` check to a step separate from installation on CircleCI (:pull:`3105`) :user:`bouweandela` +- Recreate conda lock file to harpoon esmvalcore=2.8.0rc1 (:pull:`3108`) :user:`valeriupredoi` +- Update batch script generation to run all recipes in one command (:pull:`3130`) :user:`remi-kazeroni` Installation ~~~~~~~~~~~~ -- Merge release branch `release_270stable` in main so we pick up unsquashed commits and set the correct version 2.7.0 for main (and up version in CITATION.cff) (`#2896 `__) `Valeriu Predoi `__ -- Unpin `NetCDF4` (`#2929 `__) `Valeriu Predoi `__ -- Unpin `cf-units` (`#2930 `__) `Bouwe Andela `__ -- Set the version number on the development branches to one minor version more than the last release (`#2964 `__) `Bouwe Andela `__ -- Pin `shapely<2.0.0` for linux64 (`#2970 `__) `Valeriu Predoi `__ -- Unpin `matplotlib` (`#3068 `__) `Valeriu Predoi `__ -- Add `packaging` as direct dependency to ESMValTool (`#3099 `__) `Valeriu Predoi `__ -- Re-pin sphinx to latest (6.1.3) and add nbsphinx to the environment (`#3118 `__) `Valeriu Predoi `__ -- Conda environment files for esmvalcore=2.8.0rc2 (`#3120 `__) `Rémi Kazeroni `__ -- Remove rc (release candidates) conda channel and re-pin esmvalcore to new stable 2.8 (`#3131 `__) `Valeriu Predoi `__ +- Merge release branch `release_270stable` in main so we pick up unsquashed commits and set the correct version 2.7.0 for main (and up version in CITATION.cff) (:pull:`2896`) :user:`valeriupredoi` +- Unpin `NetCDF4` (:pull:`2929`) :user:`valeriupredoi` +- Unpin `cf-units` (:pull:`2930`) :user:`bouweandela` +- Set the version number on the development branches to one minor version more than the last release (:pull:`2964`) :user:`bouweandela` +- Pin `shapely<2.0.0` for linux64 (:pull:`2970`) :user:`valeriupredoi` +- Unpin `matplotlib` (:pull:`3068`) :user:`valeriupredoi` +- Add `packaging` as direct dependency to ESMValTool (:pull:`3099`) :user:`valeriupredoi` +- Re-pin sphinx to latest (6.1.3) and add nbsphinx to the environment (:pull:`3118`) :user:`valeriupredoi` +- Conda environment files for esmvalcore=2.8.0rc2 (:pull:`3120`) :user:`remi-kazeroni` +- Remove rc (release candidates) conda channel and re-pin esmvalcore to new stable 2.8 (:pull:`3131`) :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Read `config-user.yml` using `esmvalcore.config` module (`#2736 `__) `Bouwe Andela `__ -- Make results of recipes `schlund20jgr_*.yml` deterministic (`#2900 `__) `Manuel Schlund `__ -- `Recipe_gier2020bg.yml`: add sorting to SA barplot (`#2905 `__) `Bettina Gier `__ -- Add the outline of a climatological tropopause to the zonalmean_profile plots (`#2947 `__) `FranziskaWinterstein `__ -- Update data finder imports (`#2958 `__) `Bouwe Andela `__ -- Add support for the upcoming ESMValCore v2.8 release to the recipe filler tool (`#2995 `__) `Bouwe Andela `__ -- Updated monitoring diagnostics with netCDF output and additional logging (`#3029 `__) `Manuel Schlund `__ -- Use aliases in perfmetrics (`#3058 `__) `FranziskaWinterstein `__ +- Read `config-user.yml` using `esmvalcore.config` module (:pull:`2736`) :user:`bouweandela` +- Make results of recipes `schlund20jgr_*.yml` deterministic (:pull:`2900`) :user:`schlunma` +- `Recipe_gier2020bg.yml`: add sorting to SA barplot (:pull:`2905`) :user:`bettina-gier` +- Add the outline of a climatological tropopause to the zonalmean_profile plots (:pull:`2947`) :user:`FranziskaWinterstein` +- Update data finder imports (:pull:`2958`) :user:`bouweandela` +- Add support for the upcoming ESMValCore v2.8 release to the recipe filler tool (:pull:`2995`) :user:`bouweandela` +- Updated monitoring diagnostics with netCDF output and additional logging (:pull:`3029`) :user:`schlunma` +- Use aliases in perfmetrics (:pull:`3058`) :user:`FranziskaWinterstein` .. _changelog-v2-7-0: @@ -331,81 +441,81 @@ Highlights Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Remove installation of R dependencies from the help message (`#2761 `__) `Rémi Kazeroni `__ +- Remove installation of R dependencies from the help message (:pull:`2761`) :user:`remi-kazeroni` Bug fixes ~~~~~~~~~ -- Fix misplaced provenance records from IPCC AR5 Ch.12 diags (`#2758 `__) `Axel Lauer `__ -- Fix `esmvaltool.utils.testing.regression.compare` module to run with Python<3.10 too (`#2778 `__) `Valeriu Predoi `__ -- Fixed small bug that could lead to wrong pr units in `monitor/multi_datasets.py` (`#2788 `__) `Manuel Schlund `__ -- Pin `xgboost>1.6.1` so we avert documentation failing to build with `1.6.1` (`#2780 `__) `Valeriu Predoi `__ -- Pin `matplotlib-base<3.6.0` to avoid conflict from `mapgenerator` that fails doc builds (`#2830 `__) `Valeriu Predoi `__ -- Fixed wrong latitudes in NDP CMORizer (`#2832 `__) `Manuel Schlund `__ -- Fix indexer in Autoassess supermeans module use a tuple of `(slice(), idx, idx)` (`#2838 `__) `Valeriu Predoi `__ -- Replace xarray ufuncs with bogstandard numpy in weighting/climwip/calibrate_sigmas.py (`#2848 `__) `Valeriu Predoi `__ -- Fix units MERRA2 CMORizer (`#2850 `__) `Axel Lauer `__ -- Fix bug when using log-scale y-axis for ocean transects. (`#2862 `__) `Tomas Torsvik `__ +- Fix misplaced provenance records from IPCC AR5 Ch.12 diags (:pull:`2758`) :user:`axel-lauer` +- Fix `esmvaltool.utils.testing.regression.compare` module to run with Python<3.10 too (:pull:`2778`) :user:`valeriupredoi` +- Fixed small bug that could lead to wrong pr units in `monitor/multi_datasets.py` (:pull:`2788`) :user:`schlunma` +- Pin `xgboost>1.6.1` so we avert documentation failing to build with `1.6.1` (:pull:`2780`) :user:`valeriupredoi` +- Pin `matplotlib-base<3.6.0` to avoid conflict from `mapgenerator` that fails doc builds (:pull:`2830`) :user:`valeriupredoi` +- Fixed wrong latitudes in NDP CMORizer (:pull:`2832`) :user:`schlunma` +- Fix indexer in Autoassess supermeans module use a tuple of `(slice(), idx, idx)` (:pull:`2838`) :user:`valeriupredoi` +- Replace xarray ufuncs with bogstandard numpy in weighting/climwip/calibrate_sigmas.py (:pull:`2848`) :user:`valeriupredoi` +- Fix units MERRA2 CMORizer (:pull:`2850`) :user:`axel-lauer` +- Fix bug when using log-scale y-axis for ocean transects. (:pull:`2862`) :user:`TomasTorsvik` Community ~~~~~~~~~ -- Add MO-paths to config file (`#2784 `__) `mo-tgeddes `__ +- Add MO-paths to config file (:pull:`2784`) `mo-tgeddes `__ Deprecations ~~~~~~~~~~~~ -- Recipe `recipe_esacci_oc.yml` replace with new regrid scheme `nearest_extrapolate` (`#2841 `__) `Valeriu Predoi `__ +- Recipe `recipe_esacci_oc.yml` replace with new regrid scheme `nearest_extrapolate` (:pull:`2841`) :user:`valeriupredoi` Documentation ~~~~~~~~~~~~~ -- Update release schedule for v2.7 (`#2747 `__) `Bouwe Andela `__ -- Add Met Office installation method (`#2751 `__) `mo-tgeddes `__ -- Add release dates for 2023 (`#2769 `__) `Rémi Kazeroni `__ -- Made `maintainer` entry mandatory for published recipes (`#2703 `__) `Manuel Schlund `__ -- Use command with current command line opts for `cffconvert` in documentation (`#2791 `__) `Valeriu Predoi `__ -- Update CMORizer documentation with command options (`#2795 `__) `Rémi Kazeroni `__ -- Fixed broken link for monthly meetings (`#2806 `__) `Rémi Kazeroni `__ -- Update MO obs4MIPs paths in the user configuration file (`#2813 `__) `mo-tgeddes `__ -- Fix Windows incompatible file names in documentation of recipe_climate_change_hotspot.yml (`#2823 `__) `Lee de Mora `__ -- Update documentation for the Landschuetzer 2016 recipe. (`#2801 `__) `Tomas Torsvik `__ -- Fixed anaconda badge in README (`#2866 `__) `Valeriu Predoi `__ -- Update release strategy notes (`#2734 `__) `sloosvel `__ -- Add documentation on how to handle CMORizers for multiple dataset versions (`#2730 `__) `Rémi Kazeroni `__ -- Extending documentation: recipe maintainer + broken recipe policy (`#2719 `__) `Axel Lauer `__ +- Update release schedule for v2.7 (:pull:`2747`) :user:`bouweandela` +- Add Met Office installation method (:pull:`2751`) `mo-tgeddes `__ +- Add release dates for 2023 (:pull:`2769`) :user:`remi-kazeroni` +- Made `maintainer` entry mandatory for published recipes (:pull:`2703`) :user:`schlunma` +- Use command with current command line opts for `cffconvert` in documentation (:pull:`2791`) :user:`valeriupredoi` +- Update CMORizer documentation with command options (:pull:`2795`) :user:`remi-kazeroni` +- Fixed broken link for monthly meetings (:pull:`2806`) :user:`remi-kazeroni` +- Update MO obs4MIPs paths in the user configuration file (:pull:`2813`) `mo-tgeddes `__ +- Fix Windows incompatible file names in documentation of recipe_climate_change_hotspot.yml (:pull:`2823`) :user:`ledm` +- Update documentation for the Landschuetzer 2016 recipe. (:pull:`2801`) :user:`TomasTorsvik` +- Fixed anaconda badge in README (:pull:`2866`) :user:`valeriupredoi` +- Update release strategy notes (:pull:`2734`) :user:`sloosvel` +- Add documentation on how to handle CMORizers for multiple dataset versions (:pull:`2730`) :user:`remi-kazeroni` +- Extending documentation: recipe maintainer + broken recipe policy (:pull:`2719`) :user:`axel-lauer` Diagnostics ~~~~~~~~~~~ -- Recipe and diagnostics for : Tebaldi et al.,ESD, 2021 (`#2052 `__) `debe-kevin `__ -- Figures for IPCC AR6 WG1 Chapter 3 (Atmosphere) (`#2533 `__) `Lisa Bock `__ +- Recipe and diagnostics for : Tebaldi et al.,ESD, 2021 (:pull:`2052`) `debe-kevin `__ +- Figures for IPCC AR6 WG1 Chapter 3 (Atmosphere) (:pull:`2533`) :user:`LisaBock` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Update CERES-EBAF to Ed4.1 (`#2752 `__) `Axel Lauer `__ -- New CMORizer for CALIPSO-ICECLOUD (`#2753 `__) `Axel Lauer `__ -- New CMORizer for CLOUDSAT-L2 (`#2754 `__) `Axel Lauer `__ -- Update MERRA2 cmorizer with extra 2D and 3D variables (`#2774 `__) `Valeriu Predoi `__ +- Update CERES-EBAF to Ed4.1 (:pull:`2752`) :user:`axel-lauer` +- New CMORizer for CALIPSO-ICECLOUD (:pull:`2753`) :user:`axel-lauer` +- New CMORizer for CLOUDSAT-L2 (:pull:`2754`) :user:`axel-lauer` +- Update MERRA2 cmorizer with extra 2D and 3D variables (:pull:`2774`) :user:`valeriupredoi` Automatic testing ~~~~~~~~~~~~~~~~~ -- Pin `netcdf4 != 1.6.1` since that is spitting large numbers of SegFaults (`#2796 `__) `Valeriu Predoi `__ +- Pin `netcdf4 != 1.6.1` since that is spitting large numbers of SegFaults (:pull:`2796`) :user:`valeriupredoi` Installation ~~~~~~~~~~~~ -- Increase esmvalcore version to 2.7.0 in environment files (`#2860 `__) `Valeriu Predoi `__ -- Add iris-esmf-regrid as a dependency (`#2880 `__) `Klaus Zimmermann `__ +- Increase esmvalcore version to 2.7.0 in environment files (:pull:`2860`) :user:`valeriupredoi` +- Add iris-esmf-regrid as a dependency (:pull:`2880`) :user:`zklaus` Improvements ~~~~~~~~~~~~ -- Fix tebaldi21esd (`#2749 `__) `Axel Lauer `__ -- Added option to show basic statistics in plots of `monitor/multi_datasets.py` (`#2790 `__) `Manuel Schlund `__ -- Remove retracted datasets from `recipe_climate_change_hotspot` (`#2854 `__) `sloosvel `__ +- Fix tebaldi21esd (:pull:`2749`) :user:`axel-lauer` +- Added option to show basic statistics in plots of `monitor/multi_datasets.py` (:pull:`2790`) :user:`schlunma` +- Remove retracted datasets from `recipe_climate_change_hotspot` (:pull:`2854`) :user:`sloosvel` .. _changelog-v2-6-0: @@ -431,83 +541,83 @@ This release includes Bug fixes ~~~~~~~~~ -- Fix dtype for Marrmot recipe results (`#2646 `__) `SarahAlidoost `__ -- Adapt test_fix_coords to new version of cf-units (`#2707 `__) `Klaus Zimmermann `__ -- Fix nested axes in `recipe_martin18_grl` and `recipe_li17natcc` (`#2712 `__) `Lukas `__ -- Update common_climdex_preprocessing_for_plots.R (`#2727 `__) `Enrico Arnone `__ +- Fix dtype for Marrmot recipe results (:pull:`2646`) :user:`SarahAlidoost` +- Adapt test_fix_coords to new version of cf-units (:pull:`2707`) :user:`zklaus` +- Fix nested axes in `recipe_martin18_grl` and `recipe_li17natcc` (:pull:`2712`) :user:`lukruh` +- Update common_climdex_preprocessing_for_plots.R (:pull:`2727`) :user:`earnone` Community ~~~~~~~~~ -- Collecting github user names for config-references (`#2677 `__) `Lukas `__ +- Collecting github user names for config-references (:pull:`2677`) :user:`lukruh` Deprecations ~~~~~~~~~~~~ -- Deprecate the function `esmvaltool.diag_scripts.shared.var_name_constraint`. This function is scheduled for removal in v2.8.0. Please use :class:`iris.NameConstraint` with the keyword argument var_name instead: this is an exact replacement. (`#2655 `__) `Manuel Schlund `__ +- Deprecate the function `esmvaltool.diag_scripts.shared.var_name_constraint`. This function is scheduled for removal in v2.8.0. Please use :class:`iris.NameConstraint` with the keyword argument var_name instead: this is an exact replacement. (:pull:`2655`) :user:`schlunma` Documentation ~~~~~~~~~~~~~ -- Documentation Improvements (`#2580 `__) `stacristo `__ -- Fixed broken label in the documentation (`#2616 `__) `Rémi Kazeroni `__ -- Add readthedocs configuration file (`#2627 `__) `Bouwe Andela `__ -- Update the command for building the documentation (`#2622 `__) `Bouwe Andela `__ -- Added DKRZ-Levante to `config-user-example.yml` (`#2632 `__) `Rémi Kazeroni `__ -- Improved documentation on native dataset support (`#2635 `__) `Manuel Schlund `__ -- Add documentation on building and uploading Docker images (`#2662 `__) `Bouwe Andela `__ -- Remove support for Mistral in `config-user-example.yml` (`#2667 `__) `Rémi Kazeroni `__ -- Add note to clarify that CORDEX support is work in progress (`#2682 `__) `Bouwe Andela `__ -- Restore accidentally deleted text from input data docs (`#2683 `__) `Bouwe Andela `__ -- Add running settings note in `recipe_wenzel16nat.yml` documentation (`#2692 `__) `sloosvel `__ -- Add a note on transferring permissions to the release manager (`#2688 `__) `Bouwe Andela `__ -- Update documentation on ESMValTool module at DKRZ (`#2696 `__) `Rémi Kazeroni `__ -- Add note on how to run recipe_wenzel14jgr.yml (`#2717 `__) `sloosvel `__ -- Added conda forge feedstock repo link in README (`#2555 `__) `Valeriu Predoi `__ +- Documentation Improvements (:pull:`2580`) :user:`stacristo` +- Fixed broken label in the documentation (:pull:`2616`) :user:`remi-kazeroni` +- Add readthedocs configuration file (:pull:`2627`) :user:`bouweandela` +- Update the command for building the documentation (:pull:`2622`) :user:`bouweandela` +- Added DKRZ-Levante to `config-user-example.yml` (:pull:`2632`) :user:`remi-kazeroni` +- Improved documentation on native dataset support (:pull:`2635`) :user:`schlunma` +- Add documentation on building and uploading Docker images (:pull:`2662`) :user:`bouweandela` +- Remove support for Mistral in `config-user-example.yml` (:pull:`2667`) :user:`remi-kazeroni` +- Add note to clarify that CORDEX support is work in progress (:pull:`2682`) :user:`bouweandela` +- Restore accidentally deleted text from input data docs (:pull:`2683`) :user:`bouweandela` +- Add running settings note in `recipe_wenzel16nat.yml` documentation (:pull:`2692`) :user:`sloosvel` +- Add a note on transferring permissions to the release manager (:pull:`2688`) :user:`bouweandela` +- Update documentation on ESMValTool module at DKRZ (:pull:`2696`) :user:`remi-kazeroni` +- Add note on how to run recipe_wenzel14jgr.yml (:pull:`2717`) :user:`sloosvel` +- Added conda forge feedstock repo link in README (:pull:`2555`) :user:`valeriupredoi` Diagnostics ~~~~~~~~~~~ -- Compute bias instead of correlation in `compare_salinity.py` (`#2642 `__) `sloosvel `__ -- Update monitor diagnostics (`#2608 `__) `Manuel Schlund `__ -- Add new Psyplot diagnostic (`#2653 `__) `Manuel Schlund `__ -- Reduce memory usage of lisflood recipe (`#2634 `__) `Stefan Verhoeven `__ -- Provenance in ocean diagnostics (`#2651 `__) `Tomas Lovato `__ -- Extend monitor diagnostics with multi-dataset plots (`#2657 `__) `Manuel Schlund `__ -- Recipe and diagnostics to plot climate change hotspots: Cos et al., ESD 2022 (`#2614 `__) `Pep Cos `__ -- Update plots of consecutive dry days recipe (`#2671 `__) `Bouwe Andela `__ -- Fix the format of ids in Hype forcing files (`#2679 `__) `SarahAlidoost `__ -- WFlow diagnostic script: remove manual rechunking (`#2680 `__) `Peter Kalverla `__ +- Compute bias instead of correlation in `compare_salinity.py` (:pull:`2642`) :user:`sloosvel` +- Update monitor diagnostics (:pull:`2608`) :user:`schlunma` +- Add new Psyplot diagnostic (:pull:`2653`) :user:`schlunma` +- Reduce memory usage of lisflood recipe (:pull:`2634`) :user:`sverhoeven` +- Provenance in ocean diagnostics (:pull:`2651`) :user:`tomaslovato` +- Extend monitor diagnostics with multi-dataset plots (:pull:`2657`) :user:`schlunma` +- Recipe and diagnostics to plot climate change hotspots: Cos et al., ESD 2022 (:pull:`2614`) :user:`pepcos` +- Update plots of consecutive dry days recipe (:pull:`2671`) :user:`bouweandela` +- Fix the format of ids in Hype forcing files (:pull:`2679`) :user:`SarahAlidoost` +- WFlow diagnostic script: remove manual rechunking (:pull:`2680`) :user:`Peter9192` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Extending the HadCRUT5 cmorizer (`#2509 `__) `Lisa Bock `__ -- Cmorize Kadow2020 dataset (`#2513 `__) `Lisa Bock `__ -- Cmorize NOAAGlobalTemp dataset (`#2515 `__) `Lisa Bock `__ -- Add option to CMORize ts as tos in ESACCI data (`#2731 `__) `sloosvel `__ +- Extending the HadCRUT5 cmorizer (:pull:`2509`) :user:`LisaBock` +- Cmorize Kadow2020 dataset (:pull:`2513`) :user:`LisaBock` +- Cmorize NOAAGlobalTemp dataset (:pull:`2515`) :user:`LisaBock` +- Add option to CMORize ts as tos in ESACCI data (:pull:`2731`) :user:`sloosvel` Automatic testing ~~~~~~~~~~~~~~~~~ -- Add a tool for comparing recipe runs to previous runs (`#2613 `__) `Bouwe Andela `__ -- Ignore NCL interface files when comparing recipe runs (`#2673 `__) `Bouwe Andela `__ -- Add a short version of recipe deangelis15nat for testing (`#2685 `__) `katjaweigel `__ -- Expanded recipe output comparison tool to better handle absolute paths in output (`#2709 `__) `Manuel Schlund `__ -- Update development infrastructure (`#2663 `__) `Bouwe Andela `__ +- Add a tool for comparing recipe runs to previous runs (:pull:`2613`) :user:`bouweandela` +- Ignore NCL interface files when comparing recipe runs (:pull:`2673`) :user:`bouweandela` +- Add a short version of recipe deangelis15nat for testing (:pull:`2685`) :user:`katjaweigel` +- Expanded recipe output comparison tool to better handle absolute paths in output (:pull:`2709`) :user:`schlunma` +- Update development infrastructure (:pull:`2663`) :user:`bouweandela` Installation ~~~~~~~~~~~~ -- Removed `package/meta.yaml` and all references to it (`#2612 `__) `Manuel Schlund `__ +- Removed `package/meta.yaml` and all references to it (:pull:`2612`) :user:`schlunma` Improvements ~~~~~~~~~~~~ -- Improved handling of weights in MLR diagnostics (`#2625 `__) `Manuel Schlund `__ -- Fixed order of variables in perfemetrics plot of Anav13jclim recipe (`#2706 `__) `Manuel Schlund `__ -- Added input file sorting to many diagnostic to make output exactly reproducible (`#2710 `__) `Manuel Schlund `__ -- Removed 'ancestors' attributes before saving netcdf files in emergent constraints diagnostics (`#2713 `__) `Manuel Schlund `__ +- Improved handling of weights in MLR diagnostics (:pull:`2625`) :user:`schlunma` +- Fixed order of variables in perfemetrics plot of Anav13jclim recipe (:pull:`2706`) :user:`schlunma` +- Added input file sorting to many diagnostic to make output exactly reproducible (:pull:`2710`) :user:`schlunma` +- Removed 'ancestors' attributes before saving netcdf files in emergent constraints diagnostics (:pull:`2713`) :user:`schlunma` .. _changelog-v2-5-0: @@ -533,115 +643,115 @@ This release includes Backwards incompatible changes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Streamline observations download (`#1657 `__) `Javier Vegas-Regidor `__. This change removes the ``cmorize_obs`` command which has previously been used to CMORize observations and other datasets. The new command ``esmvaltool data`` provides many new features apart from the CMORization (``esmvaltool data format``), for example, automatic downloading of observational datasets (``esmvaltool data download``). More details on this can be found :ref:`here` and :ref:`here`. -- Dropped Python 3.7 (`#2585 `__) `Manuel Schlund `__. ESMValTool v2.5.0 dropped support for Python 3.7. From now on Python >=3.8 is required to install ESMValTool. The main reason for this is that conda-forge dropped support for Python 3.7 for OSX and arm64 (more details are given `here `__). +- Streamline observations download (:pull:`1657`) `Javier Vegas-Regidor `__. This change removes the ``cmorize_obs`` command which has previously been used to CMORize observations and other datasets. The new command ``esmvaltool data`` provides many new features apart from the CMORization (``esmvaltool data format``), for example, automatic downloading of observational datasets (``esmvaltool data download``). More details on this can be found :ref:`here` and :ref:`here`. +- Dropped Python 3.7 (:pull:`2585`) :user:`schlunma`. ESMValTool v2.5.0 dropped support for Python 3.7. From now on Python >=3.8 is required to install ESMValTool. The main reason for this is that conda-forge dropped support for Python 3.7 for OSX and arm64 (more details are given `here `__). Bug fixes ~~~~~~~~~ -- Remove the use of `esmvalgroup` channel from the conda install Github Action workflow (`#2420 `__) `Valeriu Predoi `__ -- Ignore .pymon-journal file in test discovery (`#2491 `__) `Klaus Zimmermann `__ -- Relocate pytest-monitor outputted database `.pymon` so `.pymon-journal` file should not be looked for by `pytest` (`#2501 `__) `Valeriu Predoi `__ -- Re-establish Python 3.7 compatibility (`#2506 `__) `Klaus Zimmermann `__ -- Update intersphinx mapping (`#2531 `__) `Klaus Zimmermann `__ -- Fixed `KeyError` in `recipe_ocean_bgc.yml` (`#2540 `__) `Manuel Schlund `__ -- Corrected ESACCI-SEA-SURFACE-SALINITY from OBS to OBS6 (`#2542 `__) `Axel Lauer `__ -- Fixed `recipe_kcs.yml` (`#2541 `__) `Manuel Schlund `__ -- Fix MDER diagnostic regression_stepwise (`#2545 `__) `Axel Lauer `__ -- Fix for recipe_wenzel16nat (`#2547 `__) `Axel Lauer `__ -- Fixed `recipe_carvalhais14nat` and removed deprecated use of np.float (`#2558 `__) `Manuel Schlund `__ -- Fix `recipe_wenzel14jgr` (`#2577 `__) `Rémi Kazeroni `__ -- Fixed various recipes by removing faulty or non-available datasets (`#2563 `__) `Manuel Schlund `__ -- Remove missing CMIP5 data from 2 recipes (`#2579 `__) `Rémi Kazeroni `__ -- Fix `recipe_seaice` (`#2578 `__) `Rémi Kazeroni `__ -- Fix `recipe_climwip_brunner20esd` (`#2581 `__) `Rémi Kazeroni `__ +- Remove the use of `esmvalgroup` channel from the conda install Github Action workflow (:pull:`2420`) :user:`valeriupredoi` +- Ignore .pymon-journal file in test discovery (:pull:`2491`) :user:`zklaus` +- Relocate pytest-monitor outputted database `.pymon` so `.pymon-journal` file should not be looked for by `pytest` (:pull:`2501`) :user:`valeriupredoi` +- Re-establish Python 3.7 compatibility (:pull:`2506`) :user:`zklaus` +- Update intersphinx mapping (:pull:`2531`) :user:`zklaus` +- Fixed `KeyError` in `recipe_ocean_bgc.yml` (:pull:`2540`) :user:`schlunma` +- Corrected ESACCI-SEA-SURFACE-SALINITY from OBS to OBS6 (:pull:`2542`) :user:`axel-lauer` +- Fixed `recipe_kcs.yml` (:pull:`2541`) :user:`schlunma` +- Fix MDER diagnostic regression_stepwise (:pull:`2545`) :user:`axel-lauer` +- Fix for recipe_wenzel16nat (:pull:`2547`) :user:`axel-lauer` +- Fixed `recipe_carvalhais14nat` and removed deprecated use of np.float (:pull:`2558`) :user:`schlunma` +- Fix `recipe_wenzel14jgr` (:pull:`2577`) :user:`remi-kazeroni` +- Fixed various recipes by removing faulty or non-available datasets (:pull:`2563`) :user:`schlunma` +- Remove missing CMIP5 data from 2 recipes (:pull:`2579`) :user:`remi-kazeroni` +- Fix `recipe_seaice` (:pull:`2578`) :user:`remi-kazeroni` +- Fix `recipe_climwip_brunner20esd` (:pull:`2581`) :user:`remi-kazeroni` Deprecations ~~~~~~~~~~~~ -- Remove `--use-feature=2020-resolver` command line option for obsolete pip 2020 solver (`#2493 `__) `Valeriu Predoi `__ -- Renamed vertical regridding schemes in affected recipes (`#2487 `__) `Manuel Schlund `__ +- Remove `--use-feature=2020-resolver` command line option for obsolete pip 2020 solver (:pull:`2493`) :user:`valeriupredoi` +- Renamed vertical regridding schemes in affected recipes (:pull:`2487`) :user:`schlunma` Documentation ~~~~~~~~~~~~~ -- Update release manager for v2.5 (`#2429 `__) `Axel Lauer `__ -- Mention ENES Climate Analytics service (`#2438 `__) `Bouwe Andela `__ -- Add recipe overview page (`#2439 `__) `Bouwe Andela `__ -- Fix pointer to Tutorial lesson on preprocessor from 05 to 06 (`#2473 `__) `Valeriu Predoi `__ -- Removed obsolete option `synda-download` from documentation (`#2485 `__) `Manuel Schlund `__ -- Update CMUG XCH4 docu figure (`#2502 `__) `Axel Lauer `__ -- Add Python=3.10 to package info, update Circle CI auto install and documentation for Python=3.10 (`#2503 `__) `Manuel Schlund `__ -- Unify user configuration file (`#2507 `__) `Manuel Schlund `__ -- Synchronized `config-user.yml` with version from ESMValCore (`#2516 `__) `Manuel Schlund `__ -- CITATION.cff fix and automatic validation of your citation metadata (`#2517 `__) `Abel Siqueira `__ -- Add backwards incompatible changes at the top of the release notes draft (`#2431 `__) `Bouwe Andela `__ -- Fixed intersphinx mapping of `scipy` (`#2523 `__) `Manuel Schlund `__ -- Add authors to citation cff (`#2525 `__) `SarahAlidoost `__ -- Update documentation on running a recipe (`#2432 `__) `Bouwe Andela `__ -- Fix recipe `hydrology/recipe_wflow.yml` (`#2549 `__) `Rémi Kazeroni `__ -- Update `draft_release_notes.py` for new release (`#2553 `__) `Manuel Schlund `__ -- Added stand with Ukraine badge (`#2565 `__) `Valeriu Predoi `__ -- Updated CREM docu (recipe_williams09climdyn.yml) (`#2567 `__) `Axel Lauer `__ -- First draft for v2.5.0 changelog (`#2554 `__) `Manuel Schlund `__ -- Replace nonfunctional Github Actions badge with cool one in README (`#2582 `__) `Valeriu Predoi `__ -- Updated changelog (`#2589 `__) `Manuel Schlund `__ -- Updated release strategy with current release and upcoming release (`#2597 `__) `Manuel Schlund `__ -- Increased ESMValTool version to 2.5.0 (`#2600 `__) `Manuel Schlund `__ +- Update release manager for v2.5 (:pull:`2429`) :user:`axel-lauer` +- Mention ENES Climate Analytics service (:pull:`2438`) :user:`bouweandela` +- Add recipe overview page (:pull:`2439`) :user:`bouweandela` +- Fix pointer to Tutorial lesson on preprocessor from 05 to 06 (:pull:`2473`) :user:`valeriupredoi` +- Removed obsolete option `synda-download` from documentation (:pull:`2485`) :user:`schlunma` +- Update CMUG XCH4 docu figure (:pull:`2502`) :user:`axel-lauer` +- Add Python=3.10 to package info, update Circle CI auto install and documentation for Python=3.10 (:pull:`2503`) :user:`schlunma` +- Unify user configuration file (:pull:`2507`) :user:`schlunma` +- Synchronized `config-user.yml` with version from ESMValCore (:pull:`2516`) :user:`schlunma` +- CITATION.cff fix and automatic validation of your citation metadata (:pull:`2517`) :user:`abelsiqueira` +- Add backwards incompatible changes at the top of the release notes draft (:pull:`2431`) :user:`bouweandela` +- Fixed intersphinx mapping of `scipy` (:pull:`2523`) :user:`schlunma` +- Add authors to citation cff (:pull:`2525`) :user:`SarahAlidoost` +- Update documentation on running a recipe (:pull:`2432`) :user:`bouweandela` +- Fix recipe `hydrology/recipe_wflow.yml` (:pull:`2549`) :user:`remi-kazeroni` +- Update `draft_release_notes.py` for new release (:pull:`2553`) :user:`schlunma` +- Added stand with Ukraine badge (:pull:`2565`) :user:`valeriupredoi` +- Updated CREM docu (recipe_williams09climdyn.yml) (:pull:`2567`) :user:`axel-lauer` +- First draft for v2.5.0 changelog (:pull:`2554`) :user:`schlunma` +- Replace nonfunctional Github Actions badge with cool one in README (:pull:`2582`) :user:`valeriupredoi` +- Updated changelog (:pull:`2589`) :user:`schlunma` +- Updated release strategy with current release and upcoming release (:pull:`2597`) :user:`schlunma` +- Increased ESMValTool version to 2.5.0 (:pull:`2600`) :user:`schlunma` Diagnostics ~~~~~~~~~~~ -- AutoAssess: Add new diagnostic for radiation budget (`#2282 `__) `Jon Lillis `__ -- CMUG Sea Surface Salinity dataset and diagnostic (`#1832 `__) `Javier Vegas-Regidor `__ -- Recipe with new diagnostics for ESA-CMUG H2O (`#1834 `__) `katjaweigel `__ -- Cleaned Schlund et al. (2020) recipe and fixed small bugs in corresponding diagnostic (`#2484 `__) `Manuel Schlund `__ -- Add ESA CCI LST cmorizer and diagnostic (`#1897 `__) `morobking `__ -- XCH4 ESA CMUG diagnostics (subset of the MPQB diagnostics) (`#1960 `__) `Birgit Hassler `__ -- Add support for ESACCI Ocean Color (Chlorophyll) observations (`#2055 `__) `ulrikaw-cloud `__ -- Updated `recipe_zmnam.yml` with hemisphere selection (`#2230 `__) `fserva `__ -- Add recipe and diagnostic scripts to compute figures of D9.4 of ISENES3 (`#2441 `__) `sloosvel `__ -- Save resampled climates from KCS diagnostic local_resampling.py (`#2221 `__) `Emma Daniels `__ -- Use years from KCS recipe (`#2223 `__) `Emma Daniels `__ -- Recipe to plot generic output from the preprocessor (`#2184 `__) `Javier Vegas-Regidor `__ -- Fixed provenance tracking for emergent constraint diagnostics (`#2573 `__) `Manuel Schlund `__ +- AutoAssess: Add new diagnostic for radiation budget (:pull:`2282`) :user:`Jon-Lillis` +- CMUG Sea Surface Salinity dataset and diagnostic (:pull:`1832`) `Javier Vegas-Regidor `__ +- Recipe with new diagnostics for ESA-CMUG H2O (:pull:`1834`) :user:`katjaweigel` +- Cleaned Schlund et al. (2020) recipe and fixed small bugs in corresponding diagnostic (:pull:`2484`) :user:`schlunma` +- Add ESA CCI LST cmorizer and diagnostic (:pull:`1897`) :user:`morobking` +- XCH4 ESA CMUG diagnostics (subset of the MPQB diagnostics) (:pull:`1960`) :user:`hb326` +- Add support for ESACCI Ocean Color (Chlorophyll) observations (:pull:`2055`) `ulrikaw-cloud `__ +- Updated `recipe_zmnam.yml` with hemisphere selection (:pull:`2230`) :user:`fserva` +- Add recipe and diagnostic scripts to compute figures of D9.4 of ISENES3 (:pull:`2441`) :user:`sloosvel` +- Save resampled climates from KCS diagnostic local_resampling.py (:pull:`2221`) :user:`Emmadd` +- Use years from KCS recipe (:pull:`2223`) :user:`Emmadd` +- Recipe to plot generic output from the preprocessor (:pull:`2184`) `Javier Vegas-Regidor `__ +- Fixed provenance tracking for emergent constraint diagnostics (:pull:`2573`) :user:`schlunma` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Ensure dummy data for cmorize_obs_woa test are written to the correct directory (`#2451 `__) `Emma Hogan `__ +- Ensure dummy data for cmorize_obs_woa test are written to the correct directory (:pull:`2451`) :user:`ehogan` - Add ESA CCI LST cmorizer and diagnostic (see previous section `Diagnostics`) Automatic testing ~~~~~~~~~~~~~~~~~ -- Run a nightly Github Actions workflow to monitor tests memory per test (configurable for other metrics too) and lists the slowest 100 tests (`#2449 `__) `Valeriu Predoi `__ -- Fix individual pytest runs broken due to missing explicit imports from `iris` and adding a couple missing package markers (`#2455 `__) `Valeriu Predoi `__ -- Add Python=3.10 to Github Actions and switch to Python=3.10 for the Github Action that builds the PyPi package (`#2488 `__) `Valeriu Predoi `__ -- Switch all github actions from miniconda to mambaforge (`#2498 `__) `Klaus Zimmermann `__ -- Pin `flake8<4` to have actual FLAKE8 error printed if tests fail and not garbage (`#2492 `__) `Valeriu Predoi `__ -- Implementing conda lock (`#2193 `__) `Valeriu Predoi `__ -- [Docker] Update Docker container builds with correct installations of Julia (`#2530 `__) `Valeriu Predoi `__ +- Run a nightly Github Actions workflow to monitor tests memory per test (configurable for other metrics too) and lists the slowest 100 tests (:pull:`2449`) :user:`valeriupredoi` +- Fix individual pytest runs broken due to missing explicit imports from `iris` and adding a couple missing package markers (:pull:`2455`) :user:`valeriupredoi` +- Add Python=3.10 to Github Actions and switch to Python=3.10 for the Github Action that builds the PyPi package (:pull:`2488`) :user:`valeriupredoi` +- Switch all github actions from miniconda to mambaforge (:pull:`2498`) :user:`zklaus` +- Pin `flake8<4` to have actual FLAKE8 error printed if tests fail and not garbage (:pull:`2492`) :user:`valeriupredoi` +- Implementing conda lock (:pull:`2193`) :user:`valeriupredoi` +- [Docker] Update Docker container builds with correct installations of Julia (:pull:`2530`) :user:`valeriupredoi` - Update Linux condalock file (various pull requests) github-actions[bot] Installation ~~~~~~~~~~~~ -- Comment out release candidate channel in environment.yml (`#2417 `__) `Klaus Zimmermann `__ -- Comment out rc channel in osx environment file (`#2421 `__) `Valeriu Predoi `__ -- Add `python-cdo` as conda-forge dependency in environment files to ensure `cdo` gets used from conda-forge and not pip (`#2469 `__) `Valeriu Predoi `__ -- Install rasterio from conda-forge and avoid issues from python=3.10 (`#2479 `__) `Valeriu Predoi `__ -- Updated dependencies with new ESMValCore version (`#2599 `__) `Manuel Schlund `__ +- Comment out release candidate channel in environment.yml (:pull:`2417`) :user:`zklaus` +- Comment out rc channel in osx environment file (:pull:`2421`) :user:`valeriupredoi` +- Add `python-cdo` as conda-forge dependency in environment files to ensure `cdo` gets used from conda-forge and not pip (:pull:`2469`) :user:`valeriupredoi` +- Install rasterio from conda-forge and avoid issues from python=3.10 (:pull:`2479`) :user:`valeriupredoi` +- Updated dependencies with new ESMValCore version (:pull:`2599`) :user:`schlunma` Improvements ~~~~~~~~~~~~ -- Remove use of OBS and use CMIP instead in `examples/recipe_ncl.yml` (`#2494 `__) `Valeriu Predoi `__ -- Expanded `recipe_preprocessor_test.yml` to account for new `multi_model_statistics` features (`#2519 `__) `Manuel Schlund `__ -- Updated piControl periods for recipes that use KACE-1-0-G (`#2537 `__) `Manuel Schlund `__ -- Reduced time range in `recipe_globwat.yml` (`#2548 `__) `Manuel Schlund `__ -- Removed models with missing data from recipe_williams09climdyn.yml (`#2566 `__) `Axel Lauer `__ -- Restored original versions of `recipe_schlund20esd.yml` and `recipe_meehl20sciadv.yml` (`#2583 `__) `Manuel Schlund `__ +- Remove use of OBS and use CMIP instead in `examples/recipe_ncl.yml` (:pull:`2494`) :user:`valeriupredoi` +- Expanded `recipe_preprocessor_test.yml` to account for new `multi_model_statistics` features (:pull:`2519`) :user:`schlunma` +- Updated piControl periods for recipes that use KACE-1-0-G (:pull:`2537`) :user:`schlunma` +- Reduced time range in `recipe_globwat.yml` (:pull:`2548`) :user:`schlunma` +- Removed models with missing data from recipe_williams09climdyn.yml (:pull:`2566`) :user:`axel-lauer` +- Restored original versions of `recipe_schlund20esd.yml` and `recipe_meehl20sciadv.yml` (:pull:`2583`) :user:`schlunma` .. _changelog-v2-4-0: @@ -668,119 +778,119 @@ This release includes Bug fixes ~~~~~~~~~ -- Fixed `recipe_meehl20sciadv.yml` for ESMValCore 2.3 (`#2253 `__) `Manuel Schlund `__ -- Fix provenance of NCL figures created using the log_provenance function (`#2279 `__) `Bouwe Andela `__ -- Fix bug in ClimWIP brunner19 recipe when plotting (`#2226 `__) `Lukas Brunner `__ -- Pin docutils <0.17 to fix sphinx build with rtd theme (`#2312 `__) `Klaus Zimmermann `__ -- Fix example recipes (`#2338 `__) `Valeriu Predoi `__ -- Do not add bounds to plev (plev19) in era interim cmorizer (`#2328 `__) `Valeriu Predoi `__ -- Fix problem with pip 21.3 that prevents installation from source (`#2344 `__) `Klaus Zimmermann `__ -- Add title to recipe embedded in test_diagnostic_run.py (`#2353 `__) `Klaus Zimmermann `__ -- Fix capitalization of obs4MIPs (`#2368 `__) `Bouwe Andela `__ -- Specify that areacella is needed for area statistics in the Python example recipe (`#2371 `__) `Bouwe Andela `__ -- Enabling variable `obs550lt1aer` in recipes (`#2388 `__) `Rémi Kazeroni `__ -- Update a diagnostic to new Iris version (`#2390 `__) `katjaweigel `__ -- Fixed bug in provenance tracking of ecs_scatter.ncl (`#2391 `__) `Manuel Schlund `__ -- Fix provenance issue in pv_capacity_factor.R (`#2392 `__) `katjaweigel `__ -- Remove obsolete write_plots option from R diagnostics (`#2395 `__) `Klaus Zimmermann `__ -- Fix arctic ocean diagnostic (`#2397 `__) `Klaus Zimmermann `__ -- Fix sea ice drift recipe and script (`#2404 `__) `sloosvel `__ -- Adapt diagnostic script to new version of iris (`#2403 `__) `Klaus Zimmermann `__ -- Fix ocean multimap (`#2406 `__) `Klaus Zimmermann `__ -- Fix diagnostic that uses `xarray`: `dtype` correctly set and harmonize `xarray` and `matplotlib` (`#2409 `__) `Klaus Zimmermann `__ -- Deactivate provenance logging for plots in thermodyn toolbox (`#2414 `__) `Klaus Zimmermann `__ +- Fixed `recipe_meehl20sciadv.yml` for ESMValCore 2.3 (:pull:`2253`) :user:`schlunma` +- Fix provenance of NCL figures created using the log_provenance function (:pull:`2279`) :user:`bouweandela` +- Fix bug in ClimWIP brunner19 recipe when plotting (:pull:`2226`) :user:`lukasbrunner` +- Pin docutils <0.17 to fix sphinx build with rtd theme (:pull:`2312`) :user:`zklaus` +- Fix example recipes (:pull:`2338`) :user:`valeriupredoi` +- Do not add bounds to plev (plev19) in era interim cmorizer (:pull:`2328`) :user:`valeriupredoi` +- Fix problem with pip 21.3 that prevents installation from source (:pull:`2344`) :user:`zklaus` +- Add title to recipe embedded in test_diagnostic_run.py (:pull:`2353`) :user:`zklaus` +- Fix capitalization of obs4MIPs (:pull:`2368`) :user:`bouweandela` +- Specify that areacella is needed for area statistics in the Python example recipe (:pull:`2371`) :user:`bouweandela` +- Enabling variable `obs550lt1aer` in recipes (:pull:`2388`) :user:`remi-kazeroni` +- Update a diagnostic to new Iris version (:pull:`2390`) :user:`katjaweigel` +- Fixed bug in provenance tracking of ecs_scatter.ncl (:pull:`2391`) :user:`schlunma` +- Fix provenance issue in pv_capacity_factor.R (:pull:`2392`) :user:`katjaweigel` +- Remove obsolete write_plots option from R diagnostics (:pull:`2395`) :user:`zklaus` +- Fix arctic ocean diagnostic (:pull:`2397`) :user:`zklaus` +- Fix sea ice drift recipe and script (:pull:`2404`) :user:`sloosvel` +- Adapt diagnostic script to new version of iris (:pull:`2403`) :user:`zklaus` +- Fix ocean multimap (:pull:`2406`) :user:`zklaus` +- Fix diagnostic that uses `xarray`: `dtype` correctly set and harmonize `xarray` and `matplotlib` (:pull:`2409`) :user:`zklaus` +- Deactivate provenance logging for plots in thermodyn toolbox (:pull:`2414`) :user:`zklaus` Deprecations ~~~~~~~~~~~~ -- Removed write_plots and write_netcdf from some NCL diagnostics (`#2293 `__) `Manuel Schlund `__ -- Fixed provenance logging of all python diagnostics by removing 'plot_file' entry (`#2296 `__) `Manuel Schlund `__ -- Do not deprecate classes Variable, Variables and Datasets on a specific version (`#2286 `__) `Manuel Schlund `__ -- Remove obsolete write_netcdf option from ncl diagnostic scripts (`#2387 `__) `Klaus Zimmermann `__ -- Remove write plots from ocean diagnostics (`#2393 `__) `Valeriu Predoi `__ -- More removals of instances of `write_plots` from Python diagnostics (appears to be the final removal from Py diags) (`#2394 `__) `Valeriu Predoi `__ +- Removed write_plots and write_netcdf from some NCL diagnostics (:pull:`2293`) :user:`schlunma` +- Fixed provenance logging of all python diagnostics by removing 'plot_file' entry (:pull:`2296`) :user:`schlunma` +- Do not deprecate classes Variable, Variables and Datasets on a specific version (:pull:`2286`) :user:`schlunma` +- Remove obsolete write_netcdf option from ncl diagnostic scripts (:pull:`2387`) :user:`zklaus` +- Remove write plots from ocean diagnostics (:pull:`2393`) :user:`valeriupredoi` +- More removals of instances of `write_plots` from Python diagnostics (appears to be the final removal from Py diags) (:pull:`2394`) :user:`valeriupredoi` Documentation ~~~~~~~~~~~~~ -- List Manuel Schlund as release manager for v2.5 (`#2268 `__) `Bouwe Andela `__ -- GlobWat fix download links and gdal command (`#2334 `__) `Banafsheh Abdollahi `__ -- Add titles to recipes authored by `predoi_valeriu` (`#2333 `__) `Valeriu Predoi `__ -- Added titles to recipes maintained by lauer_axel (`#2332 `__) `Axel Lauer `__ -- Update the documentation of the GRACE CMORizer (`#2349 `__) `Rémi Kazeroni `__ -- Add titles in BSC recipes (`#2351 `__) `sloosvel `__ -- Update esmvalcore dependency to 2.4.0rc1 (`#2348 `__) `Klaus Zimmermann `__ -- Add titles to recipes maintained by Peter Kalverla (`#2356 `__) `Peter Kalverla `__ -- Adding titles to the recipes with maintainer hb326 (`#2358 `__) `Birgit Hassler `__ -- Add title for zmnam as for #2354 (`#2363 `__) `fserva `__ -- Added recipe titles the the ocean recipes. (`#2364 `__) `Lee de Mora `__ -- Update recipe_thermodyn_diagtool.yml - add title (`#2365 `__) `ValerioLembo `__ -- Fix provenance of figures of several R diagnostics (`#2300 `__) `Bouwe Andela `__ -- Adding titles to Mattia's recipes (`#2367 `__) `Rémi Kazeroni `__ -- Adding titles to wenzel recipes (`#2366 `__) `Birgit Hassler `__ -- Fix formatting of some recipe titles merged from PR 2364 (`#2372 `__) `Klaus Zimmermann `__ -- Adding titles to Bjoern's recipes (`#2369 `__) `Rémi Kazeroni `__ -- Add titles to ocean recipes (maintainer Lovato) (`#2375 `__) `Tomas Lovato `__ -- Add titles for three c3s-magic recipes (`#2378 `__) `Klaus Zimmermann `__ -- Add title for recipe maintained by Ruth Lorenz (`#2379 `__) `Klaus Zimmermann `__ -- Fix toymodel recipe (`#2381 `__) `Javier Vegas-Regidor `__ -- Added titles for recipes of maintainer `schlund_manuel` (`#2377 `__) `Manuel Schlund `__ -- Write_plots and titles for deangelis15nat, li17natcc, martin18grl, pv_capacity_factor (`#2382 `__) `katjaweigel `__ -- Add titles for some recipes (`#2383 `__) `Klaus Zimmermann `__ -- Adding titles for recipes by von Hardenberg and Arnone (`#2384 `__) `Klaus Zimmermann `__ -- Last two missing titles (`#2386 `__) `Valeriu Predoi `__ -- Update documentation on downloading data (`#2370 `__) `Bouwe Andela `__ -- Fix installation instructions for Julia (`#2335 `__) `Klaus Zimmermann `__ -- Fix provenance of Julia example diagnostic (`#2289 `__) `Bouwe Andela `__ -- Added notes on use of mamba in the installation documentation chapter (`#2236 `__) `Valeriu Predoi `__ -- Update version number for 2.4.0 release (`#2410 `__) `Klaus Zimmermann `__ -- Update release schedule for 2.4.0 (`#2412 `__) `Klaus Zimmermann `__ -- Update changelog for 2.4.0 release (`#2411 `__) `Klaus Zimmermann `__ +- List Manuel Schlund as release manager for v2.5 (:pull:`2268`) :user:`bouweandela` +- GlobWat fix download links and gdal command (:pull:`2334`) :user:`babdollahi` +- Add titles to recipes authored by `predoi_valeriu` (:pull:`2333`) :user:`valeriupredoi` +- Added titles to recipes maintained by lauer_axel (:pull:`2332`) :user:`axel-lauer` +- Update the documentation of the GRACE CMORizer (:pull:`2349`) :user:`remi-kazeroni` +- Add titles in BSC recipes (:pull:`2351`) :user:`sloosvel` +- Update esmvalcore dependency to 2.4.0rc1 (:pull:`2348`) :user:`zklaus` +- Add titles to recipes maintained by Peter Kalverla (:pull:`2356`) :user:`Peter9192` +- Adding titles to the recipes with maintainer hb326 (:pull:`2358`) :user:`hb326` +- Add title for zmnam as for #2354 (:pull:`2363`) :user:`fserva` +- Added recipe titles the the ocean recipes. (:pull:`2364`) :user:`ledm` +- Update recipe_thermodyn_diagtool.yml - add title (:pull:`2365`) :user:`ValerioLembo` +- Fix provenance of figures of several R diagnostics (:pull:`2300`) :user:`bouweandela` +- Adding titles to Mattia's recipes (:pull:`2367`) :user:`remi-kazeroni` +- Adding titles to wenzel recipes (:pull:`2366`) :user:`hb326` +- Fix formatting of some recipe titles merged from PR 2364 (:pull:`2372`) :user:`zklaus` +- Adding titles to Bjoern's recipes (:pull:`2369`) :user:`remi-kazeroni` +- Add titles to ocean recipes (maintainer Lovato) (:pull:`2375`) :user:`tomaslovato` +- Add titles for three c3s-magic recipes (:pull:`2378`) :user:`zklaus` +- Add title for recipe maintained by Ruth Lorenz (:pull:`2379`) :user:`zklaus` +- Fix toymodel recipe (:pull:`2381`) `Javier Vegas-Regidor `__ +- Added titles for recipes of maintainer `schlund_manuel` (:pull:`2377`) :user:`schlunma` +- Write_plots and titles for deangelis15nat, li17natcc, martin18grl, pv_capacity_factor (:pull:`2382`) :user:`katjaweigel` +- Add titles for some recipes (:pull:`2383`) :user:`zklaus` +- Adding titles for recipes by von Hardenberg and Arnone (:pull:`2384`) :user:`zklaus` +- Last two missing titles (:pull:`2386`) :user:`valeriupredoi` +- Update documentation on downloading data (:pull:`2370`) :user:`bouweandela` +- Fix installation instructions for Julia (:pull:`2335`) :user:`zklaus` +- Fix provenance of Julia example diagnostic (:pull:`2289`) :user:`bouweandela` +- Added notes on use of mamba in the installation documentation chapter (:pull:`2236`) :user:`valeriupredoi` +- Update version number for 2.4.0 release (:pull:`2410`) :user:`zklaus` +- Update release schedule for 2.4.0 (:pull:`2412`) :user:`zklaus` +- Update changelog for 2.4.0 release (:pull:`2411`) :user:`zklaus` Diagnostics ~~~~~~~~~~~ -- Add all available CMIP5 and CMIP6 models to recipe_impact.yml (`#2251 `__) `Bouwe Andela `__ -- Add Fig. 6, 7 and 9 of Bock20jgr (`#2252 `__) `Lisa Bock `__ -- Generalize `recipe_validation*` diagnostic to work with identical control and experiment dataset names (`#2284 `__) `Valeriu Predoi `__ -- Add missing preprocessor to recipe_gier2020bg and adapt to available data (`#2399 `__) `Bettina Gier `__ -- Removed custom version of `AtmosphereSigmaFactory` in diagnostics (`#2405 `__) `Manuel Schlund `__ +- Add all available CMIP5 and CMIP6 models to recipe_impact.yml (:pull:`2251`) :user:`bouweandela` +- Add Fig. 6, 7 and 9 of Bock20jgr (:pull:`2252`) :user:`LisaBock` +- Generalize `recipe_validation*` diagnostic to work with identical control and experiment dataset names (:pull:`2284`) :user:`valeriupredoi` +- Add missing preprocessor to recipe_gier2020bg and adapt to available data (:pull:`2399`) :user:`bettina-gier` +- Removed custom version of `AtmosphereSigmaFactory` in diagnostics (:pull:`2405`) :user:`schlunma` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Replace recipe_era5.yml with recipe_daily_era5.yml (`#2182 `__) `SarahAlidoost `__ -- Update WOA cmorizer for WOA18 and WOA13v2 (`#1812 `__) `Lisa Bock `__ -- GLODAP v2.2016 ocean data cmorizer (`#2185 `__) `Tomas Lovato `__ -- Updated GCP CMORizer (`#2295 `__) `Manuel Schlund `__ +- Replace recipe_era5.yml with recipe_daily_era5.yml (:pull:`2182`) :user:`SarahAlidoost` +- Update WOA cmorizer for WOA18 and WOA13v2 (:pull:`1812`) :user:`LisaBock` +- GLODAP v2.2016 ocean data cmorizer (:pull:`2185`) :user:`tomaslovato` +- Updated GCP CMORizer (:pull:`2295`) :user:`schlunma` Automatic testing ~~~~~~~~~~~~~~~~~ -- Add a cylc suite to run all recipes (`#2219 `__) `Bouwe Andela `__ -- Retire test with Python 3.6 from full development Github Actions test (`#2229 `__) `Valeriu Predoi `__ -- Remove Python 3.6 tests from GitHub Actions (`#2264 `__) `Valeriu Predoi `__ -- Unpin upper bound for iris (previously was at <3.0.4) (`#2266 `__) `Valeriu Predoi `__ -- Pin latest esmvalcore to allow use of the bugfix release 2.3.1 always (`#2269 `__) `Valeriu Predoi `__ -- Add apt update so Julia gets found and installed by Docker (`#2290 `__) `Valeriu Predoi `__ -- Use mamba for environment update and creation in the Docker container build on DockerHub (`#2297 `__) `Valeriu Predoi `__ -- Docker container experimental - run a full env solve with mamba instead of a conda update (`#2306 `__) `Valeriu Predoi `__ -- Full use of mamba in Github Actions source install test and use generic Python 3.7 (removing the very specific 3.7.10) (`#2287 `__) `Valeriu Predoi `__ -- Replace use of conda with mamba for conda_install test on Circle CI (`#2237 `__) `Valeriu Predoi `__ -- Update circleci configuration (`#2357 `__) `Klaus Zimmermann `__ +- Add a cylc suite to run all recipes (:pull:`2219`) :user:`bouweandela` +- Retire test with Python 3.6 from full development Github Actions test (:pull:`2229`) :user:`valeriupredoi` +- Remove Python 3.6 tests from GitHub Actions (:pull:`2264`) :user:`valeriupredoi` +- Unpin upper bound for iris (previously was at <3.0.4) (:pull:`2266`) :user:`valeriupredoi` +- Pin latest esmvalcore to allow use of the bugfix release 2.3.1 always (:pull:`2269`) :user:`valeriupredoi` +- Add apt update so Julia gets found and installed by Docker (:pull:`2290`) :user:`valeriupredoi` +- Use mamba for environment update and creation in the Docker container build on DockerHub (:pull:`2297`) :user:`valeriupredoi` +- Docker container experimental - run a full env solve with mamba instead of a conda update (:pull:`2306`) :user:`valeriupredoi` +- Full use of mamba in Github Actions source install test and use generic Python 3.7 (removing the very specific 3.7.10) (:pull:`2287`) :user:`valeriupredoi` +- Replace use of conda with mamba for conda_install test on Circle CI (:pull:`2237`) :user:`valeriupredoi` +- Update circleci configuration (:pull:`2357`) :user:`zklaus` Installation ~~~~~~~~~~~~ -- Remove `mpich` from conda dependencies list (`#2343 `__) `Valeriu Predoi `__ +- Remove `mpich` from conda dependencies list (:pull:`2343`) :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Add script for extracting a list of input files from the provenance (`#2278 `__) `Bouwe Andela `__ -- Update github actions (`#2360 `__) `Klaus Zimmermann `__ -- Removed 'write_plots' from all NCL diagnostics (`#2331 `__) `Axel Lauer `__ -- Update and modernize `config-user-example.yml` (`#2374 `__) `Valeriu Predoi `__ +- Add script for extracting a list of input files from the provenance (:pull:`2278`) :user:`bouweandela` +- Update github actions (:pull:`2360`) :user:`zklaus` +- Removed 'write_plots' from all NCL diagnostics (:pull:`2331`) :user:`axel-lauer` +- Update and modernize `config-user-example.yml` (:pull:`2374`) :user:`valeriupredoi` .. _changelog-v2-3-0: @@ -793,91 +903,91 @@ This release includes Bug fixes ~~~~~~~~~ -- Indent block to pick up and raise exception if cmorizer data not found (TierX dir is not there) (`#1877 `__) `Valeriu Predoi `__ -- Skip recipe filler tests until we have a new release since GA tests are failing (`#2089 `__) `Valeriu Predoi `__ -- Fixed broken link to contributions in README (`#2102 `__) `Manuel Schlund `__ -- Fix recipe filler for the case the variable doesn't contain short_name (`#2104 `__) `Valeriu Predoi `__ -- Add fix for iris longitude bug to ClimWIP (`#2107 `__) `Lukas Brunner `__ -- Update for outdated link to reference Déandreis et al. (2014). (`#2076 `__) `katjaweigel `__ -- Fixed recipes for ESMValCore 2.3.0 (`#2203 `__) `Manuel Schlund `__ -- Fix the WFDE5 cmorizer (`#2211 `__) `Rémi Kazeroni `__ -- Fix broken CMORizer log message if no Tier directory exists (`#2207 `__) `jmrgonza `__ -- Fix bug in ClimWIP basic test recipe when plotting (`#2225 `__) `Lukas Brunner `__ -- Fix bug in ClimWIP advanced test recipe when plotting (`#2227 `__) `Lukas Brunner `__ -- Adjust time range for the `WDFE5` dataset in the `recipe_check_obs.yml` (`#2232 `__) `Rémi Kazeroni `__ -- Fix plot and provenance of recipe_consecdrydays (`#2244 `__) `Bouwe Andela `__ +- Indent block to pick up and raise exception if cmorizer data not found (TierX dir is not there) (:pull:`1877`) :user:`valeriupredoi` +- Skip recipe filler tests until we have a new release since GA tests are failing (:pull:`2089`) :user:`valeriupredoi` +- Fixed broken link to contributions in README (:pull:`2102`) :user:`schlunma` +- Fix recipe filler for the case the variable doesn't contain short_name (:pull:`2104`) :user:`valeriupredoi` +- Add fix for iris longitude bug to ClimWIP (:pull:`2107`) :user:`lukasbrunner` +- Update for outdated link to reference Déandreis et al. (2014). (:pull:`2076`) :user:`katjaweigel` +- Fixed recipes for ESMValCore 2.3.0 (:pull:`2203`) :user:`schlunma` +- Fix the WFDE5 cmorizer (:pull:`2211`) :user:`remi-kazeroni` +- Fix broken CMORizer log message if no Tier directory exists (:pull:`2207`) :user:`jmrgonza` +- Fix bug in ClimWIP basic test recipe when plotting (:pull:`2225`) :user:`lukasbrunner` +- Fix bug in ClimWIP advanced test recipe when plotting (:pull:`2227`) :user:`lukasbrunner` +- Adjust time range for the `WDFE5` dataset in the `recipe_check_obs.yml` (:pull:`2232`) :user:`remi-kazeroni` +- Fix plot and provenance of recipe_consecdrydays (:pull:`2244`) :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Improving the README.md file with a more appealing look and bit more info (`#2065 `__) `Valeriu Predoi `__ -- Update plot title martin18grl (`#2080 `__) `katjaweigel `__ -- Update contribution guidelines (`#2031 `__) `Bouwe Andela `__ -- Update links in pull request template to point to latest documentation (`#2083 `__) `Bouwe Andela `__ -- Update release schedule (`#2081 `__) `Bouwe Andela `__ -- Updates to contribution guidelines (`#2092 `__) `Bouwe Andela `__ -- Update documentation for ERA5 with new variables (`#2111 `__) `Lukas Brunner `__ -- Add OSX installation instructions to docs (`#2115 `__) `Barbara Vreede `__ -- Instructions to use pre-installed versions on HPC clusters (`#2197 `__) `Rémi Kazeroni `__ -- Add functional Autoassess diagnostics: land surface metrics: permafrost, soil moisture, surface radiation (`#2170 `__) `Valeriu Predoi `__ -- Add citation info in `recipe_eady_growth_rate.yml` (`#2188 `__) `sloosvel `__ -- Update version number to 2.3.0 (`#2213 `__) `Klaus Zimmermann `__ -- Update release schedule for 2.3.0 (`#2247 `__) `Klaus Zimmermann `__ -- Changelog update to v2.3.0 (`#2214 `__) `Klaus Zimmermann `__ +- Improving the README.md file with a more appealing look and bit more info (:pull:`2065`) :user:`valeriupredoi` +- Update plot title martin18grl (:pull:`2080`) :user:`katjaweigel` +- Update contribution guidelines (:pull:`2031`) :user:`bouweandela` +- Update links in pull request template to point to latest documentation (:pull:`2083`) :user:`bouweandela` +- Update release schedule (:pull:`2081`) :user:`bouweandela` +- Updates to contribution guidelines (:pull:`2092`) :user:`bouweandela` +- Update documentation for ERA5 with new variables (:pull:`2111`) :user:`lukasbrunner` +- Add OSX installation instructions to docs (:pull:`2115`) :user:`bvreede` +- Instructions to use pre-installed versions on HPC clusters (:pull:`2197`) :user:`remi-kazeroni` +- Add functional Autoassess diagnostics: land surface metrics: permafrost, soil moisture, surface radiation (:pull:`2170`) :user:`valeriupredoi` +- Add citation info in `recipe_eady_growth_rate.yml` (:pull:`2188`) :user:`sloosvel` +- Update version number to 2.3.0 (:pull:`2213`) :user:`zklaus` +- Update release schedule for 2.3.0 (:pull:`2247`) :user:`zklaus` +- Changelog update to v2.3.0 (:pull:`2214`) :user:`zklaus` Diagnostics ~~~~~~~~~~~ -- Added figures 8 and 10 to recipe_bock20jgr.yml (`#2074 `__) `Manuel Schlund `__ -- Add hydrological forcing comparison recipe (`#2013 `__) `Stef Smeets `__ -- Added recipe for Meehl et al., Sci. Adv. (2020) (`#2094 `__) `Manuel Schlund `__ -- Add GlobWat recipe and diagnostic (`#1808 `__) `Banafsheh Abdollahi `__ -- Add ClimWIP recipe to reproduce Brunner et al. 2019 (`#2109 `__) `Lukas Brunner `__ -- Update Climwip recipe to reproduce brunner2020esd (`#1859 `__) `Ruth Lorenz `__ -- Update recipe_thermodyn_diagtool.yml: code improvements and more user options (`#1391 `__) `ValerioLembo `__ -- Remove model AWI-CM-1-1-MR from recipe_impact.yml (`#2238 `__) `Bouwe Andela `__ -- PV capacity factor for ESMValTool GMD paper (`#2153 `__) `katjaweigel `__ +- Added figures 8 and 10 to recipe_bock20jgr.yml (:pull:`2074`) :user:`schlunma` +- Add hydrological forcing comparison recipe (:pull:`2013`) :user:`stefsmeets` +- Added recipe for Meehl et al., Sci. Adv. (2020) (:pull:`2094`) :user:`schlunma` +- Add GlobWat recipe and diagnostic (:pull:`1808`) :user:`babdollahi` +- Add ClimWIP recipe to reproduce Brunner et al. 2019 (:pull:`2109`) :user:`lukasbrunner` +- Update Climwip recipe to reproduce brunner2020esd (:pull:`1859`) :user:`ruthlorenz` +- Update recipe_thermodyn_diagtool.yml: code improvements and more user options (:pull:`1391`) :user:`ValerioLembo` +- Remove model AWI-CM-1-1-MR from recipe_impact.yml (:pull:`2238`) :user:`bouweandela` +- PV capacity factor for ESMValTool GMD paper (:pull:`2153`) :user:`katjaweigel` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Cmorize wfde5 (`#1991 `__) `mwjury `__ -- Make cmorizer utils funcs public in utilities.py and add some numpy style docstrings (`#2206 `__) `Valeriu Predoi `__ -- CMORizer for CLARA-AVHRR cloud data (`#2101 `__) `Axel Lauer `__ -- Update of ESACCI-CLOUD CMORizer (`#2144 `__) `Axel Lauer `__ +- Cmorize wfde5 (:pull:`1991`) :user:`mwjury` +- Make cmorizer utils funcs public in utilities.py and add some numpy style docstrings (:pull:`2206`) :user:`valeriupredoi` +- CMORizer for CLARA-AVHRR cloud data (:pull:`2101`) :user:`axel-lauer` +- Update of ESACCI-CLOUD CMORizer (:pull:`2144`) :user:`axel-lauer` Automatic testing ~~~~~~~~~~~~~~~~~ -- Force latest Python in empty environment in conda install CI test (`#2069 `__) `Valeriu Predoi `__ -- Removed imports from private sklearn modules and improved test coverage of custom_sklearn.py (`#2078 `__) `Manuel Schlund `__ -- Move private _(global)_stock_cube from esmvacore.preprocessor._regrid to cmorizer (`#2087 `__) `Valeriu Predoi `__ -- Try mamba install esmvaltool (`#2125 `__) `Valeriu Predoi `__ -- Reinstate OSX Github Action tests (`#2110 `__) `Valeriu Predoi `__ -- Pin mpich to avoid default install of 3.4.1 and 3.4.2 with external_0 builds (`#2220 `__) `Valeriu Predoi `__ -- Include test sources in distribution (`#2234 `__) `Klaus Zimmermann `__ -- Pin `iris<3.0.4` to ensure we still (sort of) support Python 3.6 (`#2246 `__) `Valeriu Predoi `__ +- Force latest Python in empty environment in conda install CI test (:pull:`2069`) :user:`valeriupredoi` +- Removed imports from private sklearn modules and improved test coverage of custom_sklearn.py (:pull:`2078`) :user:`schlunma` +- Move private _(global)_stock_cube from esmvacore.preprocessor._regrid to cmorizer (:pull:`2087`) :user:`valeriupredoi` +- Try mamba install esmvaltool (:pull:`2125`) :user:`valeriupredoi` +- Reinstate OSX Github Action tests (:pull:`2110`) :user:`valeriupredoi` +- Pin mpich to avoid default install of 3.4.1 and 3.4.2 with external_0 builds (:pull:`2220`) :user:`valeriupredoi` +- Include test sources in distribution (:pull:`2234`) :user:`zklaus` +- Pin `iris<3.0.4` to ensure we still (sort of) support Python 3.6 (:pull:`2246`) :user:`valeriupredoi` Installation ~~~~~~~~~~~~ -- Fix conda build by skipping documentation test (`#2058 `__) `Javier Vegas-Regidor `__ -- Update pin on esmvalcore pick up esmvalcore=2.3.0 (`#2200 `__) `Valeriu Predoi `__ -- Pin Python to 3.9 for development installation (`#2208 `__) `Bouwe Andela `__ +- Fix conda build by skipping documentation test (:pull:`2058`) `Javier Vegas-Regidor `__ +- Update pin on esmvalcore pick up esmvalcore=2.3.0 (:pull:`2200`) :user:`valeriupredoi` +- Pin Python to 3.9 for development installation (:pull:`2208`) :user:`bouweandela` Improvements ~~~~~~~~~~~~ -- Add EUCP and IS-ENES3 projects to config-references (`#2066 `__) `Peter Kalverla `__ -- Fix flake8 tests on CircleCI (`#2070 `__) `Bouwe Andela `__ -- Added recipe filler. (`#1707 `__) `Lee de Mora `__ -- Update use of fx vars to new syntax (`#2145 `__) `sloosvel `__ -- Add recipe for climate impact research (`#2072 `__) `Peter Kalverla `__ -- Update references "master" to "main" (`#2172 `__) `Axel Lauer `__ -- Force git to ignore VSCode workspace files (`#2186 `__) `Javier Vegas-Regidor `__ -- Update to new ESMValTool logo (`#2168 `__) `Axel Lauer `__ -- Python cmorizers for CDR1 and CDR2 ESACCI H2O (TCWV=prw) data. (`#2152 `__) `katjaweigel `__ -- Remove obsolete conda package (closes #2100) (`#2103 `__) `Klaus Zimmermann `__ +- Add EUCP and IS-ENES3 projects to config-references (:pull:`2066`) :user:`Peter9192` +- Fix flake8 tests on CircleCI (:pull:`2070`) :user:`bouweandela` +- Added recipe filler. (:pull:`1707`) :user:`ledm` +- Update use of fx vars to new syntax (:pull:`2145`) :user:`sloosvel` +- Add recipe for climate impact research (:pull:`2072`) :user:`Peter9192` +- Update references "master" to "main" (:pull:`2172`) :user:`axel-lauer` +- Force git to ignore VSCode workspace files (:pull:`2186`) `Javier Vegas-Regidor `__ +- Update to new ESMValTool logo (:pull:`2168`) :user:`axel-lauer` +- Python cmorizers for CDR1 and CDR2 ESACCI H2O (TCWV=prw) data. (:pull:`2152`) :user:`katjaweigel` +- Remove obsolete conda package (closes #2100) (:pull:`2103`) :user:`zklaus` .. _changelog-v2-2-0: @@ -898,110 +1008,110 @@ This release includes Bug fixes ~~~~~~~~~ -- Bugfix: time weights in time_operations (`#1956 `__) `Axel Lauer `__ -- Fix issues with bibtex references (`#1955 `__) `Stef Smeets `__ -- Fix ImportError for `configure_logging` (`#1976 `__) `Stef Smeets `__ -- Add required functional parameters for extract time in recipe_er5.yml (`#1978 `__) `Valeriu Predoi `__ -- Revert "Fix ImportError for `configure_logging`" (`#1992 `__) `Bouwe Andela `__ -- Fix import of esmvalcore _logging module in cmorize_obs.py (`#2020 `__) `Valeriu Predoi `__ -- Fix logging import in cmorize_obs again since last merge was nulled by pre-commit hooks (`#2022 `__) `Valeriu Predoi `__ -- Refactor the functions in derive_evspsblpot due to new iris (`#2023 `__) `SarahAlidoost `__ -- Avoid importing private ESMValCore functions in CMORizer (`#2027 `__) `Bouwe Andela `__ -- Fix extract_seasons in validation recipe (`#2054 `__) `Javier Vegas-Regidor `__ +- Bugfix: time weights in time_operations (:pull:`1956`) :user:`axel-lauer` +- Fix issues with bibtex references (:pull:`1955`) :user:`stefsmeets` +- Fix ImportError for `configure_logging` (:pull:`1976`) :user:`stefsmeets` +- Add required functional parameters for extract time in recipe_er5.yml (:pull:`1978`) :user:`valeriupredoi` +- Revert "Fix ImportError for `configure_logging`" (:pull:`1992`) :user:`bouweandela` +- Fix import of esmvalcore _logging module in cmorize_obs.py (:pull:`2020`) :user:`valeriupredoi` +- Fix logging import in cmorize_obs again since last merge was nulled by pre-commit hooks (:pull:`2022`) :user:`valeriupredoi` +- Refactor the functions in derive_evspsblpot due to new iris (:pull:`2023`) :user:`SarahAlidoost` +- Avoid importing private ESMValCore functions in CMORizer (:pull:`2027`) :user:`bouweandela` +- Fix extract_seasons in validation recipe (:pull:`2054`) `Javier Vegas-Regidor `__ Deprecations ~~~~~~~~~~~~ -- Deprecate classes Variable, Variables and Datasets (`#1944 `__) `Manuel Schlund `__ -- Python 3.9: remove pynio as dependency and replace with rasterio and pin Matplotlib>3.3.1 and pin cartopy>=0.18 (`#1997 `__) `Valeriu Predoi `__ -- Removed write_plots and write_netcdf in some python diagnostics (`#2036 `__) `Manuel Schlund `__ +- Deprecate classes Variable, Variables and Datasets (:pull:`1944`) :user:`schlunma` +- Python 3.9: remove pynio as dependency and replace with rasterio and pin Matplotlib>3.3.1 and pin cartopy>=0.18 (:pull:`1997`) :user:`valeriupredoi` +- Removed write_plots and write_netcdf in some python diagnostics (:pull:`2036`) :user:`schlunma` Documentation ~~~~~~~~~~~~~ -- Update instructions on making a release (`#1867 `__) `Bouwe Andela `__ -- Update review.rst (`#1917 `__) `Axel Lauer `__ -- Add guidance on how to review a pull request (`#1872 `__) `Bouwe Andela `__ -- Adding tutorial links to documentation (`#1927 `__) `Birgit Hassler `__ -- Added bibtex file for schlund20jgr (`#1928 `__) `Manuel Schlund `__ -- Documentation contact added the actual email for the mailing list (`#1938 `__) `Valeriu Predoi `__ -- Make CircleCI badge specific to main branch (`#1831 `__) `Bouwe Andela `__ -- Documentation on how to move code from a private repository to a public repository (`#1920 `__) `Birgit Hassler `__ -- Refine pull request review guidelines (`#1924 `__) `Stef Smeets `__ -- Update release schedule (`#1948 `__) `Klaus Zimmermann `__ -- Improve contact info and move to more prominent location (`#1950 `__) `Bouwe Andela `__ -- Add some maintainers to some recipes that are missing them (`#1970 `__) `Valeriu Predoi `__ -- Update core team info (`#1973 `__) `Axel Lauer `__ -- Combine installation from source instructions and add common issues (`#1971 `__) `Bouwe Andela `__ -- Update iris documentation URL for sphinx (`#2003 `__) `Bouwe Andela `__ -- Fix iris documentation link(s) with new iris3 location on readthedocs (`#2012 `__) `Valeriu Predoi `__ -- Document how to run tests for installation verification (`#1847 `__) `Valeriu Predoi `__ -- List Remi Kazeroni as a code owner and sole merger of CMORizers (`#2017 `__) `Bouwe Andela `__ -- Install documentation: mention that we build conda package with python>=3.7 (`#2030 `__) `Valeriu Predoi `__ -- Recipe and documentation update for ERA5-Land. (`#1906 `__) `katjaweigel `__ -- Update changelog and changelog tool for v2.2.0 (`#2043 `__) `Javier Vegas-Regidor `__ -- Final update to the changelog for v2.2.0 (`#2056 `__) `Javier Vegas-Regidor `__ +- Update instructions on making a release (:pull:`1867`) :user:`bouweandela` +- Update review.rst (:pull:`1917`) :user:`axel-lauer` +- Add guidance on how to review a pull request (:pull:`1872`) :user:`bouweandela` +- Adding tutorial links to documentation (:pull:`1927`) :user:`hb326` +- Added bibtex file for schlund20jgr (:pull:`1928`) :user:`schlunma` +- Documentation contact added the actual email for the mailing list (:pull:`1938`) :user:`valeriupredoi` +- Make CircleCI badge specific to main branch (:pull:`1831`) :user:`bouweandela` +- Documentation on how to move code from a private repository to a public repository (:pull:`1920`) :user:`hb326` +- Refine pull request review guidelines (:pull:`1924`) :user:`stefsmeets` +- Update release schedule (:pull:`1948`) :user:`zklaus` +- Improve contact info and move to more prominent location (:pull:`1950`) :user:`bouweandela` +- Add some maintainers to some recipes that are missing them (:pull:`1970`) :user:`valeriupredoi` +- Update core team info (:pull:`1973`) :user:`axel-lauer` +- Combine installation from source instructions and add common issues (:pull:`1971`) :user:`bouweandela` +- Update iris documentation URL for sphinx (:pull:`2003`) :user:`bouweandela` +- Fix iris documentation link(s) with new iris3 location on readthedocs (:pull:`2012`) :user:`valeriupredoi` +- Document how to run tests for installation verification (:pull:`1847`) :user:`valeriupredoi` +- List Remi Kazeroni as a code owner and sole merger of CMORizers (:pull:`2017`) :user:`bouweandela` +- Install documentation: mention that we build conda package with python>=3.7 (:pull:`2030`) :user:`valeriupredoi` +- Recipe and documentation update for ERA5-Land. (:pull:`1906`) :user:`katjaweigel` +- Update changelog and changelog tool for v2.2.0 (:pull:`2043`) `Javier Vegas-Regidor `__ +- Final update to the changelog for v2.2.0 (:pull:`2056`) `Javier Vegas-Regidor `__ Diagnostics ~~~~~~~~~~~ -- Add mapplot diagnostic to ClimWIP (`#1864 `__) `Lukas Brunner `__ -- Add the option to weight variable groups in ClimWIP (`#1856 `__) `Lukas Brunner `__ -- Implementation of ensemble member recognition to the ClimWIP diagnostic (`#1852 `__) `Lukas Brunner `__ -- Restructure ClimWIP (`#1919 `__) `Lukas Brunner `__ -- Diagnostic for recipe_eyring13jgr.yml Fig. 12 (`#1922 `__) `Lisa Bock `__ -- Added changes in shared functions necessary for schlund20esd (`#1967 `__) `Manuel Schlund `__ -- Adding recipe and diagnostics for Gier et al 2020 (`#1914 `__) `Bettina Gier `__ -- Added recipe, diagnostics and documentation for Schlund et al., ESD (2020) (`#2015 `__) `Manuel Schlund `__ -- Add PRIMAVERA Eady Growth Rate diagnostic (`#1285 `__) `sloosvel `__ -- Implement shape parameter calibration for ClimWIP (`#1905 `__) `Lukas Brunner `__ +- Add mapplot diagnostic to ClimWIP (:pull:`1864`) :user:`lukasbrunner` +- Add the option to weight variable groups in ClimWIP (:pull:`1856`) :user:`lukasbrunner` +- Implementation of ensemble member recognition to the ClimWIP diagnostic (:pull:`1852`) :user:`lukasbrunner` +- Restructure ClimWIP (:pull:`1919`) :user:`lukasbrunner` +- Diagnostic for recipe_eyring13jgr.yml Fig. 12 (:pull:`1922`) :user:`LisaBock` +- Added changes in shared functions necessary for schlund20esd (:pull:`1967`) :user:`schlunma` +- Adding recipe and diagnostics for Gier et al 2020 (:pull:`1914`) :user:`bettina-gier` +- Added recipe, diagnostics and documentation for Schlund et al., ESD (2020) (:pull:`2015`) :user:`schlunma` +- Add PRIMAVERA Eady Growth Rate diagnostic (:pull:`1285`) :user:`sloosvel` +- Implement shape parameter calibration for ClimWIP (:pull:`1905`) :user:`lukasbrunner` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Extended ESRL cmorizer (`#1937 `__) `Bettina Gier `__ -- Cmorizer for GRACE data (`#1694 `__) `bascrezee `__ -- Cmorizer for latest ESACCI-SST data (`#1895 `__) `Valeriu Predoi `__ -- Fix longitude in ESRL cmorizer (`#1988 `__) `Bettina Gier `__ -- Selectively turn off fixing bounds for coordinates during cmorization with utilities.py (`#2014 `__) `Valeriu Predoi `__ -- Cmorize hadcrut5 (`#1977 `__) `mwjury `__ -- Cmorize gpcc masking (`#1995 `__) `mwjury `__ -- Cmorize_utils_save_1mon_Amon (`#1990 `__) `mwjury `__ -- Cmorize gpcc fix (`#1982 `__) `mwjury `__ -- Fix flake8 raised by develop test in cmorize_obs_gpcc.py (`#2038 `__) `Valeriu Predoi `__ +- Extended ESRL cmorizer (:pull:`1937`) :user:`bettina-gier` +- Cmorizer for GRACE data (:pull:`1694`) :user:`bascrezee` +- Cmorizer for latest ESACCI-SST data (:pull:`1895`) :user:`valeriupredoi` +- Fix longitude in ESRL cmorizer (:pull:`1988`) :user:`bettina-gier` +- Selectively turn off fixing bounds for coordinates during cmorization with utilities.py (:pull:`2014`) :user:`valeriupredoi` +- Cmorize hadcrut5 (:pull:`1977`) :user:`mwjury` +- Cmorize gpcc masking (:pull:`1995`) :user:`mwjury` +- Cmorize_utils_save_1mon_Amon (:pull:`1990`) :user:`mwjury` +- Cmorize gpcc fix (:pull:`1982`) :user:`mwjury` +- Fix flake8 raised by develop test in cmorize_obs_gpcc.py (:pull:`2038`) :user:`valeriupredoi` Automatic testing ~~~~~~~~~~~~~~~~~ -- Switched miniconda conda setup hooks for Github Actions workflows (`#1913 `__) `Valeriu Predoi `__ -- Fix style issue (`#1929 `__) `Bouwe Andela `__ -- Fix mlr test with solution that works for CentOS too (`#1936 `__) `Valeriu Predoi `__ -- Temporary deactivation Github Actions on OSX (`#1939 `__) `Valeriu Predoi `__ -- Fix conda installation test on CircleCI (`#1952 `__) `Bouwe Andela `__ -- Github Actions: change time for cron job that installs from conda (`#1969 `__) `Valeriu Predoi `__ -- CI upload relevant artifacts for test job (`#1999 `__) `Valeriu Predoi `__ -- Github Actions test that runs with the latest ESMValCore main (`#1989 `__) `Valeriu Predoi `__ -- Introduce python 39 in Github Actions tests (`#2029 `__) `Valeriu Predoi `__ -- Remove test for conda package installation on Python 3.6 (`#2033 `__) `Valeriu Predoi `__ -- Update codacy coverage reporter to fix coverage (`#2039 `__) `Bouwe Andela `__ +- Switched miniconda conda setup hooks for Github Actions workflows (:pull:`1913`) :user:`valeriupredoi` +- Fix style issue (:pull:`1929`) :user:`bouweandela` +- Fix mlr test with solution that works for CentOS too (:pull:`1936`) :user:`valeriupredoi` +- Temporary deactivation Github Actions on OSX (:pull:`1939`) :user:`valeriupredoi` +- Fix conda installation test on CircleCI (:pull:`1952`) :user:`bouweandela` +- Github Actions: change time for cron job that installs from conda (:pull:`1969`) :user:`valeriupredoi` +- CI upload relevant artifacts for test job (:pull:`1999`) :user:`valeriupredoi` +- Github Actions test that runs with the latest ESMValCore main (:pull:`1989`) :user:`valeriupredoi` +- Introduce python 39 in Github Actions tests (:pull:`2029`) :user:`valeriupredoi` +- Remove test for conda package installation on Python 3.6 (:pull:`2033`) :user:`valeriupredoi` +- Update codacy coverage reporter to fix coverage (:pull:`2039`) :user:`bouweandela` Installation ~~~~~~~~~~~~ -- Simplify installation of R development dependencies (`#1930 `__) `Bouwe Andela `__ -- Fix docker build (`#1934 `__) `Bouwe Andela `__ -- Use new conda environment for installing ESMValTool in Docker containers (`#1993 `__) `Bouwe Andela `__ -- Fix conda build (`#2026 `__) `Bouwe Andela `__ +- Simplify installation of R development dependencies (:pull:`1930`) :user:`bouweandela` +- Fix docker build (:pull:`1934`) :user:`bouweandela` +- Use new conda environment for installing ESMValTool in Docker containers (:pull:`1993`) :user:`bouweandela` +- Fix conda build (:pull:`2026`) :user:`bouweandela` Improvements ~~~~~~~~~~~~ -- Allow multiple references for a cmorizer script (`#1953 `__) `SarahAlidoost `__ -- Add GRACE to the recipe check_obs (`#1963 `__) `Rémi Kazeroni `__ -- Align ESMValTool to ESMValCore=2.2.0 (adopt iris3, fix environment for new Core release) (`#1874 `__) `Stef Smeets `__ -- Make it possible to use write_plots and write_netcdf from recipe instead of config-user.yml (`#2018 `__) `Bouwe Andela `__ -- Revise lisflood and hype recipes (`#2035 `__) `SarahAlidoost `__ -- Set version to 2.2.0 (`#2042 `__) `Javier Vegas-Regidor `__ +- Allow multiple references for a cmorizer script (:pull:`1953`) :user:`SarahAlidoost` +- Add GRACE to the recipe check_obs (:pull:`1963`) :user:`remi-kazeroni` +- Align ESMValTool to ESMValCore=2.2.0 (adopt iris3, fix environment for new Core release) (:pull:`1874`) :user:`stefsmeets` +- Make it possible to use write_plots and write_netcdf from recipe instead of config-user.yml (:pull:`2018`) :user:`bouweandela` +- Revise lisflood and hype recipes (:pull:`2035`) :user:`SarahAlidoost` +- Set version to 2.2.0 (:pull:`2042`) `Javier Vegas-Regidor `__ .. _changelog-v2-1-1: @@ -1013,14 +1123,14 @@ This release includes Improvements ~~~~~~~~~~~~ -- Fix the conda build on CircleCI (`#1883 `__) `Bouwe Andela `__ -- Pin matplotlib to <3.3 and add compilers (`#1898 `__) `Bouwe Andela `__ -- Pin esmvaltool subpackages to the same version and build as the esmvaltool conda package (`#1899 `__) `Bouwe Andela `__ +- Fix the conda build on CircleCI (:pull:`1883`) :user:`bouweandela` +- Pin matplotlib to <3.3 and add compilers (:pull:`1898`) :user:`bouweandela` +- Pin esmvaltool subpackages to the same version and build as the esmvaltool conda package (:pull:`1899`) :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Release notes v2.1.1 (`#1932 `__) `Valeriu Predoi `__ +- Release notes v2.1.1 (:pull:`1932`) :user:`valeriupredoi` .. _changelog-v2-1-0: @@ -1032,51 +1142,51 @@ This release includes Diagnostics ~~~~~~~~~~~ -- Add extra steps to diagnostic to make output of hydrology/recipe_lisflood.yml usable by the LISFLOOD model (`#1737 `__) `Jaro Camphuijsen `__ -- Recipe to reproduce the 2014 KNMI Climate Scenarios (kcs). (`#1667 `__) `Peter Kalverla `__ -- Implement the climwip weighting scheme in a recipe and diagnostic (`#1648 `__) `Jaro Camphuijsen `__ -- Remove unreviewed autoassess recipes (`#1840 `__) `Valeriu Predoi `__ -- Changes in shared scripts for Schlund et al., JGR: Biogeosciences, 2020 (`#1845 `__) `Manuel Schlund `__ -- Updated derivation test recipe (`#1790 `__) `Manuel Schlund `__ -- Support for multiple model occurrence in perf main (`#1649 `__) `Bettina Gier `__ -- Add recipe and diagnostics for Schlund et al., JGR: Biogeosciences, 2020 (`#1860 `__) `Manuel Schlund `__ -- Adjust recipe_extract_shape.yml to recent changes in the example diagnostic.py (`#1880 `__) `Bouwe Andela `__ +- Add extra steps to diagnostic to make output of hydrology/recipe_lisflood.yml usable by the LISFLOOD model (:pull:`1737`) :user:`JaroCamphuijsen` +- Recipe to reproduce the 2014 KNMI Climate Scenarios (kcs). (:pull:`1667`) :user:`Peter9192` +- Implement the climwip weighting scheme in a recipe and diagnostic (:pull:`1648`) :user:`JaroCamphuijsen` +- Remove unreviewed autoassess recipes (:pull:`1840`) :user:`valeriupredoi` +- Changes in shared scripts for Schlund et al., JGR: Biogeosciences, 2020 (:pull:`1845`) :user:`schlunma` +- Updated derivation test recipe (:pull:`1790`) :user:`schlunma` +- Support for multiple model occurrence in perf main (:pull:`1649`) :user:`bettina-gier` +- Add recipe and diagnostics for Schlund et al., JGR: Biogeosciences, 2020 (:pull:`1860`) :user:`schlunma` +- Adjust recipe_extract_shape.yml to recent changes in the example diagnostic.py (:pull:`1880`) :user:`bouweandela` Documentation ~~~~~~~~~~~~~ -- Add pip installation instructions (`#1783 `__) `Bouwe Andela `__ -- Add installation instruction for R and Julia dependencies tot pip install (`#1787 `__) `Bouwe Andela `__ -- Avoid autodocsumm 0.2.0 and update documentation build dependencies (`#1794 `__) `Bouwe Andela `__ -- Add more information on working on cluster attached to ESGF node (`#1821 `__) `Bouwe Andela `__ -- Add release strategy to community documentation (`#1809 `__) `Klaus Zimmermann `__ -- Update esmvaltool run command everywhere in documentation (`#1820 `__) `Bouwe Andela `__ -- Add more info on documenting a recipe (`#1795 `__) `Bouwe Andela `__ -- Improve the Python example diagnostic and documentation (`#1827 `__) `Bouwe Andela `__ -- Improve description of how to use draft_release_notes.py (`#1848 `__) `Bouwe Andela `__ -- Update changelog for release 2.1 (`#1886 `__) `Valeriu Predoi `__ +- Add pip installation instructions (:pull:`1783`) :user:`bouweandela` +- Add installation instruction for R and Julia dependencies tot pip install (:pull:`1787`) :user:`bouweandela` +- Avoid autodocsumm 0.2.0 and update documentation build dependencies (:pull:`1794`) :user:`bouweandela` +- Add more information on working on cluster attached to ESGF node (:pull:`1821`) :user:`bouweandela` +- Add release strategy to community documentation (:pull:`1809`) :user:`zklaus` +- Update esmvaltool run command everywhere in documentation (:pull:`1820`) :user:`bouweandela` +- Add more info on documenting a recipe (:pull:`1795`) :user:`bouweandela` +- Improve the Python example diagnostic and documentation (:pull:`1827`) :user:`bouweandela` +- Improve description of how to use draft_release_notes.py (:pull:`1848`) :user:`bouweandela` +- Update changelog for release 2.1 (:pull:`1886`) :user:`valeriupredoi` Improvements ~~~~~~~~~~~~ -- Fix R installation in WSL (`#1789 `__) `Javier Vegas-Regidor `__ -- Add pre-commit for linting/formatting (`#1796 `__) `Stef Smeets `__ -- Speed up tests on CircleCI and use pytest to run them (`#1804 `__) `Bouwe Andela `__ -- Move pre-commit excludes to top-level and correct order of lintr and styler (`#1805 `__) `Stef Smeets `__ -- Remove isort setup to fix formatting conflict with yapf (`#1815 `__) `Stef Smeets `__ -- GitHub Actions (`#1806 `__) `Valeriu Predoi `__ -- Fix yapf-isort import formatting conflict (`#1822 `__) `Stef Smeets `__ -- Replace vmprof with vprof as the default profiler (`#1829 `__) `Bouwe Andela `__ -- Update ESMValCore v2.1.0 requirement (`#1839 `__) `Javier Vegas-Regidor `__ -- Pin iris to version 2 (`#1881 `__) `Bouwe Andela `__ -- Pin eccodes to not use eccodes=2.19.0 for cdo to work fine (`#1869 `__) `Valeriu Predoi `__ -- Increase version to 2.1.0 and add release notes (`#1868 `__) `Valeriu Predoi `__ -- Github Actions Build Packages and Deploy tests (conda and PyPi) (`#1858 `__) `Valeriu Predoi `__ +- Fix R installation in WSL (:pull:`1789`) `Javier Vegas-Regidor `__ +- Add pre-commit for linting/formatting (:pull:`1796`) :user:`stefsmeets` +- Speed up tests on CircleCI and use pytest to run them (:pull:`1804`) :user:`bouweandela` +- Move pre-commit excludes to top-level and correct order of lintr and styler (:pull:`1805`) :user:`stefsmeets` +- Remove isort setup to fix formatting conflict with yapf (:pull:`1815`) :user:`stefsmeets` +- GitHub Actions (:pull:`1806`) :user:`valeriupredoi` +- Fix yapf-isort import formatting conflict (:pull:`1822`) :user:`stefsmeets` +- Replace vmprof with vprof as the default profiler (:pull:`1829`) :user:`bouweandela` +- Update ESMValCore v2.1.0 requirement (:pull:`1839`) `Javier Vegas-Regidor `__ +- Pin iris to version 2 (:pull:`1881`) :user:`bouweandela` +- Pin eccodes to not use eccodes=2.19.0 for cdo to work fine (:pull:`1869`) :user:`valeriupredoi` +- Increase version to 2.1.0 and add release notes (:pull:`1868`) :user:`valeriupredoi` +- Github Actions Build Packages and Deploy tests (conda and PyPi) (:pull:`1858`) :user:`valeriupredoi` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Added CMORizer for Scripps-CO2-KUM (`#1857 `__) `Manuel Schlund `__ +- Added CMORizer for Scripps-CO2-KUM (:pull:`1857`) :user:`schlunma` .. _changelog-v2-0-0: @@ -1088,106 +1198,106 @@ This release includes Bug fixes ~~~~~~~~~ -- Fix pep8-naming errors and fix zmnam diagnostic (`#1702 `__) `Bouwe Andela `__ -- Fix keyword argument in cmorize_obs (`#1721 `__) `Mattia Righi `__ -- Fixed JMA-TRANSCOM CMORizer (`#1735 `__) `Manuel Schlund `__ -- Fix bug in extract_doi_value (`#1734 `__) `bascrezee `__ -- Fix small errors in the arctic_ocean diagnostic (`#1722 `__) `Nikolay Koldunov `__ -- Flatten ancestor lists for diag_spei.R and diag_spi.R. (`#1745 `__) `katjaweigel `__ -- Fix for recipe_ocean_ice_extent.yml (`#1744 `__) `Mattia Righi `__ -- Fix recipe_combined_indices.yml provenance (`#1746 `__) `Javier Vegas-Regidor `__ -- Fix provenance in recipe_multimodel_products (`#1747 `__) `Javier Vegas-Regidor `__ -- Exclude FGOALS-g2 due to ESMValCore issue #728 (`#1749 `__) `Mattia Righi `__ -- Fix recipe_modes_of_variability (`#1753 `__) `Javier Vegas-Regidor `__ -- Flatten lists for ancestors for hyint to prevent nested lists. (`#1752 `__) `katjaweigel `__ -- Fix bug in cmorize_obs_eppley_vgpm_modis.py (#1729) (`#1759 `__) `Tomas Lovato `__ -- Correct mip for clltkisccp in example derive preprocessor recipe (`#1768 `__) `Bouwe Andela `__ -- Update date conversion in recipe_hype.yml (`#1769 `__) `Bouwe Andela `__ -- Fix recipe_correlation.yml (`#1767 `__) `Bouwe Andela `__ -- Add attribute positive: down to plev coordinate in ERA-Interim CMORizer (`#1771 `__) `Bouwe Andela `__ -- Fix sispeed in recipe_preprocessor_derive_test (`#1772 `__) `Javier Vegas-Regidor `__ -- Fix extreme events and extreme index ancestors (`#1774 `__) `katjaweigel `__ -- Correct date in output filenames of ERA5 CMORizer recipe (`#1773 `__) `Bouwe Andela `__ -- Exclude WOA from multi-model stats in recipe_ocean_bgc (`#1778 `__) `Mattia Righi `__ +- Fix pep8-naming errors and fix zmnam diagnostic (:pull:`1702`) :user:`bouweandela` +- Fix keyword argument in cmorize_obs (:pull:`1721`) :user:`mattiarighi` +- Fixed JMA-TRANSCOM CMORizer (:pull:`1735`) :user:`schlunma` +- Fix bug in extract_doi_value (:pull:`1734`) :user:`bascrezee` +- Fix small errors in the arctic_ocean diagnostic (:pull:`1722`) :user:`koldunovn` +- Flatten ancestor lists for diag_spei.R and diag_spi.R. (:pull:`1745`) :user:`katjaweigel` +- Fix for recipe_ocean_ice_extent.yml (:pull:`1744`) :user:`mattiarighi` +- Fix recipe_combined_indices.yml provenance (:pull:`1746`) `Javier Vegas-Regidor `__ +- Fix provenance in recipe_multimodel_products (:pull:`1747`) `Javier Vegas-Regidor `__ +- Exclude FGOALS-g2 due to ESMValCore issue #728 (:pull:`1749`) :user:`mattiarighi` +- Fix recipe_modes_of_variability (:pull:`1753`) `Javier Vegas-Regidor `__ +- Flatten lists for ancestors for hyint to prevent nested lists. (:pull:`1752`) :user:`katjaweigel` +- Fix bug in cmorize_obs_eppley_vgpm_modis.py (#1729) (:pull:`1759`) :user:`tomaslovato` +- Correct mip for clltkisccp in example derive preprocessor recipe (:pull:`1768`) :user:`bouweandela` +- Update date conversion in recipe_hype.yml (:pull:`1769`) :user:`bouweandela` +- Fix recipe_correlation.yml (:pull:`1767`) :user:`bouweandela` +- Add attribute positive: down to plev coordinate in ERA-Interim CMORizer (:pull:`1771`) :user:`bouweandela` +- Fix sispeed in recipe_preprocessor_derive_test (:pull:`1772`) `Javier Vegas-Regidor `__ +- Fix extreme events and extreme index ancestors (:pull:`1774`) :user:`katjaweigel` +- Correct date in output filenames of ERA5 CMORizer recipe (:pull:`1773`) :user:`bouweandela` +- Exclude WOA from multi-model stats in recipe_ocean_bgc (:pull:`1778`) :user:`mattiarighi` Diagnostics ~~~~~~~~~~~ -- Enhancement of the hyint recipe to include etccdi indices (`#1133 `__) `Enrico Arnone `__ -- Add lazy regridding for wflow diagnostic (`#1630 `__) `Bouwe Andela `__ -- Miles default domains to include lat=0 (`#1626 `__) `Jost von Hardenberg `__ -- Miles: selection of reference dataset based on experiment (`#1632 `__) `Jost von Hardenberg `__ -- New recipe/diagnostic: recipe_li17natcc.yml for Axels GMD Paper (`#1567 `__) `katjaweigel `__ -- New recipe/diagnostics: recipe_deangelis_for_gmdpart4.yml for Axels GMD Paper (`#1576 `__) `katjaweigel `__ -- EWaterCycle: Add recipe to prepare input for LISFLOOD (`#1298 `__) `Stefan Verhoeven `__ -- Use area weighted regridding in wflow diagnostic (`#1643 `__) `Bouwe Andela `__ -- Workaround for permetrics recipe until Iris3 (`#1674 `__) `Mattia Righi `__ -- C3S_511_MPQB_bas-features (`#1465 `__) `bascrezee `__ -- Additional Land perfmetrics (`#1641 `__) `Bettina Gier `__ -- Necessary diagnostic from eyring06jgr for the release of version2 (`#1686 `__) `Birgit Hassler `__ -- Drought characteristics based on Martin2018 and SPI for gmd paper (`#1689 `__) `katjaweigel `__ -- Additional features and bugfixes for recipe anav13clim (`#1723 `__) `Bettina Gier `__ -- Gmd laueretal2020 revisions (`#1725 `__) `Axel Lauer `__ -- Wenzel16nature (`#1692 `__) `zechlau `__ -- Add mask albedolandcover (`#1673 `__) `bascrezee `__ -- IPCC AR5 fig. 9.3 (seasonality) (`#1726 `__) `Axel Lauer `__ -- Added additional emergent constraints on ECS (`#1585 `__) `Manuel Schlund `__ -- A diagnostic to evaluate the turnover times of land ecosystem carbon (`#1395 `__) `koir-su `__ -- Removed multi_model_statistics step in recipe_oceans_example.yml as a workaround (`#1779 `__) `Valeriu Predoi `__ +- Enhancement of the hyint recipe to include etccdi indices (:pull:`1133`) :user:`earnone` +- Add lazy regridding for wflow diagnostic (:pull:`1630`) :user:`bouweandela` +- Miles default domains to include lat=0 (:pull:`1626`) :user:`jhardenberg` +- Miles: selection of reference dataset based on experiment (:pull:`1632`) :user:`jhardenberg` +- New recipe/diagnostic: recipe_li17natcc.yml for Axels GMD Paper (:pull:`1567`) :user:`katjaweigel` +- New recipe/diagnostics: recipe_deangelis_for_gmdpart4.yml for Axels GMD Paper (:pull:`1576`) :user:`katjaweigel` +- EWaterCycle: Add recipe to prepare input for LISFLOOD (:pull:`1298`) :user:`sverhoeven` +- Use area weighted regridding in wflow diagnostic (:pull:`1643`) :user:`bouweandela` +- Workaround for permetrics recipe until Iris3 (:pull:`1674`) :user:`mattiarighi` +- C3S_511_MPQB_bas-features (:pull:`1465`) :user:`bascrezee` +- Additional Land perfmetrics (:pull:`1641`) :user:`bettina-gier` +- Necessary diagnostic from eyring06jgr for the release of version2 (:pull:`1686`) :user:`hb326` +- Drought characteristics based on Martin2018 and SPI for gmd paper (:pull:`1689`) :user:`katjaweigel` +- Additional features and bugfixes for recipe anav13clim (:pull:`1723`) :user:`bettina-gier` +- Gmd laueretal2020 revisions (:pull:`1725`) :user:`axel-lauer` +- Wenzel16nature (:pull:`1692`) :user:`zechlau` +- Add mask albedolandcover (:pull:`1673`) :user:`bascrezee` +- IPCC AR5 fig. 9.3 (seasonality) (:pull:`1726`) :user:`axel-lauer` +- Added additional emergent constraints on ECS (:pull:`1585`) :user:`schlunma` +- A diagnostic to evaluate the turnover times of land ecosystem carbon (:pull:`1395`) `koir-su `__ +- Removed multi_model_statistics step in recipe_oceans_example.yml as a workaround (:pull:`1779`) :user:`valeriupredoi` Documentation ~~~~~~~~~~~~~ -- Extend getting started instructions to obtain config-user.yml (`#1642 `__) `Peter Kalverla `__ -- Extend information about native6 support on RTD (`#1652 `__) `Peter Kalverla `__ -- Update citation of ESMValTool paper in the doc (`#1664 `__) `Mattia Righi `__ -- Updated references to documentation (now docs.esmvaltool.org) (`#1679 `__) `Axel Lauer `__ -- Replace dead link with ESGF link. (`#1681 `__) `Mattia Righi `__ -- Add all European grants to Zenodo (`#1682 `__) `Bouwe Andela `__ -- Update Sphinx to v3 or later (`#1685 `__) `Bouwe Andela `__ -- Small fix to number of models in ensclus documentation (`#1691 `__) `Jost von Hardenberg `__ -- Move draft_release_notes.py from ESMValCore to here and update (`#1701 `__) `Bouwe Andela `__ -- Improve the installation instructions (`#1634 `__) `Valeriu Predoi `__ -- Improve description of how to implement provenance in diagnostic (`#1750 `__) `SarahAlidoost `__ -- Update command line interface documentation and add links to ESMValCore configuration documentation (`#1776 `__) `Bouwe Andela `__ -- Documentation on how to find shapefiles for hydrology recipes (`#1777 `__) `Jaro Camphuijsen `__ +- Extend getting started instructions to obtain config-user.yml (:pull:`1642`) :user:`Peter9192` +- Extend information about native6 support on RTD (:pull:`1652`) :user:`Peter9192` +- Update citation of ESMValTool paper in the doc (:pull:`1664`) :user:`mattiarighi` +- Updated references to documentation (now docs.esmvaltool.org) (:pull:`1679`) :user:`axel-lauer` +- Replace dead link with ESGF link. (:pull:`1681`) :user:`mattiarighi` +- Add all European grants to Zenodo (:pull:`1682`) :user:`bouweandela` +- Update Sphinx to v3 or later (:pull:`1685`) :user:`bouweandela` +- Small fix to number of models in ensclus documentation (:pull:`1691`) :user:`jhardenberg` +- Move draft_release_notes.py from ESMValCore to here and update (:pull:`1701`) :user:`bouweandela` +- Improve the installation instructions (:pull:`1634`) :user:`valeriupredoi` +- Improve description of how to implement provenance in diagnostic (:pull:`1750`) :user:`SarahAlidoost` +- Update command line interface documentation and add links to ESMValCore configuration documentation (:pull:`1776`) :user:`bouweandela` +- Documentation on how to find shapefiles for hydrology recipes (:pull:`1777`) :user:`JaroCamphuijsen` Improvements ~~~~~~~~~~~~ -- Pin flake8<3.8.0 (`#1635 `__) `Valeriu Predoi `__ -- Update conda package path in more places (`#1636 `__) `Bouwe Andela `__ -- Remove curly brackets around issue number in pull request template (`#1637 `__) `Bouwe Andela `__ -- Fix style issue in test (`#1639 `__) `Bouwe Andela `__ -- Update Codacy badges (`#1662 `__) `Bouwe Andela `__ -- Support extra installation methods in R (`#1360 `__) `Javier Vegas-Regidor `__ -- Add ncdf4.helpers package as a dependency again (`#1678 `__) `Bouwe Andela `__ -- Speed up conda installation (`#1677 `__) `Bouwe Andela `__ -- Update CMORizers and recipes for ESMValCore v2.0.0 (`#1699 `__) `SarahAlidoost `__ -- Update setup.py for PyPI package (`#1700 `__) `Bouwe Andela `__ -- Cleanup recipe headers before the release (`#1740 `__) `Mattia Righi `__ -- Add colortables as esmvaltool subcommand (`#1666 `__) `Javier Vegas-Regidor `__ -- Increase version to v2.0.0 (`#1756 `__) `Bouwe Andela `__ -- Update job script (`#1757 `__) `Mattia Righi `__ -- Read authors and description from .zenodo.json (`#1758 `__) `Bouwe Andela `__ -- Update docker recipe to install from source (`#1651 `__) `Javier Vegas-Regidor `__ +- Pin flake8<3.8.0 (:pull:`1635`) :user:`valeriupredoi` +- Update conda package path in more places (:pull:`1636`) :user:`bouweandela` +- Remove curly brackets around issue number in pull request template (:pull:`1637`) :user:`bouweandela` +- Fix style issue in test (:pull:`1639`) :user:`bouweandela` +- Update Codacy badges (:pull:`1662`) :user:`bouweandela` +- Support extra installation methods in R (:pull:`1360`) `Javier Vegas-Regidor `__ +- Add ncdf4.helpers package as a dependency again (:pull:`1678`) :user:`bouweandela` +- Speed up conda installation (:pull:`1677`) :user:`bouweandela` +- Update CMORizers and recipes for ESMValCore v2.0.0 (:pull:`1699`) :user:`SarahAlidoost` +- Update setup.py for PyPI package (:pull:`1700`) :user:`bouweandela` +- Cleanup recipe headers before the release (:pull:`1740`) :user:`mattiarighi` +- Add colortables as esmvaltool subcommand (:pull:`1666`) `Javier Vegas-Regidor `__ +- Increase version to v2.0.0 (:pull:`1756`) :user:`bouweandela` +- Update job script (:pull:`1757`) :user:`mattiarighi` +- Read authors and description from .zenodo.json (:pull:`1758`) :user:`bouweandela` +- Update docker recipe to install from source (:pull:`1651`) `Javier Vegas-Regidor `__ Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Cmorize aphro ma (`#1555 `__) `mwjury `__ -- Respectable testing for cmorizers/obs/utilities.py and cmorizers/obs/cmorize_obs.py (`#1517 `__) `Valeriu Predoi `__ -- Fix start year in recipe_check_obs (`#1638 `__) `Mattia Righi `__ -- Cmorizer for the PERSIANN-CDR precipitation data (`#1633 `__) `Birgit Hassler `__ -- Cmorize eobs (`#1554 `__) `mwjury `__ -- Update download cds satellite lai fapar (`#1654 `__) `bascrezee `__ -- Added monthly mean vars (ta, va, zg) to era5 cmorizer via recipe (`#1644 `__) `Evgenia Galytska `__ -- Make format time check more flexible (`#1661 `__) `Mattia Righi `__ -- Exclude od550lt1aer from recipe_check_obs.yml (`#1720 `__) `Mattia Righi `__ -- PERSIANN-CDR cmorizer update: adding the capability to save monthly mean files (`#1728 `__) `Birgit Hassler `__ -- Add standard_name attribute to lon and lat in cmorize_obs_esacci_oc.py (`#1760 `__) `Tomas Lovato `__ -- Allow for incomplete months on daily frequency in cmorizer ncl utilities (`#1754 `__) `Mattia Righi `__ -- Fix AURA-TES cmorizer (`#1766 `__) `Mattia Righi `__ +- Cmorize aphro ma (:pull:`1555`) :user:`mwjury` +- Respectable testing for cmorizers/obs/utilities.py and cmorizers/obs/cmorize_obs.py (:pull:`1517`) :user:`valeriupredoi` +- Fix start year in recipe_check_obs (:pull:`1638`) :user:`mattiarighi` +- Cmorizer for the PERSIANN-CDR precipitation data (:pull:`1633`) :user:`hb326` +- Cmorize eobs (:pull:`1554`) :user:`mwjury` +- Update download cds satellite lai fapar (:pull:`1654`) :user:`bascrezee` +- Added monthly mean vars (ta, va, zg) to era5 cmorizer via recipe (:pull:`1644`) :user:`egalytska` +- Make format time check more flexible (:pull:`1661`) :user:`mattiarighi` +- Exclude od550lt1aer from recipe_check_obs.yml (:pull:`1720`) :user:`mattiarighi` +- PERSIANN-CDR cmorizer update: adding the capability to save monthly mean files (:pull:`1728`) :user:`hb326` +- Add standard_name attribute to lon and lat in cmorize_obs_esacci_oc.py (:pull:`1760`) :user:`tomaslovato` +- Allow for incomplete months on daily frequency in cmorizer ncl utilities (:pull:`1754`) :user:`mattiarighi` +- Fix AURA-TES cmorizer (:pull:`1766`) :user:`mattiarighi` .. _changelog-v2-0-0b4: @@ -1199,43 +1309,43 @@ This release includes Bug fixes ~~~~~~~~~ -- Fix HALOE plev coordinate (`#1590 `__) `Mattia Righi `__ -- Fix tro3 units in HALOE (`#1591 `__) `Mattia Righi `__ +- Fix HALOE plev coordinate (:pull:`1590`) :user:`mattiarighi` +- Fix tro3 units in HALOE (:pull:`1591`) :user:`mattiarighi` Diagnostics ~~~~~~~~~~~ -- Applicate sea ice negative feedback (`#1299 `__) `Javier Vegas-Regidor `__ -- Add Russell18jgr ocean diagnostics (`#1592 `__) `Bouwe Andela `__ -- Refactor marrmot recipe and diagnostic to use ERA5 daily data made by new cmorizer (`#1600 `__) `SarahAlidoost `__ -- In recipe_wflow, use daily ERA5 data from the new cmorizer. (`#1599 `__) `Peter Kalverla `__ -- In wflow diagnostic, calculate PET after(!) interpolation and lapse rate correction (`#1618 `__) `Jerom Aerts `__ -- Fixed wenz14jgr (`#1562 `__) `zechlau `__ -- Update portrait_plot.ncl (`#1625 `__) `Bettina Gier `__ +- Applicate sea ice negative feedback (:pull:`1299`) `Javier Vegas-Regidor `__ +- Add Russell18jgr ocean diagnostics (:pull:`1592`) :user:`bouweandela` +- Refactor marrmot recipe and diagnostic to use ERA5 daily data made by new cmorizer (:pull:`1600`) :user:`SarahAlidoost` +- In recipe_wflow, use daily ERA5 data from the new cmorizer. (:pull:`1599`) :user:`Peter9192` +- In wflow diagnostic, calculate PET after(!) interpolation and lapse rate correction (:pull:`1618`) :user:`jeromaerts` +- Fixed wenz14jgr (:pull:`1562`) :user:`zechlau` +- Update portrait_plot.ncl (:pull:`1625`) :user:`bettina-gier` Documentation ~~~~~~~~~~~~~ -- Restructure documentation (`#1587 `__) `Bouwe Andela `__ -- Add more links to documentation (`#1595 `__) `Bouwe Andela `__ -- Update links in readme (`#1598 `__) `Bouwe Andela `__ -- Minor improvements to installation documentation (`#1608 `__) `Bouwe Andela `__ -- Add info for new mailing list to documentation. (`#1607 `__) `Björn Brötz `__ -- Update making a release documentation (`#1627 `__) `Bouwe Andela `__ +- Restructure documentation (:pull:`1587`) :user:`bouweandela` +- Add more links to documentation (:pull:`1595`) :user:`bouweandela` +- Update links in readme (:pull:`1598`) :user:`bouweandela` +- Minor improvements to installation documentation (:pull:`1608`) :user:`bouweandela` +- Add info for new mailing list to documentation. (:pull:`1607`) :user:`bjoernbroetz` +- Update making a release documentation (:pull:`1627`) :user:`bouweandela` Improvements ~~~~~~~~~~~~ -- Avoid broken pytest-html plugin (`#1583 `__) `Bouwe Andela `__ -- Remove reference section in config-references.yml (`#1545 `__) `SarahAlidoost `__ -- Various improvements to development infrastructure (`#1570 `__) `Bouwe Andela `__ -- Install scikit-learn from conda, remove libunwind as a direct dependency (`#1611 `__) `Valeriu Predoi `__ -- Create conda subpackages and enable tests (`#1624 `__) `Bouwe Andela `__ +- Avoid broken pytest-html plugin (:pull:`1583`) :user:`bouweandela` +- Remove reference section in config-references.yml (:pull:`1545`) :user:`SarahAlidoost` +- Various improvements to development infrastructure (:pull:`1570`) :user:`bouweandela` +- Install scikit-learn from conda, remove libunwind as a direct dependency (:pull:`1611`) :user:`valeriupredoi` +- Create conda subpackages and enable tests (:pull:`1624`) :user:`bouweandela` Observational and re-analysis dataset support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- Cmorizer for HALOE (`#1581 `__) `Mattia Righi `__ -- Add CMORizer for CT2019 (`#1604 `__) `Manuel Schlund `__ +- Cmorizer for HALOE (:pull:`1581`) :user:`mattiarighi` +- Add CMORizer for CT2019 (:pull:`1604`) :user:`schlunma` For older releases, see the release notes on https://github.com/ESMValGroup/ESMValTool/releases. diff --git a/doc/sphinx/source/community/maintainer.rst b/doc/sphinx/source/community/maintainer.rst index 5bec2e825e..7e73748be9 100644 --- a/doc/sphinx/source/community/maintainer.rst +++ b/doc/sphinx/source/community/maintainer.rst @@ -8,7 +8,7 @@ the interface of library functions may change when updating to new versions. Thi withdrawal of datasets used by a recipe can result in an existing recipe to stop working. Such "broken" recipes might require some work to fix such problems and make the recipe fully functional again. -A first **contact point** for the technical lead development team (`@ESMValGroup/technical-lead-development-team`_) in such cases is the recipe "maintainer". The recipe +A first **contact point** for the technical lead development team (:team:`technical-lead-development-team`) in such cases is the recipe "maintainer". The recipe maintainer is then asked to check the affected recipe and if possible, fix the problems or work with the technical lead development team to find a solution. Ideally, a recipe maintainer is able to tell whether the results of a fixed recipe are scientifically valid and look as expected. Being a recipe maintainer consists of the following tasks: @@ -22,10 +22,7 @@ recipe are scientifically valid and look as expected. Being a recipe maintainer * informing the core development team when no longer available as maintainer Ideally, a recipe maintainer is named when contributing a new recipe to the ESMValTool. Recipe maintainers are asked to inform -the core development team (`@ESMValGroup/esmvaltool-coreteam`_) when they are no longer able to act as maintainer or when they would like to step down from this duty +the core development team (:team:`esmvaltool-coreteam`) when they are no longer able to act as maintainer or when they would like to step down from this duty for any reason. The core development team will then try to find a successor. If no recipe maintainer can be found, the :ref:`policy on unmaintained broken (non-working) recipes` might apply eventually leading to retirement of the affected recipe. - -.. _`@ESMValGroup/technical-lead-development-team`: https://github.com/orgs/ESMValGroup/teams/technical-lead-development-team -.. _`@ESMValGroup/esmvaltool-coreteam`: https://github.com/orgs/ESMValGroup/teams/esmvaltool-coreteam diff --git a/doc/sphinx/source/community/release_strategy/detailed_release_procedure.rst b/doc/sphinx/source/community/release_strategy/detailed_release_procedure.rst index 3f710eaa21..a73643f454 100644 --- a/doc/sphinx/source/community/release_strategy/detailed_release_procedure.rst +++ b/doc/sphinx/source/community/release_strategy/detailed_release_procedure.rst @@ -136,8 +136,8 @@ Recipe output can be copied by doing from the VM: .. code-block:: bash - nohup rsync -rlt /path_to_testing/esmvaltool_output/* /shared/esmvaltool/v2.x.x/ - + nohup rsync --exclude preproc/ -rlt /path_to_testing/esmvaltool_output/* /shared/esmvaltool/v2.x.x/ + By copying the debug.html and index.html files into /shared/esmvaltool/v2.x.x/, the output becomes available online, see for `example `_. @@ -151,13 +151,13 @@ Link the overview webpage to the release issue. This makes it much easier to ask for feedback from recipe developers and analyse failures. Results produced with the final ESMValCore release candidate should be put in a VM directory -named after the version number, e.g. ``v2.x.x``. +named after the version number, e.g. ``v2.x.x``. Once the release process is over, test results produced with previous release candidates can be deleted to save space on the VM. .. note:: If you wrote recipe runs output to Levante's `/scratch` partition, be aware that - the data will be removed after two weeks, so you will have to quickly move the + the data will be removed after two weeks, so you will have to quickly move the output data to the VM, using the ``nohup`` command above. Running the comparison @@ -189,15 +189,15 @@ The steps to running the compare tool on the VM are the following: - prerequisite - install `imagehash`: `pip install imagehash` - reference run (v2.7.0; previous stable release): `export reference_dir=/work/bd0854/b382109/v270` (contains `preproc/` dirs too, 122 recipes) - current run (v2.8.0): `export current_dir=path_to_current_run` -- run the :ref:`comparison script` with: +- run the :ref:`comparison script` with: .. code-block:: bash nohup python ESMValTool/esmvaltool/utils/testing/regression/compare.py --reference $reference_dir --current $current_dir > compare_v280_output.txt Copy the comparison txt file to the release issue. -Some of the recipes will appear as having identical output to the one from previous release. -However, others will need human inspection. +Some of the recipes will appear as having identical output to the one from previous release. +However, others will need human inspection. Ask the recipe maintainers (`@ESMValGroup/esmvaltool-recipe-maintainers`_) and ESMValTool Development Team (`@ESMValGroup/esmvaltool-developmentteam`_) to provide assistance in checking the results. Here are some guidelines on how to perform the human inspection: diff --git a/doc/sphinx/source/community/release_strategy/release_strategy.rst b/doc/sphinx/source/community/release_strategy/release_strategy.rst index 9bd8d71e2d..b358fdb7f3 100644 --- a/doc/sphinx/source/community/release_strategy/release_strategy.rst +++ b/doc/sphinx/source/community/release_strategy/release_strategy.rst @@ -54,34 +54,40 @@ With the following release schedule, we strive to have three releases per year a Upcoming releases ^^^^^^^^^^^^^^^^^ -- 2.10.0 (Release Manager: `Klaus Zimmermann`_) +- 2.11.0 (Release Manager: TBD) -+------------+--------------------------+ -| 2023-10-02 |ESMValCore feature freeze | -+------------+--------------------------+ -| 2023-10-09 |ESMValCore release | -+------------+--------------------------+ -| 2023-10-16 |ESMValTool feature freeze | -+------------+--------------------------+ -| 2023-10-23 |ESMValTool release | -+------------+--------------------------+ +Planned for February or March 2024 Past releases ^^^^^^^^^^^^^ +- 2.10.0 (Release Manager: `Klaus Zimmermann`_) + ++------------+------------+----------------------------------------+-------------------------------------+ +| Planned | Done | Event | Changelog | ++============+============+========================================+=====================================+ +| 2023-10-02 | | ESMValCore `Feature Freeze`_ | | ++------------+------------+----------------------------------------+-------------------------------------+ +| 2023-10-09 | 2023-12-19 | :esmvalcore-release:`v2.10.0` released | :ref:`esmvalcore:changelog-v2-10-0` | ++------------+------------+----------------------------------------+-------------------------------------+ +| 2023-10-16 | | ESMValTool `Feature Freeze`_ | | ++------------+------------+----------------------------------------+-------------------------------------+ +| 2023-10-16 | 2023-12-20 | :release:`v2.10.0` released | :ref:`changelog-v2-10-0` | ++------------+------------+----------------------------------------+-------------------------------------+ + - 2.9.0 (Release Manager: `Bouwe Andela`_) -+------------+------------+---------------------------------------------------------------------------------------------+------------------------------------+ -| Planned | Done | Event | Changelog | -+============+============+=============================================================================================+====================================+ -| 2023-06-05 | | ESMValCore Feature Freeze | | -+------------+------------+---------------------------------------------------------------------------------------------+------------------------------------+ -| 2023-06-12 | 2023-07-04 | `ESMValCore Release 2.9.0 `_ | :ref:`esmvalcore:changelog-v2-9-0` | -+------------+------------+---------------------------------------------------------------------------------------------+------------------------------------+ -| 2023-06-19 | | ESMValTool Feature Freeze | | -+------------+------------+---------------------------------------------------------------------------------------------+------------------------------------+ -| 2023-06-26 | 2023-07-06 | `ESMValTool Release 2.9.0 `_ | :ref:`changelog-v2-9-0` | -+------------+------------+---------------------------------------------------------------------------------------------+------------------------------------+ ++------------+------------+---------------------------------------+-------------------------------------+ +| Planned | Done | Event | Changelog | ++============+============+=======================================+=====================================+ +| 2023-06-05 | | ESMValCore `Feature Freeze`_ | | ++------------+------------+---------------------------------------+-------------------------------------+ +| 2023-06-12 | 2023-07-04 | :esmvalcore-release:`v2.9.0` released | :ref:`esmvalcore:changelog-v2-9-0` | ++------------+------------+---------------------------------------+-------------------------------------+ +| 2023-06-19 | | ESMValTool `Feature Freeze`_ | | ++------------+------------+---------------------------------------+-------------------------------------+ +| 2023-06-26 | 2023-07-06 | :release:`v2.9.0` released | :ref:`changelog-v2-9-0` | ++------------+------------+---------------------------------------+-------------------------------------+ - 2.8.1 (Bugfix, Release Manager: `Valeriu Predoi`_) @@ -287,6 +293,8 @@ These are the detailed steps to take to make a release. - If a bug is discovered that needs to be fixed before the release, a pull request can be made to the main branch to fix the bug. The person making the pull request can then ask the release manager to cherry-pick that commit into the release branch. - Update the :ref:`list of broken recipes ` with new recipes that could not be run successfully during the testing. Open a separate GitHub issue for each failing recipe and assign the next milestone. + Open an overview issue, see :issue:`3484` for an example, and review past overview issues. + Take action to ensure that the broken recipe policy is followed. #. ESMValCore release @@ -339,7 +347,7 @@ Glossary Feature freeze ~~~~~~~~~~~~~~ -The date on which no new features may be submitted for the upcoming release. +The date on which no new features may be submitted for the upcoming release. After this date, only critical bug fixes can still be included to the :ref:`release_branch`. Development work can continue in the main branch. If you are unsure whether new developments could interfere with the release, check with the :ref:`release_manager`. @@ -411,7 +419,7 @@ All tests should pass before making a release (branch). ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The version number is automatically generated from the information provided by -git using [setuptools-scm](https://pypi.org/project/setuptools-scm/), but a +git using `setuptools-scm `__, but a static version number is stored in ``CITATION.cff``. Make sure to update the version number and release date in ``CITATION.cff``. See https://semver.org for more information on choosing a version number. @@ -464,8 +472,8 @@ and create the new release from the release branch (i.e. not from ``main``). The release tag always starts with the letter ``v`` followed by the version number, e.g. ``v2.1.0``. -6. Mark the release in the main branch -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +6. Merge the release branch back into the main branch +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ When the (pre-)release is tagged, it is time to merge the release branch back into `main`. We do this for two reasons, namely, one, to mark the point up to which commits in `main` diff --git a/doc/sphinx/source/conf.py b/doc/sphinx/source/conf.py index 5ef08c3b06..600eaa8253 100644 --- a/doc/sphinx/source/conf.py +++ b/doc/sphinx/source/conf.py @@ -63,6 +63,7 @@ extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.doctest', + 'sphinx.ext.extlinks', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', 'sphinx.ext.coverage', @@ -441,6 +442,40 @@ 'sklearn': ('https://scikit-learn.org/stable', None), } +# -- Extlinks extension ------------------------------------------------------- +# See https://www.sphinx-doc.org/en/master/usage/extensions/extlinks.html + +extlinks = { + "discussion": ( + "https://github.com/ESMValGroup/ESMValTool/discussions/%s", + "Discussion #%s", + ), + "issue": ( + "https://github.com/ESMValGroup/ESMValTool/issues/%s", + "Issue #%s", + ), + "pull": ( + "https://github.com/ESMValGroup/ESMValTool/pull/%s", + "Pull request #%s", + ), + "release": ( + "https://github.com/ESMValGroup/ESMValTool/releases/tag/%s", + "ESMValTool %s", + ), + "esmvalcore-release": ( + "https://github.com/ESMValGroup/ESMValCore/releases/tag/%s", + "ESMValCore %s", + ), + "team": ( + "https://github.com/orgs/ESMValGroup/teams/%s", + "@ESMValGroup/%s", + ), + "user": ( + "https://github.com/%s", + "@%s", + ), +} + # -- Custom Document processing ---------------------------------------------- import gensidebar diff --git a/doc/sphinx/source/input.rst b/doc/sphinx/source/input.rst index ee913c5581..13779bd4a9 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 ----------------------- @@ -225,6 +232,8 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | Dataset | Variables (MIP) | Tier | Script language | +==============================+======================================================================================================+======+=================+ +| AGCD | pr (Amon) | 2 | Python | ++------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | APHRO-MA | pr, tas (day), pr, tas (Amon) | 3 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | AURA-TES | tro3 (Amon) | 3 | NCL | @@ -252,9 +261,9 @@ A list of the datasets for which a CMORizers is available is provided in the fol | CERES-SYN1deg | rlds, rldscs, rlus, rluscs, rlut, rlutcs, rsds, rsdscs, rsus, rsuscs, rsut, rsutcs (3hr) | 3 | NCL | | | rlds, rldscs, rlus, rlut, rlutcs, rsds, rsdt, rsus, rsut, rsutcs (Amon) | | | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| CLARA-AVHRR | clt, clivi, lwp (Amon) | 3 | NCL | +| CLARA-AVHRR | clt, clivi, clwvi, lwp (Amon) | 3 | NCL | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| CLOUDSAT-L2 | clw, clivi, lwp (Amon) | 3 | NCL | +| CLOUDSAT-L2 | clw, clivi, clwvi, lwp (Amon) | 3 | NCL | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | CowtanWay | tasa (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ @@ -281,7 +290,7 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | ESACCI-AEROSOL | abs550aer, od550aer, od550aerStderr, od550lt1aer, od870aer, od870aerStderr (aero) | 2 | NCL | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| ESACCI-CLOUD | clivi, clt, cltStderr, lwp, rlut, rlutcs, rsut, rsutcs, rsdt, rlus, rsus, rsuscs (Amon) | 2 | NCL | +| ESACCI-CLOUD | clivi, clt, cltStderr, clwvi, lwp, rlut, rlutcs, rsut, rsutcs, rsdt, rlus, rsus, rsuscs (Amon) | 2 | NCL | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | ESACCI-FIRE | burntArea (Lmon) | 2 | NCL | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ @@ -381,7 +390,7 @@ A list of the datasets for which a CMORizers is available is provided in the fol | | tasmax, tasmin, ts, ua, va, wap, zg (Amon) | | | | | pr, rlut, ua, va (day) | | | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ -| NCEP-DOE-R2 | clt, hur, prw, ta (Amon) | 2 | Python | +| NCEP-DOE-R2 | clt, hur, prw, ta, wap (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NDP | cVeg (Lmon) | 3 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ @@ -391,12 +400,18 @@ A list of the datasets for which a CMORizers is available is provided in the fol +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NOAA-CIRES-20CR-V3 | clt, clwvi, hus, prw, rlut, rlutcs, rsut, rsutcs (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ +| NOAA-ERSSTv3b | tos (Omon) | 2 | Python | ++------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ +| NOAA-ERSSTv5 | tos (Omon) | 2 | Python | ++------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NOAA-MBL-CH4 | ch4s (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NOAAGlobalTemp | tasa (Amon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | NSIDC-0116-[nh|sh] [#note4]_ | usi, vsi (day) | 3 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ +| NSIDC-g02202-[sh] | siconc (SImon) | 3 | Python | ++------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | OceanSODA-ETHZ | areacello (Ofx), co3os, dissicos, fgco2, phos, spco2, talkos (Omon) | 2 | Python | +------------------------------+------------------------------------------------------------------------------------------------------+------+-----------------+ | OSI-450-[nh|sh] | sic (OImon), sic (day) | 2 | Python | diff --git a/doc/sphinx/source/recipes/broken_recipe_list.rst b/doc/sphinx/source/recipes/broken_recipe_list.rst index 18471b2382..e2c5b874d8 100644 --- a/doc/sphinx/source/recipes/broken_recipe_list.rst +++ b/doc/sphinx/source/recipes/broken_recipe_list.rst @@ -20,7 +20,15 @@ More details can be found in the :ref:`broken recipe policy - `ERA5_native6` - Derivation of custom variables `rlus` and `rsus` - `#1388 `_ + * - :ref:`recipe_julia.yml ` + - `example` + - fill values are not interpreted, resulting in an unusable plot + - `#2595 `_ * - :ref:`recipe_seaice_drift.yml ` - `sea_ice_drift_SCICEX` - - ``shapely`` issue + - ``shapely 2`` issue - `#3243 `_ + * - :ref:`recipe_pysplot.yml ` + - `plot_map` + - ``shapely 2`` issue + - `#3483 `_ diff --git a/doc/sphinx/source/recipes/recipe_perfmetrics.rst b/doc/sphinx/source/recipes/recipe_perfmetrics.rst index 0a966d648a..067b65af85 100644 --- a/doc/sphinx/source/recipes/recipe_perfmetrics.rst +++ b/doc/sphinx/source/recipes/recipe_perfmetrics.rst @@ -16,7 +16,7 @@ Available recipes and diagnostics Recipes are stored in recipes/ * recipe_perfmetrics_CMIP5.yml -* recipe_perfmetrics_CMIP5_cds.yml +* recipe_perfmetrics_CMIP5_4cds.yml * recipe_perfmetrics_land_CMIP5.yml Diagnostics are stored in diag_scripts/perfmetrics/ diff --git a/doc/sphinx/source/utils.rst b/doc/sphinx/source/utils.rst index e5e7b00553..03e2793dca 100644 --- a/doc/sphinx/source/utils.rst +++ b/doc/sphinx/source/utils.rst @@ -118,11 +118,11 @@ Running multiple recipes It is possible to run more than one recipe in one go. This can for example be achieved by using ``rose`` and/or ``cylc``, tools -that may be available at your local HPC cluster. +that may be available at your local HPC cluster. In the case in which neither ``rose`` nor ``cylc`` are available at your HPC cluster, it is possible to automatically generate job submission scripts, as well as a summary of the -job outputs using the scripts available in +job outputs using the scripts available in `esmvaltool/utils/batch-jobs `__. Using cylc @@ -218,7 +218,7 @@ a copy of `u-bd684` is always located in ``/home/users/valeriu/roses/u-bd684`` o Using the scripts in `utils/batch-jobs` --------------------------------------- -In `utils/batch-jobs `_, +In `utils/batch-jobs `_, you can find a script to generate slurm submission scripts for all available recipes in ESMValTool, as well as a script to parse the job outputs. @@ -227,15 +227,15 @@ as well as a script to parse the job outputs. Using `generate.py` ................... -The script `generate.py `_, +The script `generate.py `_, is a simple python script that creates slurm submission scripts, and if configured, submits them to the HPC cluster. It has been tested in `DKRZ's Levante cluster `_. The following parameters have to be set in the script in order to make it run: * ``env``, *str*: Name of the conda environment in which `esmvaltool` is installed. -* ``mail``, *bool*: Whether or not to recieve mail notifications when a submitted job fails or finishes successfully. Default is ``False``. -* ``submit``, *bool*: Wheter or not to automatically submit the job after creating the launch script. Default value is ``False``. +* ``mail``, *bool*: Whether or not to receive mail notifications when a submitted job fails or finishes successfully. Default is ``False``. +* ``submit``, *bool*: Whether or not to automatically submit the job after creating the launch script. Default value is ``False``. * ``account``, *str*: Name of the DKRZ account in which the job will be billed. * ``outputs``, *str*: Name of the directory in which the job outputs (.out and .err files) are going to be saved. The outputs will be saved in `/home/user/`. * ``conda_path``, *str*: Full path to the `mambaforge/etc/profile.d/conda.sh` executable. @@ -247,10 +247,10 @@ Optionally, the following parameters can be edited: * ``memory``, *str*: Amount of memory requested for each run. Default is ``64G`` to allow to run 4 recipes on the same node in parallel. * ``time``, *str*: Time limit. Default is ``04:00:00`` to increase the job priority. Jobs can run for up to 8 hours and 12 hours on the compute and interactive partitions, respectively. * ``default_max_parallel_tasks``, *int*: Default is ``8`` which works for most recipes. For other cases, an entry needs to be made to the ``MAX_PARALLEL_TASKS`` dictionary (see below). - + The script will generate a submission script for all recipes using by default the ``interactive`` queue and with a time limit of 4h. In case a recipe may require of additional resources, they can be defined in the ``SPECIAL_RECIPES`` dictionary. The recipe name has to be given as a ``key`` in which the -values are another dictionary. +values are another dictionary. The latter are used to specify the ``partition`` in which to submit the recipe, the new ``time`` limit and other ``memory`` requirements given by the slurm flags ``--mem``, ``--constraint`` or ``--ntasks``. In general, an entry in ``SPECIAL_RECIPES`` should be set as: @@ -284,17 +284,15 @@ Using `parse_recipes_outputs` You can run this script (simply as a standalone Python script) after all recipes have been run, to gather a bird's eye view of the run status for each recipe; running the script provides you with a Markdown-formatted list of recipes that succeeded, recipes that failed due to a diagnostic error, and recipes that failed due to missing data (the two most common causes for -recipe run failure). You should add a ``SLURM_OUT_DIR`` e.g. ``SLURM_OUT_DIR = "/home/b/b382109/output_v270"`` - this is the -physical location of your SLURM output, after all recipes have finished running and a ``GLOB_PATTERN``, a glob pattern, -which is reccommended to be set to the ``*.out`` extension, so that the script finds all the ``.out`` files. - -To keep the script execution fast, it is recommended to use ``log_level: info`` in your config-user.yml file so that SLURM -output files are rather small. This script also requires a list of recipes stored in a ``all_recipes.txt`` file, which can -be obtained by running: +recipe run failure). You should provide the location of the output log files from SLURM (``*.out`` and ``*.err``) to the +script as well as a list of all available recipes. To generate the list, run the command: .. code-block:: bash - for recipe in $(esmvaltool recipes list | grep '\.yml$'); do echo "$recipe"; done > all_recipes.txt + for recipe in $(esmvaltool recipes list | grep '\.yml$'); do echo $(basename "$recipe"); done > all_recipes.txt + +To keep the script execution fast, it is recommended to use ``log_level: info`` in your config-user.yml file so that SLURM +output files are rather small. .. _overview_page: @@ -323,7 +321,7 @@ Comparing recipe runs A command-line tool is available for comparing one or more recipe runs to known good previous run(s). This tool uses `xarray `_ to compare NetCDF -files and difference hasing provided by +files and difference hashing provided by `imagehash `_ to compare PNG images. All other file types are compared byte for byte. diff --git a/environment.yml b/environment.yml index f84253afd9..e04c2711c1 100644 --- a/environment.yml +++ b/environment.yml @@ -4,13 +4,11 @@ channels: # The release candidate channel should only be activated # during the rc phase right before the next release of the # ESMValCore. - - conda-forge/label/esmvalcore_rc + # - conda-forge/label/esmvalcore_rc - conda-forge - nodefaults dependencies: - - pip !=21.3 - - python >=3.9 - aiohttp - cartopy - cdo >=1.9.7 @@ -25,11 +23,11 @@ dependencies: - ecmwf-api-client - eofs - esmpy - - esmvalcore =2.10.0rc1 + - esmvalcore 2.10.* - fiona - fire - gdal - - iris >=3.6.0 + - iris >=3.6.1 - iris-esmf-regrid >=0.7.0 - jinja2 - joblib @@ -41,9 +39,10 @@ dependencies: - netCDF4 - numba - numpy !=1.24.3 # severe masking bug - - packaging - openpyxl + - packaging - pandas + - pip !=21.3 - progressbar2 - prov - psyplot @@ -51,6 +50,7 @@ dependencies: - psy-reg - psy-simple - pyproj >=2.1 + - python >=3.9 - python-cdo - python-dateutil - pyyaml @@ -58,11 +58,11 @@ dependencies: - requests - ruamel.yaml - scikit-image - - scikit-learn + - scikit-learn >= 1.4.0 # github.com/ESMValGroup/ESMValTool/issues/3504 - scipy - seaborn - seawater - - shapely + - shapely >=2 - xarray >=0.12.0 - xesmf >=0.7.1 - xgboost >1.6.1 # github.com/ESMValGroup/ESMValTool/issues/2779 diff --git a/environment_osx.yml b/environment_osx.yml index 76f80d319e..058e82aadf 100644 --- a/environment_osx.yml +++ b/environment_osx.yml @@ -4,13 +4,11 @@ channels: # The release candidate channel should only be activated # during the rc phase right before the next release of the # ESMValCore. - - conda-forge/label/esmvalcore_rc + # - conda-forge/label/esmvalcore_rc - conda-forge - nodefaults dependencies: - - pip !=21.3 - - python >=3.9 - aiohttp - cartopy - cdo >=1.9.7 @@ -25,11 +23,11 @@ dependencies: - ecmwf-api-client - eofs - esmpy - - esmvalcore =2.10.0rc1 + - esmvalcore 2.10.* - fiona - fire - gdal - - iris >=3.6.0 + - iris >=3.6.1 - iris-esmf-regrid >=0.7.0 - jinja2 - joblib @@ -39,10 +37,12 @@ dependencies: - natsort - nc-time-axis - netCDF4 + - numba - numpy !=1.24.3 # severe masking bug - - packaging - openpyxl + - packaging - pandas + - pip !=21.3 - progressbar2 - prov - psyplot @@ -50,6 +50,7 @@ dependencies: - psy-reg - psy-simple - pyproj>=2.1 + - python >=3.9 - python-cdo - python-dateutil - pyyaml @@ -57,11 +58,11 @@ dependencies: - requests - ruamel.yaml - scikit-image - - scikit-learn + - scikit-learn >= 1.4.0 # github.com/ESMValGroup/ESMValTool/issues/3504 - scipy - seaborn - seawater - - shapely + - shapely >=2 - xarray >=0.12.0 - xesmf >=0.7.1 - xgboost >1.6.1 # github.com/ESMValGroup/ESMValTool/issues/2779 diff --git a/esmvaltool/cmorizers/data/cmor_config/AGCD.yml b/esmvaltool/cmorizers/data/cmor_config/AGCD.yml new file mode 100644 index 0000000000..3b11c8819f --- /dev/null +++ b/esmvaltool/cmorizers/data/cmor_config/AGCD.yml @@ -0,0 +1,36 @@ +--- +# filename: 'agcd_v1-0-1_precip_total_r005_monthly_.*.nc' +filename: 'agcd_{version}_{variable}_{raw_calc}_r005_{freq}_.*.nc' + +attributes: + project_id: OBS6 + dataset_id: AGCD + version: 'v2-0-1' + tier: 2 + modeling_realm: ground + resolution: '005' # '001' available for v2 + source: 'https://dx.doi.org/10.25914/rses-zh67 Australian Bureau of Meteorology (2023), + \Australian Gridded Climate Data ( AGCD ) ; v2.0.1 Snapshot (1900-01-01 to 2022-12-31)' + reference: 'agcd-v201' + comment: 'hosted on NCI (National Computing Infrastructure Australia)' + +variables: + pr: + mip: Amon + raw_long: Lwe Thickness Of Precipitation Amount (mm) + raw_calc: total + freq: monthly # convert daily as well, v1s only + raw: precip + +## variables in AGCD v1 + # tasmax: + # mip: Amon + # raw_long: Daily maximum air temperature, degrees_Celsius, monthly, mean + # raw_calc: mean + # freq: monthly + # raw: tmax + # tasmin: + # mip: Amon + # raw_calc: mean + # freq: monthly + # raw: tmin diff --git a/esmvaltool/cmorizers/data/cmor_config/NCEP-DOE-R2.yml b/esmvaltool/cmorizers/data/cmor_config/NCEP-DOE-R2.yml index 96fada79e4..e0768cf354 100644 --- a/esmvaltool/cmorizers/data/cmor_config/NCEP-DOE-R2.yml +++ b/esmvaltool/cmorizers/data/cmor_config/NCEP-DOE-R2.yml @@ -34,3 +34,8 @@ variables: mip: Amon raw: air file: 'air\.mon\.mean\.nc' + wap_month: + short_name: wap + mip: Amon + raw: omega + file: 'omega\.mon\.mean\.nc' diff --git a/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv3b.yml b/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv3b.yml new file mode 100644 index 0000000000..b21baa4bdb --- /dev/null +++ b/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv3b.yml @@ -0,0 +1,20 @@ +--- +# Filename +filename: 'ersst.*.nc' + +# Common global attributes for Cmorizer output +attributes: + project_id: OBS6 + dataset_id: NOAA-ERSSTv3b + version: 'v3b' + tier: 2 + modeling_realm: reanaly + source: https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v3b/netcdf/' + reference: 'ersstv3b' + comment: '' + +# Variables to cmorize +variables: + tos: + mip: Omon + raw: sst diff --git a/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv5.yml b/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv5.yml new file mode 100644 index 0000000000..dcc36a504a --- /dev/null +++ b/esmvaltool/cmorizers/data/cmor_config/NOAA-ERSSTv5.yml @@ -0,0 +1,20 @@ +--- +# Filename +filename: 'ersst.v5.*.nc' + +# Common global attributes for Cmorizer output +attributes: + project_id: OBS6 + dataset_id: NOAA-ERSSTv5 + version: 'v5' + tier: 2 + modeling_realm: reanaly + source: 'https://doi.org/10.7289/V5T72FNM' + reference: 'ersstv5' + comment: '' + +# Variables to cmorize +variables: + tos: + mip: Omon + raw: sst diff --git a/esmvaltool/cmorizers/data/cmor_config/NSIDC-G02202-sh.yml b/esmvaltool/cmorizers/data/cmor_config/NSIDC-G02202-sh.yml new file mode 100644 index 0000000000..0bdeea488a --- /dev/null +++ b/esmvaltool/cmorizers/data/cmor_config/NSIDC-G02202-sh.yml @@ -0,0 +1,23 @@ +--- +filename: seaice_conc_monthly_sh_{year}.*.nc +# Common global attributes for Cmorizer output +attributes: + dataset_id: NSIDC-G02202-sh + version: '4' + tier: 3 + modeling_realm: reanaly + project_id: OBS6 + source: 'https://nsidc.org/data/g02202/versions/4' + reference: 'nsidc-g02202' + comment: '' + +variables: + siconc: + mip: SImon + raw: cdr_seaice_conc_monthly + compress: true + + +custom: + create_areacello: true + area_file: pss25area_v3.dat diff --git a/esmvaltool/cmorizers/data/cmor_config/OceanSODA-ETHZ.yml b/esmvaltool/cmorizers/data/cmor_config/OceanSODA-ETHZ.yml index 87752e3947..b037a3428e 100644 --- a/esmvaltool/cmorizers/data/cmor_config/OceanSODA-ETHZ.yml +++ b/esmvaltool/cmorizers/data/cmor_config/OceanSODA-ETHZ.yml @@ -1,10 +1,8 @@ --- # Common global attributes for Cmorizer output -# Note that the filename says version 'v2021a', but the file attribute and the -# documentation says 'v2021e'. Therefore, we use 'v2021e' here. attributes: dataset_id: OceanSODA-ETHZ - version: v2021e + version: v2023 tier: 2 modeling_realm: reanaly project_id: OBS6 @@ -14,35 +12,35 @@ attributes: # Variables to cmorize variables: areacello: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Ofx raw_name: area co3os: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon raw_name: co3 raw_units: '1e-6 mol kg-1' comment: 'The original units of this variable are mumol/kg. To convert to the CMOR units mol/m3, we assume a constant sea water density of 1028 kg/m3, which is approximately the sea water density for T=4°C, salinity=35PSU, and p=0bar according to the UNESCO formula (UNESCO, 1981, Tenth report of the joint panel on oceanographic tables and standards, UNESCO Technical Papers in Marine Science, see https://www.wkcgroup.com/tools-room/seawater-density-calculator/ and https://link.springer.com/content/pdf/bbm:978-3-319-18908-6/1.pdf).' dissicos: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon raw_name: dic raw_units: '1e-6 mol kg-1' comment: 'The original units of this variable are mumol/kg. To convert to the CMOR units mol/m3, we assume a constant sea water density of 1028 kg/m3, which is approximately the sea water density for T=4°C, salinity=35PSU, and p=0bar according to the UNESCO formula (UNESCO, 1981, Tenth report of the joint panel on oceanographic tables and standards, UNESCO Technical Papers in Marine Science, see https://www.wkcgroup.com/tools-room/seawater-density-calculator/ and https://link.springer.com/content/pdf/bbm:978-3-319-18908-6/1.pdf).' fgco2: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon phos: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon raw_name: ph_total raw_units: '1' spco2: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon raw_units: '1e-6 atm' talkos: - filename: OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + filename: OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc mip: Omon raw_name: talk raw_units: '1e-6 mol kg-1' diff --git a/esmvaltool/cmorizers/data/datasets.yml b/esmvaltool/cmorizers/data/datasets.yml index 5ca2002c5d..58702b7535 100644 --- a/esmvaltool/cmorizers/data/datasets.yml +++ b/esmvaltool/cmorizers/data/datasets.yml @@ -1,6 +1,25 @@ # Dataset information --- datasets: + AGCD: + tier: 2 + source: "http://dx.doi.org/10.25914/6009600786063" + last_access: 2023-11-21 + info: | + Australian Gridded Climate Data (AGCD) version 2 is the Bureau of Meteorology's official dataset for climate + analyses covering analysis of monthly rainfall. The dataset provides consistent temporal and spatial analyses + across Australia for each observed data variable. This accounts for spatial and temporal gaps in observations. + Where possible, the gridded analysis techniques provide useful estimates in data-sparse regions + such as central Australia. + + Time coverage: Site-based data are used to provide gridded climate data at the monthly timescale for rainfall (1900+). + Reference: Evans, A., Jones, D.A., Smalley, R., and Lellyett, S. 2020. An enhanced gridded rainfall analysis scheme + for Australia. Bureau of Meteorology Research Report. No. 41. + National Computational Infrastructure (NCI) - Catalogue Record: http://dx.doi.org/10.25914/6009600786063. + Data from NCI (National Computing Infrastructure Australia https://nci.org.au/), + requires an NCI account and access to Gadi(Supercomputer in Canberra) and the project found in catalogue record. + Access can be requested through NCI. NCI is an ESGF node (https://esgf.nci.org.au/projects/esgf-nci/) + APHRO-MA: tier: 3 source: "http://aphrodite.st.hirosaki-u.ac.jp/download/" @@ -1036,6 +1055,24 @@ datasets: ntatFlxSI-MO/csulf.ntat.mon.mean.nc ntatFlxSI-MO/csusf.ntat.mon.mean.nc + NOAA-ERSSTv3b: + tier: 2 + source: https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v3b/netcdf/ + last_access: 2023-12-04 + info: | + Download the following files: + ersst.yyyymm.nc + for years 1854 to 2020 + + NOAA-ERSSTv5: + tier: 2 + source: https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/ + last_access: 2023-12-04 + info: | + Download the following files: + ersst.v5.yyyymm.nc + for years 1854 onwards + NOAAGlobalTemp: tier: 2 source: https://www.ncei.noaa.gov/data/noaa-global-surface-temperature/v5/access/ @@ -1060,13 +1097,21 @@ datasets: Download daily data from: https://nsidc.org/data/NSIDC-0116 Login required for download, and also requires citation only to use + + NSIDC-G02202-sh: + tier: 3 + source: https://polarwatch.noaa.gov/erddap/griddap/nsidcG02202v4shmday + last_access: 2023-05-13 + info: | + Download monthly data. + Login required for download, and also requires citation only to use OceanSODA-ETHZ: tier: 2 source: https://www.ncei.noaa.gov/data/oceans/ncei/ocads/data/0220059/ - last_access: 2022-11-03 + last_access: 2024-02-15 info: | - Download the file OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + Download the file OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc OSI-450-nh: tier: 2 diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/ncep_doe_r2.py b/esmvaltool/cmorizers/data/downloaders/datasets/ncep_doe_r2.py index 096b54e898..704493554f 100644 --- a/esmvaltool/cmorizers/data/downloaders/datasets/ncep_doe_r2.py +++ b/esmvaltool/cmorizers/data/downloaders/datasets/ncep_doe_r2.py @@ -39,6 +39,8 @@ def download_dataset(config, dataset, dataset_info, start_date, end_date, url = "https://downloads.psl.noaa.gov/Datasets/ncep.reanalysis2/Monthlies/" + downloader.download_file(url + "pressure/omega.mon.mean.nc", + wget_options=[]) downloader.download_file(url + "pressure/rhum.mon.mean.nc", wget_options=[]) downloader.download_file(url + "pressure/air.mon.mean.nc", wget_options=[]) diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv3b.py b/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv3b.py new file mode 100644 index 0000000000..0ac6a3e012 --- /dev/null +++ b/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv3b.py @@ -0,0 +1,49 @@ +"""Script to download NOAA-ERSST-v3b.""" +import logging +from datetime import datetime +from dateutil import relativedelta + +from esmvaltool.cmorizers.data.downloaders.wget import WGetDownloader + +logger = logging.getLogger(__name__) + + +def download_dataset(config, dataset, dataset_info, start_date, end_date, + overwrite): + """Download dataset. + + Parameters + ---------- + config : dict + ESMValTool's user configuration + dataset : str + Name of the dataset + dataset_info : dict + Dataset information from the datasets.yml file + start_date : datetime + Start of the interval to download + end_date : datetime + End of the interval to download + overwrite : bool + Overwrite already downloaded files + """ + if start_date is None: + start_date = datetime(1854, 1, 1) + if end_date is None: + end_date = datetime(2020, 1, 1) + + loop_date = start_date + + downloader = WGetDownloader( + config=config, + dataset=dataset, + dataset_info=dataset_info, + overwrite=overwrite, + ) + base_path = ("https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v3b/netcdf" + "/ersst.{year}{month:02d}.nc") + + while loop_date <= end_date: + downloader.download_folder( + base_path.format(year=loop_date.year, month=loop_date.month), []) + loop_date += relativedelta.relativedelta(months=1) diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv5.py b/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv5.py new file mode 100644 index 0000000000..f995f9d2c7 --- /dev/null +++ b/esmvaltool/cmorizers/data/downloaders/datasets/noaa_ersstv5.py @@ -0,0 +1,49 @@ +"""Script to download NOAA-ERSST-V5.""" +import logging +from datetime import datetime +from dateutil import relativedelta + +from esmvaltool.cmorizers.data.downloaders.wget import WGetDownloader + +logger = logging.getLogger(__name__) + + +def download_dataset(config, dataset, dataset_info, start_date, end_date, + overwrite): + """Download dataset. + + Parameters + ---------- + config : dict + ESMValTool's user configuration + dataset : str + Name of the dataset + dataset_info : dict + Dataset information from the datasets.yml file + start_date : datetime + Start of the interval to download + end_date : datetime + End of the interval to download + overwrite : bool + Overwrite already downloaded files + """ + if start_date is None: + start_date = datetime(1854, 1, 1) + if end_date is None: + end_date = datetime(2020, 1, 1) + loop_date = start_date + + downloader = WGetDownloader( + config=config, + dataset=dataset, + dataset_info=dataset_info, + overwrite=overwrite, + ) + + base_path = ("https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/" + "ersst.v5.{year}{month:02d}.nc") + + while loop_date <= end_date: + downloader.download_folder( + base_path.format(year=loop_date.year, month=loop_date.month), []) + loop_date += relativedelta.relativedelta(months=1) diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/nsidc_g02202_sh.py b/esmvaltool/cmorizers/data/downloaders/datasets/nsidc_g02202_sh.py new file mode 100644 index 0000000000..798decda96 --- /dev/null +++ b/esmvaltool/cmorizers/data/downloaders/datasets/nsidc_g02202_sh.py @@ -0,0 +1,80 @@ +"""Script to download NSIDC-G02202-sh.""" +import logging +from datetime import datetime +from dateutil import relativedelta + +from esmvaltool.cmorizers.data.downloaders.wget import WGetDownloader + +logger = logging.getLogger(__name__) + + +def download_dataset(config, dataset, dataset_info, start_date, end_date, + overwrite): + """Download dataset. + + Parameters + ---------- + config : dict + ESMValTool's user configuration + dataset : str + Name of the dataset + dataset_info : dict + Dataset information from the datasets.yml file + start_date : datetime + Start of the interval to download + end_date : datetime + End of the interval to download + overwrite : bool + Overwrite already downloaded files + """ + if start_date is None: + start_date = datetime(1979, 1, 1) + if end_date is None: + end_date = datetime(2023, 1, 1) + + loop_date = start_date + + downloader = WGetDownloader( + config=config, + dataset=dataset, + dataset_info=dataset_info, + overwrite=overwrite, + ) + + # need area file + area_dat = ('ftp://sidads.colorado.edu/DATASETS/seaice' + '/polar-stereo/tools/pss25area_v3.dat') + downloader.download_folder(area_dat, []) + + anc_path = ('https://noaadata.apps.nsidc.org/NOAA/G02202_V4/' + 'ancillary/G02202-cdr-ancillary-sh.nc') + downloader.download_folder(anc_path, []) + + base_path = ('https://noaadata.apps.nsidc.org/NOAA/G02202_V4/south/monthly' + '/seaice_conc_monthly_sh_{year}{month:02d}_{other}_v04r00.nc') + + # regex for n07 changes to f08.. file names + # bins #{'197811':'n07','198708':'f08', + # '199201':'f11','199510':'f13', '200801':'f17'} + datels = [datetime(1978, 11, 1), datetime(1987, 7, 30), + datetime(1991, 12, 30), datetime(1995, 9, 30), + datetime(2007, 12, 30), end_date] + suffls = ['n07', 'f08', 'f11', 'f13', 'f17'] + isuf = 0 + suffix = suffls[isuf] + # initialize suffix if dates start higher than initial + while loop_date >= datels[isuf]: + suffix = suffls[isuf] + isuf += 1 + + while loop_date <= end_date: + + if loop_date > datels[isuf]: + suffix = suffls[isuf] + isuf += 1 + + downloader.download_folder( + base_path.format(year=loop_date.year, month=loop_date.month, + other=suffix), []) + loop_date += relativedelta.relativedelta(months=1) + # check loop_date is => next bin diff --git a/esmvaltool/cmorizers/data/downloaders/datasets/oceansoda_ethz.py b/esmvaltool/cmorizers/data/downloaders/datasets/oceansoda_ethz.py index cc01632cb3..2e099814dd 100644 --- a/esmvaltool/cmorizers/data/downloaders/datasets/oceansoda_ethz.py +++ b/esmvaltool/cmorizers/data/downloaders/datasets/oceansoda_ethz.py @@ -34,6 +34,6 @@ def download_dataset(config, dataset, dataset_info, start_date, end_date, downloader.download_file( "https://www.ncei.noaa.gov/data/oceans/ncei/ocads/data/0220059/" - "OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc", + "OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc", wget_options=[], ) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/agcd.py b/esmvaltool/cmorizers/data/formatters/datasets/agcd.py new file mode 100644 index 0000000000..a8b138f7b9 --- /dev/null +++ b/esmvaltool/cmorizers/data/formatters/datasets/agcd.py @@ -0,0 +1,122 @@ +"""ESMValTool CMORizer for AGCD data. + +Tier + Tier 2: other freely available dataset. + +Source + https://dx.doi.org/10.25914/rses-zh67 + +Last access + 20231121 + +Download and processing instructions + Data from NCI (National Computing Infrastructure Australia) + https://nci.org.au/, + requiring an NCI account and access to Gadi(Supercomputer in Australia) + and the dataset project found in + catalogue record https://dx.doi.org/10.25914/rses-zh67. + Access can be requested through NCI. + NCI is an ESGF node: (https://esgf.nci.org.au/projects/esgf-nci/) + Processing is done on Gadi. + +""" +import logging +import os +import re + +import iris + +from esmvalcore.cmor._fixes.shared import get_time_bounds +from esmvaltool.cmorizers.data import utilities as utils + +logger = logging.getLogger(__name__) + + +def _get_filepaths(in_dir, basename): + """Find correct name of file (extend basename with timestamp).""" + regex = re.compile(basename) + return_files = [] + for root, _, files in os.walk(in_dir, followlinks=True): + + for filename in files: + if regex.match(filename): + return_files.append(os.path.join(root, filename)) + + return return_files + + +def fix_data_var(cube, var): + """Convert units in cube for the variable.""" + monthdays = {1: 31, 2: 28, 3: 31, 4: 30, 5: 31, 6: 30, + 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31} + if var == 'pr': + newcubels = [] + for i, m_cube in enumerate(cube.slices(['latitude', 'longitude'])): + m_cube = m_cube / (monthdays[i + 1] * 86400) # days in month + newcubels.append(m_cube) + + cube = iris.cube.CubeList(newcubels).merge()[0] + cube.units = 'kg m-2 s-1' + + elif var in ['tas', 'tasmin', 'tasmax']: # other variables in v1 + cube = cube + 273.15 + cube.units = 'K' + utils.add_height2m(cube) + + else: + logger.info("Variable %s not converted", var) + + return cube + + +def _extract_variable(cmor_info, attrs, filepath, out_dir): + """Extract variable.""" + var = cmor_info.short_name + logger.info("Var is %s", var) + cubes = iris.load(filepath) + for cube in cubes: + + cube = fix_data_var(cube, var) + + utils.fix_var_metadata(cube, cmor_info) + + utils.fix_coords(cube) + bounds = get_time_bounds(cube.coords('time')[0], 'mon') + cube.coords('time')[0].bounds = bounds + utils.set_global_atts(cube, attrs) + + logger.info("Saving file") + utils.save_variable(cube, + var, + out_dir, + attrs, + unlimited_dimensions=['time']) + + +def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): + """Cmorization func call.""" + glob_attrs = cfg['attributes'] + cmor_table = cfg['cmor_table'] + + ver = cfg['attributes']['version'] + + # Run the cmorization #multiple variables + for (var, var_info) in cfg['variables'].items(): + + glob_attrs['mip'] = var_info['mip'] + logger.info("CMORizing variable '%s', %s", var, var_info['mip']) + + raw_filename = cfg['filename'].format(version=ver, + variable=var_info['raw'], + raw_calc=var_info['raw_calc'], + freq=var_info['freq']) + filepaths = _get_filepaths(in_dir, raw_filename) + + if not filepaths: + logger.info("no files for %s. pattern:%s", var, raw_filename) + logger.info("directory:%s", in_dir) + for inputfile in filepaths: + logger.info("Found input file '%s'", inputfile) + + cmor_info = cmor_table.get_variable(var_info['mip'], var) + _extract_variable(cmor_info, glob_attrs, inputfile, out_dir) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/clara_avhrr.ncl b/esmvaltool/cmorizers/data/formatters/datasets/clara_avhrr.ncl index 05912b7b0e..b275332d48 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/clara_avhrr.ncl +++ b/esmvaltool/cmorizers/data/formatters/datasets/clara_avhrr.ncl @@ -34,6 +34,7 @@ ; 7) Untar all .tar files into a single directory. ; ; Modification history +; 20230818-lauer_axel: added output of clwvi (in addition to iwp, lwp) ; 20210506-lauer_axel: output of lwp instead of clwvi ; 20210323-lauer_axel: written. ; @@ -57,30 +58,31 @@ begin YEAR2 = 2018 ; Selected variable (standard name) - VAR = (/"clt", "clivi", "lwp"/) + VAR = (/"clt", "clivi", "lwp", "clwvi"/) ; Name in the raw data - NAME = (/"cfc", "iwp_allsky", "lwp_allsky"/) + NAME = (/"cfc", "iwp_allsky", "lwp_allsky", "iwp_allsky"/) ; Filename base - FNBASE = (/"CFCmm", "IWPmm", "LWPmm"/) + FNBASE = (/"CFCmm", "IWPmm", "LWPmm", "IWPmm"/) ; Conversion factor ; Remark: total cloud cover (CFC) is reported as "1" but is actually "%" ; IWP and LWP use scale_factor to convert to kg/m2 - ; CONV = (/1., 1., 1./) + ; CONV = (/1., 1., 1., 1./) ; MIP - MIP = (/"Amon", "Amon", "Amon"/) + MIP = (/"Amon", "Amon", "Amon", "Amon"/) ; Frequency - FREQ = (/"mon", "mon", "mon"/) + FREQ = (/"mon", "mon", "mon", "mon"/) ; CMOR table CMOR_TABLE = getenv("cmor_tables") + \ (/"/cmip5/Tables/CMIP5_Amon", \ "/cmip5/Tables/CMIP5_Amon", \ - "/custom/CMOR_lwp.dat"/) + "/custom/CMOR_lwp.dat", \ + "/cmip5/Tables/CMIP5_Amon"/) ; Type TYPE = "sat" @@ -159,17 +161,56 @@ begin output&lat = f->lat output!2 = "lon" output&lon = f->lon + fillval = xx@_FillValue end if output(ind(toint(yy * 100 + mm).eq.date), :, :) = (/xx/) delete(fname) delete(f) - + delete(xx) + + ; *** calculate clwvi (lwp + iwp) *** + + if (VAR(vv) .eq. "clwvi") then + fname = systemfunc("ls " + input_dir_path + "LWPmm" + \ + syear + smonth + "01*.nc") + + ; No files found + if (ismissing(fname)) then + log_info("Warning: input data incomplete for variable " + \ + VAR(vv) + " (" + syear + smonth + ")") + continue + end if + + ; Extract data + f = addfile(fname, "r") + val = f->lwp_allsky + if (isatt(val, "scale_factor")) then + scalefac = tofloat(val@scale_factor) + else + scalefac = 1.0 + end if + if (isatt(val, "add_offset")) then + offset = tofloat(val@add_offset) + else + offset = 0.0 + end if + xx = tofloat(val) * scalefac + offset + delete(val) + + idx = ind(toint(yy * 100 + mm).eq.date) + output(idx, :, :) = output(idx, :, :) + (/xx(0, :, :)/) + + delete(idx) + delete(xx) + delete(fname) + delete(f) + end if ; if VAR(vv) .eq. "clwvi" end do end do ; Set fill value - output = where(output.eq.xx@_FillValue, output@_FillValue, output) + output = where(output.eq.fillval, output@_FillValue, output) ; Format coordinates output!0 = "time" diff --git a/esmvaltool/cmorizers/data/formatters/datasets/cloudsat_l2.ncl b/esmvaltool/cmorizers/data/formatters/datasets/cloudsat_l2.ncl index f056ac4de6..d26ed74cd6 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/cloudsat_l2.ncl +++ b/esmvaltool/cmorizers/data/formatters/datasets/cloudsat_l2.ncl @@ -58,6 +58,7 @@ ; --end=2015 CLOUDSAT-L2 ; ; Modification history +; 20230904-lauer_axel: added output of clwvi (iwp + lwp) ; 20220809-lauer_axel: adapted CMORizer to new format introduced in ; ESMValTool v2.5.0 and added info message ; 20210924-lauer_axel: added processing of lwp and iwp @@ -100,12 +101,13 @@ begin end if ; output variable (standard name) - outvar = (/"clw", "lwp", "clivi"/) + outvar = (/"clw", "lwp", "clivi", "clwvi"/) ; input variables var = (/"LO_RO_liquid_water_content_2B_CWC_RO", \ "LO_RO_liquid_water_path_2B_CWC_RO", \ - "IO_RO_ice_water_path_2B_CWC_RO"/) + "IO_RO_ice_water_path_2B_CWC_RO", \ + "dummy"/) var_flag = "Precip_flag_2C_PRECIP_COLUMN" @@ -120,6 +122,7 @@ begin CMOR_TABLE = getenv("cmor_tables") + \ (/"/cmip5/Tables/CMIP5_" + mip, \ "/custom/CMOR_lwp.dat", \ + "/cmip5/Tables/CMIP5_" + mip, \ "/cmip5/Tables/CMIP5_" + mip/) ; Type @@ -168,26 +171,26 @@ begin grid = new((/nt, nz, ny, nx/), float) gridpts = new((/nt, nz, ny, nx/), integer) - grid2d = new((/nt, 2, ny, nx/), float) - gridpts2d = new((/nt, 2, ny, nx/), integer) + grid2d = new((/nt, 3, ny, nx/), float) + gridpts2d = new((/nt, 3, ny, nx/), integer) ; "grid-box average" (all points) grid_avg = new((/nt, nz, ny, nx/), float) gridpts_avg = new((/nt, nz, ny, nx/), integer) - grid2d_avg = new((/nt, 2, ny, nx/), float) - gridpts2d_avg = new((/nt, 2, ny, nx/), integer) + grid2d_avg = new((/nt, 3, ny, nx/), float) + gridpts2d_avg = new((/nt, 3, ny, nx/), integer) ; "in-cloud" (no precipitation) grid_noprecip = new((/nt, nz, ny, nx/), float) gridpts_noprecip = new((/nt, nz, ny, nx/), integer) - grid2d_noprecip = new((/nt, 2, ny, nx/), float) - gridpts2d_noprecip = new((/nt, 2, ny, nx/), integer) + grid2d_noprecip = new((/nt, 3, ny, nx/), float) + gridpts2d_noprecip = new((/nt, 3, ny, nx/), integer) ; "grid-box average" (no precipitation) grid_avg_noprecip = new((/nt, nz, ny, nx/), float) gridpts_avg_noprecip = new((/nt, nz, ny, nx/), integer) - grid2d_avg_noprecip = new((/nt, 2, ny, nx/), float) - gridpts2d_avg_noprecip = new((/nt, 2, ny, nx/), integer) + grid2d_avg_noprecip = new((/nt, 3, ny, nx/), float) + gridpts2d_avg_noprecip = new((/nt, 3, ny, nx/), integer) ; boundaries of vertical (height) bins @@ -491,23 +494,29 @@ begin delete(lon_ext) delete(hgt1d) - ; =================================== - ; 2-dim cloud liquid / ice water path - ; =================================== + ; ============================================================ + ; 2-dim cloud liquid / ice water path / total cloud water path + ; ============================================================ - do ivar = 1, 2 + do ivar = 1, 3 if (outvar(ivar) .eq. "lwp") then x = l1d ilev = 0 else if (outvar(ivar) .eq. "clivi") then x = i1d ilev = 1 + else if (outvar(ivar) .eq. "clwvi") then + ; clwvi is calculated from the *output* fields of lwp and iwp + ; to make sure it is the sum of the two (masking, etc.) + ; --> nothing to do here + continue else log_info("Warning: output variable unknown: " + outvar(ivar) + \ ", skipping variable " + outvar(ivar) + ".") continue end if end if + end if ; Find all elements that contain valid (x > 0) or missing (x = 0) ; values; invalid values (x < 0) are filtered out. @@ -746,11 +755,23 @@ begin ; save results to files - do ivar = 1, 2 + do ivar = 1, 3 if (outvar(ivar) .eq. "lwp") then ilev = 0 else if (outvar(ivar) .eq. "clivi") then ilev = 1 + else if (outvar(ivar) .eq. "clwvi") then + ; calculate clwvi (lwp+iwp) as sum of output fields for lwp and iwp + ilev = 2 + grid2d(:, ilev, :, :) = grid2d(:, 0, :, :) \ + + grid2d(:, 1, :, :) + grid2d_avg(:, ilev, :, :) = grid2d_avg(:, 0, :, :) \ + + grid2d_avg(:, 1, :, :) + grid2d_noprecip(:, ilev, :, :) = grid2d_noprecip(:, 0, :, :) \ + + grid2d_noprecip(:, 1, :, :) + grid2d_avg_noprecip(:, ilev, :, :) = grid2d_avg_noprecip(:, 0, :, :) \ + + grid2d_avg_noprecip(:, 1, :, :) + end if end if end if @@ -842,7 +863,7 @@ begin write_nc(fout, outvar(ivar), output, bounds, gAtt) delete(output) delete(gAtt) - end do ; loop over implemented 2-dim variables (lwp, iwp) + end do ; loop over implemented 2-dim variables (lwp, iwp, lwp+iwp) end do ; loop over years end diff --git a/esmvaltool/cmorizers/data/formatters/datasets/esacci_cloud.ncl b/esmvaltool/cmorizers/data/formatters/datasets/esacci_cloud.ncl index 10cf50a2a7..b19ae0b865 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/esacci_cloud.ncl +++ b/esmvaltool/cmorizers/data/formatters/datasets/esacci_cloud.ncl @@ -22,11 +22,12 @@ ; --reject="index.html*" ; https://public.satproj.klima.dwd.de/data/ESA_Cloud_CCI/ ; CLD_PRODUCTS/v3.0/L3C/AVHRR-PM/ - +; ; All files are expected in a single directory (no subdirectories ; with years). ; ; Modification history +; 20230818-lauer_axel: added output of clwvi (in addition to iwp, lwp) ; 20210428-lauer_axel: AVHRR-AM and AVHRR-PM data are now averaged during ; the overlapping time; TOA radiative fluxes are now ; also processed @@ -56,24 +57,25 @@ begin YEAR2 = get_year(end_year, 2016) ; Selected variable (standard name) - VAR = (/"clt", "cltStderr", "clivi", "lwp", "rlut", "rlutcs", \ + VAR = (/"clt", "cltStderr", "clivi", "lwp", "clwvi", "rlut", "rlutcs", \ "rsut", "rsutcs", "rsdt", "rlus", "rsus", "rsuscs"/) ; Name in the raw data - NAME = (/"cfc", "cfc_unc", "iwp_allsky", "lwp_allsky", "toa_lwup", \ - "toa_lwup_clr", "toa_swup", "toa_swup_clr", "toa_swdn", \ - "boa_lwup", "boa_swup", "boa_swup_clr"/) + NAME = (/"cfc", "cfc_unc", "iwp_allsky", "lwp_allsky", "iwp_allsky", \ + "toa_lwup", "toa_lwup_clr", "toa_swup", "toa_swup_clr", \ + "toa_swdn", "boa_lwup", "boa_swup", "boa_swup_clr"/) ; Conversion factor - CONV = (/100., 1., 0.001, 0.001, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0/) + CONV = (/100., 1., 0.001, 0.001, 0.001, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, \ + 1.0, 1.0/) ; MIP MIP = (/"Amon", "Amon", "Amon", "Amon", "Amon", "Amon", "Amon", "Amon", \ - "Amon", "Amon", "Amon", "Amon"/) + "Amon", "Amon", "Amon", "Amon", "Amon"/) ; Frequency FREQ = (/"mon", "mon", "mon", "mon", "mon", "mon", "mon", "mon", "mon", \ - "mon", "mon", "mon"/) + "mon", "mon", "mon", "mon"/) ; CMOR table CMOR_TABLE = getenv("cmor_tables") + \ @@ -88,6 +90,7 @@ begin "/cmip5/Tables/CMIP5_Amon", \ "/cmip5/Tables/CMIP5_Amon", \ "/cmip5/Tables/CMIP5_Amon", \ + "/cmip5/Tables/CMIP5_Amon", \ "/cmip5/Tables/CMIP5_Amon"/) ; Type @@ -151,6 +154,13 @@ begin ; Convert units xx_all(i, :, :, :) = xx * CONV(vv) + ; *** calculate clwvi (lwp + iwp) *** + if (VAR(vv) .eq. "clwvi") then + xx2 = f->lwp_allsky * 0.001 + xx_all(i, :, :, :) = xx_all(i, :, :, :) + xx2 + delete(xx2) + end if + if (firstime) then lat = f->lat lon = f->lon @@ -161,6 +171,7 @@ begin delete(fname) delete(xx) + xx = dim_avg_n(xx_all, 0) ; ignore missing values delete(xx_all) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv3b.py b/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv3b.py new file mode 100644 index 0000000000..f7c5e908be --- /dev/null +++ b/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv3b.py @@ -0,0 +1,89 @@ +"""ESMValTool CMORizer for NOAA ERSST data, version 3b. + + This is the CMORizer script for the NOAA Extended Reconstructed + Sea Surface Temperature (ERSST) in its version 3b. + +Tier + Tier 2: open dataset. + +Source + https://doi.org/10.1175/1520-0442-16.10.1495 + +Last access + 20200520 + +Download and processing instructions + The data is provided by NOAA at: + https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v3b/netcdf/ + +""" + +import logging +import os +import re + +import iris +from cf_units import Unit + +from esmvaltool.cmorizers.data import utilities as utils + +logger = logging.getLogger(__name__) + + +def _get_filepaths(in_dir, basename): + """Find correct name of file (extend basename with timestamp).""" + regex = re.compile(basename) + return_files = [] + for files in os.listdir(in_dir): + + if regex.match(files): + return_files.append(os.path.join(in_dir, files)) + + return return_files + + +def _fix_time_coord(cube, _field, _filename): + """Set time points to central day of month.""" + time_coord = cube.coord('time') + new_unit = Unit('days since 1850-01-01 00:00:00', calendar='standard') + time_coord.convert_units(new_unit) + old_time = new_unit.num2date(time_coord.points) + new_time = [d.replace(day=15) for d in old_time] + time_coord.points = new_unit.date2num(new_time) + + +def _extract_variable(raw_var, cmor_info, attrs, filepath, out_dir): + """Extract variable from all files.""" + var = cmor_info.short_name + cubes = iris.load(filepath, raw_var, _fix_time_coord) + iris.util.equalise_attributes(cubes) + cube = cubes.concatenate_cube() + cube = iris.util.squeeze(cube) + + utils.fix_var_metadata(cube, cmor_info) + utils.set_global_atts(cube, attrs) + utils.save_variable(cube, + var, + out_dir, + attrs, + unlimited_dimensions=['time']) + + +def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): + """Cmorization func call.""" + glob_attrs = cfg['attributes'] + cmor_table = cfg['cmor_table'] + + filepaths = _get_filepaths(in_dir, cfg['filename']) + + if len(filepaths) > 0: + logger.info("Found %d input files in '%s'", len(filepaths), in_dir) + else: + logger.info("No files found, basename: %s", cfg['filename']) + + for (var, var_info) in cfg['variables'].items(): + logger.info("CMORizing variable '%s'", var) + glob_attrs['mip'] = var_info['mip'] + cmor_info = cmor_table.get_variable(var_info['mip'], var) + raw_var = var_info.get('raw', var) + _extract_variable(raw_var, cmor_info, glob_attrs, filepaths, out_dir) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv5.py b/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv5.py new file mode 100644 index 0000000000..b9f6421e63 --- /dev/null +++ b/esmvaltool/cmorizers/data/formatters/datasets/noaa_ersstv5.py @@ -0,0 +1,105 @@ +"""ESMValTool CMORizer for NOAA ERSST data, version 5. + + This is the CMORizer script for the NOAA Extended Reconstructed Sea Surface + Temperature (ERSST) data of version 5. + +Tier + Tier 2: open dataset. + +Source + https://doi.org/10.7289/V5T72FNM + +Last access + 20200520 + +Download and processing instructions + The data is provided by NOAA at: + https://www1.ncdc.noaa.gov/pub/data/cmb/ersst/v5/netcdf/ + +""" + +import logging +import os +import re + +import iris +import cf_units + +from esmvaltool.cmorizers.data import utilities as utils + +logger = logging.getLogger(__name__) + + +def _get_filepaths(in_dir, basename): + """Find correct name of file (extend basename with timestamp).""" + regex = re.compile(basename) + return_files = [] + return_files_gr08 = [] + for file in os.listdir(in_dir): + + if regex.match(file): + year = file.split('.')[2][:4] # ersst.v5.$yr$nm.nc + # return 2 lists as files differ from 2008 + if int(year) < 2008: + return_files.append(os.path.join(in_dir, file)) + else: + return_files_gr08.append(os.path.join(in_dir, file)) + + return return_files, return_files_gr08 + + +def _fix_time_coord(cube, _, _filename): + """Set time points to central day of month and standardise time units.""" + t_coord = cube.coord('time') + _unit = t_coord.units + new_time = [d.replace(day=15) for d in _unit.num2date(t_coord.points)] + t_coord.points = _unit.date2num(new_time).astype('float64') + t_coord.units = cf_units.Unit(t_coord.units.origin, calendar='standard') + t_coord.long_name = 'Time' + + +def _extract_variable(raw_var, cmor_info, attrs, filepaths, out_dir): + """Extract variable and concatenate months.""" + var = cmor_info.short_name + + cubels = iris.load(filepaths, raw_var, _fix_time_coord) + iris.util.equalise_attributes(cubels) + iris.util.unify_time_units(cubels) + cube = cubels.concatenate_cube() + cube = iris.util.squeeze(cube) + + utils.fix_var_metadata(cube, cmor_info) + utils.fix_coords(cube) + + utils.set_global_atts(cube, attrs) + utils.save_variable(cube, + var, + out_dir, + attrs, + unlimited_dimensions=['time']) + + +def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): + """Cmorization func call.""" + glob_attrs = cfg['attributes'] + cmor_table = cfg['cmor_table'] + + filepaths = _get_filepaths(in_dir, cfg['filename']) + + if len(filepaths[0]) > 0 or len(filepaths[1]) > 0: + totalfiles = len(filepaths[0]) + len(filepaths[1]) + logger.info("%d files before 2008", len(filepaths[0])) + logger.info("Found %d input files in '%s'", totalfiles, in_dir) + else: + logger.info("No files found, basename: %s", cfg['filename']) + + # Run the cmorization + for (var, var_info) in cfg['variables'].items(): + logger.info("CMORizing variable '%s'", var) + glob_attrs['mip'] = var_info['mip'] + cmor_info = cmor_table.get_variable(var_info['mip'], var) + raw_var = var_info.get('raw', var) + _extract_variable(raw_var, cmor_info, glob_attrs, + filepaths[0], out_dir) + _extract_variable(raw_var, cmor_info, glob_attrs, + filepaths[1], out_dir) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/nsidc_g02202_sh.py b/esmvaltool/cmorizers/data/formatters/datasets/nsidc_g02202_sh.py new file mode 100644 index 0000000000..c206f817cb --- /dev/null +++ b/esmvaltool/cmorizers/data/formatters/datasets/nsidc_g02202_sh.py @@ -0,0 +1,182 @@ +"""ESMValTool CMORizer for Sea Ice Concentration CDR. + +Tier + Tier 3: restricted dataset. + +Source + https://nsidc.org/data/g02202/versions/4 + +Last access + 20231213 + +Download and processing instructions + Download data from: + https://noaadata.apps.nsidc.org/NOAA/G02202_V4/south/monthly + lat and lon from: + https://noaadata.apps.nsidc.org/NOAA/G02202_V4/ancillary/ + area file: + ftp://sidads.colorado.edu/DATASETS/seaice/polar-stereo/tools/ + pss25area_v3.dat + + https://nsidc.org/sites/default/files/g02202-v004-userguide_1_1.pdf + +""" + +import logging +import os +import re + +import numpy as np + +import iris +from cf_units import Unit +from iris.coords import AuxCoord + +from esmvaltool.cmorizers.data import utilities as utils + +logger = logging.getLogger(__name__) + + +def _get_filepaths(in_dir, basename, yyyy): + """Find correct name of file (extend basename with timestamp).""" + f_name = basename.format(year=yyyy) + regex = re.compile(f_name) + return_files = [] + for files in os.listdir(in_dir): + + if regex.match(files): + return_files.append(os.path.join(in_dir, files)) + + return return_files + + +def _fix_time_coord(cube, _field, _filename): + """Set time points to central day of month.""" + time_coord = cube.coord('time') + new_unit = Unit('days since 1850-01-01 00:00:00', calendar='standard') + time_coord.convert_units(new_unit) + old_time = new_unit.num2date(time_coord.points) + new_time = [d.replace(day=15) for d in old_time] + time_coord.points = new_unit.date2num(new_time) + + +def _prom_dim_coord(cube, _field, _filename): + iris.util.promote_aux_coord_to_dim_coord(cube, 'time') + + +def _create_coord(cubes, var_name, standard_name): + cube = cubes.extract_cube(standard_name) + coord = AuxCoord( + cube.data, + standard_name=standard_name, + long_name=cube.long_name, + var_name=var_name, + units='degrees' # cube.units, + ) + return coord + + +def _extract_variable(raw_var, cmor_info, attrs, filepath, out_dir, latlon): + """Extract variable from all files.""" + var = cmor_info.short_name + cubes = iris.load(filepath, raw_var, _prom_dim_coord) + iris.util.equalise_attributes(cubes) + + cube = cubes.concatenate_cube() + iris.util.promote_aux_coord_to_dim_coord(cube, 'projection_y_coordinate') + iris.util.promote_aux_coord_to_dim_coord(cube, 'projection_x_coordinate') + cube.coord('projection_y_coordinate').rename('y') + cube.coord('projection_x_coordinate').rename('x') + + cube.add_aux_coord(latlon[0], (1, 2)) + cube.add_aux_coord(latlon[1], (1, 2)) + # add coord typesi + area_type = AuxCoord([1.0], standard_name='area_type', var_name='type', + long_name='Sea Ice area type') + cube.add_aux_coord(area_type) + + # cube.convert_units(cmor_info.units) + cube.units = '%' + cube.data[cube.data > 100] = np.nan + cube = cube * 100 + + # utils.fix_coords(cube) #latlon multidimensional + utils.fix_var_metadata(cube, cmor_info) + utils.set_global_atts(cube, attrs) + + utils.save_variable(cube, + var, + out_dir, + attrs, + unlimited_dimensions=['time']) + + return cube + + +def _create_areacello(cfg, in_dir, sample_cube, glob_attrs, out_dir): + if not cfg['custom'].get('create_areacello', False): + return + var_info = cfg['cmor_table'].get_variable('Ofx', 'areacello') + glob_attrs['mip'] = 'Ofx' + lat_coord = sample_cube.coord('latitude') + + area_file = os.path.join(in_dir, cfg['custom']['area_file']) + with open(area_file, 'rb') as datfile: + areasdmnd = np.fromfile(datfile, + dtype=np.int32).reshape(lat_coord.shape) + + # Divide by 1000 to get km2 then multiply by 1e6 to m2 ...*1000 + ardata = areasdmnd * 1000 + + cube = iris.cube.Cube(ardata, + standard_name=var_info.standard_name, + long_name=var_info.long_name, + var_name=var_info.short_name, + units='m2', + dim_coords_and_dims=[(sample_cube.coord('y'), 0), + (sample_cube.coord('x'), 1)]) + cube.add_aux_coord(lat_coord, (0, 1)) + cube.add_aux_coord(sample_cube.coord('longitude'), (0, 1)) + utils.fix_var_metadata(cube, var_info) + utils.set_global_atts(cube, glob_attrs) + utils.save_variable(cube, var_info.short_name, out_dir, glob_attrs, + zlib=True) + + +def cmorization(in_dir, out_dir, cfg, cfg_user, start_date, end_date): + """Cmorization func call.""" + glob_attrs = cfg['attributes'] + cmor_table = cfg['cmor_table'] + + # get aux nc file + cubesaux = iris.load(os.path.join(in_dir, 'G02202-cdr-ancillary-sh.nc')) + lat_coord = _create_coord(cubesaux, 'lat', 'latitude') + lon_coord = _create_coord(cubesaux, 'lon', 'longitude') + year = 1978 + # split by year.. + sample_cube = None + while year <= 2022: + + filepaths = _get_filepaths(in_dir, cfg['filename'], year) + + if len(filepaths) > 0: + logger.info("Found %d files in '%s'", len(filepaths), in_dir) + + for (var, var_info) in cfg['variables'].items(): + logger.info("CMORizing variable '%s'", var) + glob_attrs['mip'] = var_info['mip'] + cmor_info = cmor_table.get_variable(var_info['mip'], var) + raw_var = var_info.get('raw', var) + sample_cube = _extract_variable(raw_var, cmor_info, + glob_attrs, filepaths, + out_dir, [lat_coord, + lon_coord]) + + else: + logger.info("No files found ") + logger.info("year: %d basename: %s", year, cfg['filename']) + + year += 1 + + if sample_cube is not None: + _create_areacello(cfg, in_dir, sample_cube, glob_attrs, out_dir) diff --git a/esmvaltool/cmorizers/data/formatters/datasets/oceansoda_ethz.py b/esmvaltool/cmorizers/data/formatters/datasets/oceansoda_ethz.py index 7867db259d..a818af0424 100644 --- a/esmvaltool/cmorizers/data/formatters/datasets/oceansoda_ethz.py +++ b/esmvaltool/cmorizers/data/formatters/datasets/oceansoda_ethz.py @@ -7,10 +7,10 @@ https://www.ncei.noaa.gov/data/oceans/ncei/ocads/data/0220059/ Last access - 20221103 + 20240215 Download and processing instructions - Download the file OceanSODA-ETHZ_GRaCER_v2021a_1982-2020.nc + Download the file OceanSODA_ETHZ-v2023.OCADS.01_1982-2022.nc """ diff --git a/esmvaltool/config-references.yml b/esmvaltool/config-references.yml index 16725c3764..285ace740e 100644 --- a/esmvaltool/config-references.yml +++ b/esmvaltool/config-references.yml @@ -361,7 +361,7 @@ authors: malinina_elizaveta: name: Malinina, Elizaveta institute: CCCma, Canada - orchid: https://orcid.org/0000-0002-4102-2877 + orcid: https://orcid.org/0000-0002-4102-2877 github: malininae maloney_eric: name: Maloney, Eric 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/mlr/custom_sklearn.py b/esmvaltool/diag_scripts/mlr/custom_sklearn.py index 198cbdc376..f1b99f4c5c 100644 --- a/esmvaltool/diag_scripts/mlr/custom_sklearn.py +++ b/esmvaltool/diag_scripts/mlr/custom_sklearn.py @@ -670,9 +670,18 @@ def fit_target_transformer_only(self, y_data, **fit_kwargs): def fit_transformers_only(self, x_data, y_data, **fit_kwargs): """Fit only ``transform`` steps of Pipeline.""" - fit_params = _get_fit_parameters(fit_kwargs, self.steps, - self.__class__) - return self._fit(x_data, y_data, **fit_params) + # Temporarily set the final estimator to 'passthrough' to avoid fitting + # it + final_step = self.steps[-1] + self.steps[-1] = (final_step[0], 'passthrough') + + # This will now fit all transformers, but not the final estimator + self.fit(x_data, y_data, **fit_kwargs) + + # Re-assign the original (non-fitted) final estimator + self.steps[-1] = final_step + + return self def transform_only(self, x_data): """Only perform ``transform`` steps of Pipeline.""" diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig2.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig2.ncl index 034d3a1287..db6426cc3a 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig2.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig2.ncl @@ -76,7 +76,7 @@ begin colors = project_style(input_file_info, diag_script_info, "colors") dashes = project_style(input_file_info, diag_script_info, "dashes") thicks = project_style(input_file_info, diag_script_info, "thicks") - plotpath = config_user_info@plot_dir + "/russell18jgr_fig2_" \ + plotpath = config_user_info@plot_dir + "russell18jgr_fig2_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -156,17 +156,6 @@ begin delete(var_lon_avg) delete(dataset) - ; Call provenance logger - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 2", \ - "mean", \ - "sh", \ - "geo", \ - "russell_joellen", \ - "russell18jgr", \ - infile_path) - if (iii .ne. 0) then overlay(plot(0), plot(iii)) end if @@ -192,4 +181,17 @@ begin "lgLineDashSegLenF" : 0.11 end create draw(legend) + + frame(wks) + + ; Call provenance logger + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 2", \ + "mean", \ + "sh", \ + "geo", \ + "russell_joellen", \ + "russell18jgr", \ + infile_path) end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b-2.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b-2.ncl index c912663321..add52a2b7a 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b-2.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b-2.ncl @@ -72,7 +72,7 @@ begin thicks = project_style(input_file_info, diag_script_info, "thicks") plotpath = config_user_info@plot_dir \ - + "/russell18jgr_fig3_Polar-Front-position_" \ + + "russell18jgr_fig3_Polar-Front-position_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -273,15 +273,6 @@ begin delete(e) delete(last_index) delete(out_var) - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 3b part 2", \ - "mean", \ - "sh", \ - "geo", \ - "russell_joellen", \ - "russell18jgr", \ - inputfile_paths(iii)) end do draw(plot(0)) @@ -301,4 +292,16 @@ begin end create draw(legend) + frame(wks) + + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 3b part 2", \ + "mean", \ + "sh", \ + "geo", \ + "russell_joellen", \ + "russell18jgr", \ + inputfile_paths) + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b.ncl index fd4cf3f43b..41ee0c3194 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig3b.ncl @@ -69,7 +69,7 @@ begin dashes = project_style(input_file_info, diag_script_info, "dashes") thicks = project_style(input_file_info, diag_script_info, "thicks") - plotpath = config_user_info@plot_dir + "/Russell18jgr_fig3_Subantarctic" \ + plotpath = config_user_info@plot_dir + "Russell18jgr_fig3_Subantarctic" \ + "-Fronts_" + sprinti("%0.4i", min(toint(start_years_data))) \ + "-" + sprinti("%0.4i", max(toint(end_years_data))) @@ -263,15 +263,6 @@ begin delete(e) delete(last_index) delete(out_var) - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 3b", \ - "mean", \ - "sh", \ - "geo", \ - "russell_joellen", \ - "russell18jgr", \ - inputfile_paths(iii)) end do draw(plot(0)) @@ -291,4 +282,16 @@ begin end create draw(legend) + frame(wks) + + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 3b", \ + "mean", \ + "sh", \ + "geo", \ + "russell_joellen", \ + "russell18jgr", \ + inputfile_paths) + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig4.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig4.ncl index 4e62c7b552..b03b81959f 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig4.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig4.ncl @@ -93,7 +93,7 @@ begin (/238, 91, 12/), (/209, 49, 7/), (/178, 0, 0/) /) colors_new = colors_new / 256.0 - plotpath = config_user_info@plot_dir + "/Russell18jgr-fig4_" \ + plotpath = config_user_info@plot_dir + "Russell18jgr-fig4_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -366,16 +366,6 @@ begin delete(var_final) delete(exact_lon) delete(totaltransport) - ; Call provenance logger - log_provenance(ncdf_outfile, \ - plotpath + "." + file_type, \ - "Russell et al 2018 figure 4", \ - "mean", \ - "sh", \ - "geo", \ - "russell_joellen", \ - "russell18jgr", \ - (/inputfile_paths(iii), volfile_paths(iii)/)) end do @@ -389,4 +379,15 @@ begin + "This is not an error, no response is needed by user for " \ + "plotting. ") end if + + ; Call provenance logger + log_provenance(ncdf_outfile, \ + plotpath + "." + file_type, \ + "Russell et al 2018 figure 4", \ + "mean", \ + "sh", \ + "geo", \ + "russell_joellen", \ + "russell18jgr", \ + inputfile_paths) end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5.ncl index 5a60ea03d9..62a5a6be1a 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5.ncl @@ -59,7 +59,7 @@ end begin - plotpath = config_user_info@plot_dir + "/russell18jgr-fig5_" + var0 + "_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig5_" + var0 + "_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -168,16 +168,6 @@ begin ncdf_outfile = ncdf_write(dataset, nc_filename) delete(dataset) - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 5 -polar", \ - "mean", \ - "sh", \ - "geo", \ - "russell_joellen", \ - "russell18jgr", \ - infile_path) - end do ; Draw the panel @@ -185,4 +175,15 @@ begin pres@gsnPanelLabelBar = False outfile = panelling(wks, plots, nvert, nhori, pres) + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 5 -polar", \ + "mean", \ + "sh", \ + "geo", \ + "russell_joellen", \ + "russell18jgr", \ + infile_path) + + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5g.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5g.ncl index 67d8c53491..0b48c1e7ed 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5g.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig5g.ncl @@ -84,7 +84,7 @@ begin dashes = project_style(input_file_info, diag_script_info, "dashes") thicks = project_style(input_file_info, diag_script_info, "thicks") - plotpath = config_user_info@plot_dir + "/russell18jgr-fig5g_" + var0 + "_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig5g_" + var0 + "_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -224,17 +224,6 @@ begin overlay(plots(0), plots(iii)) end if - ; Call provenance logger - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 5g", \ - "mean", \ - "sh", \ - "times", \ - "russell_joellen", \ - "russell18jgr", \ - infile_path) - end do draw(plots(0)) @@ -261,4 +250,17 @@ begin "not an error, no responce is needed by user for plotting ") end if + frame(wks) + + ; Call provenance logger + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 5g", \ + "mean", \ + "sh", \ + "times", \ + "russell_joellen", \ + "russell18jgr", \ + infile_path) + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6a.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6a.ncl index 206d2909cc..bd672ed3cf 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6a.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6a.ncl @@ -90,7 +90,7 @@ end begin - plotpath = config_user_info@plot_dir + "/Russell_figure-6a_" \ + plotpath = config_user_info@plot_dir + "Russell_figure-6a_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6b.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6b.ncl index 2287b62adf..6b019625f0 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6b.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig6b.ncl @@ -92,7 +92,7 @@ end begin - plotpath = config_user_info@plot_dir + "/russell18jgr-fig6b_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig6b_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7h.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7h.ncl index 249712d29f..7700790e65 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7h.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7h.ncl @@ -64,7 +64,7 @@ begin dashes = project_style(input_file_info, diag_script_info, "dashes") thicks = project_style(input_file_info, diag_script_info, "thicks") - plotpath = config_user_info@plot_dir + "/Russell_figure7h_" + var0 + "_" \ + plotpath = config_user_info@plot_dir + "Russell_figure7h_" + var0 + "_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -163,15 +163,6 @@ begin ncdf_outfile = ncdf_write(var_lon_avg, nc_filename) delete(var_lon_avg) delete(dataset) - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 7h", \ - "mean", \ - "sh", \ - "zonal", \ - "russell_joellen", \ - "russell18jgr", \ - infile_path) end do draw(plot(0)) @@ -192,4 +183,16 @@ begin end create draw(legend) + frame(wks) + + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 7h", \ + "mean", \ + "sh", \ + "zonal", \ + "russell_joellen", \ + "russell18jgr", \ + infile_path) + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7i.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7i.ncl index 7abcc9e7a9..86ce4bee70 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7i.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig7i.ncl @@ -61,7 +61,7 @@ begin var0 = variable_info[0]@short_name - plotpath = config_user_info@plot_dir + "/Russell_figure7i_" + var0 + "_" \ + plotpath = config_user_info@plot_dir + "Russell_figure7i_" + var0 + "_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -201,16 +201,6 @@ begin overlay(plot(0), plot(iii)) end if - log_provenance(ncdf_outfile, \ - plotpath + "." + output_type(), \ - "Russell et al 2018 figure 7i", \ - "mean", \ - "sh", \ - "zonal", \ - "russell_joellen", \ - "russell18jgr", \ - infile_path) - end do draw(plot(0)) @@ -230,4 +220,16 @@ begin end create draw(legend) + frame(wks) + + log_provenance(ncdf_outfile, \ + plotpath + "." + output_type(), \ + "Russell et al 2018 figure 7i", \ + "mean", \ + "sh", \ + "zonal", \ + "russell_joellen", \ + "russell18jgr", \ + infile_path) + end diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9a.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9a.ncl index 8bef8cb204..24ebe3f12e 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9a.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9a.ncl @@ -103,7 +103,7 @@ end begin - plotpath = config_user_info@plot_dir + "/russell18jgr-fig9a_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig9a_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -297,6 +297,8 @@ begin end create draw(legend) + frame(wks) + do idd = 0, dimsizes(lat_width) - 1 nc_filename = config_user_info@work_dir + "russell18jgr_fig9a_" \ + annots(idd) + "_" + (start_years_data(idd)) + "-" \ diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9b.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9b.ncl index 8afd05425a..112cd846f5 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9b.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9b.ncl @@ -94,7 +94,7 @@ end begin - plotpath = config_user_info@plot_dir + "/russell18jgr-fig9b_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig9b_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -315,6 +315,8 @@ begin end create draw(legend) + frame(wks) + do idd = 0, dimsizes(lat_width) - 1 nc_filename = config_user_info@work_dir + "russell18jgr_fig9b_" \ + annots(idd) + "_" + (start_years_data(idd)) + "-" \ diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9c.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9c.ncl index 0e5c828a6a..2fe0cc3e4a 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9c.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-fig9c.ncl @@ -107,7 +107,7 @@ end begin - plotpath = config_user_info@plot_dir + "/russell18jgr-fig9c_" \ + plotpath = config_user_info@plot_dir + "russell18jgr-fig9c_" \ + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -312,6 +312,8 @@ begin end create draw(legend) + frame(wks) + do idd = 0, dimsizes(lat_width) - 1 nc_filename = config_user_info@work_dir + "russell18jgr_fig9c_" \ + annots(idd) + "_" + (start_years_data(idd)) + "-" \ diff --git a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-polar.ncl b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-polar.ncl index b9c8f1faaa..106f161801 100644 --- a/esmvaltool/diag_scripts/russell18jgr/russell18jgr-polar.ncl +++ b/esmvaltool/diag_scripts/russell18jgr/russell18jgr-polar.ncl @@ -77,7 +77,7 @@ end begin - plotpath = config_user_info@plot_dir + "/Russell_polar-contour_" + var0 + \ + plotpath = config_user_info@plot_dir + "Russell_polar-contour_" + var0 + \ "_" + sprinti("%0.4i", min(toint(start_years_data))) + "-" \ + sprinti("%0.4i", max(toint(end_years_data))) @@ -231,6 +231,13 @@ begin ncdf_outfile = ncdf_write(dataset, nc_filename) delete(dataset) + end do + + ; Draw the panel + pres = True + pres@gsnPanelLabelBar = False + outfile = panelling(wks, plots, nvert, nhori, pres) + log_provenance(ncdf_outfile, \ plotpath + "." + output_type(), \ "Russell et al 2018 polar plot " + var0, \ @@ -239,11 +246,5 @@ begin "geo", \ "russell_joellen", \ "russell18jgr", \ - inputfile_paths(iii)) - end do - - ; Draw the panel - pres = True - pres@gsnPanelLabelBar = False - outfile = panelling(wks, plots, nvert, nhori, pres) + inputfile_paths) end 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/interface_scripts/logging.ncl b/esmvaltool/interface_scripts/logging.ncl index 4cb5ff1498..6333479f96 100644 --- a/esmvaltool/interface_scripts/logging.ncl +++ b/esmvaltool/interface_scripts/logging.ncl @@ -371,7 +371,7 @@ begin original_entry = outstring do outfile_idx = 0, dimsizes(all_outfiles) - 1 file_to_add := all_outfiles(outfile_idx) - if (.not. fileexists(outfile)) then + if (.not. fileexists(file_to_add)) then error_msg("f", scriptname, funcname, "outfile (path to figure) '" + \ file_to_add + "' does not exist (for PNGs, this " + \ "function also searches for 'FILE.000001.png', " + \ diff --git a/esmvaltool/recipes/bock20jgr/recipe_bock20jgr_fig_1-4.yml b/esmvaltool/recipes/bock20jgr/recipe_bock20jgr_fig_1-4.yml index 1ae9066ec3..07475e5d74 100644 --- a/esmvaltool/recipes/bock20jgr/recipe_bock20jgr_fig_1-4.yml +++ b/esmvaltool/recipes/bock20jgr/recipe_bock20jgr_fig_1-4.yml @@ -445,7 +445,11 @@ diagnostics: end_year: 1999 additional_datasets: *cmip3_tas additional_datasets: - - {dataset: GPCP-V2.3, project: obs4MIPs, tier: 1, mip: Amon} + - dataset: GPCP-V2.3 + project: obs4MIPs + tier: 1 + mip: Amon + frequency: mon scripts: model_bias: <<: *model_bias_settings diff --git a/esmvaltool/recipes/examples/recipe_check_obs.yml b/esmvaltool/recipes/examples/recipe_check_obs.yml index 6f791bcd24..7fd27bcd25 100644 --- a/esmvaltool/recipes/examples/recipe_check_obs.yml +++ b/esmvaltool/recipes/examples/recipe_check_obs.yml @@ -18,6 +18,16 @@ diagnostics: ### TIER 2 ################################################################## + AGCD: + description: + variables: + pr: + additional_datasets: + - {project: OBS6, dataset: AGCD, mip: Amon, tier: 3, + type: ground, version: v2-0-1} + scripts: null + + BerkeleyEarth: description: BerkeleyEarth check variables: @@ -167,6 +177,7 @@ diagnostics: clivi: clt: cltStderr: + clwvi: lwp: rlut: rlutcs: @@ -660,9 +671,10 @@ diagnostics: hur: prw: ta: + wap: additional_datasets: - {dataset: NCEP-DOE-R2, project: OBS6, mip: Amon, tier: 2, - type: reanaly, version: 2, start_year: 1979, end_year: 2021} + type: reanaly, version: 2, start_year: 1979, end_year: 2022} scripts: null @@ -680,6 +692,24 @@ diagnostics: type: reanaly, version: v2, start_year: 1871, end_year: 2012} scripts: null + NOAA-ERSSTv5: + description: NOAA-ERSSTv5 check + variables: + tos: + additional_datasets: + - {dataset: NOAA-ERSSTv5, project: OBS6, mip: Omon, tier: 2, + type: reanaly, version: v5, start_year: 1854, end_year: 2000} + scripts: null + + NOAA-ERSSTv3b: + description: NOAA-ERSSTv3b check + variables: + tos: + additional_datasets: + - {dataset: NOAA-ERSSTv3b, project: OBS6, mip: Omon, tier: 2, + type: reanaly, version: v3b, start_year: 1854, end_year: 2019} + scripts: null + NOAA-MBL-CH4: description: NOAA marine boundary layer CH4 check variables: @@ -735,7 +765,7 @@ diagnostics: mip: Omon additional_datasets: - {dataset: OceanSODA-ETHZ, project: OBS6, tier: 2, type: reanaly, - version: v2021e, start_year: 1982, end_year: 2020} + version: v2023, start_year: 1982, end_year: 2022} scripts: null @@ -1107,6 +1137,8 @@ diagnostics: mip: Amon clivi: mip: Amon + clwvi: + mip: Amon lwp: mip: Amon additional_datasets: @@ -1120,6 +1152,7 @@ diagnostics: variables: clivi: clw: + clwvi: lwp: additional_datasets: - {dataset: CLOUDSAT-L2, project: OBS, tier: 3, type: sat, @@ -1913,6 +1946,17 @@ diagnostics: type: reanaly, version: "4.1", start_year: 1978, end_year: 2018} scripts: null + NSIDC-G02202: + description: NSIDC-G02202 check + variables: + areacello: + mip: Ofx + siconc: + mip: SImon + additional_datasets: + - {dataset: NSIDC-G02202-sh, project: OBS6, tier: 3, + type: reanaly, version: 4, start_year: 1979, end_year: 2022} + scripts: null UWisc: description: UWisc check @@ -1922,4 +1966,4 @@ diagnostics: additional_datasets: - {dataset: UWisc, project: OBS, mip: Amon, tier: 3, type: sat, version: v2, start_year: 1988, end_year: 2007} - scripts: null + scripts: null \ No newline at end of file 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/references/agcd-v201.bibtex b/esmvaltool/references/agcd-v201.bibtex new file mode 100644 index 0000000000..931f0c423a --- /dev/null +++ b/esmvaltool/references/agcd-v201.bibtex @@ -0,0 +1,9 @@ +@misc{agcd-v201, + doi = {10.25914/RSES-ZH67}, + url = {https://pid.nci.org.au/doi/f5999_1125_5714_7440}, + author = {{Bureau Of Meteorology}}, + language = {en}, + title = {Australian Gridded Climate Data (AGCD) v2.0.1}, + publisher = {NCI Australia}, + year = {2023} +} diff --git a/esmvaltool/references/ersstv3b.bibtex b/esmvaltool/references/ersstv3b.bibtex new file mode 100644 index 0000000000..425d527711 --- /dev/null +++ b/esmvaltool/references/ersstv3b.bibtex @@ -0,0 +1,15 @@ +@article{ersstv3b, + author = {Smith, Thomas M. and Reynolds, Richard W.}, + title = "{Extended Reconstruction of Global Sea Surface Temperatures Based on COADS Data (1854–1997)}", + journal = {Journal of Climate}, + volume = {16}, + number = {10}, + pages = {1495-1510}, + year = {2003}, + month = {05}, + abstract = "{A monthly extended reconstruction of global SST (ERSST) is produced based on Comprehensive Ocean–Atmosphere Data Set (COADS) release 2 observations from the 1854–1997 period. Improvements come from the use of updated COADS observations with new quality control procedures and from improved reconstruction methods. In addition error estimates are computed, which include uncertainty from both sampling and analysis errors. Using this method, little global variance can be reconstructed before the 1880s because data are too sparse to resolve enough modes for that period. Error estimates indicate that except in the North Atlantic ERSST is of limited value before 1880, when the uncertainty of the near-global average is almost as large as the signal. In most regions, the uncertainty decreases through most of the period and is smallest after 1950.The large-scale variations of ERSST are broadly consistent with those associated with the Hadley Centre Global Sea Ice and Sea Surface Temperature (HadISST) reconstruction produced by the Met Office. There are differences due to both the use of different historical bias corrections as well as different data and analysis procedures, but these differences do not change the overall character of the SST variations. Procedures used here produce a smoother analysis compared to HadISST. The smoother ERSST has the advantage of filtering out more noise at the possible cost of filtering out some real variations when sampling is sparse. A rotated EOF analysis of the ERSST anomalies shows that the dominant modes of variation include ENSO and modes associated with trends. Projection of the HadISST data onto the rotated eigenvectors produces time series similar to those for ERSST, indicating that the dominant modes of variation are consistent in both.}", + issn = {0894-8755}, + doi = {10.1175/1520-0442(2003)016<1495:erogss>2.0.co;2}, + url = {http://dx.doi.org/10.1175/1520-0442(2003)016<1495:EROGSS>2.0.CO;2}, + eprint = {https://journals.ametsoc.org/jcli/article-pdf/16/10/1495/3779054/1520-0442-16\_10\_1495.pdf}, +} diff --git a/esmvaltool/references/ersstv5.bibtex b/esmvaltool/references/ersstv5.bibtex new file mode 100644 index 0000000000..8b588d3690 --- /dev/null +++ b/esmvaltool/references/ersstv5.bibtex @@ -0,0 +1,8 @@ +@misc{ersstv5, + doi = {10.7289/V5T72FNM}, + url = {https://data.nodc.noaa.gov/cgi-bin/iso?id=gov.noaa.ncdc:C00927}, + author = {Huang, Boyin and Thorne, Peter W. and Banzon, Viva F. and Boyer, Tim and Chepurin, Gennady and Lawrimore, Jay H. and Menne, Matthew J. and Smith, Thomas M. and Vose, Russell S. and Zhang, Huai-Min}, + title = {NOAA Extended Reconstructed Sea Surface Temperature (ERSST), Version 5}, + publisher = {NOAA National Centers for Environmental Information}, + year = {2017} +} diff --git a/esmvaltool/references/nsidc-g02202.bibtex b/esmvaltool/references/nsidc-g02202.bibtex new file mode 100644 index 0000000000..e0710714ea --- /dev/null +++ b/esmvaltool/references/nsidc-g02202.bibtex @@ -0,0 +1,8 @@ +@misc{nsidc-g02202, + doi = {10.7265/efmz-2t65}, + title = {NOAA/NSIDC Climate Data Record of Passive Microwave Sea Ice Concentration, Version 4}, + url = {https://nsidc.org/data/G02202/versions/4}, + author = {Meier, W. N., F. Fetterer, A. K. Windnagel, and J. S. Stewart.}, + publisher = {National Snow and Ice Data Center}, + year = {2021} +} \ No newline at end of file diff --git a/esmvaltool/utils/batch-jobs/generate.py b/esmvaltool/utils/batch-jobs/generate.py index fc9deb8339..afba37906f 100644 --- a/esmvaltool/utils/batch-jobs/generate.py +++ b/esmvaltool/utils/batch-jobs/generate.py @@ -24,6 +24,7 @@ """ import os import subprocess +import textwrap from pathlib import Path import esmvaltool @@ -84,10 +85,6 @@ 'time': '#SBATCH --time=08:00:00 \n', 'memory': '#SBATCH --constraint=512G \n', }, - 'recipe_daily_era5': { - 'partition': '#SBATCH --partition=compute \n', - 'memory': '#SBATCH --constraint=512G \n', - }, 'recipe_eady_growth_rate': { 'partition': '#SBATCH --partition=compute \n', }, @@ -190,6 +187,9 @@ 'recipe_thermodyn_diagtool': { 'partition': '#SBATCH --partition=compute \n', }, + 'recipe_wflow': { + 'partition': '#SBATCH --partition=compute \n', + }, 'recipe_wenzel16jclim': { 'partition': '#SBATCH --partition=compute \n', }, @@ -207,6 +207,9 @@ 'recipe_bock20jgr_fig_1-4': 1, 'recipe_bock20jgr_fig_6-7': 1, 'recipe_bock20jgr_fig_8-10': 1, + 'recipe_daily_era5': 1, + 'recipe_easy_ipcc': 1, + 'recipe_climate_change_hotspot': 1, 'recipe_flato13ipcc_figure_96': 1, 'recipe_flato13ipcc_figures_938_941_cmip3': 1, 'recipe_ipccwg1ar6ch3_fig_3_9': 1, @@ -214,25 +217,54 @@ 'recipe_ipccwg1ar6ch3_fig_3_43': 1, 'recipe_check_obs': 1, 'recipe_collins13ipcc': 1, - 'recipe_lauer22jclim_fig3-4_zonal': 3, - 'recipe_lauer22jclim_fig5_lifrac': 3, + 'recipe_lauer22jclim_fig3-4_zonal': 1, + 'recipe_lauer22jclim_fig5_lifrac': 1, 'recipe_smpi': 1, 'recipe_smpi_4cds': 1, 'recipe_wenzel14jgr': 1, } +DISTRIBUTED_RECIPES = [ + 'recipe_easy_ipcc', + 'recipe_daily_era5', + 'recipe_marrmot', + 'recipe_pcrglobwb', +] + def generate_submit(): """Generate and submit scripts.""" + print("It is recommended that you run the following recipes with the " + "configuration in dask.yml in ~/.esmvaltool/dask.yml:") + default_dask_config_file = textwrap.dedent(f""" + cluster: + type: dask_jobqueue.SLURMCluster + queue: compute + account: {account} + cores: 128 + memory: 256GiB + processes: 32 + interface: ib0 + local_directory: /scratch/{os.getlogin()[0]}/{os.getlogin()}/dask-tmp + n_workers: 32 + walltime: '8:00:00' + """) + for recipe in DISTRIBUTED_RECIPES: + print(f"- {recipe}.yml") + Path('dask.yml').write_text(default_dask_config_file, encoding='utf-8') + home = os.path.expanduser('~') # Fill the list with the names of the recipes to be excluded # This includes recipes containing missing datasets - exclude = ['recipe_schlund20jgr_gpp_abs_rcp85', - 'recipe_schlund20jgr_gpp_change_1pct', - 'recipe_schlund20jgr_gpp_change_rcp85'] + exclude = [ + 'recipe_schlund20jgr_gpp_abs_rcp85', + 'recipe_schlund20jgr_gpp_change_1pct', + 'recipe_schlund20jgr_gpp_change_rcp85' + ] dir_recipes = Path('/'.join((esmvaltool.__path__[0], 'recipes'))) for recipe in Path(dir_recipes).rglob('*.yml'): + recipe = recipe.relative_to(dir_recipes) filename = f'launch_{recipe.stem}.sh' if recipe.stem in exclude: continue @@ -241,11 +273,9 @@ def generate_submit(): file.write('\n') file.write(f'#SBATCH --job-name={recipe.stem}.%J\n') file.write( - f'#SBATCH --output={home}/{outputs}/{recipe.stem}.%J.out\n' - ) + f'#SBATCH --output={home}/{outputs}/{recipe.stem}.%J.out\n') file.write( - f'#SBATCH --error={home}/{outputs}/{recipe.stem}.%J.err\n' - ) + f'#SBATCH --error={home}/{outputs}/{recipe.stem}.%J.err\n') file.write(f'#SBATCH --account={account}\n') if not SPECIAL_RECIPES.get(recipe.stem, None): # continue diff --git a/esmvaltool/utils/batch-jobs/parse_recipes_output.py b/esmvaltool/utils/batch-jobs/parse_recipes_output.py index 9df80c6cc0..7daf202924 100644 --- a/esmvaltool/utils/batch-jobs/parse_recipes_output.py +++ b/esmvaltool/utils/batch-jobs/parse_recipes_output.py @@ -1,121 +1,126 @@ -""" -Parse recipes run output. +"""Parse recipes run output. -Parse typical batch job output files like .out and .err -to identify recipes that have succeeded or failed; display -results in a convenient Markdown format, to be added to -a GitHub issue or any other such documentation. +Parse typical batch job output files like .out and .err to identify +recipes that have succeeded or failed; display results in a convenient +Markdown format, to be added to a GitHub issue or any other such +documentation. """ import datetime -import glob import os +import re +from pathlib import Path +from typing import Iterator -# User change needed -# directory where SLURM output files (.out and .err) are -# written to, e.g. on Levante for user b382109 -# SLURM_OUT_DIR = "/home/b/b382109/output_v270" -SLURM_OUT_DIR = "" -# SLURM output file pattern (extension); usually all SLURM -# output is held in .out, unless there are internal/system errors -# so this is what you need most if the times -GLOB_PATTERN = "*.out*" +import fire -def parse_slurm_output(dirname, pattern): - """ - Parse the out dir from SLURM. +def parse_slurm_output(dirname: str, pattern: str) -> Iterator[Path]: + """Parse the out dir from SLURM. - Perform a glob on dirname/pattern where dirname - is the directory where SLURM output is stored, and - pattern is the out file pattern, like .out. Returns - all the files in dirname that have pattern extension. + Perform a glob on dirname/pattern where dirname is the directory + where SLURM output is stored, and pattern is the out file pattern, + like .out. Returns all the files in dirname that have pattern + extension. """ - pat = os.path.join(dirname, pattern) - files = glob.glob(pat) + return Path(dirname).expanduser().glob(pattern) - return files +def parse_output_file(slurm_out_dir: str) -> dict[str, list[str]]: + """Parse .out and .err files in a given dir. -def parse_output_file(): + Returns a tuple of lists of sorted .out files for each of these + criteria: recipes that ran successfulltm recipes that failed with + diagnostic errors, recipes that failed due to missing data. """ - Parse .out files in a given dir. + categories = [ + 'success', + 'diagnostic error', + 'missing data', + 'out of memory', + 'out of time', + 'unknown', + ] + results: dict[str, list[str]] = {k: [] for k in categories} - Returns a tuple of lists of sorted .out files for each - of these criteria: recipes that ran successfulltm recipes - that failed with diagnostic errors, recipes that failed - due to missing data. - """ - files = parse_slurm_output(SLURM_OUT_DIR, GLOB_PATTERN) - success_rec = [] - diag_fail_rec = [] - missing_data = [] - for fil in files: - with open(fil, "r", encoding='utf-8') as outfile: + files = parse_slurm_output(slurm_out_dir, '*.out') + for file in files: + recipe = str(Path(file.stem).with_suffix('.yml')) + with open(file, "r", encoding='utf-8') as outfile: lines = outfile.readlines() for line in lines: if "Run was successful\n" in line: - success_rec.append(fil) + results['success'].append(recipe) + break elif "esmvalcore._task.DiagnosticError" in line: - diag_fail_rec.append(fil) + results['diagnostic error'].append(recipe) + break elif "ERROR Missing data for preprocessor" in line: - missing_data.append(fil) - - # typical list elem - # /home/b/b382109/output_v270/recipe_zmnam.2378956.out - ok_recipe_outs = [os.path.basename(ofile) for ofile in success_rec] - ok_recipe_outs = [f.split(".")[0] + ".yml" for f in ok_recipe_outs] - df_recipe_outs = [os.path.basename(ofile) for ofile in diag_fail_rec] - df_recipe_outs = [f.split(".")[0] + ".yml" for f in df_recipe_outs] - md_recipe_outs = [os.path.basename(ofile) for ofile in missing_data] - md_recipe_outs = [f.split(".")[0] + ".yml" for f in md_recipe_outs] - - return (sorted(set(ok_recipe_outs)), - sorted(set(df_recipe_outs)), - sorted(set(md_recipe_outs))) - - -def display_in_md(): - """Print out recipes in Markdown list.""" + results['missing data'].append(recipe) + break + else: + if not file.with_suffix('.err').exists(): + results['unknown'].append(recipe) + else: + err = file.with_suffix('.err').read_text(encoding='utf-8') + if "killed by the cgroup out-of-memory" in err: + results['out of memory'].append(recipe) + elif "step tasks have been OOM Killed" in err: + results['out of memory'].append(recipe) + elif re.match(".* CANCELLED AT .* DUE TO TIME LIMIT", err): + results['out of time'].append(recipe) + else: + results['unknown'].append(recipe) + + results = {k: sorted(v) for k, v in results.items()} + + return results + + +def display_in_md( + slurm_out_dir: str = '.', + all_recipes_file: str = 'all_recipes.txt', +) -> None: + """Print out recipes in Markdown list. + + Parameters + ---------- + slurm_out_dir: + Directory where SLURM output files (.out and .err) are written to. + + all_recipes_file: + Text file containing a list of all recipes. + """ todaynow = datetime.datetime.now() print(f"## Recipe running session {todaynow}\n") - with open("all_recipes.txt", "r", encoding='utf-8') as allrecs: - all_recs = [ - os.path.basename(rec.strip()) for rec in allrecs.readlines() + with open(all_recipes_file, "r", encoding='utf-8') as file: + all_recipes = [ + os.path.basename(line.strip()) for line in file.readlines() ] - - # parse different types of recipe outcomes - recipe_list, failed, missing_dat = parse_output_file() - print("### Successfully ran recipes\n\n") - print(f"{len(recipe_list)} out of {len(all_recs)}\n") - for rec in recipe_list: - print("- " + rec) - - # surely failed with diagnostic error - print("\n### Recipes that failed with DiagnosticError\n") - print(f"{len(failed)} out of {len(all_recs)}\n") - for rec in failed: - print("- " + rec) - - # missing data - print("\n### Recipes that failed of Missing Data\n") - print(f"{len(missing_dat)} out of {len(all_recs)}\n") - for rec in missing_dat: - print("- " + rec) - - # look at other fails or still running - bad_recs = [ - rec for rec in all_recs - if rec not in recipe_list and rec not in failed - and rec not in missing_dat - ] - bad_recs = sorted(bad_recs) - print( - "\n### Recipes that failed of other reasons or are still running\n" - ) - print(f"{len(bad_recs)} out of {len(all_recs)} so far\n") - for rec in bad_recs: - print("- " + rec) + n_recipes = len(all_recipes) + + results = parse_output_file(slurm_out_dir) + results["no run"] = sorted( + set(all_recipes) - set(recipe for v in results.values() + for recipe in v)) + prefix = "Recipes that" + err_prefix = f"{prefix} failed because" + messages = { + "success": f"{prefix} ran successfully", + "diagnostic error": f"{err_prefix} the diagnostic script failed", + "missing data": f"{err_prefix} of missing data", + "out of time": f"{err_prefix} the run took too long", + "out of memory": f"{err_prefix} they used too much memory", + "unknown": f"{prefix} failed of other reasons or are still running", + "no run": f"{prefix} never ran", + } + for type_, msg in messages.items(): + result = results[type_] + if result: + print(f"### {msg} ({len(result)} out of {n_recipes})") + for recipe in result: + print(f"- {recipe}") + print() if __name__ == '__main__': - display_in_md() + fire.Fire(display_in_md) diff --git a/esmvaltool/utils/draft_release_notes.py b/esmvaltool/utils/draft_release_notes.py index 13bcb4324c..a11b03a9ae 100644 --- a/esmvaltool/utils/draft_release_notes.py +++ b/esmvaltool/utils/draft_release_notes.py @@ -41,11 +41,11 @@ 'esmvaltool': "ESMValGroup/ESMValTool", } +TIMEZONE = ZoneInfo("CET") + PREVIOUS_RELEASE = { - 'esmvalcore': - datetime.datetime(2023, 7, 4, 11, tzinfo=ZoneInfo("CET")), - 'esmvaltool': - datetime.datetime(2022, 10, 28, 18, tzinfo=ZoneInfo("CET")), + 'esmvalcore': datetime.datetime(2023, 6, 6, 0, tzinfo=TIMEZONE), + 'esmvaltool': datetime.datetime(2023, 6, 20, 0, tzinfo=TIMEZONE), } LABELS = { @@ -130,11 +130,17 @@ def draft_notes_since(project, previous_release_date=None, labels=None): print(f"Note: Unmerged PRs or PRs that have been merged before " f"{previous_release_date} are not shown\n") for pull in pulls: - if pull.updated_at < previous_release_date: + if pull.updated_at.astimezone(TIMEZONE) < previous_release_date: break - if not pull.merged or pull.merged_at < previous_release_date: + if (not pull.merged or + pull.merged_at.astimezone(TIMEZONE) < previous_release_date): continue - print(pull.updated_at, pull.merged_at, pull.number, pull.title) + print( + pull.updated_at.astimezone(TIMEZONE), + pull.merged_at.astimezone(TIMEZONE), + pull.number, + pull.title, + ) pr_labels = {label.name for label in pull.labels} if 'automatedPR' in pr_labels: continue @@ -205,12 +211,9 @@ def _list_labelless_pulls(labelless_pulls): def _compose_note(pull): user = pull.user - username = user.login if user.name is None else user.name title = pull.title title = title[0].upper() + title[1:] - return (f"- {title} (`#{pull.number} " - f"<{pull.html_url}>`__) " - f"`{username} `__") + return f"- {title} (:pull:`{pull.number}`) by :user:`{user.login}`" def main(): diff --git a/setup.py b/setup.py index 9aa0346b90..c39ec221fd 100755 --- a/setup.py +++ b/setup.py @@ -36,6 +36,7 @@ 'esmvalcore', 'esmf-regrid>=0.7.0', 'fiona', + 'fire', 'GDAL', 'jinja2', 'joblib', @@ -47,27 +48,27 @@ 'netCDF4', 'numba', 'numpy!=1.24.3', # severe masking bug - 'packaging', 'openpyxl', + 'packaging', 'pandas', - 'pyproj>=2.1', - 'pyyaml', 'progressbar2', 'psyplot', 'psy-maps', 'psy-reg', 'psy-simple', + 'pyproj>=2.1', + 'python-dateutil', + 'pyyaml', 'rasterio', + 'requests', 'ruamel.yaml', 'scikit-image', - 'scikit-learn', + 'scikit-learn>=1.4.0', # github.com/ESMValGroup/ESMValTool/issues/3504 'scipy', - # See the following issue for info on the iris pin below: - # https://github.com/ESMValGroup/ESMValTool/issues/3239#issuecomment-1613298587 - 'scitools-iris>=3.4.0', + 'scitools-iris>=3.6.1', 'seaborn', 'seawater', - 'shapely', + 'shapely>=2', 'xarray>=0.12.0', 'xesmf>=0.7.1', 'xgboost>1.6.1', # github.com/ESMValGroup/ESMValTool/issues/2779 diff --git a/tests/integration/diag_scripts/mlr/test_custom_sklearn_classes.py b/tests/integration/diag_scripts/mlr/test_custom_sklearn_classes.py index 37c4221bf5..3bdf4cca06 100644 --- a/tests/integration/diag_scripts/mlr/test_custom_sklearn_classes.py +++ b/tests/integration/diag_scripts/mlr/test_custom_sklearn_classes.py @@ -42,6 +42,7 @@ # pylint: disable=too-few-public-methods # pylint: disable=too-many-arguments +import warnings from copy import deepcopy import numpy as np @@ -142,35 +143,6 @@ def test_feature_importances_(self): ) assert pipeline.feature_importances_ == 42 - def test_fit(self): - """Test ``_fit``.""" - x_data = np.array([ - [0, 1000], - [1, 0], - [2, 3000], - [0, -5000], - [4, -3000], - [4, -3000], - ]) - y_data = np.array([1, 0, 3, -5, -3, -3]) - pipeline = AdvancedPipeline([ - ('t', StandardScaler()), ('r', LinearRegression()), - ]) - sample_weights = np.array([0.0, 0.0, 0.0, 0.0, 1.0, 1.0]) - kwargs = { - 't': {'sample_weight': sample_weights}, - 'r': {'sample_weight': sample_weights}, - } - pipeline._fit(x_data, y_data, **kwargs) - - transformer_ = pipeline.steps[0][1] - np.testing.assert_allclose(transformer_.scale_, [1.0, 1.0]) - np.testing.assert_allclose(transformer_.mean_, [4.0, -3000.0]) - - regressor_ = pipeline.steps[1][1] - with pytest.raises(NotFittedError): - regressor_.predict([[0, 0]]) - AREG = AdvancedTransformedTargetRegressor( transformer=NonStandardScaler(), regressor=LinearRegression(), @@ -253,7 +225,7 @@ def test_fit_target_transformer_only(self, pipeline, kwargs, output): (np.array([8.333333]), np.array([8.222222])), (np.array([6.333333]), np.array([8.222222])), ValueError, - ValueError, + KeyError, (np.array([8.333333]), np.array([8.222222]))], ) @@ -274,6 +246,8 @@ def test_fit_transformers_only(self, pipeline, kwargs, output): return np.testing.assert_allclose(transformer.mean_, output[0]) np.testing.assert_allclose(transformer.var_, output[1]) + assert pipeline.steps[-1][0] == 'r' + assert pipeline.steps[-1][1] != 'passthrough' with pytest.raises(NotFittedError): pipeline.predict(X_TRAIN) with pytest.raises(NotFittedError): @@ -455,8 +429,11 @@ def test_advanced_rfe_no_fit_kwargs(self, rfe): np.testing.assert_array_equal(rfe.support_, [False, False, True]) est = rfe.estimator_ assert isinstance(est, AdvancedPipeline) - assert est.steps[0][1].transformers_ == [ - ('passthrough', 'passthrough', [0])] + assert len(est.steps[0][1].transformers_) == 1 + transformer = est.steps[0][1].transformers_[0] + assert transformer[0] == 'passthrough' + assert isinstance(transformer[1], FunctionTransformer) + assert transformer[2] == [0] np.testing.assert_allclose(est.steps[1][1].coef_, [1.0]) np.testing.assert_allclose(est.steps[1][1].intercept_, 0.0, atol=1e-10) pred = rfe.predict(self.X_PRED) @@ -473,8 +450,11 @@ def test_advanced_rfe_fit_kwargs(self, rfe): np.testing.assert_array_equal(rfe.support_, [True, False, False]) est = rfe.estimator_ assert isinstance(est, AdvancedPipeline) - assert est.steps[0][1].transformers_ == [ - ('passthrough', 'passthrough', [0])] + assert len(est.steps[0][1].transformers_) == 1 + transformer = est.steps[0][1].transformers_[0] + assert transformer[0] == 'passthrough' + assert isinstance(transformer[1], FunctionTransformer) + assert transformer[2] == [0] np.testing.assert_allclose(est.steps[1][1].coef_, [0.5]) np.testing.assert_allclose(est.steps[1][1].intercept_, 0.0, atol=1e-10) pred = rfe.predict(self.X_PRED) @@ -741,9 +721,9 @@ def test_fit_transformer_fail(self): inverse_func=self.square, check_inverse=False, ) - with pytest.warns(None) as record: + with warnings.catch_warnings(): + warnings.simplefilter("error") # make sure no warning is raised areg._fit_transformer(self.Y_2D) - assert not record def test_fit_transformer_transformer(self): """Test ``_fit_transformer`` with transformer.""" diff --git a/tests/integration/diag_scripts/mlr/test_custom_sklearn_functions.py b/tests/integration/diag_scripts/mlr/test_custom_sklearn_functions.py index b058465188..c37069f9ec 100644 --- a/tests/integration/diag_scripts/mlr/test_custom_sklearn_functions.py +++ b/tests/integration/diag_scripts/mlr/test_custom_sklearn_functions.py @@ -42,6 +42,7 @@ # pylint: disable=too-few-public-methods # pylint: disable=too-many-arguments +import warnings from copy import copy, deepcopy import numpy as np @@ -504,9 +505,9 @@ def test_is_pairwise(): """Test ``_is_pairwise``.""" # Simple checks for _is_pairwise pca = KernelPCA(kernel='precomputed') - with pytest.warns(None) as record: + with warnings.catch_warnings(): + warnings.simplefilter("error") # make sure that no warning is raised assert _is_pairwise(pca) - assert not record # Pairwise attribute that is not consistent with the pairwise tag class IncorrectTagPCA(KernelPCA): @@ -532,9 +533,9 @@ class TruePairwise(BaseEstimator): # Pairwise attribute is not defined thus tag is used est = BaseEstimator() - with pytest.warns(None) as record: + with warnings.catch_warnings(): + warnings.simplefilter("error") # make sure that no warning is raised assert not _is_pairwise(est) - assert not record # _safe_split diff --git a/tests/unit/cmorizers/test_cmorization_interface.py b/tests/unit/cmorizers/test_cmorization_interface.py index e3affd2963..2d9073a7f7 100644 --- a/tests/unit/cmorizers/test_cmorization_interface.py +++ b/tests/unit/cmorizers/test_cmorization_interface.py @@ -29,6 +29,7 @@ def test_formatters_have_required_interface(): except AssertionError: print(f'Bad args in {os.path.join(formatters_folder, formatter)}: ' f'{spec.args}') + print(f"Expected {arg_names}.") error = True assert not error