From 7a70d5b274869052e45d753ef3012a5f3b486696 Mon Sep 17 00:00:00 2001 From: James Frost Date: Tue, 17 Oct 2023 16:03:02 +0100 Subject: [PATCH 1/9] Correct usage help text of version command (#2232) --- esmvalcore/_main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/esmvalcore/_main.py b/esmvalcore/_main.py index c802dafad3..afb0cc0476 100755 --- a/esmvalcore/_main.py +++ b/esmvalcore/_main.py @@ -319,7 +319,7 @@ def __init__(self): self.__setattr__(entry_point.name, entry_point.load()()) def version(self): - """Show versions of all packages that conform ESMValTool. + """Show versions of all packages that form ESMValTool. In particular, this command will show the version ESMValCore and any other package that adds a subcommand to 'esmvaltool' From e3cc51b68401a1b003e382431ba4dbc98a64df93 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 23 Oct 2023 13:56:13 +0100 Subject: [PATCH 2/9] [Condalock] Update Linux condalock file (#2241) Co-authored-by: valeriupredoi --- conda-linux-64.lock | 129 ++++++++++++++++++++++---------------------- 1 file changed, 66 insertions(+), 63 deletions(-) diff --git a/conda-linux-64.lock b/conda-linux-64.lock index e1b497c584..62887266d7 100644 --- a/conda-linux-64.lock +++ b/conda-linux-64.lock @@ -50,8 +50,8 @@ https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda# https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_2.conda#78fdab09d9138851dde2b5fe2a11019e https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d -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.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_2.conda#4655db64eca78a6fcc4fb654fc1f8d57 https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.18-h36c2ea0_1.tar.bz2#c3788462a6fbddafdb413a9f9053e58d @@ -68,7 +68,6 @@ https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/rdma-core-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/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/tzcode-2023c-h0b41bf4_0.conda#0c0533894f21c3d35697cb8378d390e2 https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.7-hcb278e6_1.conda#2c46deb08ba9b10e90d0a6401ad65deb @@ -82,14 +81,14 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007 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/aws-c-cal-0.6.2-h09139f6_2.conda#29c3112841eee851f6f5451f6d705782 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.6.6-h09139f6_0.conda#289ae014f49bb39e5e0aae277b88dbfe https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h184a658_3.conda#c62775b5028b5a4eda25037f9af7f5b3 https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.12-h184a658_2.conda#ba06d81b81ec3eaf4ee83cd47f808134 https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.17-h184a658_2.conda#10fcdbd02ba7fa0827fb8f7d94f8375b 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-12.3.0-he2b93b0_2.conda#2f4d8677dc7dd87f93e9abfb2ce86808 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/hdf4-4.2.15-h2a13503_7.conda#bd77f8da987968ec3927990495dc22e4 https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda#f07002e225d7a60a694d42a7bf5ff53f https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda#5fc11c6020d421960607d821310fcd4d https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 @@ -98,7 +97,8 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2 https://conda.anaconda.org/conda-forge/linux-64/libkml-1.3.0-h01aab08_1018.conda#3eb5f16bcc8a02892199aa63555c731f https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 -https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.3-hf27288f_0.conda#f2877435606cb6069201c6dceab9ac45 +https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-4.24.3-hf27288f_1.conda#5097789a2bc83e697d7509df57f25bfd +https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2023.06.02-h7a70373_0.conda#c0e7eacd9694db3ef5ef2979a7deea70 https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hb58d41b_14.conda#264f9a3a4ea52c8f4d3e8ae1213a3335 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.2-h2797004_0.conda#4b441a1ee22397d5a27dc1126b849edd https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe @@ -112,10 +112,10 @@ https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.54-h06160fa_0.conda#1495 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 https://conda.anaconda.org/conda-forge/linux-64/ucx-1.15.0-h64cca9d_0.conda#b35b1f1a9fdbf93266c91f297dc9060e https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 -https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.4-h9c3ff4c_1.tar.bz2#21743a8d2ea0c8cfbbf8fe489b0347df +https://conda.anaconda.org/conda-forge/linux-64/zeromq-4.3.5-h59595ed_0.conda#8851084c192dbc56215ac4e3c9aa30fa https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.32-h161b759_6.conda#26c909c7fc3fddc015a9ab4ebfcaed41 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.35-hc1ea125_1.conda#11e5683c74d07b2a3e90ddb7ac55e2e0 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda#39f910d205726805a958da408ca194ba https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb @@ -126,26 +126,25 @@ https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libarchive-3.7.2-h039dbb9_0.conda#611d6c83d1130ea60c916531adfb11db https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 -https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.58.1-h30d5116_0.conda#56e42a3f59383f1cf4e454cfc57dd79e https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.24-pthreads_h413a1c8_0.conda#6e4ef6ca28655124dcde9bd500e44c32 https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.19.0-hb90f79a_1.conda#8cdb7d41faa0260875ba92414c487e2d -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.37-h0054252_1.conda#f27960e8873abb5476e96ef33bdbdccd https://conda.anaconda.org/conda-forge/linux-64/minizip-4.0.1-h0ab5242_5.conda#2f0f7031d8f0f9f6520093009eb3628f https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 https://conda.anaconda.org/conda-forge/linux-64/orc-1.9.0-h208142c_3.conda#f983ae19192439116ca5b5589560f167 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/re2-2023.06.02-h2873b5e_0.conda#bb2d5e593ef13fe4aff0bc9440f945ae https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.2-h2c6b66d_0.conda#c37b95bcd6c6833dacfd5df0ae2f4303 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.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e -https://conda.anaconda.org/conda-forge/linux-64/antlr-python-runtime-4.7.2-py311h38be061_1003.tar.bz2#0ab8f8f0cae99343907fe68cda11baea -https://conda.anaconda.org/conda-forge/linux-64/astroid-3.0.0-py311h38be061_1.conda#ddef045db01d69489c6d74b7e577859b +https://conda.anaconda.org/conda-forge/noarch/antlr-python-runtime-4.11.1-pyhd8ed1ab_0.tar.bz2#15109c4977d39ad7aa3423f57243e286 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b https://conda.anaconda.org/conda-forge/noarch/attrs-23.1.0-pyh71513ae_1.conda#3edfead7cedd1ab4400a6c588f3e75f8 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-hd6ebb48_1.conda#ef9692e74f437004ef47a4363552bcb6 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-hc690213_1.conda#c912831e92c565598072243266073161 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.2-h24cd7f8_3.conda#031e5cce5b151ccd3cb8d101900246d7 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.13-h0561a52_5.conda#ebcdf12a0994c154076a4f0d40ae514c https://conda.anaconda.org/conda-forge/noarch/backcall-0.2.0-pyh9f0ad1d_0.tar.bz2#6006a6d08a3fa99268a2681c7fb55213 https://conda.anaconda.org/conda-forge/noarch/backports-1.0-pyhd8ed1ab_3.conda#54ca2e08b3220c148a1d8329c2678e02 https://conda.anaconda.org/conda-forge/linux-64/backports.zoneinfo-0.2.1-py311h38be061_8.conda#5384590f14dfe6ccd02811236afc9f8e @@ -156,11 +155,11 @@ https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.con 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.0-pyhd8ed1ab_0.conda#fef8ef5f0a54546b9efee39468229917 https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca -https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda#753d29fe41bb881e4b9c004f0abf973f https://conda.anaconda.org/conda-forge/noarch/codespell-2.2.6-pyhd8ed1ab_0.conda#a206349b7bb7475ae580f987cb425bdd https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.3-py311hb755f60_0.conda#c54d71e8031a10d08f2e87ff81821588 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.4-py311hb755f60_0.conda#6dc0be74820d94a0606595130218981c https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2#43afe5ab04e35e17ba28649471dd7364 https://conda.anaconda.org/conda-forge/noarch/defusedxml-0.7.1-pyhd8ed1ab_0.tar.bz2#961b3a227b437d82ad7054484cfa71b2 https://conda.anaconda.org/conda-forge/noarch/dill-0.3.7-pyhd8ed1ab_0.conda#5e4f3466526c52bc9af2d2353a1460bd @@ -175,7 +174,7 @@ https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/linux-64/freexl-2.0.0-h743c826_0.conda#12e6988845706b2cfbc3bc35c9a61a95 https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.2-pyh1a96a4e_0.conda#9d15cd3a0e944594ab528da37dc72ecc -https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6c15284_3.conda#06f97c8b69157d91993af0c4f2e16bdc +https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h829c605_4.conda#252a696860674caf7a855e16f680d63a https://conda.anaconda.org/conda-forge/noarch/geographiclib-1.52-pyhd8ed1ab_0.tar.bz2#6880e7100ebae550a33ce26663316d85 https://conda.anaconda.org/conda-forge/linux-64/gfortran-12.3.0-h499e0f7_2.conda#0558a8c44eb7a18e6682bd3a8ae6dcab https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-12.3.0-h7fe76b4_2.conda#3a749210487c0358b6f135a648cbbf60 @@ -188,11 +187,13 @@ 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/lcms2-2.15-h7f713cb_2.conda#9ab79924a3760f85a799f21bc99bd655 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 +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/lcms2-2.15-hb7c19ff_3.conda#e96637dd92c5f340215c753a5c9a22d7 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-19_linux64_openblas.conda#420f4e9be59d0dc9133a0f43f7bab3f3 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda#1158ac1d2613b28685644931f11ee807 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.58.1-he06187c_2.conda#42f5e2ba0d41ba270afd3eb5c725ccf5 https://conda.anaconda.org/conda-forge/linux-64/libpq-16.0-hfc447b1_1.conda#e4a9a5ba40123477db33e02a78dffb01 -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda#0ebb65e8d86843865796c7c95a941f34 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/lxml-4.9.3-py311h1a07684_1.conda#aab51e50d994e58efdfa5382139b0468 https://conda.anaconda.org/conda-forge/linux-64/lz4-4.3.2-py311h38e4bf4_1.conda#f8e0b648d77bbe44d1fe8af8cc56a590 @@ -203,7 +204,7 @@ https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py311h9547e 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/networkx-3.1-pyhd8ed1ab_0.conda#254f787d5068bc89f578bf63893ce8b4 +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2-pyhd8ed1ab_1.conda#522039fb968d6d0a10e872e6f3856f53 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 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 @@ -229,12 +230,12 @@ https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py311h459d7e https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a https://conda.anaconda.org/conda-forge/linux-64/pyzmq-25.1.1-py311h75c88c4_1.conda#b858421f6a3052950c33aecd44a905cb -https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.4-py311h46250e7_0.conda#fd2b9bb72eeb3d90187a6d77c46a228e +https://conda.anaconda.org/conda-forge/linux-64/rpds-py-0.10.6-py311h46250e7_0.conda#b7237977dbca779aaaab65f42f5558d9 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/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 -https://conda.anaconda.org/conda-forge/noarch/smmap-3.0.5-pyh44b312d_0.tar.bz2#3a8dc70789709aa315325d5df06fb7e4 +https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.0-pyhd8ed1ab_0.tar.bz2#62f26a3d1387acee31322208f0cfa3e0 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e https://conda.anaconda.org/conda-forge/noarch/sortedcontainers-2.4.0-pyhd8ed1ab_0.tar.bz2#6d6552722448103793743dabfbda532d https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda#3f144b2c34f8cb5a9abd9ed23a39c561 @@ -255,6 +256,7 @@ https://conda.anaconda.org/conda-forge/noarch/untokenize-0.1.1-py_0.tar.bz2#1447 https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda#daf5160ff9cde3a468556965329085b9 https://conda.anaconda.org/conda-forge/noarch/webob-1.8.7-pyhd8ed1ab_0.tar.bz2#a8192f3585f341ea66c60c189580ac67 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f +https://conda.anaconda.org/conda-forge/linux-64/wrapt-1.15.0-py311h459d7ec_1.conda#f4d770a09066aaa313b5cc22c0f6e9d1 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 https://conda.anaconda.org/conda-forge/noarch/xyzservices-2023.10.0-pyhd8ed1ab_0.conda#9c6fe7db9c9133ade38b9a5011103243 @@ -262,14 +264,15 @@ https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30 https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 https://conda.anaconda.org/conda-forge/noarch/asgiref-3.7.2-pyhd8ed1ab_0.conda#596932155bf88bb6837141550cb721b0 +https://conda.anaconda.org/conda-forge/linux-64/astroid-2.15.8-py311h38be061_0.conda#46d70fcb74472aab178991f0231ee3c6 https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.0-pyhd8ed1ab_0.conda#056f04e51dd63337e8d7c425c18c86f1 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hc8144f4_1.conda#81b00630260ff8c9388ee3913465b208 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.6-h32970c0_2.conda#21dd1cb1e73b0ce2ea31e9f9f692e051 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.7.4-hdf831e0_4.conda#f2b788b963b846fbfc322787bc79fe4c +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.7-h6e0f915_1.conda#976997418755ab56d0cc3b4c93e10ebd https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219 https://conda.anaconda.org/conda-forge/noarch/backports.functools_lru_cache-1.6.5-pyhd8ed1ab_0.conda#6b1b907661838a75d067a22f87996b2e https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/noarch/bleach-6.1.0-pyhd8ed1ab_0.conda#0ed9d7c0e9afa7c025807a9a8136ea3e -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e https://conda.anaconda.org/conda-forge/noarch/cattrs-23.1.2-pyhd8ed1ab_0.conda#e554f60477143949704bf470f66a81e7 https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.conda#b3469563ac5e808b0cd92810d0697043 https://conda.anaconda.org/conda-forge/linux-64/cfitsio-4.3.0-hbdc6101_0.conda#797554b8b7603011e8677884381fbcc5 @@ -283,7 +286,7 @@ https://conda.anaconda.org/conda-forge/noarch/fire-0.5.0-pyhd8ed1ab_0.conda#9fd2 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.43.1-py311h459d7ec_0.conda#ac995b680de3bdce2531c553b27dfe7e https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.6.0-heb67821_0.conda#b65c49dda97ae497abcbdf3a8ba0018f https://conda.anaconda.org/conda-forge/noarch/geopy-2.4.0-pyhd8ed1ab_0.conda#90faaa7eaeba3cc877074c0916efe30c -https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.10-pyhd8ed1ab_0.conda#3706d2f3d7cb5dae600c833345a76132 +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.2-nompi_h4f84152_100.conda#2de6a9bc8083b49f09b2f6eb28d3ba3c https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e @@ -293,40 +296,39 @@ https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda#81a https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/noarch/jupyterlab_pygments-0.2.2-pyhd8ed1ab_0.tar.bz2#243f63592c8e449f40cd42eb5cf32f40 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-18_linux64_openblas.conda#93dd9ab275ad888ed8113953769af78c -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-19_linux64_openblas.conda#d12374af44575413fbbd4a217d46ea33 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h119a65a_9.conda#cfebc557e54905dadc355c0e9f003004 https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-h19a6dae_3.conda#cb26f6b7184480053106ea4713a52daf -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-18_linux64_openblas.conda#a1244707531e5b143c420c70573c8ec5 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-19_linux64_openblas.conda#9f100edf65436e3eabc2a51fc00b2c37 https://conda.anaconda.org/conda-forge/noarch/logilab-common-1.7.3-py_0.tar.bz2#6eafcdf39a7eb90b6d951cfff59e8d3b https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.6-pyhd8ed1ab_0.tar.bz2#b21613793fcc81d944c76c9f2864a7de -https://conda.anaconda.org/conda-forge/linux-64/mypy-1.6.0-py311h459d7ec_0.conda#bf8a68aae89d5ff65e9006f586fefffe +https://conda.anaconda.org/conda-forge/linux-64/mypy-1.6.1-py311h459d7ec_0.conda#d3e5072b7ff746e9f9b44f0f52de6727 https://conda.anaconda.org/conda-forge/noarch/nested-lookup-0.2.25-pyhd8ed1ab_1.tar.bz2#2f59daeb14581d41b1e2dda0895933b2 https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.8.0-pyhd8ed1ab_0.conda#2a75b296096adabbabadd5e9782e5fcc https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 https://conda.anaconda.org/conda-forge/noarch/pexpect-4.8.0-pyh1a96a4e_2.tar.bz2#330448ce4403cc74990ac07c555942a1 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py311h8aef010_1.conda#4d66ee2081a7cd444ff6f30d95873eef -https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py311ha6c5da5_0.conda#83a988daf5c49e57f7d2086fb6781fe8 +https://conda.anaconda.org/conda-forge/noarch/pip-23.3-pyhd8ed1ab_0.conda#a06f102f59c8e3bb8b3e46e71c384709 https://conda.anaconda.org/conda-forge/linux-64/postgresql-16.0-h8972f4a_1.conda#6ce1ab5480d3aa4308654971ac5f731b -https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 +https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_2.conda#b5e57a0c643da391bef850922963eece https://conda.anaconda.org/conda-forge/noarch/pydocstyle-6.3.0-pyhd8ed1ab_0.conda#7e23a61a7fbaedfef6eb0e1ac775c8e5 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda#6dd662ff5ac9a783e5c940ce9f3fe649 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/noarch/referencing-0.30.2-pyhd8ed1ab_0.conda#a33161b983172ba6ef69d5fc850650cd -https://conda.anaconda.org/conda-forge/noarch/requirements-detector-1.2.2-pyhd8ed1ab_0.conda#6626918380d99292df110f3c91b6e5ec https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.2.1-pyhd8ed1ab_0.tar.bz2#7234c9eefff659501cd2fe0d2ede4d48 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 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.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.7-pyhd8ed1ab_0.conda#270e71c14d37074b1d066ee21cf0c4a6 https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.2.4-hac6953d_3.conda#297e6a75dc1b6a440cd341a85eab8a00 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.32.0-pyhd8ed1ab_0.conda#6d2425548b0293a225ca4febd80feaa3 -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.17-hb5e3142_3.conda#f0eeadc3f7fc9a29b7ce416897056826 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.18-hd871755_2.conda#dd4fc5bb1ec65369c6291e0a311bb31d https://conda.anaconda.org/conda-forge/linux-64/compilers-1.6.0-ha770c72_0.conda#e2259de4640a51a28c21931ae98e4975 https://conda.anaconda.org/conda-forge/linux-64/cryptography-41.0.4-py311h63ff55d_0.conda#2b14cd05541532521196b0d2e0291ecf https://conda.anaconda.org/conda-forge/noarch/django-4.2.6-pyhd8ed1ab_0.conda#bebc7fbd0b86a4e28a931c306cd5324e https://conda.anaconda.org/conda-forge/noarch/flake8-5.0.4-pyhd8ed1ab_0.tar.bz2#8079ea7dec0a917dd0cb6c257f7ea9ea -https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hee599c5_13.conda#8c55dacddd589be64b2bd6a5d4264be6 -https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.37-pyhd8ed1ab_0.conda#8b94c329190fa6814f412adf2ab0f0a2 +https://conda.anaconda.org/conda-forge/linux-64/geotiff-1.7.1-hf074850_14.conda#1d53ee057d8481bd2b4c2c34c8e92aac +https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.40-pyhd8ed1ab_0.conda#6bf74c3b7c13079a91d4bd3da51cefcf https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda#98db5f8813f45e2b29766aff0e4a499c https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b https://conda.anaconda.org/conda-forge/noarch/jsonschema-specifications-2023.7.1-pyhd8ed1ab_0.conda#7c27ea1bdbe520bb830dcadd59f55cbf @@ -335,72 +337,73 @@ https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_1 https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-h090f1da_0.conda#c4360eaa543bb3bcbb9cd135eb6fb0fc https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py311h64a7726_0.conda#bf16a9f625126e378302f08e7ed67517 https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 -https://conda.anaconda.org/conda-forge/linux-64/poppler-23.08.0-hf2349cb_2.conda#fb75401ae7e2e3f354dff72e9da95cae +https://conda.anaconda.org/conda-forge/linux-64/poppler-23.10.0-h590f24d_0.conda#06b4a80e2cc3974e55f83e2115e2e90a https://conda.anaconda.org/conda-forge/noarch/pybtex-0.24.0-pyhd8ed1ab_2.tar.bz2#2099b86a7399c44c0c61cdb6de6915ba https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_2.conda#8298afb85a731b02dac82e02b6e13ae0 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.0.1-pyhd8ed1ab_0.conda#9da651d84c73bac482cae51613a4d4d6 https://conda.anaconda.org/conda-forge/noarch/pytest-metadata-3.0.0-pyhd8ed1ab_1.conda#8bdcc0f401561213821bf67513abeeff -https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.11.1-pyhd8ed1ab_0.conda#fcd2531bc3e492657aeb042349aeaf8a +https://conda.anaconda.org/conda-forge/noarch/pytest-mock-3.12.0-pyhd8ed1ab_0.conda#ac9fedc9a0c397f2318e82525491dd83 https://conda.anaconda.org/conda-forge/noarch/pytest-mypy-0.8.0-pyhd8ed1ab_0.tar.bz2#4e81c96e5f875c09e5b9f999035b9d8e https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b 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/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda#e7df0fdd404616638df5ece6e69ba7af https://conda.anaconda.org/conda-forge/linux-64/tiledb-2.16.3-h8c794c1_3.conda#7de728789b0aba16018f726dc5ddbec2 -https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.8-pyhd8ed1ab_0.conda#f6126ba51bdb5c539af53cbdc37fe7a8 +https://conda.anaconda.org/conda-forge/noarch/types-requests-2.31.0.10-pyhd8ed1ab_0.conda#84dca7318667fa091bbfd8724d22ea99 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.8-pyhd8ed1ab_0.conda#367386d2575a0e62412448eda1012efd -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.24.2-h94c364a_0.conda#98d1e593cdf87647e51f9d54c7d5ef7a +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.24.3-ha4d64e0_3.conda#14f07bbda88ce2f97b71c2f047ca76ad https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h1f0f07a_2.conda#571c0c47e8dbcf03577935ac818b6696 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py311h9547e67_1.conda#52d3de443952d33c5cee6b24b172ce96 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.3-pyhd8ed1ab_0.conda#a7155483171dbc27a7385d1c26e779de +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.10.0-pyhd8ed1ab_0.conda#6b415b2cd4a106b8eb1632be126ede81 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.30-pyhd8ed1ab_0.conda#b7a2e3bb89bda8c69839485c20aabadf https://conda.anaconda.org/conda-forge/noarch/jsonschema-4.19.1-pyhd8ed1ab_0.conda#78aff5d2af74e6537c1ca73017f01f4f https://conda.anaconda.org/conda-forge/linux-64/jupyter_core-5.4.0-py311h38be061_0.conda#eb4ab2a92a2cc9715226382abb8ebaee -https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.2-h6238fc3_5.conda#2fef4283b2bb45a66f8b81099d36721e +https://conda.anaconda.org/conda-forge/linux-64/libgdal-3.7.2-h6f3d308_7.conda#f9555eada0412c9f3dd4b34f5afecf5b https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_102.conda#487a1c19dd3eacfd055ad614e9acde87 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py311h320fe9a_1.conda#a4371a95a8ae703a22949af28467b93d https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyhd8ed1ab_4.conda#3cdaf7af08850933662b1e228bc6b5bc https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.39-pyha770c72_0.conda#a4986c6bb5b0d05a38855b0880a5f425 -https://conda.anaconda.org/conda-forge/noarch/pylint-3.0.1-pyhd8ed1ab_0.conda#c4c66338865d295a213e8c1e473a072f +https://conda.anaconda.org/conda-forge/noarch/pylint-2.17.7-pyhd8ed1ab_0.conda#3cab6aee60038b3f621bce3e50f52bed https://conda.anaconda.org/conda-forge/noarch/pyopenssl-23.2.0-pyhd8ed1ab_1.conda#34f7d568bf59d18e3fef8c405cbece21 https://conda.anaconda.org/conda-forge/noarch/pytest-html-3.2.0-pyhd8ed1ab_1.tar.bz2#d5c7a941dfbceaab4b172a56d7918eb0 https://conda.anaconda.org/conda-forge/noarch/requests-cache-1.1.0-pyhd8ed1ab_0.conda#57b89064c125bb9d0e533e018c3eb17a https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py311h64a7726_1.conda#e4b4d3b764e2d029477d0db88248a8b5 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_3.conda#0494ca2b1c365390d014b1295d79e9a3 +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py311he06c224_0.conda#c90e2469d7512f3bba893533a82d7a02 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a https://conda.anaconda.org/conda-forge/noarch/yapf-0.40.1-pyhd8ed1ab_0.conda#f269942e802d5e148632143d4c37acc9 -https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.156-h314d761_4.conda#5e41eee446cb42a53090c2c46922f4dd -https://conda.anaconda.org/conda-forge/noarch/bokeh-3.2.2-pyhd8ed1ab_0.conda#30488151f591379db656250b3f5fc0c6 -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.182-h10f61e1_0.conda#bcdd6943a6be3aa15df3bfea9264e306 +https://conda.anaconda.org/conda-forge/noarch/bokeh-3.3.0-pyhd8ed1ab_0.conda#5d6ff9d18f0b611a7dc131f4a7444c2e +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.10.0-pyhd8ed1ab_0.conda#3ecca3ba0a497f06e697777464a2cae9 https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.conda#c330e87e698bae8e7381c0315cf25dd0 -https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.2-py311h815a124_5.conda#84a14fd830b72b09ef886a23de557a16 +https://conda.anaconda.org/conda-forge/linux-64/gdal-3.7.2-py311h815a124_7.conda#e68c90c9490e1621ff4a7871849f03b2 https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.3.1-pyhd8ed1ab_0.conda#b7cc0981484fcb6390e6d341e55618b3 +https://conda.anaconda.org/conda-forge/noarch/jupyter_client-8.4.0-pyhd8ed1ab_0.conda#554496685357ab0d69676cab8e8fb594 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py311h54ef318_1.conda#20d79e2fe53b49b399f3d36977b05abb +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py311h54ef318_2.conda#5655371cc61b8c31c369a7e709acb294 https://conda.anaconda.org/conda-forge/noarch/myproxyclient-2.1.0-pyhd8ed1ab_2.tar.bz2#363b0816e411feb0df925d4f224f026a 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_py311he8ad708_103.conda#97b45ba4ff4e46a07dd6c60040256538 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.4.0-pyha770c72_2.conda#09cd3006f61e7a7054405f81362e0a5f +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.5.0-pyha770c72_0.conda#964e3d762e427661c59263435a14c492 https://conda.anaconda.org/conda-forge/noarch/prompt_toolkit-3.0.39-hd8ed1ab_0.conda#4bbbe67d5df19db30f04b8e344dc9976 https://conda.anaconda.org/conda-forge/noarch/pylint-plugin-utils-0.7-pyhd8ed1ab_0.tar.bz2#1657976383aee04dbb3ae3bdf654bb58 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_1.conda#cd36a89a048ad2bcc6d8b43f648fb1d0 -https://conda.anaconda.org/conda-forge/noarch/xarray-2023.8.0-pyhd8ed1ab_0.conda#a8104cede521616573e228c27f9edc97 +https://conda.anaconda.org/conda-forge/noarch/xarray-2023.10.1-pyhd8ed1ab_0.conda#9b20e5d68eea6878a0a6fc57a3043889 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 https://conda.anaconda.org/conda-forge/noarch/cf_xarray-0.8.4-pyhd8ed1ab_0.conda#18472f8f9452f962fe0bcb1b8134b494 https://conda.anaconda.org/conda-forge/noarch/dask-jobqueue-0.8.2-pyhd8ed1ab_0.conda#cc344a296a41369bcb05f7216661cec8 https://conda.anaconda.org/conda-forge/noarch/esgf-pyclient-0.3.1-pyh1a96a4e_2.tar.bz2#64068564a9c2932bf30e9b4ec567927d https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 -https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.4-py311hbac4ec9_0.conda#1d3445f5f7fa002a1c149c405376f012 +https://conda.anaconda.org/conda-forge/linux-64/fiona-1.9.5-py311hbac4ec9_0.conda#786d3808394b1bdfd3f41f2e2c67279e https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/ipython-8.16.1-pyh0d859eb_0.conda#7e52cb0dbf01b90365bfe433ec8bd3c0 -https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-h75f0d2f_8_cpu.conda#ddd12e48bae5a9b5a5da4debadc00f58 +https://conda.anaconda.org/conda-forge/linux-64/libarrow-13.0.0-he1fec18_11_cpu.conda#4bbdac31e0b1fb5299beb9b92f7abccd https://conda.anaconda.org/conda-forge/noarch/nbclient-0.8.0-pyhd8ed1ab_0.conda#e78da91cf428faaf05701ce8cc8f2f9b https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/noarch/pylint-celery-0.3-py_1.tar.bz2#e29456a611a62d3f26105a2f9c68f759 @@ -408,11 +411,11 @@ https://conda.anaconda.org/conda-forge/noarch/pylint-django-2.5.3-pyhd8ed1ab_0.t https://conda.anaconda.org/conda-forge/noarch/pylint-flask-0.6-py_0.tar.bz2#5a9afd3d0a61b08d59eed70fab859c1b https://conda.anaconda.org/conda-forge/noarch/iris-3.7.0-pyha770c72_0.conda#dccc1f660bf455c239adaabf56b91dc9 https://conda.anaconda.org/conda-forge/noarch/nbconvert-core-7.9.2-pyhd8ed1ab_0.conda#01e4314c780ca73759c694ce3ece281f -https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.2-pyhd8ed1ab_0.conda#2c536985982f7e531df8d640f554008a +https://conda.anaconda.org/conda-forge/noarch/prospector-1.10.3-pyhd8ed1ab_0.conda#f551d4d859a1d70c6abff8310a655481 https://conda.anaconda.org/conda-forge/noarch/py-cordex-0.6.4-pyhd8ed1ab_0.conda#a30ffe78645b5777aa21d3e0f2d2a015 -https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py311h39c9aba_8_cpu.conda#e98686af1af8faa05601af03a7d8bdd5 +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-13.0.0-py311h39c9aba_11_cpu.conda#1d1fcce6ad64a319f6c8ad217313f52d https://conda.anaconda.org/conda-forge/linux-64/pydot-1.4.2-py311h38be061_4.conda#5c223cb0d9c05552bf9d1586a92720b2 -https://conda.anaconda.org/conda-forge/noarch/dask-2023.9.3-pyhd8ed1ab_0.conda#5b32dc4eb1f5e3097cc33fb0e331b3a4 +https://conda.anaconda.org/conda-forge/noarch/dask-2023.10.0-pyhd8ed1ab_0.conda#0c85f5482dd283c2b9ca68d331edb471 https://conda.anaconda.org/conda-forge/noarch/nbconvert-pandoc-7.9.2-pyhd8ed1ab_0.conda#1ad46253f2eb46fb8c9b2c22b7ca012f https://conda.anaconda.org/conda-forge/noarch/prov-2.0.0-pyhd3deb0d_0.tar.bz2#aa9b3ad140f6c0668c646f32e20ccf82 https://conda.anaconda.org/conda-forge/noarch/iris-esmf-regrid-0.8.0-pyhd8ed1ab_0.conda#56e85460d22fa7d4fb06300f785dd1e1 From 5441a53932af9bf94b4bedbdae85516600850e34 Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Tue, 24 Oct 2023 13:10:30 +0200 Subject: [PATCH 3/9] Fix a problem with sorting datasets that have a mix of facet types (#2238) --- esmvalcore/_recipe/from_datasets.py | 26 +++----------- tests/unit/recipe/test_from_datasets.py | 46 +++++++++++++++++++++---- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/esmvalcore/_recipe/from_datasets.py b/esmvalcore/_recipe/from_datasets.py index 0e454c7350..8bd33fd5e9 100644 --- a/esmvalcore/_recipe/from_datasets.py +++ b/esmvalcore/_recipe/from_datasets.py @@ -160,23 +160,6 @@ def _group_identical_facets(variable: Mapping[str, Any]) -> Recipe: return result -class _SortableDict(dict): - """A `dict` class that can be sorted.""" - - def __lt__(self, other): - return tuple(self.items()) < tuple(other.items()) - - -def _change_dict_type(item, dict_type): - """Change the dict type in a nested structure.""" - change_dict_type = partial(_change_dict_type, dict_type=dict_type) - if isinstance(item, dict): - return dict_type((k, change_dict_type(v)) for k, v in item.items()) - if isinstance(item, (list, tuple, set)): - return type(item)(change_dict_type(elem) for elem in item) - return item - - def _group_ensemble_members(dataset_facets: Iterable[Facets]) -> list[Facets]: """Group ensemble members. @@ -185,13 +168,15 @@ def _group_ensemble_members(dataset_facets: Iterable[Facets]) -> list[Facets]: """ def grouper(facets): - return tuple((k, facets[k]) for k in sorted(facets) if k != 'ensemble') + return sorted( + (f, str(v)) for f, v in facets.items() if f != 'ensemble') result = [] - dataset_facets = _change_dict_type(dataset_facets, _SortableDict) dataset_facets = sorted(dataset_facets, key=grouper) - for group_facets, group in itertools.groupby(dataset_facets, key=grouper): + for _, group_iter in itertools.groupby(dataset_facets, key=grouper): + group = list(group_iter) ensembles = [f['ensemble'] for f in group if 'ensemble' in f] + group_facets = group[0] if not ensembles: result.append(dict(group_facets)) else: @@ -199,7 +184,6 @@ def grouper(facets): facets = dict(group_facets) facets['ensemble'] = ensemble result.append(facets) - result = _change_dict_type(result, dict) return result diff --git a/tests/unit/recipe/test_from_datasets.py b/tests/unit/recipe/test_from_datasets.py index c2032724a4..aacca5117d 100644 --- a/tests/unit/recipe/test_from_datasets.py +++ b/tests/unit/recipe/test_from_datasets.py @@ -8,7 +8,6 @@ _group_ensemble_names, _group_identical_facets, _move_one_level_up, - _SortableDict, _to_frozen, datasets_to_recipe, ) @@ -137,12 +136,6 @@ def test_supplementary_datasets_to_recipe(): assert datasets_to_recipe([dataset]) == recipe -def test_sortable_dict(): - assert _SortableDict({'a': 1}) < _SortableDict({'a': 2}) - assert _SortableDict({'a': 1}) < _SortableDict({'a': 1, 'b': 1}) - assert _SortableDict({'a': 1}) < _SortableDict({'b': 1}) - - def test_datasets_to_recipe_group_ensembles(): datasets = [ Dataset( @@ -253,6 +246,45 @@ def test_group_ensemble_members(): ] +def test_group_ensemble_members_mix_of_versions(): + datasets = [ + Dataset( + dataset='dataset1', + ensemble='r1i1p1f1', + exp=['historical', 'ssp585'], + version='v1', + ), + Dataset( + dataset='dataset1', + ensemble='r2i1p1f1', + exp=['historical', 'ssp585'], + version='v1', + ), + Dataset( + dataset='dataset1', + ensemble='r3i1p1f1', + exp=['historical', 'ssp585'], + version=['v1', 'v2'], + ), + ] + result = _group_ensemble_members(ds.facets for ds in datasets) + print(result) + assert result == [ + { + 'dataset': 'dataset1', + 'ensemble': 'r3i1p1f1', + 'exp': ['historical', 'ssp585'], + 'version': ['v1', 'v2'], + }, + { + 'dataset': 'dataset1', + 'ensemble': 'r(1:2)i1p1f1', + 'exp': ['historical', 'ssp585'], + 'version': 'v1', + }, + ] + + def test_group_ensembles_cmip5(): ensembles = [ "r1i1p1", From bdad237ded5e42e915ce05ca7d284b10eef30eb4 Mon Sep 17 00:00:00 2001 From: Bouwe Andela Date: Tue, 24 Oct 2023 13:12:12 +0200 Subject: [PATCH 4/9] Fix `concatenate` preprocessor function (#2240) --- esmvalcore/preprocessor/_io.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/esmvalcore/preprocessor/_io.py b/esmvalcore/preprocessor/_io.py index a6b2ccdd94..b9c59c1adc 100644 --- a/esmvalcore/preprocessor/_io.py +++ b/esmvalcore/preprocessor/_io.py @@ -261,10 +261,10 @@ def _check_time_overlaps(cubes): overlapping_cubes[1], ) - start_point = isodate.date_isoformat( - new_dates[0], format=isodate.isostrf.DATE_BAS_COMPLETE) - end_point = isodate.date_isoformat( - new_dates[-1], format=isodate.isostrf.DATE_BAS_COMPLETE) + start_point = isodate.datetime_isoformat( + new_dates[0], format=isodate.isostrf.DT_BAS_COMPLETE) + end_point = isodate.datetime_isoformat( + new_dates[-1], format=isodate.isostrf.DT_BAS_COMPLETE) new_cube = clip_timerange(overlapping_cubes[0], f'{start_point}/{end_point}') From 3e2c94da50baba21455c7fab0d2b02d39d0fa3f4 Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Wed, 25 Oct 2023 12:57:19 +0100 Subject: [PATCH 5/9] revisit the comment-triggered Github Actions test (#2243) --- .github/workflows/run-tests-comment-v2.yml | 61 +++++++++++++++++ .github/workflows/run-tests-comment.yml | 77 ---------------------- 2 files changed, 61 insertions(+), 77 deletions(-) create mode 100644 .github/workflows/run-tests-comment-v2.yml delete mode 100644 .github/workflows/run-tests-comment.yml diff --git a/.github/workflows/run-tests-comment-v2.yml b/.github/workflows/run-tests-comment-v2.yml new file mode 100644 index 0000000000..2cf8564694 --- /dev/null +++ b/.github/workflows/run-tests-comment-v2.yml @@ -0,0 +1,61 @@ +# this workflow was tuned using this resource +# https://dev.to/zirkelc/trigger-github-workflow-for-comment-on-pull-request-45l2 + +name: Test via PR Comment v2 +on: + issue_comment: + types: [created] + +# Required shell entrypoint to have properly configured bash shell +defaults: + run: + shell: bash -l {0} + +jobs: + linux: + # this detects if comment is on a PR and if it contains the trigger word "runGAtests" + if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'runGAtests') }} + runs-on: "ubuntu-latest" + strategy: + matrix: + python-version: ["3.9", "3.10", "3.11"] + fail-fast: false + name: Linux Python ${{ matrix.python-version }} + steps: + # this bit detects what branch the tests should run on + # without it tests run amok on all PRs + - name: Get correct PR branch + uses: xt0rted/pull-request-comment-branch@v1 + id: comment-branch + # this bit will make the test appear on the PR webpage + - name: Set latest commit status as pending + uses: myrotvorets/set-commit-status-action@master + with: + sha: ${{ steps.comment-branch.outputs.head_sha }} + token: ${{ secrets.GITHUB_TOKEN }} + status: pending + - name: Checkout correct PR branch + uses: actions/checkout@v3 + with: + ref: ${{ steps.comment-branch.outputs.head_ref }} + fetch-depth: 0 + - uses: conda-incubator/setup-miniconda@v2 + with: + activate-environment: esmvalcore + environment-file: environment.yml + python-version: ${{ matrix.python-version }} + miniforge-version: "latest" + miniforge-variant: Mambaforge + use-mamba: true + - run: mkdir -p test_linux_artifacts_python_${{ matrix.python-version }} + - run: conda --version 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/conda_version.txt + - run: python -V 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/python_version.txt + - run: pip install -e .[develop] 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/install.txt + - run: flake8 + - run: pytest + - name: Upload artifacts + if: ${{ always() }} # upload artifacts even if fail + uses: actions/upload-artifact@v2 + with: + name: Test_Linux_python_${{ matrix.python-version }} + path: test_linux_artifacts_python_${{ matrix.python-version }} diff --git a/.github/workflows/run-tests-comment.yml b/.github/workflows/run-tests-comment.yml deleted file mode 100644 index ccae9db0ee..0000000000 --- a/.github/workflows/run-tests-comment.yml +++ /dev/null @@ -1,77 +0,0 @@ -name: Test via PR Comment -on: - issue_comment: - types: - - created - -# Required shell entrypoint to have properly configured bash shell -defaults: - run: - shell: bash -l {0} - -jobs: - linux: - runs-on: "ubuntu-latest" - strategy: - matrix: - python-version: ["3.9", "3.10", "3.11"] - fail-fast: false - name: Linux Python ${{ matrix.python-version }} - if: ${{ github.event.issue.pull_request && github.event.comment.body == '@runGAtests' }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v2 - with: - activate-environment: esmvalcore - environment-file: environment.yml - python-version: ${{ matrix.python-version }} - miniforge-version: "latest" - miniforge-variant: Mambaforge - use-mamba: true - - run: mkdir -p test_linux_artifacts_python_${{ matrix.python-version }} - - run: conda --version 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/conda_version.txt - - run: python -V 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/python_version.txt - - run: pip install -e .[develop] 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/install.txt - - run: flake8 - - run: pytest -n 2 -m "not installation" 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/test_report.txt - - name: Upload artifacts - if: ${{ always() }} # upload artifacts even if fail - uses: actions/upload-artifact@v2 - with: - name: Test_Linux_python_${{ matrix.python-version }} - path: test_linux_artifacts_python_${{ matrix.python-version }} - - osx: - runs-on: "macos-latest" - strategy: - matrix: - python-version: ["3.9", "3.10", "3.11"] - fail-fast: false - name: OSX Python ${{ matrix.python-version }} - if: ${{ github.event.issue.pull_request && github.event.comment.body == '@runGAtests' }} - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v2 - with: - activate-environment: esmvalcore - environment-file: environment.yml - python-version: ${{ matrix.python-version }} - miniforge-version: "latest" - miniforge-variant: Mambaforge - use-mamba: true - - run: mkdir -p test_osx_artifacts_python_${{ matrix.python-version }} - - run: conda --version 2>&1 | tee test_osx_artifacts_python_${{ matrix.python-version }}/conda_version.txt - - run: python -V 2>&1 | tee test_osx_artifacts_python_${{ matrix.python-version }}/python_version.txt - - run: pip install -e .[develop] 2>&1 | tee test_osx_artifacts_python_${{ matrix.python-version }}/install.txt - - run: flake8 - - run: pytest -n 2 -m "not installation" 2>&1 | tee test_osx_artifacts_python_${{ matrix.python-version }}/test_report.txt - - name: Upload artifacts - if: ${{ always() }} # upload artifacts even if fail - uses: actions/upload-artifact@v2 - with: - name: Test_OSX_python_${{ matrix.python-version }} - path: test_osx_artifacts_python_${{ matrix.python-version }} From fb97b01e90fa9bafab14c330e0e8fb892c12745d Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Thu, 26 Oct 2023 13:21:16 +0100 Subject: [PATCH 6/9] Remove workflow that runs Github Actions tests from PR comment (#2244) --- .github/workflows/run-tests-comment-v2.yml | 61 ---------------------- doc/contributing.rst | 12 ----- 2 files changed, 73 deletions(-) delete mode 100644 .github/workflows/run-tests-comment-v2.yml diff --git a/.github/workflows/run-tests-comment-v2.yml b/.github/workflows/run-tests-comment-v2.yml deleted file mode 100644 index 2cf8564694..0000000000 --- a/.github/workflows/run-tests-comment-v2.yml +++ /dev/null @@ -1,61 +0,0 @@ -# this workflow was tuned using this resource -# https://dev.to/zirkelc/trigger-github-workflow-for-comment-on-pull-request-45l2 - -name: Test via PR Comment v2 -on: - issue_comment: - types: [created] - -# Required shell entrypoint to have properly configured bash shell -defaults: - run: - shell: bash -l {0} - -jobs: - linux: - # this detects if comment is on a PR and if it contains the trigger word "runGAtests" - if: ${{ github.event.issue.pull_request && contains(github.event.comment.body, 'runGAtests') }} - runs-on: "ubuntu-latest" - strategy: - matrix: - python-version: ["3.9", "3.10", "3.11"] - fail-fast: false - name: Linux Python ${{ matrix.python-version }} - steps: - # this bit detects what branch the tests should run on - # without it tests run amok on all PRs - - name: Get correct PR branch - uses: xt0rted/pull-request-comment-branch@v1 - id: comment-branch - # this bit will make the test appear on the PR webpage - - name: Set latest commit status as pending - uses: myrotvorets/set-commit-status-action@master - with: - sha: ${{ steps.comment-branch.outputs.head_sha }} - token: ${{ secrets.GITHUB_TOKEN }} - status: pending - - name: Checkout correct PR branch - uses: actions/checkout@v3 - with: - ref: ${{ steps.comment-branch.outputs.head_ref }} - fetch-depth: 0 - - uses: conda-incubator/setup-miniconda@v2 - with: - activate-environment: esmvalcore - environment-file: environment.yml - python-version: ${{ matrix.python-version }} - miniforge-version: "latest" - miniforge-variant: Mambaforge - use-mamba: true - - run: mkdir -p test_linux_artifacts_python_${{ matrix.python-version }} - - run: conda --version 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/conda_version.txt - - run: python -V 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/python_version.txt - - run: pip install -e .[develop] 2>&1 | tee test_linux_artifacts_python_${{ matrix.python-version }}/install.txt - - run: flake8 - - run: pytest - - name: Upload artifacts - if: ${{ always() }} # upload artifacts even if fail - uses: actions/upload-artifact@v2 - with: - name: Test_Linux_python_${{ matrix.python-version }} - path: test_linux_artifacts_python_${{ matrix.python-version }} diff --git a/doc/contributing.rst b/doc/contributing.rst index 8201fac707..814ab79263 100644 --- a/doc/contributing.rst +++ b/doc/contributing.rst @@ -550,18 +550,6 @@ and the result of the tests ran by GitHub Actions can be viewed on the of the repository (to learn more about the Github-hosted runners, please have a look the `documentation `__). -When opening a pull request, if you wish to run the Github Actions `Test `__ test, -you can activate it via a simple comment containing the @runGAtests tag -(e.g. "@runGAtests" or "@runGAtests please run" - in effect, tagging the runGAtests -bot that will start the test automatically). This is useful -to check if a certain feature that you included in the Pull Request, and can be tested -for via the test suite, works across the supported Python versions, and both on Linux and OSX. -The test is currently deactivated, so before triggering the test via comment, make sure you activate -the test in the main `Actions page `__ -(click on Test via PR Comment and activate it); also and be sure to deactivate it afterwards -(the Github API still needs a bit more development, and currently it triggers -the test for **each comment** irrespective of PR, that's why this needs to be activated/decativated). - The configuration of the tests run by CircleCI can be found in the directory `.circleci `__, while the configuration of the tests run by GitHub Actions can be found in the From 11594cf284e0080cbf599d8ba17410010e63dac2 Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Thu, 26 Oct 2023 13:56:29 +0100 Subject: [PATCH 7/9] Add `navigation_with_keys: True` to `html_theme_options` in Readthedocs `conf.py` (#2245) --- doc/conf.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/doc/conf.py b/doc/conf.py index a71f331378..1613a0133b 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -152,7 +152,19 @@ # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. -# html_theme_options = {} +# +# Avoid the following warning issued by pydata_sphinx_theme: +# +# "WARNING: The default value for `navigation_with_keys` will change to `False` +# in the next release. If you wish to preserve the old behavior for your site, +# set `navigation_with_keys=True` in the `html_theme_options` dict in your +# `conf.py` file.Be aware that `navigation_with_keys = True` has negative +# accessibility implications: +# https://github.com/pydata/pydata-sphinx-theme/issues/1492" +# Short synopsis of said issue: as of now, left/right keys take one +# to the previous/next page instead of scrolling horizontally; this +# should be fixed upstream, then we can set again navigation with keys True +html_theme_options = {"navigation_with_keys": False} # Add any paths that contain custom themes here, relative to this directory. # html_theme_path = [] From f39d14a502ba92da0219ab8433453e1c90d1ea46 Mon Sep 17 00:00:00 2001 From: Valeriu Predoi Date: Thu, 26 Oct 2023 16:20:27 +0100 Subject: [PATCH 8/9] replace squarey badge with roundy shield for Anaconda sticker in README (#2233) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d0e5e02e36..20d13f1637 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ [![codecov](https://codecov.io/gh/ESMValGroup/ESMValCore/branch/main/graph/badge.svg?token=wQnDzguwq6)](https://codecov.io/gh/ESMValGroup/ESMValCore) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/5d496dea9ef64ec68e448a6df5a65783)](https://www.codacy.com/gh/ESMValGroup/ESMValCore?utm_source=github.com&utm_medium=referral&utm_content=ESMValGroup/ESMValCore&utm_campaign=Badge_Grade) [![Docker Build Status](https://img.shields.io/docker/cloud/build/esmvalgroup/esmvalcore)](https://hub.docker.com/r/esmvalgroup/esmvalcore/) -[![Anaconda-Server Badge](https://anaconda.org/conda-forge/esmvalcore/badges/version.svg)](https://anaconda.org/conda-forge/esmvalcore) +[![Anaconda-Server Badge](https://img.shields.io/badge/Anaconda.org-2.9.0-blue.svg)](https://anaconda.org/conda-forge/esmvalcore) [![Github Actions Test](https://github.com/ESMValGroup/ESMValCore/actions/workflows/run-tests.yml/badge.svg)](https://github.com/ESMValGroup/ESMValCore/actions/workflows/run-tests.yml) ![esmvaltoollogo](https://raw.githubusercontent.com/ESMValGroup/ESMValCore/main/doc/figures/ESMValTool-logo-2.png) From 56cc385fdae093e2d85b5cf69fdcc1ab817ba05b Mon Sep 17 00:00:00 2001 From: Klaus Zimmermann Date: Mon, 30 Oct 2023 13:31:27 +0100 Subject: [PATCH 9/9] Fix time overlap handling in concatenation (#2247) --- esmvalcore/preprocessor/_io.py | 159 +++++++++++++++++++-------------- 1 file changed, 92 insertions(+), 67 deletions(-) diff --git a/esmvalcore/preprocessor/_io.py b/esmvalcore/preprocessor/_io.py index b9c59c1adc..f1586a9f17 100644 --- a/esmvalcore/preprocessor/_io.py +++ b/esmvalcore/preprocessor/_io.py @@ -6,13 +6,13 @@ import os from itertools import groupby from pathlib import Path -from typing import Optional +from typing import Optional, NamedTuple from warnings import catch_warnings, filterwarnings +import cftime import iris import iris.aux_factory import iris.exceptions -import isodate import numpy as np import yaml from cf_units import suppress_errors @@ -22,7 +22,6 @@ from esmvalcore.iris_helpers import merge_cube_attributes from .._task import write_ncl_settings -from ._time import clip_timerange logger = logging.getLogger(__name__) @@ -206,70 +205,96 @@ def _concatenate_cubes(cubes, check_level): return concatenated -def _check_time_overlaps(cubes): - """Handle time overlaps.""" - times = [cube.coord('time').core_points() for cube in cubes] - for index, _ in enumerate(times[:-1]): - overlap = np.intersect1d(times[index], times[index + 1]) - if overlap.size != 0: - overlapping_cubes = cubes[index:index + 2] - time_1 = overlapping_cubes[0].coord('time').core_points() - time_2 = overlapping_cubes[1].coord('time').core_points() - - # case 1: both cubes start at the same time -> return longer cube - if time_1[0] == time_2[0]: - if time_1[-1] <= time_2[-1]: - cubes.pop(index) - discarded_cube_index = 0 - used_cube_index = 1 - else: - cubes.pop(index + 1) - discarded_cube_index = 1 - used_cube_index = 0 - logger.debug( - "Both cubes start at the same time but cube %s " - "ends before %s", - overlapping_cubes[discarded_cube_index], - overlapping_cubes[used_cube_index], - ) - logger.debug( - "Cube %s contains all needed data so using it fully", - overlapping_cubes[used_cube_index], - ) - - # case 2: cube1 starts before cube2 - # case 2.1: cube1 ends after cube2 -> return cube1 - elif time_1[-1] > time_2[-1]: - cubes.pop(index + 1) - logger.debug("Using only data from %s", overlapping_cubes[0]) - - # case 2.2: cube1 ends before cube2 -> use full cube2 - # and shorten cube1 - else: - new_time = np.delete( - time_1, - np.argwhere(np.in1d(time_1, overlap)), - ) - new_dates = overlapping_cubes[0].coord('time').units.num2date( - new_time) - logger.debug( - "Extracting time slice between %s and %s from cube %s " - "to use it for concatenation with cube %s", - new_dates[0], - new_dates[-1], - overlapping_cubes[0], - overlapping_cubes[1], - ) - - start_point = isodate.datetime_isoformat( - new_dates[0], format=isodate.isostrf.DT_BAS_COMPLETE) - end_point = isodate.datetime_isoformat( - new_dates[-1], format=isodate.isostrf.DT_BAS_COMPLETE) - new_cube = clip_timerange(overlapping_cubes[0], - f'{start_point}/{end_point}') - - cubes[index] = new_cube - return cubes +class _TimesHelper: + + def __init__(self, time): + self.times = time.core_points() + self.units = str(time.units) + + def __getattr__(self, name): + return getattr(self.times, name) + + def __len__(self): + return len(self.times) + + def __getitem__(self, key): + return self.times[key] + + +def _check_time_overlaps(cubes: iris.cube.CubeList) -> iris.cube.CubeList: + """Handle time overlaps. + + Parameters + ---------- + cubes : iris.cube.CubeList + A list of cubes belonging to a single timeseries, + ordered by starting point with possible overlaps. + + Returns + ------- + iris.cube.CubeList + A list of cubes belonging to a single timeseries, + ordered by starting point with no overlaps. + """ + if len(cubes) < 2: + return cubes + + class _TrackedCube(NamedTuple): + cube: iris.cube.Cube + times: iris.coords.DimCoord + start: float + end: float + + @classmethod + def from_cube(cls, cube): + """Construct tracked cube.""" + times = cube.coord("time") + start, end = times.core_points()[[0, -1]] + return cls(cube, times, start, end) + + new_cubes = iris.cube.CubeList() + current_cube = _TrackedCube.from_cube(cubes[0]) + for new_cube in map(_TrackedCube.from_cube, cubes[1:]): + if new_cube.start > current_cube.end: + # no overlap, use current cube and start again from new cube + logger.debug("Using %s", current_cube.cube) + new_cubes.append(current_cube.cube) + current_cube = new_cube + continue + # overlap + if current_cube.end > new_cube.end: + # current cube ends after new one, just forget new cube + logger.debug( + "Discarding %s because the time range " + "is already covered by %s", new_cube.cube, current_cube.cube) + continue + if new_cube.start == current_cube.start: + # new cube completely covers current one + # forget current cube + current_cube = new_cube + logger.debug( + "Discarding %s because the time range is covered by %s", + current_cube.cube, new_cube.cube) + continue + # new cube ends after current one, + # use all of new cube, and shorten current cube to + # eliminate overlap with new cube + cut_index = cftime.time2index( + new_cube.start, + _TimesHelper(current_cube.times), + current_cube.times.units.calendar, + select="before", + ) + 1 + logger.debug("Using %s shortened to %s due to overlap", + current_cube.cube, + current_cube.times.cell(cut_index).point) + new_cubes.append(current_cube.cube[:cut_index]) + current_cube = new_cube + + logger.debug("Using %s", current_cube.cube) + new_cubes.append(current_cube.cube) + + return new_cubes def _fix_calendars(cubes):