From 13999940a045dc3a4496aa12e8867142d2377719 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Mon, 5 Jun 2023 11:27:59 +0100 Subject: [PATCH 01/82] Updated environment lockfiles (#5337) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 26 +++++++++++++------------- requirements/locks/py311-linux-64.lock | 26 +++++++++++++------------- requirements/locks/py39-linux-64.lock | 24 ++++++++++++------------ 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index 6133f53225..83cf6efc0f 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 081cae6b15083563c7942b761f2295b86794b799d4c679a81f95c695c576e491 +# input_hash: 2b004b3b54cef3f1b8e174aef2273590c7e578f60de14562357ef83ec73063ce @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 @@ -53,13 +53,13 @@ https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 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.0-hd590300_3.conda#8f24d371ed9efb3f0b0de383fb81d51c +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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.0.10-h7f98852_0.tar.bz2#d6b0b50b49eccfe0be0373be628be0f3 +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-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 @@ -76,7 +76,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.ta https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a 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-h3358134_0.conda#c164eb2e0df905571d68f40ae957522d +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e @@ -91,7 +91,7 @@ https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.3-hd9c2040_1000.tar.bz2#9e856f78d5c80d5a78f61e72d1d473a3 +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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc @@ -147,7 +147,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py310hbf28c38_1 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.1.1-h409715c_0.conda#4b82f5c9fc26b31d0f9302773a657507 +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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 @@ -186,7 +186,7 @@ https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py310h2372a71_0.conda#1c510e74c87dc9b8fe1f7f9e8dbcef96 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.2-pyha770c72_0.conda#5a4a270e5a3f93846d6bade2f71fa440 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -201,8 +201,8 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835 https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py310hdf3cbec_0.conda#7bf9d8c765b6b04882c719509652c6d6 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.6-py310h2372a71_0.conda#93b5564452a94d4bc633ab692ef29598 -https://conda.anaconda.org/conda-forge/linux-64/curl-8.1.1-h409715c_0.conda#effaa9ea047f960bc70225be8337fd91 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py310h2372a71_0.conda#13df1c4ea94f2e3326b15da1999e5999 +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.0-py310h5764c6d_1.tar.bz2#fd18cd597d23b2b5ddde23bd5b7aec32 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py310h2372a71_0.conda#76426eaff204520e719207700359a855 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 @@ -217,12 +217,12 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_0.conda#721 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-h5195f5e_3.conda#caeb3302ef1dc8b342b20c710a86f8a9 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h056c13c_1.conda#32d925cfd330e0cbb72b7618558a44e8 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py310hc6cd4ac_0.conda#a3217e1bff09702dfdfcb536825fc12d -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.2-hd8ed1ab_0.conda#f676553904bb8f7c1dfe71c9db0d9ba7 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd @@ -230,7 +230,7 @@ https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda# https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 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/matplotlib-base-3.7.1-py310he60537e_0.conda#68b2dd34c69d08b05a9db5e3596fe3ee -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.1-py310h7cbd5c2_1.conda#25fc16ee9a1df69e91c8213530f2cc8c +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py310h7cbd5c2_0.conda#e0b845c6b29a1ed2e409bef6c0f5d96b https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py310hb814896_1.conda#d44c6841ee904252e0e8b7a1c7b11383 @@ -255,7 +255,7 @@ https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.0-h98fae49_1.conda#1cad58e8dceb1af51dbd963bb7f53f34 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 7ab3e170f6..3fb33e82cd 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 735e824e95f2b2e689fb7433e592a1511d9a7959fe4b524373621b99ae41ee87 +# input_hash: 2f069ddfd9b505e06a2c4ed71dff8be24543629660bd8a39c1a41dde291bd352 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 @@ -53,13 +53,13 @@ https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 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.0-hd590300_3.conda#8f24d371ed9efb3f0b0de383fb81d51c +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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.0.10-h7f98852_0.tar.bz2#d6b0b50b49eccfe0be0373be628be0f3 +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-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 @@ -76,7 +76,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.ta https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a 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-h3358134_0.conda#c164eb2e0df905571d68f40ae957522d +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e @@ -91,7 +91,7 @@ https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.3-hd9c2040_1000.tar.bz2#9e856f78d5c80d5a78f61e72d1d473a3 +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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc @@ -147,7 +147,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py311h4dd048b_1 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.1.1-h409715c_0.conda#4b82f5c9fc26b31d0f9302773a657507 +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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 @@ -186,7 +186,7 @@ https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py311h459d7ec_0.conda#12b1c374ee90a1aa11ea921858394dc8 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.2-pyha770c72_0.conda#5a4a270e5a3f93846d6bade2f71fa440 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -200,8 +200,8 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py311ha3edf6b_0.conda#e7548e7f58965a2fe97a95950a5fedc6 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.6-py311h459d7ec_0.conda#959422baa360b4aaf505aedff7d77943 -https://conda.anaconda.org/conda-forge/linux-64/curl-8.1.1-h409715c_0.conda#effaa9ea047f960bc70225be8337fd91 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py311h459d7ec_0.conda#3c2c65575c28b23afc5e4ff721a2fc9f +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.0-py311hd4cff14_1.tar.bz2#21523141b35484b1edafba962c6ea883 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py311h459d7ec_0.conda#ddd2cd004e10bc7a1e042283326cbf91 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 @@ -216,12 +216,12 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_0.conda#721 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py311h0b84326_1.conda#6be2190fdbf26a6c1d3356a54d955237 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-h5195f5e_3.conda#caeb3302ef1dc8b342b20c710a86f8a9 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311h54d622a_1.conda#a894c65b48676c4973e9ee8b59bceb9e https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py311hb755f60_0.conda#2b5430f2f1651f460c852e1fdd549184 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.2-hd8ed1ab_0.conda#f676553904bb8f7c1dfe71c9db0d9ba7 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd @@ -229,7 +229,7 @@ https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda# https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 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/matplotlib-base-3.7.1-py311h8597a09_0.conda#70c3b734ffe82c16b6d121aaa11929a8 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.1-py311h320fe9a_1.conda#37f841a3140999c4735f7d8091072bea +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py311h320fe9a_0.conda#509769b430266dc5c2f6a3eab0f23164 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py311h1850bce_1.conda#572159a946b809df471b11db4995c708 @@ -254,7 +254,7 @@ https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.0-h98fae49_1.conda#1cad58e8dceb1af51dbd963bb7f53f34 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 2467c06504..8e584a3a74 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: bd8a57fefa94205701a278eab5fbfd897a3c49e389f926b1880d718caa0d6195 +# input_hash: b3cb1f7bc6b32267d57b62a9f2f18ea72ba40a12bb0f57668771079837395d34 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 @@ -53,13 +53,13 @@ https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 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.0-hd590300_3.conda#8f24d371ed9efb3f0b0de383fb81d51c +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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.0.10-h7f98852_0.tar.bz2#d6b0b50b49eccfe0be0373be628be0f3 +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-renderproto-0.11.1-h7f98852_1002.tar.bz2#06feff3d2634e3097ce2fe681474b534 @@ -76,7 +76,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.ta https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a 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-h3358134_0.conda#c164eb2e0df905571d68f40ae957522d +https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e @@ -91,7 +91,7 @@ https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.3-hd9c2040_1000.tar.bz2#9e856f78d5c80d5a78f61e72d1d473a3 +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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc @@ -147,7 +147,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1. https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.1.1-h409715c_0.conda#4b82f5c9fc26b31d0f9302773a657507 +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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 @@ -186,7 +186,7 @@ https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py39hd1e30aa_0.conda#da334eecb1ea2248e28294c49e6f6d89 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.2-pyha770c72_0.conda#5a4a270e5a3f93846d6bade2f71fa440 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -201,7 +201,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda#20080319ef73fbad74dcd6d62f2a3ffe https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py39h4b4f3f3_0.conda#c5387f3fb1f5b8b71e1c865fc55f4951 -https://conda.anaconda.org/conda-forge/linux-64/curl-8.1.1-h409715c_0.conda#effaa9ea047f960bc70225be8337fd91 +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.0-py39hb9d737c_1.tar.bz2#eb31327ace8dac15c2df243d9505a132 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py39hd1e30aa_0.conda#80605b792f58cf5c78a5b7e20cef1e35 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 @@ -217,12 +217,12 @@ https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_0.conda#721 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py39haaeba84_1.conda#d7aa9b99ed6ade75fbab1e4cedcb3ce2 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-h5195f5e_3.conda#caeb3302ef1dc8b342b20c710a86f8a9 +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39hf1c3bca_1.conda#ae6bfe65e81d9b59a71cc01a2858650f https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py39h3d6467e_0.conda#6d990f672cc70e5c480ddb74b789a17c -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.2-hd8ed1ab_0.conda#f676553904bb8f7c1dfe71c9db0d9ba7 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd @@ -230,7 +230,7 @@ https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda# https://conda.anaconda.org/conda-forge/noarch/importlib-resources-5.12.0-pyhd8ed1ab_0.conda#3544c818f0720c89eb16ae6940ab440b https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 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/pandas-2.0.1-py39h40cae4c_1.conda#85bc4d45cd98f84af0c00435fff23f67 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py39h40cae4c_0.conda#de99b3f807c0b295a7df94623df0fb4c https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py39h718ffca_1.conda#a19bf4be7ebce54623541fa4ad22abb4 @@ -254,7 +254,7 @@ https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.0-h98fae49_1.conda#1cad58e8dceb1af51dbd963bb7f53f34 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 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/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 From 18d24a974996a0fca264d59e9723b6250533ad53 Mon Sep 17 00:00:00 2001 From: Henry Wright <84939917+HGWright@users.noreply.github.com> Date: Mon, 12 Jun 2023 11:16:09 +0100 Subject: [PATCH 02/82] Adding a Dask best practices section to the user guide (#5190) * Adding a Dask best practices section to the user guide * Updated example 2, adjusted internal MO references * making requested changes from review * fixing merge conflict and rest of requested changes * finishing requested changes? * fixing dask docs link for linkcheck * Update docs/src/whatsnew/latest.rst Co-authored-by: lbdreyer --------- Co-authored-by: lbdreyer --- .../dask_bags_and_greed.rst | 235 ++++++++++++++++++ .../dask_parallel_loop.rst | 169 +++++++++++++ .../dask_best_practices/dask_pp_to_netcdf.rst | 92 +++++++ .../images/grib-bottleneck.png | Bin 0 -> 63951 bytes .../loop_third_party_kapture_results.png | Bin 0 -> 84484 bytes .../dask_best_practices/index.rst | 221 ++++++++++++++++ docs/src/userguide/index.rst | 1 + docs/src/whatsnew/latest.rst | 4 + 8 files changed, 722 insertions(+) create mode 100644 docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst create mode 100644 docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst create mode 100644 docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst create mode 100644 docs/src/further_topics/dask_best_practices/images/grib-bottleneck.png create mode 100644 docs/src/further_topics/dask_best_practices/images/loop_third_party_kapture_results.png create mode 100644 docs/src/further_topics/dask_best_practices/index.rst diff --git a/docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst b/docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst new file mode 100644 index 0000000000..007a58d400 --- /dev/null +++ b/docs/src/further_topics/dask_best_practices/dask_bags_and_greed.rst @@ -0,0 +1,235 @@ +.. _examples_bags_greed: + +3. Dask Bags and Greedy Parallelism +----------------------------------- + +Here is a journey that demonstrates: + +* How to apply dask.bags to an existing script +* The equal importance of optimisation of non-parallel parts of a script +* Protection against multiple softwares trying to manage parallelism + simultaneously + + +3.1 The Problem - Slow Loading +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +We have ~7000 GRIB files spread between 256 dated directories:: + + . + |-- 20180401 + | |-- gfs.t00z.icing.0p25.grb2f006 + | |-- gfs.t00z.icing.0p25.grb2f006.1 + | |-- gfs.t00z.icing.0p25.grb2f012 + | |-- gfs.t00z.icing.0p25.grb2f018 + | |-- gfs.t00z.icing.0p25.grb2f024 + | |-- gfs.t00z.icing.0p25.grb2f030 + | `-- gfs.t00z.icing.0p25.grb2f036 + |-- 20180402 + | `-- gfs.t00z.icing.0p25.grb2f006 + |-- 20180403 + | |-- gfs.t12z.icing.0p25.grb2f006 + | |-- gfs.t12z.icing.0p25.grb2f012 + +With this script, a sample of 11 GRIB files takes ~600secs to load:: + + import iris + import glob + + fpaths=glob.glob('20190416/*t18z*f???') + cubes = iris.load(fpaths, callback=callback) + + def callback(cube, field, fname): + if field.sections[5]['bitsPerValue'] == 0: + raise iris.exceptions.IgnoreCubeException + if field.sections[4]['parameterNumber'] == 20: + raise iris.exceptions.IgnoreCubeException + elif field.sections[4]['parameterNumber'] == 234: + cube.long_name = 'Icing Severity' + +3.2 Parallelisation +^^^^^^^^^^^^^^^^^^^ +We'll try using `dask.bag `_ to +parallelise the function calls. It's important that Dask is given the freedom +to break the task down in an efficient manner - the function that is mapped +across the bag should only load a single file, and the bag itself can +iterate through the list of files. Here's the restructured script:: + + import glob + import multiprocessing + import os + + import dask + import dask.bag as db + import iris + + def callback(cube, field, fname): + if field.sections[5]['bitsPerValue'] == 0: + raise iris.exceptions.IgnoreCubeException + if field.sections[4]['parameterNumber'] == 20: + raise iris.exceptions.IgnoreCubeException + elif field.sections[4]['parameterNumber'] == 234: + cube.long_name = 'Icing Severity' + + def func(fname): + return iris.load_cube(fname, callback=callback) + + fpaths = list(glob.glob('20190416/*t18z*f???')) + + # Determine the number of processors visible .. + cpu_count = multiprocessing.cpu_count() + + # .. or as given by slurm allocation. + # Only relevant when using Slurm for job scheduling + if 'SLURM_NTASKS' in os.environ: + cpu_count = os.environ['SLURM_NTASKS'] + + # Do not exceed the number of CPUs available, leaving 1 for the system. + num_workers = cpu_count - 1 + print('Using {} workers from {} CPUs...'.format(num_workers, cpu_count)) + + # Now do the parallel load. + with dask.config.set(num_workers=num_workers): + bag = db.from_sequence(fpaths).map(func) + cubes = iris.cube.CubeList(bag.compute()).merge() + +This achieves approximately a 10-fold improvement if enough CPUs are +available to have one per file. See this benchmarking: + ++---------------+-----------------------+---------------+---------------+ +| Machine | CPUs Available | CPUs Used | Time Taken | ++===============+=======================+===============+===============+ +| A | 4 | 3 | 4m 05s | +| | +---------------+---------------+ +| | | 4 | 3m 22s | ++---------------+-----------------------+---------------+---------------+ +| B | 8 | 1 | 9m 10s | +| | +---------------+---------------+ +| | | 7 | 2m 35s | +| | +---------------+---------------+ +| | | 8 | 2m 20s | ++---------------+-----------------------+---------------+---------------+ + + +.. _examples_bags_greed_profile: + +3.3 Profiling +^^^^^^^^^^^^^ +1m 10s is still a surprisingly long time. When faced with a mystery like +this it is helpful to profile the script to see if there are any steps that +are taking more time than we would expect. For this we use a tool called +`kapture `_ to produce a +flame chart visualising the time spent performing each call: + +.. image:: images/grib-bottleneck.png + :width: 1000 + :align: center + +From this we see that 96% of the runtime is taken by this call:: + + res = gribapi.grib_get_array(self._message_id, key) + +This is the call being used during the ``callback`` function when it uses +GRIB messages to filter out cubes with certain unwanted properties. + +3.4 Improving GRIB Key Handling +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Even with parallelisation, we are still limited by the time it takes to run +a single instance of a function. This is going to become much more important +when running 7000 files instead of 11, since there will be nowhere near +enough CPUs even on a large multi-processing system, meaning each CPU will be running many instances +of the function. **Parallelisation can only go so far to solving speed issues** -- +it's effectively the 'brute force' method. + +:ref:`examples_bags_greed_profile` showed us where the major bottleneck is. To improve efficiency +we can re-write the script to filter on GRIB messages *before* converting +the GRIB file to a cube:: + + import dask + import dask.bag as db + import glob + import iris + import multiprocessing + import os + + def func(fname): + import iris + from iris_grib import load_pairs_from_fields + from iris_grib.message import GribMessage # perform GRIB message level filtering... + filtered_messages = [] + for message in GribMessage.messages_from_filename(fname): + if (message.sections[5]['bitsPerValue'] != 0 and + message.sections[4]['parameterNumber'] == 234): + filtered_messages.append(message) # now convert the messages to cubes... + cubes = [cube for cube, message in load_pairs_from_fields(filtered_messages)] + return iris.cube.CubeList(cubes).merge_cube() + + fpaths = list(glob.glob('/scratch/frcz/ICING/GFS_DATA/20190416/*t18z*f???')) + cpu_count = multiprocessing.cpu_count() + + # Only relevant when using Slurm for job scheduling + if 'SLURM_NTASKS' in os.environ: + cpu_count = os.environ['SLURM_NTASKS'] + + num_workers = cpu_count - 1 + + print('Using {} workers from {} CPUs...'.format(num_workers, cpu_count)) + with dask.config.set(num_workers=num_workers): + bag = db.from_sequence(fpaths).map(func) + cubes = iris.cube.CubeList(bag.compute()) + +This achieves a significant performance improvement - more than twice as +fast as the previous benchmarks: + ++---------------+-----------------------+---------------+---------------+-----------+ +| Machine | CPUs Available | CPUs Used | Previous Time | New Time | ++===============+=======================+===============+===============+===========+ +| Example | 8 | 7 | 2m 35s | 1m 05s | +| | +---------------+---------------+-----------+ +| | | 8 | 2m 20s | 1m 03s | ++---------------+-----------------------+---------------+---------------+-----------+ + +3.5 Managing External Factors +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The speed will still need to be further improved before we can process 7000 +files. The main gains we can achieve are by making sure it is **only Dask** +that manages multi-processing - if multi-processing is coming from more +than one place there are predictable clashes. + +First, NumPy must be prevented from performing it's own multi-processing by +adding the following **before** ``import numpy`` is called. You can read more +about this in :ref:`numpy_threads`. + +:: + + import os + + os.environ["OMP_NUM_THREADS"] = "1" + os.environ["OPENBLAS_NUM_THREADS"] = "1" + os.environ["MKL_NUM_THREADS"] = "1" + os.environ["VECLIB_MAXIMUM_THREADS"] = "1" + os.environ["NUMEXPR_NUM_THREADS"] = "1" + +Lastly, if you are using SLURM on the computing cluster then SLURM must be configured to prevent it +optimising the number of cores necessary for the job. See the SLURM commands +below, to be added before running the python script. It's important that +``ntasks`` matches the number of CPUs specified in the python script. You +can read more about these points in :ref:`multi-pro_slurm`. + +:: + + #SBATCH --ntasks=12 + #SBATCH --ntasks-per-core=1 + +This has all been based on a real example. Once all the above had been set +up correctly, the completion time had dropped from an estimated **55 days** +to **less than 1 day**. + +3.6 Lessons +^^^^^^^^^^^ +* Dask isn't a magic switch - it's important to write your script so that + there is a way to create small sub-tasks. In this case by providing + dask.bag with the file list and the function separated +* Parallelism is not the only performance improvement to try - the script + will still be slow if the individual function is slow +* All multi-processing needs to be managed by Dask. Several other factors + may introduce multi-processing and these need to be configured not to diff --git a/docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst b/docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst new file mode 100644 index 0000000000..836503314c --- /dev/null +++ b/docs/src/further_topics/dask_best_practices/dask_parallel_loop.rst @@ -0,0 +1,169 @@ +.. _examples_parallel_loop: + +2. Parallelising a Loop of Multiple Calls to a Third Party Library +------------------------------------------------------------------ + +Whilst Iris does provide extensive functionality for performing statistical and +mathematical operations on your data, it is sometimes necessary to use a third +party library. + +The following example describes a real world use case of how to parallelise +multiple calls to a third party library using dask bags. + +2.1 The Problem - Parallelising a Loop +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +In this particular example, the user is calculating a sounding parcel for each +column in their dataset. The cubes that are used are of shape:: + + (model_level_number: 20; grid_latitude: 1536; grid_longitude: 1536) + +As a sounding is calculated for each column, this means there are 1536x1536 +individual calculations. + +In Python, it is common practice to vectorize the calculation of for loops. +Vectorising is done by using NumPy to operate on the whole array at once rather +than a single element at a time. Unfortunately, not all operations are +vectorisable, including the calculation in this example, and so we look to +other methods to improve the performance. + +2.2 Original Code with Loop +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +We start out by loading cubes of pressure, temperature, dewpoint temperature and height:: + + import iris + import numpy as np + from skewt import SkewT as sk + + pressure = iris.load_cube('a.press.19981109.pp') + temperature = iris.load_cube('a.temp.19981109.pp') + dewpoint = iris.load_cube('a.dewp.19981109.pp') + height = iris.load_cube('a.height.19981109.pp') + +We set up the NumPy arrays we will be filling with the output data:: + + output_arrays = [np.zeros(pressure.shape[0]) for _ in range(6)] + cape, cin, lcl, lfc, el, tpw = output_data + +Now we loop over the columns in the data to calculate the soundings:: + + for y in range(nlim): + for x in range(nlim): + mydata = {'pres': pressure[:, y, x], + 'temp': temperature[:, y, x], + 'dwpt': dewpoint[:, y, x], + 'hght': height[:, y, x]} + + # Calculate the sounding with the selected column of data. + S = sk.Sounding(soundingdata=mydata) + try: + startp, startt, startdp, type_ = S.get_parcel(parcel_def) + P_lcl, P_lfc, P_el, CAPE, CIN = S.get_cape( + startp, startt, startdp, totalcape='tot') + TPW = S.precipitable_water() + except: + P_lcl, P_lfc, P_el, CAPE, CIN, TPW = [ + np.ma.masked for _ in range(6)] + + # Fill the output arrays with the results + cape[y,x] = CAPE + cin[y,x] = CIN + lcl[y,x] = P_lcl + lfc[y,x] = P_lfc + el[y,x] = P_el + tpw[y,x] = TPW + +2.3 Profiling the Code with Kapture +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Kapture is a useful statistical profiler. For more information see `the +Kapture repo `_. + +Results below: + +.. image:: images/loop_third_party_kapture_results.png + :width: 1000 + :align: center + +As we can see above, (looking at the highlighted section of the red bar) it spends most of the time in the call to :: + + S.get_parcel(parcel_def) + +As there are over two million columns in the data, we would greatly benefit +from parallelising this work. + +2.4 Parallelising with Dask Bags +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Dask bags are collections of Python objects that you can map a computation over +in a parallel manner. + +For more information about dask bags, see the `Dask Bag Documentation +`_. + +Dask bags work best with lightweight objects, so we will create a collection of +indices into our data arrays. + +First, we put the loop into a function that takes a slice object to index the +appropriate section of the array.:: + + def calculate_sounding(y_slice): + for y in range(y_slice.stop-y_slice.start): + for x in range(nlim): + mydata = {'pres': pressure[:, y_slice][:, y, x], + 'temp': temperature[:, y_slice][:, y, x], + 'dwpt': dewpoint[:, y_slice][:, y, x], + 'hght': height[:, y_slice][:, y, x]} + + # Calculate the sounding with the selected column of data. + S = sk.Sounding(soundingdata=mydata) + try: + startp, startt, startdp, type_ = S.get_parcel(parcel_def) + P_lcl, P_lfc, P_el, CAPE, CIN = S.get_cape( + startp, startt, startdp, totalcape=total_cape) + TPW = S.precipitable_water() + except: + P_lcl, P_lfc, P_el, CAPE, CIN, TPW = [ + np.ma.masked for _ in range(6)] + + # Fill the output arrays with the results + cape[:, y_slice][y,x] = CAPE + cin[:, y_slice][y,x] = CIN + lcl[:, y_slice][y,x] = P_lcl + lfc[:, y_slice][y,x] = P_lfc + el[:, y_slice][y,x] = P_el + tpw[:, y_slice][y,x] = TPW + +Then we create a dask bag of slice objects that will create multiple partitions +along the y axis.:: + + num_of_workers = 4 + len_of_y_axis = pressure.shape[1] + + part_loc = [int(loc) for loc in np.floor(np.linspace(0, len_of_y_axis, + num_of_workers + 1))] + + dask_bag = db.from_sequence( + [slice(part_loc[i], part_loc[i+1]) for i in range(num_of_workers)]) + + with dask.config.set(scheduler='processes'): + dask_bag.map(calculate_sounding).compute() + +When this was run on a machine with 4 workers, a speedup of ~4x was achieved, +as expected. + +Note that if using the processes scheduler this is some extra time spent +serialising the data to pass it between workers. For more information on the +different schedulers available in Dask, see `Dask Scheduler Overview +`_. + +For more speed up, it is possible to run the same code on a multi-processing +system where you will have access to more CPUs. + +In this particular example, we are handling multiple numpy arrays and so we use +dask bags. If working with a single numpy array, it may be more appropriate to +use Dask Arrays (see `Dask Arrays +`_ for more information). + + +2.5 Lessons +^^^^^^^^^^^ +* If possible, dask bags should contain lightweight objects +* Minimise the number of tasks that are created diff --git a/docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst b/docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst new file mode 100644 index 0000000000..28784154b4 --- /dev/null +++ b/docs/src/further_topics/dask_best_practices/dask_pp_to_netcdf.rst @@ -0,0 +1,92 @@ +.. _examples_pp_to_ff: + +1. Speed up Converting PP Files to NetCDF +----------------------------------------- + +Here is an example of how dask objects can be tuned for better performance. + +1.1 The Problem - Slow Saving +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +We have ~300 PP files which we load as follows: + +.. code-block:: python + + import iris + import glob + + files = glob.glob("pp_files/*.pp") + cube = iris.load_cube(files, "mass_fraction_of_ozone_in_air") + +Note that loading here may also be parallelised in a similar manner as +described in :ref:`examples_bags_greed`. Either way, the resulting cube looks +as follows: + +.. code-block:: text + + mass_fraction_of_ozone_in_air / (kg kg-1) (time: 276; model_level_number: 85; latitude: 144; longitude: 192) + Dimension coordinates: + time x - - - + model_level_number - x - - + latitude - - x - + longitude - - - x + Auxiliary coordinates: + forecast_period x - - - + level_height - x - - + sigma - x - - + Scalar coordinates: + forecast_reference_time: 1850-01-01 00:00:00 + Attributes: + STASH: m01s34i001 + source: Data from Met Office Unified Model + um_version: 10.9 + Cell methods: + mean: time (1 hour) + +The cube is then immediately saved as a netCDF file. + +.. code-block:: python + + nc_chunks = [chunk[0] for chunk in cube.lazy_data().chunks] + iris.save(cube, "outfile.nc", nc_chunks) + +This operation was taking longer than expected and we would like to improve +performance. Note that when this cube is being saved, the data is still lazy, +data is both read and written at the saving step and is done so in chunks. +The way this data is divided into chunks can affect performance. By tweaking +the way these chunks are structured it may be possible to improve performance +when saving. + + +.. _dask_rechunking: + +1.2 Rechunking +^^^^^^^^^^^^^^ +We may inspect the cube's lazy data before saving: + +.. code-block:: python + + # We can access the cubes Dask array + lazy_data = cube.lazy_data() + # We can find the shape of the chunks + # Note that the chunksize of a Dask array is the shape of the chunk + # as a tuple. + print(lazy_data.chunksize) + +Doing so, we find that the chunks currently have the shape:: + +(1, 1, 144, 192) + +This is significantly smaller than the `size which Dask recommends +`_. Bear in mind that the +ideal chunk size depends on the platform you are running on (for this example, +the code is being run on a desktop with 8 CPUs). In this case, we have 23460 +small chunks. We can reduce the number of chunks by rechunking before saving: + +.. code-block:: python + + lazy_data = cube.lazy_data() + lazy_data = lazy_data.rechunk(1, 85, 144, 192) + cube.data = lazy_data + +We now have 276 moderately sized chunks. When we try saving again, we find +that it is approximately 4 times faster, saving in 2m13s rather than 10m33s. diff --git a/docs/src/further_topics/dask_best_practices/images/grib-bottleneck.png b/docs/src/further_topics/dask_best_practices/images/grib-bottleneck.png new file mode 100644 index 0000000000000000000000000000000000000000..c029d57e5e4eff5f182398452cb6ea00ed700d9d GIT binary patch literal 63951 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 GxBmg|n>}Fw literal 0 HcmV?d00001 diff --git a/docs/src/further_topics/dask_best_practices/images/loop_third_party_kapture_results.png b/docs/src/further_topics/dask_best_practices/images/loop_third_party_kapture_results.png new file mode 100644 index 0000000000000000000000000000000000000000..8f388bb89caa781f5457e90d250bad4bdfcf917d GIT binary patch literal 84484 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%0AO+wrS-X33xw0$uZqSW1i!tO$QGb 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

r1 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. + + +Introduction +============ + +`Dask `_ is a powerful tool for speeding up data handling +via lazy loading and parallel processing. To get the full benefit of using +Dask, it is important to configure it correctly and supply it with +appropriately structured data. For example, we may need to "chunk" data arrays +into smaller pieces to process, read and write it; getting the "chunking" right +can make a significant different to performance! + + +.. _numpy_threads: + +NumPy Threads +============= + +In certain scenarios NumPy will attempt to perform threading using an +external library - typically OMP, MKL or openBLAS - making use of **every** +CPU available. This interacts badly with Dask: + +* Dask may create multiple instances of NumPy, each generating enough + threads to use **all** the available CPUs. The resulting sharing of CPUs + between threads greatly reduces performance. The more cores there are, the + more pronounced this problem is. +* NumPy will generate enough threads to use all available CPUs even + if Dask is deliberately configured to only use a subset of CPUs. The + resulting sharing of CPUs between threads greatly reduces performance. +* `Dask is already designed to parallelise with NumPy arrays `_, so adding NumPy's 'competing' layer of + parallelisation could cause unpredictable performance. + +Therefore it is best to prevent NumPy performing its own parallelisation, `a +suggestion made in Dask's own documentation `_. +The following commands will ensure this in all scenarios: + +in Python... + +:: + + # Must be run before importing NumPy. + import os + os.environ["OMP_NUM_THREADS"] = "1" + os.environ["OPENBLAS_NUM_THREADS"] = "1" + os.environ["MKL_NUM_THREADS"] = "1" + os.environ["VECLIB_MAXIMUM_THREADS"] = "1" + os.environ["NUMEXPR_NUM_THREADS"] = "1" + +or in Linux command line... + +:: + + export OMP_NUM_THREADS=1 + export OPENBLAS_NUM_THREADS=1 + export MKL_NUM_THREADS=1 + export VECLIB_MAXIMUM_THREADS=1 + export NUMEXPR_NUM_THREADS=1 + + +.. _multi-pro_systems: + +Dask on Computing Clusters +========================== + +Dask is well suited for use on computing clusters, but there are some important factors you must be +aware of. In particular, you will always need to explicitly control parallel +operation, both in Dask and likewise in NumPy. + + +.. _multi-pro_slurm: + +CPU Allocation +-------------- + +When running on a computing cluster, unless configured otherwise, Dask will attempt to create +one parallel 'worker' task for each CPU. However, when using a job scheduler such as Slurm, only *some* of +these CPUs are actually accessible -- often, and by default, only one. This leads to a serious +over-commitment unless it is controlled. + +So, **whenever Iris is used on a computing cluster, you must always control the number +of dask workers to a sensible value**, matching the slurm allocation. You do +this with:: + + dask.config.set(num_workers=N) + +For an example, see :doc:`dask_bags_and_greed`. + +Alternatively, when there is only one CPU allocated, it may actually be more +efficient to use a "synchronous" scheduler instead, with:: + + dask.config.set(scheduler='synchronous') + +See the Dask documentation on `Single thread synchronous scheduler +`_. + + +.. _multi-pro_numpy: + +NumPy Threading +--------------- + +NumPy also interrogates the visible number of CPUs to multi-thread its operations. +The large number of CPUs available in a computing cluster will thus cause confusion if NumPy +attempts its own parallelisation, so this must be prevented. Refer back to +:ref:`numpy_threads` for more detail. + + +Distributed +----------- + +Even though allocations on a computing cluster are generally restricted to a single node, there +are still good reasons for using 'dask.distributed' in many cases. See `Single Machine: dask.distributed +`_ in the Dask documentation. + + +Chunking +======== + +Dask breaks down large data arrays into chunks, allowing efficient +parallelisation by processing several smaller chunks simultaneously. For more +information, see the documentation on +`Dask Array `_. + +Iris provides a basic chunking shape to Dask, attempting to set the shape for +best performance. The chunking that is used can depend on the file format that +is being loaded. See below for how chunking is performed for: + + * :ref:`chunking_netcdf` + * :ref:`chunking_pp_ff` + +It can in some cases be beneficial to re-chunk the arrays in Iris cubes. +For information on how to do this, see :ref:`dask_rechunking`. + + +.. _chunking_netcdf: + +NetCDF Files +------------ + +NetCDF files can include their own chunking specification. This is either +specified when creating the file, or is automatically assigned if one or +more of the dimensions is `unlimited `_. +Importantly, netCDF chunk shapes are **not optimised for Dask +performance**. + +Chunking can be set independently for any variable in a netCDF file. +When a netCDF variable uses an unlimited dimension, it is automatically +chunked: the chunking is the shape of the whole variable, but with '1' instead +of the length in any unlimited dimensions. + +When chunking is specified for netCDF data, Iris will set the dask chunking +to an integer multiple or fraction of that shape, such that the data size is +near to but not exceeding the dask array chunk size. + + +.. _chunking_pp_ff: + +PP and Fieldsfiles +------------------ + +PP and Fieldsfiles contain multiple 2D fields of data. When loading PP or +Fieldsfiles into Iris cubes, the chunking will automatically be set to a chunk +per field. + +For example, if a PP file contains 2D lat-lon fields for each of the +85 model level numbers, it will load in a cube that looks as follows:: + + (model_level_number: 85; latitude: 144; longitude: 192) + +The data in this cube will be partitioned with chunks of shape +:code:`(1, 144, 192)`. + +If the file(s) being loaded contain multiple fields, this can lead to an +excessive amount of chunks which will result in poor performance. + +When the default chunking is not appropriate, it is possible to rechunk. +:doc:`dask_pp_to_netcdf` provides a detailed demonstration of how Dask can optimise +that process. + + +Examples +======== + +We have written some examples of use cases for using Dask, that come with advice and +explanations for why and how the tasks are performed the way they are. + +If you feel you have an example of a Dask best practice that you think may be helpful to others, +please share them with us by raising a new `discussion on the Iris repository `_. + + * :doc:`dask_pp_to_netcdf` + * :doc:`dask_parallel_loop` + * :doc:`dask_bags_and_greed` + +.. toctree:: + :hidden: + :maxdepth: 1 + + dask_pp_to_netcdf + dask_parallel_loop + dask_bags_and_greed diff --git a/docs/src/userguide/index.rst b/docs/src/userguide/index.rst index fdd0c4d03e..771aa450a3 100644 --- a/docs/src/userguide/index.rst +++ b/docs/src/userguide/index.rst @@ -45,4 +45,5 @@ they may serve as a useful reference for future exploration. ../further_topics/metadata ../further_topics/lenient_metadata ../further_topics/lenient_maths + ../further_topics/dask_best_practices/index ../further_topics/ugrid/index diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 0e2896b7a1..9b62715be6 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -71,6 +71,10 @@ This document explains the changes made to Iris for this release to use it. By default the theme will be based on the users system settings, defaulting to ``light`` if no system setting is found. (:pull:`5299`) +#. `@HGWright`_ added a :doc:`/further_topics/dask_best_practices/index` + section into the user guide, containing advice and use cases to help users + get the best out of Dask with Iris. + 💼 Internal =========== From 43ce78a13ffb73feed990616c1953a30b5b824c8 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Thu, 15 Jun 2023 11:54:43 +0100 Subject: [PATCH 03/82] docs linkcheck ignore biggus rtd url (#5351) --- docs/src/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/conf.py b/docs/src/conf.py index b7f87d4ebc..a204263a24 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -383,6 +383,7 @@ def _dotv(version): "http://www.esrl.noaa.gov/psd/data/gridded/conventions/cdc_netcdf_standard.shtml", "http://www.nationalarchives.gov.uk/doc/open-government-licence", "https://www.metoffice.gov.uk/", + "https://biggus.readthedocs.io/", ] # list of sources to exclude from the build. From 13b2a7466c71121bf5d3261f3ddf9803b46ca694 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Jun 2023 12:22:55 +0100 Subject: [PATCH 04/82] Bump scitools/workflows from 2023.05.0 to 2023.06.0 (#5350) Bumps [scitools/workflows](https://github.com/scitools/workflows) from 2023.05.0 to 2023.06.0. - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](https://github.com/scitools/workflows/compare/2023.05.0...2023.06.0) --- updated-dependencies: - dependency-name: scitools/workflows dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-manifest.yml | 2 +- .github/workflows/refresh-lockfiles.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-manifest.yml b/.github/workflows/ci-manifest.yml index dd017fd84b..c42eb90104 100644 --- a/.github/workflows/ci-manifest.yml +++ b/.github/workflows/ci-manifest.yml @@ -23,4 +23,4 @@ concurrency: jobs: manifest: name: "check-manifest" - uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.05.0 + uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.06.0 diff --git a/.github/workflows/refresh-lockfiles.yml b/.github/workflows/refresh-lockfiles.yml index 4068d68ed8..453014fa2a 100644 --- a/.github/workflows/refresh-lockfiles.yml +++ b/.github/workflows/refresh-lockfiles.yml @@ -14,5 +14,5 @@ on: jobs: refresh_lockfiles: - uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.05.0 + uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.06.0 secrets: inherit From eaa7ee40eae350dff82528555e350ea6d964879e Mon Sep 17 00:00:00 2001 From: stephenworsley <49274989+stephenworsley@users.noreply.github.com> Date: Thu, 15 Jun 2023 14:30:48 +0100 Subject: [PATCH 05/82] Fix #5347 (#5349) * fix unit multiplication bug * docs linkcheck ignore biggus rtd url (#5351) * add patch whatsnew --------- Co-authored-by: Bill Little --- docs/src/conf.py | 1 + docs/src/whatsnew/3.6.rst | 20 +++++++++++++++++++- lib/iris/cube.py | 3 ++- lib/iris/tests/unit/cube/test_Cube.py | 10 ++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/docs/src/conf.py b/docs/src/conf.py index 312925b4ea..94106b952f 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -382,6 +382,7 @@ def _dotv(version): "http://www.esrl.noaa.gov/psd/data/gridded/conventions/cdc_netcdf_standard.shtml", "http://www.nationalarchives.gov.uk/doc/open-government-licence", "https://www.metoffice.gov.uk/", + "https://biggus.readthedocs.io/", ] # list of sources to exclude from the build. diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index 151c63ef51..543ce7372e 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -55,6 +55,23 @@ This document explains the changes made to Iris for this release or feature requests for improving Iris. Enjoy! +|iris_version| |build_date| +=========================== + +.. dropdown:: |iris_version| Patches + :color: primary + :icon: alert + :animate: fade-in + + The patches in this release of Iris include: + + 🐛 **Bugs Fixed** + + #. `@stephenworsley`_ fixed :meth:`~iris.cube.Cube.convert_units` to allow unit + conversion of lazy data when using a `Distributed`_ scheduler. + (:issue:`5347`, :pull:`5349`) + + 📢 Announcements ================ @@ -180,4 +197,5 @@ This document explains the changes made to Iris for this release .. _PEP-0621: https://peps.python.org/pep-0621/ .. _pypa/build: https://pypa-build.readthedocs.io/en/stable/ .. _NEP29: https://numpy.org/neps/nep-0029-deprecation_policy.html -.. _Contributor Covenant: https://www.contributor-covenant.org/version/2/1/code_of_conduct/ \ No newline at end of file +.. _Contributor Covenant: https://www.contributor-covenant.org/version/2/1/code_of_conduct/ +.. _Distributed: https://distributed.dask.org/en/stable/ diff --git a/lib/iris/cube.py b/lib/iris/cube.py index 7c6fd55c10..44a40cf72b 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -19,6 +19,7 @@ from xml.dom.minidom import Document import zlib +from cf_units import Unit import dask.array as da import numpy as np import numpy.ma as ma @@ -1144,7 +1145,7 @@ def convert_units(self, unit): ) if self.has_lazy_data(): # Make fixed copies of old + new units for a delayed conversion. - old_unit = self.units + old_unit = Unit(self.units) new_unit = unit pointwise_convert = partial(old_unit.convert, other=new_unit) diff --git a/lib/iris/tests/unit/cube/test_Cube.py b/lib/iris/tests/unit/cube/test_Cube.py index aa9e3b51b1..28fbe429c1 100644 --- a/lib/iris/tests/unit/cube/test_Cube.py +++ b/lib/iris/tests/unit/cube/test_Cube.py @@ -14,6 +14,8 @@ from unittest import mock from cf_units import Unit +import dask.array as da +from distributed import Client import numpy as np import numpy.ma as ma import pytest @@ -3012,6 +3014,14 @@ def test_preserves_lazy(self): self.assertTrue(cube.has_lazy_data()) self.assertArrayAllClose(cube.data, real_data_ft) + def test_unit_multiply(self): + _client = Client() + cube = iris.cube.Cube(da.arange(1), units="m") + cube.units *= "s-1" + cube.convert_units("m s-1") + cube.data + _client.close() + class Test__eq__data(tests.IrisTest): """Partial cube equality testing, for data type only.""" From 438f292e14119649b1fdab39b436efb9f18a19c0 Mon Sep 17 00:00:00 2001 From: sloosvel <45196700+sloosvel@users.noreply.github.com> Date: Thu, 15 Jun 2023 18:34:14 +0200 Subject: [PATCH 06/82] Avoid realising auxiliary coordinates in `concatenate` (#5142) * Use core_points instead of points * Remove unused import * Use core_bounds * Correct test * Remove unused import * Correct test * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- lib/iris/_concatenate.py | 75 +++++++++++++------ lib/iris/tests/test_concatenate.py | 25 +++++++ .../unit/concatenate/test_concatenate.py | 25 ++++++- 3 files changed, 102 insertions(+), 23 deletions(-) diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index 01a1bb689b..10a31eafc1 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -101,19 +101,23 @@ def __new__(mcs, coord, dims): """ defn = coord.metadata - points_dtype = coord.points.dtype - bounds_dtype = coord.bounds.dtype if coord.bounds is not None else None + points_dtype = coord.core_points().dtype + bounds_dtype = ( + coord.core_bounds().dtype + if coord.core_bounds() is not None + else None + ) kwargs = {} # Add scalar flag metadata. - kwargs["scalar"] = coord.points.size == 1 + kwargs["scalar"] = coord.core_points().size == 1 # Add circular flag metadata for dimensional coordinates. if hasattr(coord, "circular"): kwargs["circular"] = coord.circular if isinstance(coord, iris.coords.DimCoord): # Mix the monotonic ordering into the metadata. - if coord.points[0] == coord.points[-1]: + if coord.core_points()[0] == coord.core_points()[-1]: order = _CONSTANT - elif coord.points[-1] > coord.points[0]: + elif coord.core_points()[-1] > coord.core_points()[0]: order = _INCREASING else: order = _DECREASING @@ -700,18 +704,27 @@ def _cmp(coord, other): """ # A candidate axis must have non-identical coordinate points. - candidate_axis = not array_equal(coord.points, other.points) + candidate_axis = not array_equal( + coord.core_points(), other.core_points() + ) if candidate_axis: # Ensure both have equal availability of bounds. - result = (coord.bounds is None) == (other.bounds is None) + result = (coord.core_bounds() is None) == ( + other.core_bounds() is None + ) else: - if coord.bounds is not None and other.bounds is not None: + if ( + coord.core_bounds() is not None + and other.core_bounds() is not None + ): # Ensure equality of bounds. - result = array_equal(coord.bounds, other.bounds) + result = array_equal(coord.core_bounds(), other.core_bounds()) else: # Ensure both have equal availability of bounds. - result = coord.bounds is None and other.bounds is None + result = ( + coord.core_bounds() is None and other.core_bounds() is None + ) return result, candidate_axis @@ -762,21 +775,37 @@ def _calculate_extents(self): self.dim_extents = [] for coord, order in zip(self.dim_coords, self.dim_order): if order == _CONSTANT or order == _INCREASING: - points = _Extent(coord.points[0], coord.points[-1]) - if coord.bounds is not None: + points = _Extent( + coord.core_points()[0], coord.core_points()[-1] + ) + if coord.core_bounds() is not None: bounds = ( - _Extent(coord.bounds[0, 0], coord.bounds[-1, 0]), - _Extent(coord.bounds[0, 1], coord.bounds[-1, 1]), + _Extent( + coord.core_bounds()[0, 0], + coord.core_bounds()[-1, 0], + ), + _Extent( + coord.core_bounds()[0, 1], + coord.core_bounds()[-1, 1], + ), ) else: bounds = None else: # The order must be decreasing ... - points = _Extent(coord.points[-1], coord.points[0]) - if coord.bounds is not None: + points = _Extent( + coord.core_points()[-1], coord.core_points()[0] + ) + if coord.core_bounds() is not None: bounds = ( - _Extent(coord.bounds[-1, 0], coord.bounds[0, 0]), - _Extent(coord.bounds[-1, 1], coord.bounds[0, 1]), + _Extent( + coord.core_bounds()[-1, 0], + coord.core_bounds()[0, 0], + ), + _Extent( + coord.core_bounds()[-1, 1], + coord.core_bounds()[0, 1], + ), ) else: bounds = None @@ -1095,7 +1124,7 @@ def _build_aux_coordinates(self): # Concatenate the points together. dim = dims.index(self.axis) points = [ - skton.signature.aux_coords_and_dims[i].coord.points + skton.signature.aux_coords_and_dims[i].coord.core_points() for skton in skeletons ] points = np.concatenate(tuple(points), axis=dim) @@ -1104,7 +1133,9 @@ def _build_aux_coordinates(self): bnds = None if coord.has_bounds(): bnds = [ - skton.signature.aux_coords_and_dims[i].coord.bounds + skton.signature.aux_coords_and_dims[ + i + ].coord.core_bounds() for skton in skeletons ] bnds = np.concatenate(tuple(bnds), axis=dim) @@ -1307,7 +1338,7 @@ def _build_dim_coordinates(self): # Concatenate the points together for the nominated dimension. points = [ - skeleton.signature.dim_coords[dim_ind].points + skeleton.signature.dim_coords[dim_ind].core_points() for skeleton in skeletons ] points = np.concatenate(tuple(points)) @@ -1316,7 +1347,7 @@ def _build_dim_coordinates(self): bounds = None if self._cube_signature.dim_coords[dim_ind].has_bounds(): bounds = [ - skeleton.signature.dim_coords[dim_ind].bounds + skeleton.signature.dim_coords[dim_ind].core_bounds() for skeleton in skeletons ] bounds = np.concatenate(tuple(bounds)) diff --git a/lib/iris/tests/test_concatenate.py b/lib/iris/tests/test_concatenate.py index e4c22f49b0..7cb11189d6 100644 --- a/lib/iris/tests/test_concatenate.py +++ b/lib/iris/tests/test_concatenate.py @@ -12,6 +12,7 @@ # before importing anything else. import iris.tests as tests # isort:skip +import dask.array as da import numpy as np import numpy.ma as ma @@ -800,6 +801,30 @@ def test_concat_2y2d_derived_x_y_xy(self): self.assertEqual(result[0].shape, (6, 2)) self.assertEqual(result[0], com) + def test_concat_lazy_aux_coords(self): + cubes = [] + y = (0, 2) + cube = _make_cube((2, 4), y, 2, aux="xy") + cubes.append(cube) + cubes.append(_make_cube((0, 2), y, 1, aux="xy")) + for cube in cubes: + cube.data = cube.lazy_data() + cube.coord("xy-aux").points = cube.coord("xy-aux").lazy_points() + bounds = da.arange( + 4 * cube.coord("xy-aux").core_points().size + ).reshape(cube.shape + (4,)) + cube.coord("xy-aux").bounds = bounds + result = concatenate(cubes) + + self.assertTrue(cubes[0].coord("xy-aux").has_lazy_points()) + self.assertTrue(cubes[0].coord("xy-aux").has_lazy_bounds()) + + self.assertTrue(cubes[1].coord("xy-aux").has_lazy_points()) + self.assertTrue(cubes[1].coord("xy-aux").has_lazy_bounds()) + + self.assertTrue(result[0].coord("xy-aux").has_lazy_points()) + self.assertTrue(result[0].coord("xy-aux").has_lazy_bounds()) + class TestMulti2D(tests.IrisTest): def test_concat_4x2d_aux_xy(self): diff --git a/lib/iris/tests/unit/concatenate/test_concatenate.py b/lib/iris/tests/unit/concatenate/test_concatenate.py index a4243dfbbc..bb3770cf0f 100644 --- a/lib/iris/tests/unit/concatenate/test_concatenate.py +++ b/lib/iris/tests/unit/concatenate/test_concatenate.py @@ -355,7 +355,7 @@ def test_desc_bounds_all_singleton(self): class TestConcatenate__dask(tests.IrisTest): - def build_lazy_cube(self, points, bounds=None, nx=4): + def build_lazy_cube(self, points, bounds=None, nx=4, aux_coords=False): data = np.arange(len(points) * nx).reshape(len(points), nx) data = as_lazy_data(data) cube = iris.cube.Cube(data, standard_name="air_temperature", units="K") @@ -363,6 +363,15 @@ def build_lazy_cube(self, points, bounds=None, nx=4): lon = iris.coords.DimCoord(np.arange(nx), "longitude") cube.add_dim_coord(lat, 0) cube.add_dim_coord(lon, 1) + if aux_coords: + bounds = np.arange(len(points) * nx * 4).reshape( + len(points), nx, 4 + ) + bounds = as_lazy_data(bounds) + aux_coord = iris.coords.AuxCoord( + data, var_name="aux_coord", bounds=bounds + ) + cube.add_aux_coord(aux_coord, (0, 1)) return cube def test_lazy_concatenate(self): @@ -372,6 +381,20 @@ def test_lazy_concatenate(self): self.assertTrue(cube.has_lazy_data()) self.assertFalse(ma.isMaskedArray(cube.data)) + def test_lazy_concatenate_aux_coords(self): + c1 = self.build_lazy_cube([1, 2], aux_coords=True) + c2 = self.build_lazy_cube([3, 4, 5], aux_coords=True) + (result,) = concatenate([c1, c2]) + + self.assertTrue(c1.coord("aux_coord").has_lazy_points()) + self.assertTrue(c1.coord("aux_coord").has_lazy_bounds()) + + self.assertTrue(c2.coord("aux_coord").has_lazy_points()) + self.assertTrue(c2.coord("aux_coord").has_lazy_bounds()) + + self.assertTrue(result.coord("aux_coord").has_lazy_points()) + self.assertTrue(result.coord("aux_coord").has_lazy_bounds()) + def test_lazy_concatenate_masked_array_mixed_deferred(self): c1 = self.build_lazy_cube([1, 2]) c2 = self.build_lazy_cube([3, 4, 5]) From 99fa8cebda439a1c900627206e7977d536b5358e Mon Sep 17 00:00:00 2001 From: Manuel Schlund <32543114+schlunma@users.noreply.github.com> Date: Fri, 16 Jun 2023 11:18:56 +0200 Subject: [PATCH 07/82] Fix concatenation of cubes with aux factories (#5340) * Fix concatenation of cubes with aux factories * Added What's new entry * Added comment why all aux factories need to be updated during concatenation --- docs/src/whatsnew/3.6.rst | 5 + lib/iris/_concatenate.py | 95 ++++++++++++------- .../concatenate/test_concatenate.py | 11 +++ 3 files changed, 79 insertions(+), 32 deletions(-) diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index 543ce7372e..61bf75f15c 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -71,6 +71,11 @@ This document explains the changes made to Iris for this release conversion of lazy data when using a `Distributed`_ scheduler. (:issue:`5347`, :pull:`5349`) + #. `@schlunma`_ fixed a bug in the concatenation of cubes with aux factories + which could lead to a `KeyError` due to dependencies that have not been + properly updated. + (:issue:`5339`, :pull:`5340`) + 📢 Announcements ================ diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index 10a31eafc1..d98e63da5a 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -880,9 +880,13 @@ def concatenate(self): # Concatenate the new dimension coordinate. dim_coords_and_dims = self._build_dim_coordinates() - # Concatenate the new auxiliary coordinates. + # Concatenate the new auxiliary coordinates (does NOT include + # scalar coordinates!). aux_coords_and_dims = self._build_aux_coordinates() + # Concatenate the new scalar coordinates. + scalar_coords = self._build_scalar_coordinates() + # Concatenate the new cell measures cell_measures_and_dims = self._build_cell_measures() @@ -891,18 +895,21 @@ def concatenate(self): # Concatenate the new aux factories aux_factories = self._build_aux_factories( - dim_coords_and_dims, aux_coords_and_dims + dim_coords_and_dims, aux_coords_and_dims, scalar_coords ) # Concatenate the new data payload. data = self._build_data() # Build the new cube. + all_aux_coords_and_dims = aux_coords_and_dims + [ + (scalar_coord, ()) for scalar_coord in scalar_coords + ] kwargs = cube_signature.defn._asdict() cube = iris.cube.Cube( data, dim_coords_and_dims=dim_coords_and_dims, - aux_coords_and_dims=aux_coords_and_dims, + aux_coords_and_dims=all_aux_coords_and_dims, cell_measures_and_dims=cell_measures_and_dims, ancillary_variables_and_dims=ancillary_variables_and_dims, aux_factories=aux_factories, @@ -1163,12 +1170,22 @@ def _build_aux_coordinates(self): aux_coords_and_dims.append((coord.copy(), dims)) - # Generate all the scalar coordinates for the new concatenated cube. - for coord in cube_signature.scalar_coords: - aux_coords_and_dims.append((coord.copy(), ())) - return aux_coords_and_dims + def _build_scalar_coordinates(self): + """ + Generate the scalar coordinates for the new concatenated cube. + + Returns: + A list of scalar coordinates. + + """ + scalar_coords = [] + for coord in self._cube_signature.scalar_coords: + scalar_coords.append(coord.copy()) + + return scalar_coords + def _build_cell_measures(self): """ Generate the cell measures with associated dimension(s) @@ -1247,7 +1264,9 @@ def _build_ancillary_variables(self): return ancillary_variables_and_dims - def _build_aux_factories(self, dim_coords_and_dims, aux_coords_and_dims): + def _build_aux_factories( + self, dim_coords_and_dims, aux_coords_and_dims, scalar_coords + ): """ Generate the aux factories for the new concatenated cube. @@ -1261,6 +1280,9 @@ def _build_aux_factories(self, dim_coords_and_dims, aux_coords_and_dims): A list of auxiliary coordinates and dimension(s) tuple pairs from the concatenated cube. + * scalar_coords: + A list of scalar coordinates from the concatenated cube. + Returns: A list of :class:`iris.aux_factory.AuxCoordFactory`. @@ -1271,35 +1293,44 @@ def _build_aux_factories(self, dim_coords_and_dims, aux_coords_and_dims): old_aux_coords = [a[0] for a in cube_signature.aux_coords_and_dims] new_dim_coords = [d[0] for d in dim_coords_and_dims] new_aux_coords = [a[0] for a in aux_coords_and_dims] - scalar_coords = cube_signature.scalar_coords + old_scalar_coords = cube_signature.scalar_coords + new_scalar_coords = scalar_coords aux_factories = [] # Generate all the factories for the new concatenated cube. - for i, (coord, dims, factory) in enumerate( - cube_signature.derived_coords_and_dims - ): - # Check whether the derived coordinate of the factory spans the - # nominated dimension of concatenation. - if self.axis in dims: - # Update the dependencies of the factory with coordinates of - # the concatenated cube. We need to check all coordinate types - # here (dim coords, aux coords, and scalar coords). - new_dependencies = {} - for old_dependency in factory.dependencies.values(): - if old_dependency in old_dim_coords: - dep_idx = old_dim_coords.index(old_dependency) - new_dependency = new_dim_coords[dep_idx] - elif old_dependency in old_aux_coords: - dep_idx = old_aux_coords.index(old_dependency) - new_dependency = new_aux_coords[dep_idx] - else: - dep_idx = scalar_coords.index(old_dependency) - new_dependency = scalar_coords[dep_idx] - new_dependencies[id(old_dependency)] = new_dependency + for _, _, factory in cube_signature.derived_coords_and_dims: + # Update the dependencies of the factory with coordinates of + # the concatenated cube. We need to check all coordinate types + # here (dim coords, aux coords, and scalar coords). + + # Note: in contrast to other _build_... methods of this class, we + # do NOT need to distinguish between aux factories that span the + # nominated concatenation axis and aux factories that do not. The + # reason is that ALL aux factories need to be updated with the new + # coordinates of the concatenated cube (passed to this function via + # dim_coords_and_dims, aux_coords_and_dims, scalar_coords [these + # contain ALL new coordinates, not only the ones spanning the + # concatenation dimension]), so no special treatment for the aux + # factories that span the concatenation dimension is necessary. If + # not all aux factories are properly updated with references to the + # new coordinates, this may lead to KeyErrors (see + # https://github.com/SciTools/iris/issues/5339). + new_dependencies = {} + for old_dependency in factory.dependencies.values(): + if old_dependency in old_dim_coords: + dep_idx = old_dim_coords.index(old_dependency) + new_dependency = new_dim_coords[dep_idx] + elif old_dependency in old_aux_coords: + dep_idx = old_aux_coords.index(old_dependency) + new_dependency = new_aux_coords[dep_idx] + else: + dep_idx = old_scalar_coords.index(old_dependency) + new_dependency = new_scalar_coords[dep_idx] + new_dependencies[id(old_dependency)] = new_dependency - # Create new factory with the updated dependencies. - factory = factory.updated(new_dependencies) + # Create new factory with the updated dependencies. + factory = factory.updated(new_dependencies) aux_factories.append(factory) diff --git a/lib/iris/tests/integration/concatenate/test_concatenate.py b/lib/iris/tests/integration/concatenate/test_concatenate.py index 1f39b2589d..2543e2931b 100644 --- a/lib/iris/tests/integration/concatenate/test_concatenate.py +++ b/lib/iris/tests/integration/concatenate/test_concatenate.py @@ -278,6 +278,17 @@ def test_equal_derived_coords(self): [[10.0, 20.0], [10.0, 40.0], [10.0, 20.0], [10.0, 40.0]], ) + # Make sure indexing the resulting cube works correctly + # (see https://github.com/SciTools/iris/issues/5339) + self.assertEqual(result[0][0].shape, (2,)) + + # Make sure ALL aux factory dependencies of the resulting cube were + # properly updated (i.e., they are different from the original cubes). + for aux_factory in result[0].aux_factories: + for coord in aux_factory.dependencies.values(): + self.assertNotEqual(id(coord), id(cube_a.coord(coord.name()))) + self.assertNotEqual(id(coord), id(cube_b.coord(coord.name()))) + def test_equal_derived_coords_with_bounds(self): cube_a = self.create_cube() cube_a.coord("sigma").bounds = [[0.0, 5.0], [5.0, 20.0]] From c710a2edbdca2372d379f4532546e871ce745d26 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Fri, 16 Jun 2023 10:32:13 +0100 Subject: [PATCH 08/82] add whatsnew for #5142 (#5352) Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --- docs/src/whatsnew/3.6.rst | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index 61bf75f15c..136d47e15d 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -63,6 +63,11 @@ This document explains the changes made to Iris for this release :icon: alert :animate: fade-in + 📢 **Announcements** + + Welcome and congratulations to `@sloosvel`_ who made their first contribution to + Iris! 🎉 + The patches in this release of Iris include: 🐛 **Bugs Fixed** @@ -76,6 +81,15 @@ This document explains the changes made to Iris for this release properly updated. (:issue:`5339`, :pull:`5340`) + 🚀 **Performance Enhancements** + + #. `@sloosvel`_ improved :meth:`~iris.cube.CubeList.concatenate_cube` and + :meth:`~iris.cube.CubeList.concatenate` to ensure that lazy auxiliary coordinate + points and bounds are not realized. This change now allows cubes with + high-resolution auxiliary coordinates to concatenate successfully whilst using a + minimal in-core memory footprint. + (:issue:`5115`, :pull:`5142`) + 📢 Announcements ================ @@ -191,6 +205,7 @@ This document explains the changes made to Iris for this release core dev names are automatically included by the common_links.inc: .. _@fnattino: https://github.com/fnattino +.. _@sloosvel: https://github.com/sloosvel .. comment From 2e6ca8dd08489ce557a59edd138f03ee7f31b5fa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 19 Jun 2023 22:17:16 +0100 Subject: [PATCH 09/82] [pre-commit.ci] pre-commit autoupdate (#5354) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/codespell-project/codespell: v2.2.4 → v2.2.5](https://github.com/codespell-project/codespell/compare/v2.2.4...v2.2.5) - [github.com/asottile/blacken-docs: 1.13.0 → 1.14.0](https://github.com/asottile/blacken-docs/compare/1.13.0...1.14.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3b8920c694..500f69134f 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -29,7 +29,7 @@ repos: - id: no-commit-to-branch - repo: https://github.com/codespell-project/codespell - rev: "v2.2.4" + rev: "v2.2.5" hooks: - id: codespell types_or: [asciidoc, python, markdown, rst] @@ -56,7 +56,7 @@ repos: args: [--filter-files] - repo: https://github.com/asottile/blacken-docs - rev: 1.13.0 + rev: 1.14.0 hooks: - id: blacken-docs types: [file, rst] From b3bef2627d95840e4495a9c77d4ab5f1b4e75ec1 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Tue, 20 Jun 2023 13:24:56 +0100 Subject: [PATCH 10/82] Updated environment lockfiles (#5342) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 78 ++++++++++++------------- requirements/locks/py311-linux-64.lock | 80 +++++++++++++------------- requirements/locks/py39-linux-64.lock | 76 ++++++++++++------------ 3 files changed, 117 insertions(+), 117 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index 83cf6efc0f..a0632e193e 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -9,16 +9,16 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-12.2.0-h337968e_19.tar.bz2#164b4b1acaedc47ee7e658ae6b308ca3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-12.2.0-h46fd767_19.tar.bz2#1030b1f38c129f2634eae026f704fe60 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-3_cp310.conda#4eb33d14d794b0f4be116443ffed3853 https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-12.2.0-h69a702a_19.tar.bz2#cd7a806282c16e1f2d39a7e80d3a3e0d -https://conda.anaconda.org/conda-forge/linux-64/libgomp-12.2.0-h65d4601_19.tar.bz2#cedcee7c064c01c403f962c9e8d3c373 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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-12.2.0-h65d4601_19.tar.bz2#e4c94f80aef025c17ab0828cd85ef535 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -43,21 +43,20 @@ https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.21-pthreads_h78a6416_3.tar.bz2#8c5963a49b6035c40646a763293fbb35 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h166bdaf_4.tar.bz2#f3f9de449d32ca9b9c66a22863c96f41 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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 @@ -71,7 +70,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_openblas.tar.bz2#d9b7a8639171f6c6fa0a983edabcfe2b +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a @@ -82,31 +81,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.con 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-hf14f497_3.tar.bz2#d85acad4b47dff4e3def14a769a97906 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.conda#cf4a8f520fdad3a63bb2bce74576cd2d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 +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.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_openblas.tar.bz2#20bae26d0a1db73f758fc3754cab4719 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_openblas.tar.bz2#955d993f41f9354bf753d29864ea20ad -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.4-h5cf9203_0.conda#7be3251c7b337e46bea0b8f3a3ed3c58 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.0-ha587672_6.conda#4e5ee4b062c21519efbee7e2ae608748 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_2.conda#20b4708cd04bdc8138d03314ddd97885 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.11-he550d4f_0_cpython.conda#7439c9d24378a82b73a7a53868dacdf1 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -115,7 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda# https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.4-h8ee46fc_1.conda#52d09ea80a42c0466214609ef0a2d62d +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b @@ -133,26 +131,26 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.0-pyhd8ed1ab_0.conda#650f18a56f366dbf419c15b543592c2d +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.5.0-pyh1a96a4e_0.conda#20edd290b319aa0eff3e9055375756dc +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 -https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h64030ff_2.tar.bz2#112eb9b5b93f0c02e59aea4fd1967363 +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py310hbf28c38_1.tar.bz2#ad5647e517ba68e2868ef2e6e6ff7723 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.2-py310h1fa729e_0.conda#a1f0db6709778b77b5903541eeac4032 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda#5597d9f9778af6883ae64f0e7d39416c https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda#5311a49aaea44b73935c84a6d9a68e5f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py310h8deb116_0.conda#b7085457309e206174b8e234d90a7605 @@ -190,6 +188,7 @@ https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 @@ -200,30 +199,32 @@ https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835 https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py310hdf3cbec_0.conda#7bf9d8c765b6b04882c719509652c6d6 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda#684399f9ddc0b9d6f3b6164f6107098e https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py310h2372a71_0.conda#13df1c4ea94f2e3326b15da1999e5999 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.0-py310h5764c6d_1.tar.bz2#fd18cd597d23b2b5ddde23bd5b7aec32 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py310h2372a71_0.conda#76426eaff204520e719207700359a855 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py310h2372a71_0.conda#d3d83b419c81ac718a9221442707882b https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.4-default_h1cdf331_0.conda#5bb4fde7a7ea23ea471b171561943aec +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e +https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h056c13c_1.conda#32d925cfd330e0cbb72b7618558a44e8 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py310hc6cd4ac_0.conda#a3217e1bff09702dfdfcb536825fc12d https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df @@ -232,31 +233,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h0f3d0bb_1 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py310he60537e_0.conda#68b2dd34c69d08b05a9db5e3596fe3ee https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py310h7cbd5c2_0.conda#e0b845c6b29a1ed2e409bef6c0f5d96b https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py310hb814896_1.conda#d44c6841ee904252e0e8b7a1c7b11383 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py310heca2aa9_3.conda#3b1946b676534472ce65181dda0b9554 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.1-pyhd8ed1ab_0.conda#547c7de697ec99b494a28ddde185b5a4 +https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.5.1-pyhd8ed1ab_0.conda#b90a2dec6d308d71649dbe58dc32c337 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_h4f3791c_100.conda#405c5b3ad4ef53eb0d93043b54206dd7 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.3-nompi_py310h2d0b64f_102.conda#7e4ea99dccc0dd27fd1c87821ba8ef13 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hde23a83_100.conda#d5de42b3b49fb20e01d1003085ef588f https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da -https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 3fb33e82cd..81e5cb1048 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -9,16 +9,16 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-12.2.0-h337968e_19.tar.bz2#164b4b1acaedc47ee7e658ae6b308ca3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-12.2.0-h46fd767_19.tar.bz2#1030b1f38c129f2634eae026f704fe60 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-3_cp311.conda#c2e2630ddb68cf52eec74dc7dfab20b5 https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-12.2.0-h69a702a_19.tar.bz2#cd7a806282c16e1f2d39a7e80d3a3e0d -https://conda.anaconda.org/conda-forge/linux-64/libgomp-12.2.0-h65d4601_19.tar.bz2#cedcee7c064c01c403f962c9e8d3c373 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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-12.2.0-h65d4601_19.tar.bz2#e4c94f80aef025c17ab0828cd85ef535 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -43,21 +43,20 @@ https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.21-pthreads_h78a6416_3.tar.bz2#8c5963a49b6035c40646a763293fbb35 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h166bdaf_4.tar.bz2#f3f9de449d32ca9b9c66a22863c96f41 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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 @@ -71,7 +70,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_openblas.tar.bz2#d9b7a8639171f6c6fa0a983edabcfe2b +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a @@ -82,40 +81,39 @@ https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.con 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-hf14f497_3.tar.bz2#d85acad4b47dff4e3def14a769a97906 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.conda#cf4a8f520fdad3a63bb2bce74576cd2d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 +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.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_openblas.tar.bz2#20bae26d0a1db73f758fc3754cab4719 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_openblas.tar.bz2#955d993f41f9354bf753d29864ea20ad -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.4-h5cf9203_0.conda#7be3251c7b337e46bea0b8f3a3ed3c58 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.0-ha587672_6.conda#4e5ee4b062c21519efbee7e2ae608748 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_2.conda#20b4708cd04bdc8138d03314ddd97885 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.3-h2755cc3_0_cpython.conda#37005ea5f68df6a8a381b70cf4d4a160 +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.4-h8ee46fc_1.conda#52d09ea80a42c0466214609ef0a2d62d +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b @@ -133,26 +131,26 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.0-pyhd8ed1ab_0.conda#650f18a56f366dbf419c15b543592c2d +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.5.0-pyh1a96a4e_0.conda#20edd290b319aa0eff3e9055375756dc +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 -https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h64030ff_2.tar.bz2#112eb9b5b93f0c02e59aea4fd1967363 +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py311h4dd048b_1.tar.bz2#46d451f575392c01dc193069bd89766d https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.2-py311h2582759_0.conda#adb20bd57069614552adac60a020c36d +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py311h8e6699e_0.conda#90db8cc0dfa20853329bfc6642f887aa @@ -189,6 +187,7 @@ https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py311h459d7ec_0.co https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 @@ -199,30 +198,32 @@ https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py311ha3edf6b_0.conda#e7548e7f58965a2fe97a95950a5fedc6 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py311h459d7ec_0.conda#3c2c65575c28b23afc5e4ff721a2fc9f 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.0-py311hd4cff14_1.tar.bz2#21523141b35484b1edafba962c6ea883 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py311h459d7ec_0.conda#ddd2cd004e10bc7a1e042283326cbf91 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py311h459d7ec_0.conda#b19f671a6b221f922cf871d71a71c0fa https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.4-default_h1cdf331_0.conda#5bb4fde7a7ea23ea471b171561943aec +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py311h0b84326_1.conda#6be2190fdbf26a6c1d3356a54d955237 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e +https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311h54d622a_1.conda#a894c65b48676c4973e9ee8b59bceb9e https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py311hb755f60_0.conda#2b5430f2f1651f460c852e1fdd549184 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df @@ -231,31 +232,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h0f3d0bb_1 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py311h8597a09_0.conda#70c3b734ffe82c16b6d121aaa11929a8 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py311h320fe9a_0.conda#509769b430266dc5c2f6a3eab0f23164 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py311h1850bce_1.conda#572159a946b809df471b11db4995c708 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py311hcafe171_3.conda#0d79df2a96f6572fed2883374400b235 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.1-pyhd8ed1ab_0.conda#547c7de697ec99b494a28ddde185b5a4 +https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.5.1-pyhd8ed1ab_0.conda#b90a2dec6d308d71649dbe58dc32c337 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_h4f3791c_100.conda#405c5b3ad4ef53eb0d93043b54206dd7 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.3-nompi_py311h1717473_102.conda#d3b4d3ed2f3188d27d43e2c95d0dc2ab +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311h4d7c953_100.conda#c03492d0342e512e58aa2d6c5fdaaa91 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da -https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 8e584a3a74..58fbb19b52 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -9,16 +9,16 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-12.2.0-h337968e_19.tar.bz2#164b4b1acaedc47ee7e658ae6b308ca3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-12.2.0-h46fd767_19.tar.bz2#1030b1f38c129f2634eae026f704fe60 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda#0dd193187d54e585cac7eab942a8847e https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-12.2.0-h69a702a_19.tar.bz2#cd7a806282c16e1f2d39a7e80d3a3e0d -https://conda.anaconda.org/conda-forge/linux-64/libgomp-12.2.0-h65d4601_19.tar.bz2#cedcee7c064c01c403f962c9e8d3c373 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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-12.2.0-h65d4601_19.tar.bz2#e4c94f80aef025c17ab0828cd85ef535 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -43,21 +43,20 @@ https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.21-pthreads_h78a6416_3.tar.bz2#8c5963a49b6035c40646a763293fbb35 +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h166bdaf_4.tar.bz2#f3f9de449d32ca9b9c66a22863c96f41 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.3-h27087fc_1.tar.bz2#4acfc691e64342b9dae57cf2adc63238 +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 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 @@ -71,7 +70,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_openblas.tar.bz2#d9b7a8639171f6c6fa0a983edabcfe2b +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a @@ -82,31 +81,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.con 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-hf14f497_3.tar.bz2#d85acad4b47dff4e3def14a769a97906 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.conda#cf4a8f520fdad3a63bb2bce74576cd2d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 +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.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_openblas.tar.bz2#20bae26d0a1db73f758fc3754cab4719 +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_openblas.tar.bz2#955d993f41f9354bf753d29864ea20ad -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.4-h5cf9203_0.conda#7be3251c7b337e46bea0b8f3a3ed3c58 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.0-ha587672_6.conda#4e5ee4b062c21519efbee7e2ae608748 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_2.conda#20b4708cd04bdc8138d03314ddd97885 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.16-h2782a2a_0_cpython.conda#95c9b7c96a7fd7342e0c9d0a917b8f78 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -115,7 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda# https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.4-h8ee46fc_1.conda#52d09ea80a42c0466214609ef0a2d62d +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b @@ -133,26 +131,26 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.16-py39hf3d152e_3.tar.bz2#4f0fa7459a1f40a969aaad418b1c428c https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.0-pyhd8ed1ab_0.conda#650f18a56f366dbf419c15b543592c2d +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.5.0-pyh1a96a4e_0.conda#20edd290b319aa0eff3e9055375756dc +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 -https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h64030ff_2.tar.bz2#112eb9b5b93f0c02e59aea4fd1967363 +https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1.tar.bz2#41679a052a8ce841c74df1ebc802e411 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.4-default_h4d60ac6_0.conda#3309280871a6ccbfd84bd7f53d559153 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.2-py39h72bdee0_0.conda#35514f5320206df9f4661c138c02e1c1 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda#9c858d105816f454c6b64f3e19184b60 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda#413374bab5022a5199c5dd89aef75df5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.23.5-py39h3d75532_0.conda#ea5d332e361eb72c2593cf79559bc0ec @@ -190,6 +188,7 @@ https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 @@ -200,30 +199,32 @@ https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda#20080319ef73fbad74dcd6d62f2a3ffe https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py39h4b4f3f3_0.conda#c5387f3fb1f5b8b71e1c865fc55f4951 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py39h7633fee_0.conda#54e6f32e448fdc273606011f0940d076 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.0-py39hb9d737c_1.tar.bz2#eb31327ace8dac15c2df243d9505a132 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py39hd1e30aa_0.conda#80605b792f58cf5c78a5b7e20cef1e35 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py39hd1e30aa_0.conda#5f7c468bf9d9551a80187db7e809ef1f https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.12.0-pyhd8ed1ab_0.conda#e5fd2260a231ee63b6969f4801082f2b https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.4-default_h1cdf331_0.conda#5bb4fde7a7ea23ea471b171561943aec +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py39haaeba84_1.conda#d7aa9b99ed6ade75fbab1e4cedcb3ce2 https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.0-h8ffa02c_0.conda#8b9dcfabec5c6bcac98e89889fffa64e +https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39hf1c3bca_1.conda#ae6bfe65e81d9b59a71cc01a2858650f https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py39h3d6467e_0.conda#6d990f672cc70e5c480ddb74b789a17c https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df @@ -232,31 +233,30 @@ https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_ 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/pandas-2.0.2-py39h40cae4c_0.conda#de99b3f807c0b295a7df94623df0fb4c https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.5.0-py39h718ffca_1.conda#a19bf4be7ebce54623541fa4ad22abb4 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py39h227be39_3.conda#9e381db00691e26bcf670c3586397be1 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.1-pyhd8ed1ab_0.conda#547c7de697ec99b494a28ddde185b5a4 +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.5.1-pyhd8ed1ab_0.conda#b90a2dec6d308d71649dbe58dc32c337 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py39he190548_0.conda#f2a931db797bb58bd335f4a857b4c898 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/netcdf4-1.6.3-nompi_py39h369ccc5_102.conda#dda035d195cf87b493bbb0aa296c381c +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4e81c44_100.conda#360163b65cfd5e43ac60de5c6c3a2696 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.5.1-pyhd8ed1ab_0.conda#517e6d85a48d94b1f5997377df53b896 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 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/pre-commit-3.3.2-pyha770c72_0.conda#dbb0111b18ea5c9983fb8db0aef6000b +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 From 9e2cff55e3030aaa8fba5aa9124baafb7a7a8fdd Mon Sep 17 00:00:00 2001 From: Bill Little Date: Tue, 20 Jun 2023 14:33:39 +0100 Subject: [PATCH 11/82] address concatenate lazy comparison truthiness (#5353) * address concatenate lazy comparison truthiness * changes with test coverage * add __future__ annotations for py39 * review actions --- lib/iris/_concatenate.py | 36 ++--- lib/iris/tests/unit/concatenate/__init__.py | 136 +++++++++++++++++- .../unit/concatenate/test__CoordMetaData.py | 117 +++++++++++++++ .../unit/concatenate/test__CoordSignature.py | 121 ++++++++++++++++ 4 files changed, 383 insertions(+), 27 deletions(-) create mode 100644 lib/iris/tests/unit/concatenate/test__CoordMetaData.py create mode 100644 lib/iris/tests/unit/concatenate/test__CoordSignature.py diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index d98e63da5a..7bb27eaf83 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -115,9 +115,9 @@ def __new__(mcs, coord, dims): kwargs["circular"] = coord.circular if isinstance(coord, iris.coords.DimCoord): # Mix the monotonic ordering into the metadata. - if coord.core_points()[0] == coord.core_points()[-1]: + if coord.points[0] == coord.points[-1]: order = _CONSTANT - elif coord.core_points()[-1] > coord.core_points()[0]: + elif coord.points[-1] > coord.points[0]: order = _INCREASING else: order = _DECREASING @@ -775,37 +775,21 @@ def _calculate_extents(self): self.dim_extents = [] for coord, order in zip(self.dim_coords, self.dim_order): if order == _CONSTANT or order == _INCREASING: - points = _Extent( - coord.core_points()[0], coord.core_points()[-1] - ) - if coord.core_bounds() is not None: + points = _Extent(coord.points[0], coord.points[-1]) + if coord.bounds is not None: bounds = ( - _Extent( - coord.core_bounds()[0, 0], - coord.core_bounds()[-1, 0], - ), - _Extent( - coord.core_bounds()[0, 1], - coord.core_bounds()[-1, 1], - ), + _Extent(coord.bounds[0, 0], coord.bounds[-1, 0]), + _Extent(coord.bounds[0, 1], coord.bounds[-1, 1]), ) else: bounds = None else: # The order must be decreasing ... - points = _Extent( - coord.core_points()[-1], coord.core_points()[0] - ) - if coord.core_bounds() is not None: + points = _Extent(coord.points[-1], coord.points[0]) + if coord.bounds is not None: bounds = ( - _Extent( - coord.core_bounds()[-1, 0], - coord.core_bounds()[0, 0], - ), - _Extent( - coord.core_bounds()[-1, 1], - coord.core_bounds()[0, 1], - ), + _Extent(coord.bounds[-1, 0], coord.bounds[0, 0]), + _Extent(coord.bounds[-1, 1], coord.bounds[0, 1]), ) else: bounds = None diff --git a/lib/iris/tests/unit/concatenate/__init__.py b/lib/iris/tests/unit/concatenate/__init__.py index cf671a6553..229476f3a6 100644 --- a/lib/iris/tests/unit/concatenate/__init__.py +++ b/lib/iris/tests/unit/concatenate/__init__.py @@ -3,4 +3,138 @@ # This file is part of Iris and is released under the LGPL license. # See COPYING and COPYING.LESSER in the root of the repository for full # licensing details. -"""Unit tests for the :mod:`iris._concatenate` package.""" +"""Unit-test infrastructure for the :mod:`iris._concatenate` package.""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from typing import Any + +import dask.array as da +import numpy as np + +from iris._concatenate import _CONSTANT, _DECREASING, _INCREASING +import iris.common +from iris.coords import AuxCoord, DimCoord + +__all__ = ["ExpectedItem", "N_POINTS", "SCALE_FACTOR", "create_metadata"] + +# number of coordinate points +N_POINTS: int = 10 + +# coordinate points multiplication scale factor +SCALE_FACTOR: int = 10 + + +METADATA = { + "standard_name": "air_temperature", + "long_name": "air temperature", + "var_name": "atemp", + "units": "kelvin", + "attributes": {}, + "coord_system": None, + "climatological": False, + "circular": False, +} + + +@dataclass +class ExpectedItem: + """Expected test result components of :class:`iris._concatenate._CoordMetaData`.""" + + defn: iris.common.DimCoordMetadata | iris.common.CoordMetadata + dims: tuple[int, ...] + points_dtype: np.dtype + bounds_dtype: np.dtype | None = None + kwargs: dict[str, Any] = field(default_factory=dict) + + +@dataclass +class MetaDataItem: + """Test input and expected output from :class:`iris._concatenate._CoordMetaData`.""" + + coord: AuxCoord | DimCoord + dims: tuple[int, ...] + expected: ExpectedItem + + +def create_metadata( + dim_coord: bool = True, + scalar: bool = False, + order: int = None, + circular: bool | None = False, + coord_dtype: np.dtype = None, + lazy: bool = True, + with_bounds: bool | None = False, +) -> MetaDataItem: + """Construct payload for :class:`iris._concatenate.CoordMetaData` testing.""" + if coord_dtype is None: + coord_dtype = np.float32 + + if order is None: + order = _INCREASING + + array_lib = da if lazy else np + bounds = None + + if scalar: + points = array_lib.ones(1, dtype=coord_dtype) + order = _CONSTANT + + if with_bounds: + bounds = array_lib.array([0, 2], dtype=coord_dtype).reshape(1, 2) + else: + if order == _CONSTANT: + points = array_lib.ones(N_POINTS, dtype=coord_dtype) + else: + if order == _DECREASING: + start, stop, step = N_POINTS - 1, -1, -1 + else: + start, stop, step = 0, N_POINTS, 1 + points = ( + array_lib.arange(start, stop, step, dtype=coord_dtype) + * SCALE_FACTOR + ) + + if with_bounds: + offset = SCALE_FACTOR // 2 + bounds = array_lib.vstack( + [points.copy() - offset, points.copy() + offset] + ).T + + bounds_dtype = coord_dtype if with_bounds else None + + values = METADATA.copy() + values["circular"] = circular + CoordClass = DimCoord if dim_coord else AuxCoord + coord = CoordClass(points, bounds=bounds) + if dim_coord and lazy: + # creating a DimCoord *always* results in realized points/bounds. + assert not coord.has_lazy_points() + if with_bounds: + assert not coord.has_lazy_bounds() + metadata = iris.common.DimCoordMetadata(**values) + + if dim_coord: + coord.metadata = metadata + else: + # convert the DimCoordMetadata to a CoordMetadata instance + # and assign to the AuxCoord + coord.metadata = iris.common.CoordMetadata.from_metadata(metadata) + + dims = tuple([dim for dim in range(coord.ndim)]) + kwargs = {"scalar": scalar} + + if dim_coord: + kwargs["circular"] = circular + kwargs["order"] = order + + expected = ExpectedItem( + defn=metadata, + dims=dims, + points_dtype=coord_dtype, + bounds_dtype=bounds_dtype, + kwargs=kwargs, + ) + + return MetaDataItem(coord=coord, dims=dims, expected=expected) diff --git a/lib/iris/tests/unit/concatenate/test__CoordMetaData.py b/lib/iris/tests/unit/concatenate/test__CoordMetaData.py new file mode 100644 index 0000000000..6f29e1f65f --- /dev/null +++ b/lib/iris/tests/unit/concatenate/test__CoordMetaData.py @@ -0,0 +1,117 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +"""Unit-tests for :class:`iris._concatenate._CoordMetaData`.""" + +from __future__ import annotations + +import numpy as np +import pytest + +from iris._concatenate import ( + _CONSTANT, + _DECREASING, + _INCREASING, + _CoordMetaData, +) + +from . import ExpectedItem, create_metadata + + +def check(actual: _CoordMetaData, expected: ExpectedItem) -> None: + """Assert actual and expected results.""" + assert actual.defn == expected.defn + assert actual.dims == expected.dims + assert actual.points_dtype == expected.points_dtype + assert actual.bounds_dtype == expected.bounds_dtype + assert actual.kwargs == expected.kwargs + + +@pytest.mark.parametrize("order", [_DECREASING, _INCREASING]) +@pytest.mark.parametrize("circular", [False, True]) +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_dim( + order: int, + circular: bool, + coord_dtype: np.dtype, + lazy: bool, + with_bounds: bool, +) -> None: + """Test :class:`iris._concatenate._CoordMetaData` with dim coord.""" + metadata = create_metadata( + dim_coord=True, + scalar=False, + order=order, + circular=circular, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + actual = _CoordMetaData(coord=metadata.coord, dims=metadata.dims) + check(actual, metadata.expected) + + +@pytest.mark.parametrize("circular", [False, True]) +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_dim__scalar( + circular: bool, coord_dtype: np.dtype, lazy: bool, with_bounds: bool +) -> None: + """Test :class:`iris._concatenate._CoordMetaData` with scalar dim coord.""" + metadata = create_metadata( + dim_coord=True, + scalar=True, + order=_CONSTANT, + circular=circular, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + actual = _CoordMetaData(coord=metadata.coord, dims=metadata.dims) + check(actual, metadata.expected) + + +@pytest.mark.parametrize("order", [_DECREASING, _INCREASING]) +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_aux( + order: int, coord_dtype: np.dtype, lazy: bool, with_bounds: bool +) -> None: + """Test :class:`iris._concatenate._CoordMetaData` with aux coord.""" + metadata = create_metadata( + dim_coord=False, + scalar=False, + order=order, + circular=None, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + actual = _CoordMetaData(coord=metadata.coord, dims=metadata.dims) + check(actual, metadata.expected) + + +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_aux__scalar( + coord_dtype: np.dtype, lazy: bool, with_bounds: bool +) -> None: + """Test :class:`iris._concatenate._CoordMetaData` with scalar aux coord.""" + metadata = create_metadata( + dim_coord=False, + scalar=True, + order=_CONSTANT, + circular=None, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + actual = _CoordMetaData(coord=metadata.coord, dims=metadata.dims) + check(actual, metadata.expected) diff --git a/lib/iris/tests/unit/concatenate/test__CoordSignature.py b/lib/iris/tests/unit/concatenate/test__CoordSignature.py new file mode 100644 index 0000000000..eb62c5ec64 --- /dev/null +++ b/lib/iris/tests/unit/concatenate/test__CoordSignature.py @@ -0,0 +1,121 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +"""Unit-tests for :class:`iris._concatenate._CoordSignature`.""" + +from __future__ import annotations + +from dataclasses import dataclass, field + +import numpy as np +import pytest + +from iris._concatenate import ( + _CONSTANT, + _DECREASING, + _INCREASING, + _CoordExtent, + _CoordMetaData, + _CoordSignature, + _Extent, +) +from iris.coords import DimCoord + +from . import N_POINTS, SCALE_FACTOR, create_metadata + + +@dataclass +class MockCubeSignature: + """Simple mock of :class:`iris._concatenate._CubeSignature`.""" + + aux_coords_and_dims: bool | None = None + cell_measures_and_dims: bool | None = None + ancillary_variables_and_dims: bool | None = None + derived_coords_and_dims: bool | None = None + dim_coords: list[DimCoord, ...] = field(default_factory=list) + dim_mapping: bool | None = None + dim_extents: list[_Extent, ...] = field(default_factory=list) + dim_order: list[int, ...] = field(default_factory=list) + dim_metadata: list[_CoordMetaData, ...] = field(default_factory=list) + + +@pytest.mark.parametrize("order", [_DECREASING, _INCREASING]) +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_dim( + order: int, coord_dtype: np.dtype, lazy: bool, with_bounds: bool +) -> None: + """Test extent calculation of vector dimension coordinates.""" + metadata = create_metadata( + dim_coord=True, + scalar=False, + order=order, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + dim_metadata = [_CoordMetaData(metadata.coord, metadata.dims)] + cube_signature = MockCubeSignature( + dim_coords=[metadata.coord], dim_metadata=dim_metadata + ) + coord_signature = _CoordSignature(cube_signature) + assert len(coord_signature.dim_extents) == 1 + (actual,) = coord_signature.dim_extents + first, last = coord_dtype(0), coord_dtype((N_POINTS - 1) * SCALE_FACTOR) + if order == _CONSTANT: + emsg = f"Expected 'order' of '{_DECREASING}' or '{_INCREASING}', got '{order}'." + raise ValueError(emsg) + points_extent = _Extent(min=first, max=last) + bounds_extent = None + if with_bounds: + offset = SCALE_FACTOR // 2 + if order == _INCREASING: + bounds_extent = ( + _Extent(min=first - offset, max=last - offset), + _Extent(min=first + offset, max=last + offset), + ) + else: + bounds_extent = ( + _Extent(min=first + offset, max=last + offset), + _Extent(min=first - offset, max=last - offset), + ) + expected = _CoordExtent(points=points_extent, bounds=bounds_extent) + assert actual == expected + + +@pytest.mark.parametrize("coord_dtype", [np.int32, np.float32]) +@pytest.mark.parametrize("lazy", [False, True]) +@pytest.mark.parametrize("with_bounds", [False, True]) +def test_dim__scalar( + coord_dtype: np.dtype, lazy: bool, with_bounds: bool +) -> None: + """Test extent calculation of scalar dimension coordinates.""" + metadata = create_metadata( + dim_coord=True, + scalar=True, + order=_CONSTANT, + coord_dtype=coord_dtype, + lazy=lazy, + with_bounds=with_bounds, + ) + dim_metadata = [_CoordMetaData(metadata.coord, metadata.dims)] + cube_signature = MockCubeSignature( + dim_coords=[metadata.coord], dim_metadata=dim_metadata + ) + coord_signature = _CoordSignature(cube_signature) + assert len(coord_signature.dim_extents) == 1 + (actual,) = coord_signature.dim_extents + point = coord_dtype(1) + points_extent = _Extent(min=point, max=point) + bounds_extent = None + if with_bounds: + first, last = coord_dtype(0), coord_dtype(2) + bounds_extent = ( + _Extent(min=first, max=first), + _Extent(min=last, max=last), + ) + expected = _CoordExtent(points=points_extent, bounds=bounds_extent) + assert actual == expected From f436cbce09b70026c06763b0e5c8a68abe4e3ae7 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Mon, 26 Jun 2023 13:10:03 +0100 Subject: [PATCH 12/82] Simplify and lazify broadcast_to_shape (#5307) (#5359) * Simplify and lazify broadcast_to_shape (#5307) * working for all except masked lazy * use moveaxis * handle lazy masked case * add tests for is_lazy_masked_data * whatsnew * check compute isn't called * update docstring * add whatnew patch footnote --------- Co-authored-by: Ruth Comer <10599679+rcomer@users.noreply.github.com> --- docs/src/whatsnew/3.6.rst | 10 ++++ lib/iris/_lazy_data.py | 9 ++++ .../lazy_data/test_is_lazy_masked_data.py | 27 ++++++++++ .../unit/util/test_broadcast_to_shape.py | 28 ++++++++++ lib/iris/util.py | 54 +++++++++---------- 5 files changed, 98 insertions(+), 30 deletions(-) create mode 100644 lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index 136d47e15d..c81307a7ba 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -70,6 +70,12 @@ This document explains the changes made to Iris for this release The patches in this release of Iris include: + ✨ **Features** + + #. `@rcomer`_ rewrote :func:`~iris.util.broadcast_to_shape` so it now handles + lazy data. This pull-request has been included to support :pull:`5341`. + (:pull:`5307`) [``pre-v3.7.0``] + 🐛 **Bugs Fixed** #. `@stephenworsley`_ fixed :meth:`~iris.cube.Cube.convert_units` to allow unit @@ -90,6 +96,10 @@ This document explains the changes made to Iris for this release minimal in-core memory footprint. (:issue:`5115`, :pull:`5142`) + Note that, the above contribution labelled with ``pre-v3.7.0`` is part of the + forthcoming Iris ``v3.7.0`` release, but requires to be included in this patch + release. + 📢 Announcements ================ diff --git a/lib/iris/_lazy_data.py b/lib/iris/_lazy_data.py index e0566fc8f2..4c294a7d2f 100644 --- a/lib/iris/_lazy_data.py +++ b/lib/iris/_lazy_data.py @@ -47,6 +47,15 @@ def is_lazy_data(data): return result +def is_lazy_masked_data(data): + """ + Return True if the argument is both an Iris 'lazy' data array and the + underlying array is of masked type. Otherwise return False. + + """ + return is_lazy_data(data) and ma.isMA(da.utils.meta_from_array(data)) + + @lru_cache def _optimum_chunksize_internals( chunks, diff --git a/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py b/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py new file mode 100644 index 0000000000..4d627a706b --- /dev/null +++ b/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py @@ -0,0 +1,27 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +"""Test function :func:`iris._lazy data.is_lazy_masked_data`.""" + +import dask.array as da +import numpy as np +import pytest + +from iris._lazy_data import is_lazy_masked_data + +real_arrays = [ + np.arange(3), + np.ma.array(range(3)), + np.ma.array(range(3), mask=[0, 1, 1]), +] +lazy_arrays = [da.from_array(arr) for arr in real_arrays] + + +@pytest.mark.parametrize( + "arr, expected", zip(real_arrays + lazy_arrays, [False] * 4 + [True] * 2) +) +def test_is_lazy_masked_data(arr, expected): + result = is_lazy_masked_data(arr) + assert result is expected diff --git a/lib/iris/tests/unit/util/test_broadcast_to_shape.py b/lib/iris/tests/unit/util/test_broadcast_to_shape.py index 36f00fa53f..3df1634ba5 100644 --- a/lib/iris/tests/unit/util/test_broadcast_to_shape.py +++ b/lib/iris/tests/unit/util/test_broadcast_to_shape.py @@ -9,6 +9,10 @@ # importing anything else import iris.tests as tests # isort:skip +from unittest import mock + +import dask +import dask.array as da import numpy as np import numpy.ma as ma @@ -40,6 +44,17 @@ def test_added_dimensions_transpose(self): for j in range(4): self.assertArrayEqual(b[i, :, j, :].T, a) + @mock.patch.object(dask.base, "compute", wraps=dask.base.compute) + def test_lazy_added_dimensions_transpose(self, mocked_compute): + # adding dimensions and having the dimensions of the input + # transposed + a = da.random.random([2, 3]) + b = broadcast_to_shape(a, (5, 3, 4, 2), (3, 1)) + mocked_compute.assert_not_called() + for i in range(5): + for j in range(4): + self.assertArrayEqual(b[i, :, j, :].T.compute(), a.compute()) + def test_masked(self): # masked arrays are also accepted a = np.random.random([2, 3]) @@ -49,6 +64,19 @@ def test_masked(self): for j in range(4): self.assertMaskedArrayEqual(b[i, :, j, :].T, m) + @mock.patch.object(dask.base, "compute", wraps=dask.base.compute) + def test_lazy_masked(self, mocked_compute): + # masked arrays are also accepted + a = np.random.random([2, 3]) + m = da.ma.masked_array(a, mask=[[0, 1, 0], [0, 1, 1]]) + b = broadcast_to_shape(m, (5, 3, 4, 2), (3, 1)) + mocked_compute.assert_not_called() + for i in range(5): + for j in range(4): + self.assertMaskedArrayEqual( + b[i, :, j, :].compute().T, m.compute() + ) + def test_masked_degenerate(self): # masked arrays can have degenerate masks too a = np.random.random([2, 3]) diff --git a/lib/iris/util.py b/lib/iris/util.py index d96e0ee359..0b31ebdafc 100644 --- a/lib/iris/util.py +++ b/lib/iris/util.py @@ -23,7 +23,7 @@ import numpy.ma as ma from iris._deprecation import warn_deprecated -from iris._lazy_data import as_concrete_data, is_lazy_data +from iris._lazy_data import as_concrete_data, is_lazy_data, is_lazy_masked_data from iris.common import SERVICES from iris.common.lenient import _lenient_client import iris.exceptions @@ -34,8 +34,7 @@ def broadcast_to_shape(array, shape, dim_map): Broadcast an array to a given shape. Each dimension of the array must correspond to a dimension in the - given shape. Striding is used to repeat the array until it matches - the desired shape, returning repeated views on the original array. + given shape. The result is a read-only view (see :func:`numpy.broadcast_to`). If you need to write to the resulting array, make a copy first. Args: @@ -76,35 +75,30 @@ def broadcast_to_shape(array, shape, dim_map): See more at :doc:`/userguide/real_and_lazy_data`. """ - if len(dim_map) != array.ndim: - # We must check for this condition here because we cannot rely on - # getting an error from numpy if the dim_map argument is not the - # correct length, we might just get a segfault. - raise ValueError( - "dim_map must have an entry for every " - "dimension of the input array" - ) + n_orig_dims = len(array.shape) + n_new_dims = len(shape) - n_orig_dims + array = array.reshape(array.shape + (1,) * n_new_dims) + + # Get dims in required order. + array = np.moveaxis(array, range(n_orig_dims), dim_map) + new_array = np.broadcast_to(array, shape) - def _broadcast_helper(a): - strides = [0] * len(shape) - for idim, dim in enumerate(dim_map): - if shape[dim] != a.shape[idim]: - # We'll get garbage values if the dimensions of array are not - # those indicated by shape. - raise ValueError("shape and array are not compatible") - strides[dim] = a.strides[idim] - return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) - - array_view = _broadcast_helper(array) - if ma.isMaskedArray(array): - if array.mask is ma.nomask: - # Degenerate masks can be applied as-is. - mask_view = array.mask + if ma.isMA(array): + # broadcast_to strips masks so we need to handle them explicitly. + mask = ma.getmask(array) + if mask is ma.nomask: + new_mask = ma.nomask else: - # Mask arrays need to be handled in the same way as the data array. - mask_view = _broadcast_helper(array.mask) - array_view = ma.array(array_view, mask=mask_view) - return array_view + new_mask = np.broadcast_to(mask, shape) + new_array = ma.array(new_array, mask=new_mask) + + elif is_lazy_masked_data(array): + # broadcast_to strips masks so we need to handle them explicitly. + mask = da.ma.getmaskarray(array) + new_mask = da.broadcast_to(mask, shape) + new_array = da.ma.masked_array(new_array, new_mask) + + return new_array def delta(ndarray, dimension, circular=False): From bbba8072b30ca78696a67d4b44b5eb1df9559d7c Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 13:39:39 +0100 Subject: [PATCH 13/82] Updated environment lockfiles (#5358) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 22 +++++++++++----------- requirements/locks/py311-linux-64.lock | 20 ++++++++++---------- requirements/locks/py39-linux-64.lock | 20 ++++++++++---------- 3 files changed, 31 insertions(+), 31 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index a0632e193e..fa6050a524 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -77,7 +77,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 -https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 @@ -86,7 +86,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.b https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 @@ -104,9 +104,9 @@ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openb https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.10.11-he550d4f_0_cpython.conda#7439c9d24378a82b73a7a53868dacdf1 +https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 @@ -153,7 +153,7 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda#5597d9f9778af6883ae64f0e7d39416c https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda#5311a49aaea44b73935c84a6d9a68e5f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py310h8deb116_0.conda#b7085457309e206174b8e234d90a7605 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py310ha4c1d20_0.conda#03319f78e5c9c8d90c0110e2c6ed24f6 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 @@ -161,14 +161,14 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda#b0f0a014fc04012c05f39df15fe270ce https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py310h1fa729e_0.conda#8d155ac95b1dfe585bcb6bec6a91c73b https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py310h5764c6d_5.tar.bz2#9e68d2ff6d98737c855b65f48dd3c597 -https://conda.anaconda.org/conda-forge/noarch/setuptools-67.7.2-pyhd8ed1ab_0.conda#3b68bc43ec6baa48f7354a446267eefe +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -206,7 +206,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.0-py310h5764c6d_1.t https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py310h2372a71_0.conda#d3d83b419c81ac718a9221442707882b https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 @@ -228,12 +228,12 @@ https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#a https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf 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/matplotlib-base-3.7.1-py310he60537e_0.conda#68b2dd34c69d08b05a9db5e3596fe3ee https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py310h7cbd5c2_0.conda#e0b845c6b29a1ed2e409bef6c0f5d96b https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py310heca2aa9_3.conda#3b1946b676534472ce65181dda0b9554 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da @@ -251,7 +251,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#c https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 81e5cb1048..e0919fe2ef 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -77,7 +77,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 -https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 @@ -86,7 +86,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.b https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 @@ -104,7 +104,7 @@ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openb https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -153,7 +153,7 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.2-py311h8e6699e_0.conda#90db8cc0dfa20853329bfc6642f887aa +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py311h64a7726_0.conda#4df60430eca64502eb01e02df92246bf 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 @@ -161,14 +161,14 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py311h2582759_0.conda#dfcc3e6e30d6ec2b2bb416fcd8ff4dc1 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py311hd4cff14_5.tar.bz2#da8769492e423103c59f469f4f17f8d9 -https://conda.anaconda.org/conda-forge/noarch/setuptools-67.7.2-pyhd8ed1ab_0.conda#3b68bc43ec6baa48f7354a446267eefe +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -205,7 +205,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.0-py311hd4cff14_1.t https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py311h459d7ec_0.conda#b19f671a6b221f922cf871d71a71c0fa https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 @@ -227,12 +227,12 @@ https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#a https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf 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/matplotlib-base-3.7.1-py311h8597a09_0.conda#70c3b734ffe82c16b6d121aaa11929a8 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py311h320fe9a_0.conda#509769b430266dc5c2f6a3eab0f23164 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py311hcafe171_3.conda#0d79df2a96f6572fed2883374400b235 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da @@ -250,7 +250,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#c https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 58fbb19b52..a7b390c21d 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -77,7 +77,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 -https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb +https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 @@ -86,7 +86,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.b https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_3.conda#3cbb1d20331e8b1f170de5cef410cd80 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 @@ -104,7 +104,7 @@ https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openb https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_3.conda#247055daf6d75d72ac0e94de151e8ab0 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.16-h2782a2a_0_cpython.conda#95c9b7c96a7fd7342e0c9d0a917b8f78 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -153,7 +153,7 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda#9c858d105816f454c6b64f3e19184b60 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda#413374bab5022a5199c5dd89aef75df5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.23.5-py39h3d75532_0.conda#ea5d332e361eb72c2593cf79559bc0ec +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py39h6183b62_0.conda#02b87fef8e4c72be8256435ed59fe8de 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 @@ -161,14 +161,14 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda#1d54d3a75c3192ab7655d9c3d16809f1 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py39h72bdee0_0.conda#18927f971926b7271600368de71de557 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py39hb9d737c_5.tar.bz2#ef9db3c38ae7275f6b14491cfe61a248 -https://conda.anaconda.org/conda-forge/noarch/setuptools-67.7.2-pyhd8ed1ab_0.conda#3b68bc43ec6baa48f7354a446267eefe +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -205,7 +205,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.0-py39hb9d737c_1.ta https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py39hd1e30aa_0.conda#5f7c468bf9d9551a80187db7e809ef1f https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.12.0-pyhd8ed1ab_0.conda#e5fd2260a231ee63b6969f4801082f2b https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a @@ -229,11 +229,11 @@ https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.co https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/noarch/importlib-resources-5.12.0-pyhd8ed1ab_0.conda#3544c818f0720c89eb16ae6940ab440b -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.6.0-hd8ed1ab_0.conda#3cbc9615f10a3d471532b83e4250b971 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf 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/pandas-2.0.2-py39h40cae4c_0.conda#de99b3f807c0b295a7df94623df0fb4c https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py39h227be39_3.conda#9e381db00691e26bcf670c3586397be1 https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b @@ -250,7 +250,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#c https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.0-pyhd8ed1ab_0.conda#a920e114c4c2ced2280e266da65ab5e6 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 From e0df17c291ceede6bd6c9d3a2c93ddf2e000a4bd Mon Sep 17 00:00:00 2001 From: Manuel Schlund <32543114+schlunma@users.noreply.github.com> Date: Mon, 26 Jun 2023 15:52:36 +0200 Subject: [PATCH 14/82] Make weighted aggregation lazy again (#5341) * Make weighted aggregation lazy again * kwarg unit is not necessary anymore for _Weights * Added test cases for _weights_units=None * Updated doc * Make sure that (Weighted)PercentileAggregator is included in API doc * Simplified tests * Make weights handling simpler by explicitly calling _Weights constructor * Added What's new entry * Do not change input units if the weights units are 1 --- docs/src/whatsnew/3.6.rst | 4 + lib/iris/analysis/__init__.py | 148 ++++++++------- lib/iris/cube.py | 52 +++--- lib/iris/tests/test_analysis.py | 258 ++++++++++---------------- lib/iris/tests/unit/cube/test_Cube.py | 54 +++--- 5 files changed, 234 insertions(+), 282 deletions(-) diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index c81307a7ba..892da3310d 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -87,6 +87,10 @@ This document explains the changes made to Iris for this release properly updated. (:issue:`5339`, :pull:`5340`) + #. `@schlunma`_ fixed a bug which realized all weights during weighted + aggregation. Now weighted aggregation is fully lazy again. + (:issue:`5338`, :pull:`5341`) + 🚀 **Performance Enhancements** #. `@sloosvel`_ improved :meth:`~iris.cube.CubeList.concatenate_cube` and diff --git a/lib/iris/analysis/__init__.py b/lib/iris/analysis/__init__.py index 4cd9ccbe05..f00c3dd850 100644 --- a/lib/iris/analysis/__init__.py +++ b/lib/iris/analysis/__init__.py @@ -81,6 +81,7 @@ "PEAK", "PERCENTILE", "PROPORTION", + "PercentileAggregator", "PointInCell", "RMS", "STD_DEV", @@ -89,6 +90,7 @@ "VARIANCE", "WPERCENTILE", "WeightedAggregator", + "WeightedPercentileAggregator", "clear_phenomenon_identity", "create_weighted_aggregator_fn", ) @@ -488,7 +490,7 @@ def __init__( aggregation. Note that, it need not support all features of the main operation, but should raise an error in unhandled cases. - Additional kwargs:: + Additional kwargs: Passed through to :data:`call_func`, :data:`lazy_func`, and :data:`units_func`. @@ -719,9 +721,12 @@ def __init__(self, units_func=None, **kwargs): If provided, called to convert a cube's units. Returns an :class:`cf_units.Unit`, or a value that can be made into one. + To ensure backwards-compatibility, also accepts a callable with + call signature (units). - Additional kwargs:: - Passed through to :data:`call_func` and :data:`lazy_func`. + Additional kwargs: + Passed through to :data:`call_func`, :data:`lazy_func`, and + :data:`units_func`. This aggregator can used by cube aggregation methods such as :meth:`~iris.cube.Cube.collapsed` and @@ -960,14 +965,27 @@ def __init__(self, units_func=None, lazy_func=None, **kwargs): If provided, called to convert a cube's units. Returns an :class:`cf_units.Unit`, or a value that can be made into one. + To ensure backwards-compatibility, also accepts a callable with + call signature (units). + + If the aggregator is used by a cube aggregation method (e.g., + :meth:`~iris.cube.Cube.collapsed`, + :meth:`~iris.cube.Cube.aggregated_by`, + :meth:`~iris.cube.Cube.rolling_window`), a keyword argument + `_weights_units` is provided to this function to allow updating + units based on the weights. `_weights_units` is determined from the + `weights` given to the aggregator (``None`` if no weights are + given). See :ref:`user guide ` + for an example of weighted aggregation that changes units. * lazy_func (callable or None): An alternative to :data:`call_func` implementing a lazy aggregation. Note that, it need not support all features of the main operation, but should raise an error in unhandled cases. - Additional kwargs:: - Passed through to :data:`call_func` and :data:`lazy_func`. + Additional kwargs: + Passed through to :data:`call_func`, :data:`lazy_func`, and + :data:`units_func`. This aggregator can used by cube aggregation methods such as :meth:`~iris.cube.Cube.collapsed` and @@ -1090,7 +1108,7 @@ class WeightedAggregator(Aggregator): def __init__( self, cell_method, call_func, units_func=None, lazy_func=None, **kwargs ): - """ + r""" Create a weighted aggregator for the given :data:`call_func`. Args: @@ -1099,12 +1117,29 @@ def __init__( Cell method string that supports string format substitution. * call_func (callable): - Data aggregation function. Call signature `(data, axis, **kwargs)`. + Data aggregation function. Call signature `(data, axis, + \**kwargs)`. Kwargs: * units_func (callable): - Units conversion function. + | *Call signature*: (units, \**kwargs) + + If provided, called to convert a cube's units. + Returns an :class:`cf_units.Unit`, or a + value that can be made into one. + To ensure backwards-compatibility, also accepts a callable with + call signature (units). + + If the aggregator is used by a cube aggregation method (e.g., + :meth:`~iris.cube.Cube.collapsed`, + :meth:`~iris.cube.Cube.aggregated_by`, + :meth:`~iris.cube.Cube.rolling_window`), a keyword argument + `_weights_units` is provided to this function to allow updating + units based on the weights. `_weights_units` is determined from the + `weights` given to the aggregator (``None`` if no weights are + given). See :ref:`user guide ` + for an example of weighted aggregation that changes units. * lazy_func (callable or None): An alternative to :data:`call_func` implementing a lazy @@ -1112,7 +1147,8 @@ def __init__( main operation, but should raise an error in unhandled cases. Additional kwargs: - Passed through to :data:`call_func` and :data:`lazy_func`. + Passed through to :data:`call_func`, :data:`lazy_func`, and + :data:`units_func`. """ Aggregator.__init__( @@ -1187,20 +1223,18 @@ def post_process(self, collapsed_cube, data_result, coords, **kwargs): return result -class _Weights(np.ndarray): +class _Weights: """Class for handling weights for weighted aggregation. - This subclasses :class:`numpy.ndarray`; thus, all methods and properties of - :class:`numpy.ndarray` (e.g., `shape`, `ndim`, `view()`, etc.) are - available. + Provides the following two attributes: - Details on subclassing :class:`numpy.ndarray` are given here: - https://numpy.org/doc/stable/user/basics.subclassing.html + * ``array``: Lazy or non-lazy array of weights. + * ``units``: Units associated with the weights. """ - def __new__(cls, weights, cube, units=None): - """Create class instance. + def __init__(self, weights, cube): + """Initialize class instance. Args: @@ -1212,18 +1246,14 @@ def __new__(cls, weights, cube, units=None): one of :meth:`iris.cube.Cube.coords`, :meth:`iris.cube.Cube.cell_measures`, or :meth:`iris.cube.Cube.ancillary_variables`). If given as an - array-like object, use this directly and assume units of `1`. If - `units` is given, ignore all units derived above and use the ones - given by `units`. + array-like object, use this directly and assume units of `1`. Note: + this does **not** create a copy of the input array. * cube (Cube): Input cube for aggregation. If weights is given as :obj:`str` or :class:`iris.coords._DimensionalMetadata`, try to extract the :class:`iris.coords._DimensionalMetadata` object and corresponding dimensional mappings from this cube. Otherwise, this argument is ignored. - * units (string, Unit): - If ``None``, use units derived from `weights`. Otherwise, overwrite - the units derived from `weights` and use `units`. """ # `weights` is a cube @@ -1231,8 +1261,8 @@ def __new__(cls, weights, cube, units=None): # "hasattr" syntax here # --> Extract data and units from cube if hasattr(weights, "add_aux_coord"): - obj = np.asarray(weights.data).view(cls) - obj.units = weights.units + derived_array = weights.core_data() + derived_units = weights.units # `weights`` is a string or _DimensionalMetadata object # --> Extract _DimensionalMetadata object from cube, broadcast it to @@ -1240,55 +1270,23 @@ def __new__(cls, weights, cube, units=None): # its data and units elif isinstance(weights, (str, _DimensionalMetadata)): dim_metadata = cube._dimensional_metadata(weights) - arr = dim_metadata._values + derived_array = dim_metadata._core_values() if dim_metadata.shape != cube.shape: - arr = iris.util.broadcast_to_shape( - arr, + derived_array = iris.util.broadcast_to_shape( + derived_array, cube.shape, dim_metadata.cube_dims(cube), ) - obj = np.asarray(arr).view(cls) - obj.units = dim_metadata.units + derived_units = dim_metadata.units - # Remaining types (e.g., np.ndarray): try to convert to ndarray. + # Remaining types (e.g., np.ndarray, dask.array.core.Array, etc.) + # --> Use array directly and assign units of "1" else: - obj = np.asarray(weights).view(cls) - obj.units = Unit("1") - - # Overwrite units from units argument if necessary - if units is not None: - obj.units = units + derived_array = weights + derived_units = Unit("1") - return obj - - def __array_finalize__(self, obj): - """See https://numpy.org/doc/stable/user/basics.subclassing.html. - - Note - ---- - `obj` cannot be `None` here since ``_Weights.__new__`` does not call - ``super().__new__`` explicitly. - - """ - self.units = getattr(obj, "units", Unit("1")) - - @classmethod - def update_kwargs(cls, kwargs, cube): - """Update ``weights`` keyword argument in-place. - - Args: - - * kwargs (dict): - Keyword arguments that will be updated in-place if a `weights` - keyword is present which is not ``None``. - * cube (Cube): - Input cube for aggregation. If weights is given as :obj:`str`, try - to extract a cell measure with the corresponding name from this - cube. Otherwise, this argument is ignored. - - """ - if kwargs.get("weights") is not None: - kwargs["weights"] = cls(kwargs["weights"], cube) + self.array = derived_array + self.units = derived_units def create_weighted_aggregator_fn(aggregator_fn, axis, **kwargs): @@ -1752,11 +1750,17 @@ def _sum(array, **kwargs): def _sum_units_func(units, **kwargs): """Multiply original units with weight units if possible.""" weights = kwargs.get("weights") - if weights is None: # no weights given or weights are None - result = units - elif hasattr(weights, "units"): # weights are _Weights - result = units * weights.units - else: # weights are regular np.ndarrays + weights_units = kwargs.get("_weights_units") + multiply_by_weights_units = all( + [ + weights is not None, + weights_units is not None, + weights_units != "1", + ] + ) + if multiply_by_weights_units: + result = units * weights_units + else: result = units return result diff --git a/lib/iris/cube.py b/lib/iris/cube.py index 44a40cf72b..877c6914bd 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -3836,7 +3836,10 @@ def collapsed(self, coords, aggregator, **kwargs): """ # Update weights kwargs (if necessary) to handle different types of # weights - _Weights.update_kwargs(kwargs, self) + weights_info = None + if kwargs.get("weights") is not None: + weights_info = _Weights(kwargs["weights"], self) + kwargs["weights"] = weights_info.array # Convert any coordinate names to coordinates coords = self._as_list_of_coords(coords) @@ -3981,7 +3984,11 @@ def collapsed(self, coords, aggregator, **kwargs): ) aggregator.update_metadata( - collapsed_cube, coords, axis=collapse_axis, **kwargs + collapsed_cube, + coords, + axis=collapse_axis, + _weights_units=getattr(weights_info, "units", None), + **kwargs, ) result = aggregator.post_process( collapsed_cube, data_result, coords, **kwargs @@ -4074,7 +4081,10 @@ def aggregated_by( """ # Update weights kwargs (if necessary) to handle different types of # weights - _Weights.update_kwargs(kwargs, self) + weights_info = None + if kwargs.get("weights") is not None: + weights_info = _Weights(kwargs["weights"], self) + kwargs["weights"] = weights_info.array groupby_coords = [] dimension_to_groupby = None @@ -4114,16 +4124,10 @@ def aggregated_by( f"that is aggregated, got {len(weights):d}, expected " f"{self.shape[dimension_to_groupby]:d}" ) - - # iris.util.broadcast_to_shape does not preserve _Weights type - weights = _Weights( - iris.util.broadcast_to_shape( - weights, - self.shape, - (dimension_to_groupby,), - ), - self, - units=weights.units, + weights = iris.util.broadcast_to_shape( + weights, + self.shape, + (dimension_to_groupby,), ) if weights.shape != self.shape: raise ValueError( @@ -4274,7 +4278,11 @@ def aggregated_by( # Add the aggregation meta data to the aggregate-by cube. aggregator.update_metadata( - aggregateby_cube, groupby_coords, aggregate=True, **kwargs + aggregateby_cube, + groupby_coords, + aggregate=True, + _weights_units=getattr(weights_info, "units", None), + **kwargs, ) # Replace the appropriate coordinates within the aggregate-by cube. (dim_coord,) = self.coords( @@ -4413,7 +4421,10 @@ def rolling_window(self, coord, aggregator, window, **kwargs): """ # Update weights kwargs (if necessary) to handle different types of # weights - _Weights.update_kwargs(kwargs, self) + weights_info = None + if kwargs.get("weights") is not None: + weights_info = _Weights(kwargs["weights"], self) + kwargs["weights"] = weights_info.array coord = self._as_list_of_coords(coord)[0] @@ -4500,6 +4511,7 @@ def rolling_window(self, coord, aggregator, window, **kwargs): new_cube, [coord], action="with a rolling window of length %s over" % window, + _weights_units=getattr(weights_info, "units", None), **kwargs, ) # and perform the data transformation, generating weights first if @@ -4516,14 +4528,8 @@ def rolling_window(self, coord, aggregator, window, **kwargs): "as the window." ) kwargs = dict(kwargs) - - # iris.util.broadcast_to_shape does not preserve _Weights type - kwargs["weights"] = _Weights( - iris.util.broadcast_to_shape( - weights, rolling_window_data.shape, (dimension + 1,) - ), - self, - units=weights.units, + kwargs["weights"] = iris.util.broadcast_to_shape( + weights, rolling_window_data.shape, (dimension + 1,) ) data_result = aggregator.aggregate( rolling_window_data, axis=dimension + 1, **kwargs diff --git a/lib/iris/tests/test_analysis.py b/lib/iris/tests/test_analysis.py index 4b36a915aa..0d88a23055 100644 --- a/lib/iris/tests/test_analysis.py +++ b/lib/iris/tests/test_analysis.py @@ -15,6 +15,7 @@ import pytest import iris +from iris.analysis import _Weights import iris.analysis.cartography import iris.analysis.maths import iris.coord_systems @@ -1706,23 +1707,33 @@ def test_weights_in_kwargs(self): class TestWeights: @pytest.fixture(autouse=True) def setup_test_data(self): + self.array_lib = np + self.target_type = np.ndarray + self.create_test_data() + + def create_test_data(self): + self.data = self.array_lib.arange(6).reshape(2, 3) self.lat = iris.coords.DimCoord( - [0, 1], standard_name="latitude", units="degrees" + self.array_lib.array([0, 1]), + standard_name="latitude", + units="degrees", ) self.lon = iris.coords.DimCoord( - [0, 1, 2], standard_name="longitude", units="degrees" + self.array_lib.array([0, 1, 2]), + standard_name="longitude", + units="degrees", ) self.cell_measure = iris.coords.CellMeasure( - np.arange(6).reshape(2, 3), standard_name="cell_area", units="m2" + self.data, standard_name="cell_area", units="m2" ) self.aux_coord = iris.coords.AuxCoord( - [3, 4], long_name="auxcoord", units="s" + self.array_lib.array([3, 4]), long_name="auxcoord", units="s" ) self.ancillary_variable = iris.coords.AncillaryVariable( - [5, 6, 7], var_name="ancvar", units="kg" + self.array_lib.array([5, 6, 7]), var_name="ancvar", units="kg" ) self.cube = iris.cube.Cube( - np.arange(6).reshape(2, 3), + self.data, standard_name="air_temperature", units="K", dim_coords_and_dims=[(self.lat, 0), (self.lon, 1)], @@ -1731,188 +1742,95 @@ def setup_test_data(self): ancillary_variables_and_dims=[(self.ancillary_variable, 1)], ) - def test_init_with_weights(self): - weights = iris.analysis._Weights([], self.cube) - new_weights = iris.analysis._Weights(weights, self.cube) - assert isinstance(new_weights, iris.analysis._Weights) - assert new_weights is not weights - np.testing.assert_array_equal(new_weights, []) - assert new_weights.units == "1" - assert weights.units == "1" - - def test_init_with_weights_and_units(self): - weights = iris.analysis._Weights([], self.cube) - new_weights = iris.analysis._Weights(weights, self.cube, units="J") - assert isinstance(new_weights, iris.analysis._Weights) - assert new_weights is not weights - np.testing.assert_array_equal(new_weights, []) - assert new_weights.units == "J" + def test_init_with_array(self): + weights = _Weights(self.data, self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + assert weights.array is self.data assert weights.units == "1" def test_init_with_cube(self): - weights = iris.analysis._Weights(self.cube, self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) + weights = _Weights(self.cube, self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + assert weights.array is self.data assert weights.units == "K" - def test_init_with_cube_and_units(self): - weights = iris.analysis._Weights(self.cube, self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) - assert weights.units == "J" - def test_init_with_str_dim_coord(self): - weights = iris.analysis._Weights("latitude", self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[0, 0, 0], [1, 1, 1]]) + weights = _Weights("latitude", self.cube) + # DimCoord always realizes points + assert isinstance(weights.array, np.ndarray) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[0, 0, 0], [1, 1, 1]]) assert weights.units == "degrees" - def test_init_with_str_dim_coord_and_units(self): - weights = iris.analysis._Weights("latitude", self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[0, 0, 0], [1, 1, 1]]) - assert weights.units == "J" - def test_init_with_str_aux_coord(self): - weights = iris.analysis._Weights("auxcoord", self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[3, 3, 3], [4, 4, 4]]) + weights = _Weights("auxcoord", self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[3, 3, 3], [4, 4, 4]]) assert weights.units == "s" - def test_init_with_str_aux_coord_and_units(self): - weights = iris.analysis._Weights("auxcoord", self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[3, 3, 3], [4, 4, 4]]) - assert weights.units == "J" - def test_init_with_str_ancillary_variable(self): - weights = iris.analysis._Weights("ancvar", self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[5, 6, 7], [5, 6, 7]]) + weights = _Weights("ancvar", self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[5, 6, 7], [5, 6, 7]]) assert weights.units == "kg" - def test_init_with_str_ancillary_variable_and_units(self): - weights = iris.analysis._Weights("ancvar", self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[5, 6, 7], [5, 6, 7]]) - assert weights.units == "J" - def test_init_with_str_cell_measure(self): - weights = iris.analysis._Weights("cell_area", self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) + weights = _Weights("cell_area", self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, self.data) assert weights.units == "m2" - def test_init_with_str_cell_measure_and_units(self): - weights = iris.analysis._Weights("cell_area", self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) - assert weights.units == "J" - def test_init_with_dim_coord(self): - weights = iris.analysis._Weights(self.lat, self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[0, 0, 0], [1, 1, 1]]) + weights = _Weights(self.lat, self.cube) + # DimCoord always realizes points + assert isinstance(weights.array, np.ndarray) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[0, 0, 0], [1, 1, 1]]) assert weights.units == "degrees" - def test_init_with_dim_coord_and_units(self): - weights = iris.analysis._Weights(self.lat, self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[0, 0, 0], [1, 1, 1]]) - assert weights.units == "J" - def test_init_with_aux_coord(self): - weights = iris.analysis._Weights(self.aux_coord, self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[3, 3, 3], [4, 4, 4]]) + weights = _Weights(self.aux_coord, self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[3, 3, 3], [4, 4, 4]]) assert weights.units == "s" - def test_init_with_aux_coord_and_units(self): - weights = iris.analysis._Weights(self.aux_coord, self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[3, 3, 3], [4, 4, 4]]) - assert weights.units == "J" - def test_init_with_ancillary_variable(self): - weights = iris.analysis._Weights(self.ancillary_variable, self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[5, 6, 7], [5, 6, 7]]) + weights = _Weights(self.ancillary_variable, self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, [[5, 6, 7], [5, 6, 7]]) assert weights.units == "kg" - def test_init_with_ancillary_variable_and_units(self): - weights = iris.analysis._Weights( - self.ancillary_variable, self.cube, units="J" - ) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [[5, 6, 7], [5, 6, 7]]) - assert weights.units == "J" - def test_init_with_cell_measure(self): - weights = iris.analysis._Weights(self.cell_measure, self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) + weights = _Weights(self.cell_measure, self.cube) + assert isinstance(weights.array, self.target_type) + assert isinstance(weights.units, cf_units.Unit) + np.testing.assert_array_equal(weights.array, self.data) assert weights.units == "m2" - def test_init_with_cell_measure_and_units(self): - weights = iris.analysis._Weights( - self.cell_measure, self.cube, units="J" - ) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.arange(6).reshape(2, 3)) - assert weights.units == "J" - def test_init_with_list(self): - weights = iris.analysis._Weights([1, 2, 3], self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [1, 2, 3]) - assert weights.units == "1" - - def test_init_with_list_and_units(self): - weights = iris.analysis._Weights([1, 2, 3], self.cube, units="J") - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, [1, 2, 3]) - assert weights.units == "J" - - def test_init_with_ndarray(self): - weights = iris.analysis._Weights(np.zeros((5, 5)), self.cube) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.zeros((5, 5))) + list_in = [0, 1, 2] + weights = _Weights(list_in, self.cube) + assert isinstance(weights.array, list) + assert isinstance(weights.units, cf_units.Unit) + assert weights.array is list_in assert weights.units == "1" - def test_init_with_ndarray_and_units(self): - weights = iris.analysis._Weights( - np.zeros((5, 5)), self.cube, units="J" - ) - assert isinstance(weights, iris.analysis._Weights) - np.testing.assert_array_equal(weights, np.zeros((5, 5))) - assert weights.units == "J" - - def test_init_with_invalid_obj(self): - with pytest.raises(KeyError): - iris.analysis._Weights("invalid_obj", self.cube) - - def test_init_with_invalid_obj_and_units(self): - with pytest.raises(KeyError): - iris.analysis._Weights("invalid_obj", self.cube, units="J") - def test_update_kwargs_no_weights(self): - kwargs = {"test": [1, 2, 3]} - iris.analysis._Weights.update_kwargs(kwargs, self.cube) - assert kwargs == {"test": [1, 2, 3]} +class TestWeightsLazy(TestWeights): + """Repeat tests from ``TestWeights`` with lazy arrays.""" - def test_update_kwargs_weights_none(self): - kwargs = {"test": [1, 2, 3], "weights": None} - iris.analysis._Weights.update_kwargs(kwargs, self.cube) - assert kwargs == {"test": [1, 2, 3], "weights": None} - - def test_update_kwargs_weights(self): - kwargs = {"test": [1, 2, 3], "weights": [1, 2]} - iris.analysis._Weights.update_kwargs(kwargs, self.cube) - assert len(kwargs) == 2 - assert kwargs["test"] == [1, 2, 3] - assert isinstance(kwargs["weights"], iris.analysis._Weights) - np.testing.assert_array_equal(kwargs["weights"], [1, 2]) - assert kwargs["weights"].units == "1" + @pytest.fixture(autouse=True) + def setup_test_data(self): + self.array_lib = da + self.target_type = da.core.Array + self.create_test_data() def test__Groupby_repr(): @@ -1926,25 +1844,37 @@ def test__Groupby_repr(): assert repr(grouper) == "_Groupby(['year'], shared_coords=['time'])" -CUBE = iris.cube.Cube(0) - - @pytest.mark.parametrize( "kwargs,expected", [ - ({}, "s"), - ({"test": "m"}, "s"), - ({"weights": None}, "s"), - ({"weights": [1, 2, 3]}, "s"), - ({"weights": iris.analysis._Weights([1], CUBE)}, "s"), - ({"weights": iris.analysis._Weights([1], CUBE, units="kg")}, "s kg"), + ({}, "kg m-2"), + ({"test": "m"}, "kg m-2"), + ({"weights": None}, "kg m-2"), + ({"weights": [1, 2, 3]}, "kg m-2"), + ({"_weights_units": None}, "kg m-2"), + ({"test": "m", "_weights_units": None}, "kg m-2"), + ({"weights": None, "_weights_units": None}, "kg m-2"), + ({"weights": [1, 2, 3], "_weights_units": None}, "kg m-2"), + ({"_weights_units": "1"}, "kg m-2"), + ({"test": "m", "_weights_units": "1"}, "kg m-2"), + ({"weights": None, "_weights_units": "1"}, "kg m-2"), + ({"weights": [1, 2, 3], "_weights_units": "1"}, "kg m-2"), + ({"_weights_units": "s"}, "kg m-2"), + ({"test": "m", "_weights_units": "s"}, "kg m-2"), + ({"weights": None, "_weights_units": "s"}, "kg m-2"), + ({"weights": [1, 2, 3], "_weights_units": "s"}, "kg m-2 s"), ], ) def test_sum_units_func(kwargs, expected): - units = cf_units.Unit("s") + units = cf_units.Unit("kg m-2") result = iris.analysis._sum_units_func(units, **kwargs) assert result == expected + # Make sure that the units' string representation (= origin) has not + # changed if the units have not changed (even when weights units are "1") + if result == units: + assert result.origin == expected + if __name__ == "__main__": tests.main() diff --git a/lib/iris/tests/unit/cube/test_Cube.py b/lib/iris/tests/unit/cube/test_Cube.py index 28fbe429c1..8084ab31fa 100644 --- a/lib/iris/tests/unit/cube/test_Cube.py +++ b/lib/iris/tests/unit/cube/test_Cube.py @@ -367,14 +367,13 @@ def setUp(self): self.data = np.arange(6.0).reshape((2, 3)) self.lazydata = as_lazy_data(self.data) # Test cubes with (same-valued) real and lazy data - cube_real = Cube(self.data, units="m") + cube_real = Cube(self.data, units="kg m-2 s-1") for i_dim, name in enumerate(("y", "x")): npts = cube_real.shape[i_dim] coord = DimCoord(np.arange(npts), long_name=name) cube_real.add_dim_coord(coord, i_dim) self.cube_real = cube_real self.cube_lazy = cube_real.copy(data=self.lazydata) - self.cube_lazy.units = "kg" # Test weights and expected result for a y-collapse self.y_weights = np.array([0.3, 0.5]) self.full_weights_y = np.broadcast_to( @@ -396,7 +395,8 @@ def test_weighted_fullweights_real_y(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_y ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_fullweights_lazy_y(self): # Full-shape weights, lazy data : Check lazy result, same values as real calc. @@ -407,7 +407,7 @@ def test_weighted_fullweights_lazy_y(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_y ) - self.assertEqual(cube_collapsed.units, "kg") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") def test_weighted_1dweights_real_y(self): # 1-D weights, real data : Check same results as full-shape. @@ -417,7 +417,8 @@ def test_weighted_1dweights_real_y(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_y ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_1dweights_lazy_y(self): # 1-D weights, lazy data : Check lazy result, same values as real calc. @@ -428,7 +429,7 @@ def test_weighted_1dweights_lazy_y(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_y ) - self.assertEqual(cube_collapsed.units, "kg") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") def test_weighted_fullweights_real_x(self): # Full weights, real data, ** collapse X ** : as for 'y' case above @@ -438,7 +439,8 @@ def test_weighted_fullweights_real_x(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_x ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_fullweights_lazy_x(self): # Full weights, lazy data, ** collapse X ** : as for 'y' case above @@ -449,7 +451,8 @@ def test_weighted_fullweights_lazy_x(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_x ) - self.assertEqual(cube_collapsed.units, "kg") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_1dweights_real_x(self): # 1-D weights, real data, ** collapse X ** : as for 'y' case above @@ -459,7 +462,8 @@ def test_weighted_1dweights_real_x(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_x ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_1dweights_lazy_x(self): # 1-D weights, lazy data, ** collapse X ** : as for 'y' case above @@ -470,30 +474,34 @@ def test_weighted_1dweights_lazy_x(self): self.assertArrayAlmostEqual( cube_collapsed.data, self.expected_result_x ) - self.assertEqual(cube_collapsed.units, "kg") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_sum_fullweights_adapt_units_real_y(self): - # Check that units are adapted correctly ('m' * '1' = 'm') + # Check that units are adapted correctly (kg m-2 s-1 * 1 = kg m-2 s-1) cube_collapsed = self.cube_real.collapsed( "y", SUM, weights=self.full_weights_y ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_sum_fullweights_adapt_units_lazy_y(self): - # Check that units are adapted correctly ('kg' * '1' = 'kg') + # Check that units are adapted correctly (kg m-2 s-1 * 1 = kg m-2 s-1) cube_collapsed = self.cube_lazy.collapsed( "y", SUM, weights=self.full_weights_y ) - self.assertEqual(cube_collapsed.units, "kg") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_sum_1dweights_adapt_units_real_y(self): - # Check that units are adapted correctly ('m' * '1' = 'm') + # Check that units are adapted correctly (kg m-2 s-1 * 1 = kg m-2 s-1) # Note: the same test with lazy data fails: # https://github.com/SciTools/iris/issues/5083 cube_collapsed = self.cube_real.collapsed( "y", SUM, weights=self.y_weights ) - self.assertEqual(cube_collapsed.units, "m") + self.assertEqual(cube_collapsed.units, "kg m-2 s-1") + self.assertEqual(cube_collapsed.units.origin, "kg m-2 s-1") def test_weighted_sum_with_unknown_units_real_y(self): # Check that units are adapted correctly ('unknown' * '1' = 'unknown') @@ -543,27 +551,27 @@ def setUp(self): self.full_weights_x = self.cube_real.copy(self.full_weights_x_original) def test_weighted_sum_fullweights_adapt_units_real_y(self): - # Check that units are adapted correctly ('m' * 'm2' = 'm3') + # Check that units are adapted correctly (kg m-2 s-1 * m2 = kg s-1) cube_collapsed = self.cube_real.collapsed( "y", SUM, weights=self.full_weights_y ) - self.assertEqual(cube_collapsed.units, "m3") + self.assertEqual(cube_collapsed.units, "kg s-1") def test_weighted_sum_fullweights_adapt_units_lazy_y(self): - # Check that units are adapted correctly ('kg' * 'm2' = 'kg m2') + # Check that units are adapted correctly (kg m-2 s-1 * m2 = kg s-1) cube_collapsed = self.cube_lazy.collapsed( "y", SUM, weights=self.full_weights_y ) - self.assertEqual(cube_collapsed.units, "kg m2") + self.assertEqual(cube_collapsed.units, "kg s-1") def test_weighted_sum_1dweights_adapt_units_real_y(self): - # Check that units are adapted correctly ('m' * 'm2' = 'm3') + # Check that units are adapted correctly (kg m-2 s-1 * m2 = kg s-1) # Note: the same test with lazy data fails: # https://github.com/SciTools/iris/issues/5083 cube_collapsed = self.cube_real.collapsed( "y", SUM, weights=self.y_weights ) - self.assertEqual(cube_collapsed.units, "m3") + self.assertEqual(cube_collapsed.units, "kg s-1") class Test_collapsed__multidim_weighted_with_str( @@ -988,7 +996,7 @@ def test_ancillary_variables_and_cell_measures_removed(self): self.assertEqual(res_cube.cell_measures(), []) def test_weights_arr(self): - weights = [0, 0, 1, 0, 2] + weights = np.array([0, 0, 1, 0, 2]) res_cube = self.cube.rolling_window("val", SUM, 5, weights=weights) np.testing.assert_array_equal(res_cube.data, [10, 13]) self.assertEqual(res_cube.units, "kg") From d6c6c99bc31bf76f118ecd471bb75be525d00fd0 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Mon, 26 Jun 2023 15:53:02 +0100 Subject: [PATCH 15/82] update whatsnew patch release version and date (#5360) --- docs/src/whatsnew/3.6.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/whatsnew/3.6.rst b/docs/src/whatsnew/3.6.rst index 892da3310d..389356df46 100644 --- a/docs/src/whatsnew/3.6.rst +++ b/docs/src/whatsnew/3.6.rst @@ -55,10 +55,10 @@ This document explains the changes made to Iris for this release or feature requests for improving Iris. Enjoy! -|iris_version| |build_date| -=========================== +v3.6.1 (26 June 2023) +===================== -.. dropdown:: |iris_version| Patches +.. dropdown:: v3.6.1 Patches :color: primary :icon: alert :animate: fade-in From 5b42f47e71fbeb7861a9df59c8bd8c0be9a340e3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 11 Jul 2023 09:45:55 +0100 Subject: [PATCH 16/82] [pre-commit.ci] pre-commit autoupdate (#5374) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/blacken-docs: 1.14.0 → 1.15.0](https://github.com/asottile/blacken-docs/compare/1.14.0...1.15.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 500f69134f..63c7839dc5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: args: [--filter-files] - repo: https://github.com/asottile/blacken-docs - rev: 1.14.0 + rev: 1.15.0 hooks: - id: blacken-docs types: [file, rst] From bc17f434f1f639eaf0e7e967b9f6930c3d3d2576 Mon Sep 17 00:00:00 2001 From: lbdreyer Date: Wed, 19 Jul 2023 14:49:37 +0100 Subject: [PATCH 17/82] Ignore sticklerci (#5381) --- docs/src/conf.py | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/src/conf.py b/docs/src/conf.py index a204263a24..d7c04f2130 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -384,6 +384,7 @@ def _dotv(version): "http://www.nationalarchives.gov.uk/doc/open-government-licence", "https://www.metoffice.gov.uk/", "https://biggus.readthedocs.io/", + "https://stickler-ci.com/", ] # list of sources to exclude from the build. From 2a9e131875be42c39ab4b8fc9956e4a4d59f83a2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 20 Jul 2023 12:11:21 +0100 Subject: [PATCH 18/82] [pre-commit.ci] pre-commit autoupdate (#5380) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 63c7839dc5..9dc69d2649 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,7 +36,7 @@ repos: additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.7.0 hooks: - id: black pass_filenames: false From 66ecb4c33bb0676320c3d68a6e95e9412da9f6b7 Mon Sep 17 00:00:00 2001 From: Alex Chamberlain-Clay <68277260+acchamber@users.noreply.github.com> Date: Wed, 26 Jul 2023 11:14:48 +0100 Subject: [PATCH 19/82] Bugfix for #3696 (#5382) * first draft of fix with comments to be removed * Removed comments, added warning * responded to pull request * Updated tests and test warnings * fixed dtypes on bounds tests * Updated "what's new" docs section * added link to github page --------- Co-authored-by: alex.chamberlain-clay --- docs/src/whatsnew/latest.rst | 5 +++- lib/iris/_concatenate.py | 7 +++++ lib/iris/tests/test_concatenate.py | 29 +++++++++++++++---- .../unit/concatenate/test_concatenate.py | 8 +++++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 9b62715be6..7bdb55a58a 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -32,6 +32,9 @@ This document explains the changes made to Iris for this release #. `@rcomer`_ rewrote :func:`~iris.util.broadcast_to_shape` so it now handles lazy data. (:pull:`5307`) + +#. `@acchamber`_ added error and warning messages about coordinate overlaps to + :func:`~iris.cube.concatenate` to improve the concatenation process. (:pull:`5382`) 🐛 Bugs Fixed @@ -89,7 +92,7 @@ This document explains the changes made to Iris for this release Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: .. _@rsdavies: https://github.com/rsdavies - +.. _@acchamber: https://github.com/acchamber .. comment diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index 7bb27eaf83..c6d58b1622 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -9,6 +9,7 @@ """ from collections import defaultdict, namedtuple +import warnings import dask.array as da import numpy as np @@ -992,6 +993,12 @@ def register( match = self._sequence( coord_signature.dim_extents[dim_ind], candidate_axis ) + if error_on_mismatch and not match: + msg = f"Found cubes with overlap on concatenate axis {candidate_axis}, cannot concatenate overlapping cubes" + raise iris.exceptions.ConcatenateError([msg]) + elif not match: + msg = f"Found cubes with overlap on concatenate axis {candidate_axis}, skipping concatenation for these cubes" + warnings.warn(msg) # Check for compatible AuxCoords. if match: diff --git a/lib/iris/tests/test_concatenate.py b/lib/iris/tests/test_concatenate.py index 7cb11189d6..9287a79fda 100644 --- a/lib/iris/tests/test_concatenate.py +++ b/lib/iris/tests/test_concatenate.py @@ -15,6 +15,7 @@ import dask.array as da import numpy as np import numpy.ma as ma +import pytest from iris.aux_factory import HybridHeightFactory from iris.coords import AncillaryVariable, AuxCoord, CellMeasure, DimCoord @@ -338,7 +339,10 @@ def test_points_overlap_increasing(self): y = (0, 2) cubes.append(_make_cube((0, 2), y, 1)) cubes.append(_make_cube((1, 3), y, 2)) - result = concatenate(cubes) + with pytest.warns( + UserWarning, match="Found cubes with overlap on concatenate axis" + ): + result = concatenate(cubes) self.assertEqual(len(result), 2) def test_points_overlap_decreasing(self): @@ -346,7 +350,10 @@ def test_points_overlap_decreasing(self): x = (0, 2) cubes.append(_make_cube(x, (3, 0, -1), 1)) cubes.append(_make_cube(x, (1, -1, -1), 2)) - result = concatenate(cubes) + with pytest.warns( + UserWarning, match="Found cubes with overlap on concatenate axis" + ): + result = concatenate(cubes) self.assertEqual(len(result), 2) def test_bounds_overlap_increasing(self): @@ -354,9 +361,14 @@ def test_bounds_overlap_increasing(self): y = (0, 2) cubes.append(_make_cube((0, 2), y, 1)) cube = _make_cube((2, 4), y, 1) - cube.coord("x").bounds = np.array([[0.5, 2.5], [2.5, 3.5]]) + cube.coord("x").bounds = np.array( + [[0.5, 2.5], [2.5, 3.5]], dtype=np.float32 + ) cubes.append(cube) - result = concatenate(cubes) + with pytest.warns( + UserWarning, match="Found cubes with overlap on concatenate axis" + ): + result = concatenate(cubes) self.assertEqual(len(result), 2) def test_bounds_overlap_decreasing(self): @@ -364,9 +376,14 @@ def test_bounds_overlap_decreasing(self): y = (0, 2) cubes.append(_make_cube((3, 1, -1), y, 1)) cube = _make_cube((1, -1, -1), y, 2) - cube.coord("x").bounds = np.array([[2.5, 0.5], [0.5, -0.5]]) + cube.coord("x").bounds = np.array( + [[2.5, 0.5], [0.5, -0.5]], dtype=np.float32 + ) cubes.append(cube) - result = concatenate(cubes) + with pytest.warns( + UserWarning, match="Found cubes with overlap on concatenate axis" + ): + result = concatenate(cubes) self.assertEqual(len(result), 2) def test_scalar_difference(self): diff --git a/lib/iris/tests/unit/concatenate/test_concatenate.py b/lib/iris/tests/unit/concatenate/test_concatenate.py index bb3770cf0f..c2ca01f781 100644 --- a/lib/iris/tests/unit/concatenate/test_concatenate.py +++ b/lib/iris/tests/unit/concatenate/test_concatenate.py @@ -242,6 +242,14 @@ def test_datatype_difference_message(self): with self.assertRaisesRegex(ConcatenateError, exc_regexp): _ = concatenate([cube_1, cube_2], True) + def test_dim_coords_overlap_message(self): + cube_1 = self.cube + cube_2 = cube_1.copy() + cube_2.coord("time").points = np.arange(1, 3, dtype=np.float32) + exc_regexp = "Found cubes with overlap on concatenate axis" + with self.assertRaisesRegex(ConcatenateError, exc_regexp): + _ = concatenate([cube_1, cube_2], True) + class TestOrder(tests.IrisTest): def _make_cube(self, points, bounds=None): From 3c1b3e6993ba1283b5630ea24ee450d2bd7f246f Mon Sep 17 00:00:00 2001 From: Alex Chamberlain-Clay <68277260+acchamber@users.noreply.github.com> Date: Wed, 26 Jul 2023 13:57:23 +0100 Subject: [PATCH 20/82] Added link to UDUNITS-2 database to convert_units docstrings (#5388) Co-authored-by: alex.chamberlain-clay --- docs/src/whatsnew/latest.rst | 4 ++++ lib/iris/coords.py | 2 ++ lib/iris/cube.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 7bdb55a58a..d7b0843415 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -78,6 +78,9 @@ This document explains the changes made to Iris for this release section into the user guide, containing advice and use cases to help users get the best out of Dask with Iris. +#. `@acchamber`_ improved documentation for :meth:`~iris.cube.Cube.convert_units` + and :meth:`~iris.coords.Coord.convert_units` by including a link to the UDUNITS-2 + documentation which contains lists of compatible units and aliases for them. 💼 Internal =========== @@ -95,5 +98,6 @@ This document explains the changes made to Iris for this release .. _@acchamber: https://github.com/acchamber + .. comment Whatsnew resources in alphabetical order: diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 63bc524637..1f00e10840 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -1862,6 +1862,8 @@ def convert_units(self, unit): multiply each value in :attr:`~iris.coords.Coord.points` and :attr:`~iris.coords.Coord.bounds` by 180.0/:math:`\pi`. + Full list of supported units can be found in the UDUNITS-2 documentation + https://docs.unidata.ucar.edu/udunits/current/#Database """ super().convert_units(unit=unit) diff --git a/lib/iris/cube.py b/lib/iris/cube.py index ffc2cf96e2..a21844241f 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -1134,6 +1134,9 @@ def convert_units(self, unit): celsius and subtract 273.15 from each value in :attr:`~iris.cube.Cube.data`. + Full list of supported units can be found in the UDUNITS-2 documentation + https://docs.unidata.ucar.edu/udunits/current/#Database + This operation preserves lazy data. """ From e66a0c86f964c61ac9a91f6c2de15bc67b900d5f Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Mon, 31 Jul 2023 12:20:49 +0100 Subject: [PATCH 21/82] Include location coordinates in the data variable coordinates attribute (#5389) * Include UGRID location coordinates on variable when saving. * Adjustments to tests. * What's New entry. * Adjustment to doctest. * Add test for mixed aux coords. --- docs/src/further_topics/ugrid/operations.rst | 2 + docs/src/whatsnew/latest.rst | 5 +++ lib/iris/fileformats/netcdf/saver.py | 24 ++++++++++- .../TestBasicSave/ugrid_ex1_1d_mesh.cdl | 1 + .../TestBasicSave/ugrid_ex2_2d_triangular.cdl | 1 + .../TestBasicSave/ugrid_ex3_2d_flexible.cdl | 1 + .../TestBasicSave/ugrid_ex4_3d_layered.cdl | 2 +- .../TestSaveUgrid__cube/basic_mesh.cdl | 1 + .../netcdf/saver/test_Saver__ugrid.py | 42 ++++++++++++++++++- 9 files changed, 74 insertions(+), 5 deletions(-) diff --git a/docs/src/further_topics/ugrid/operations.rst b/docs/src/further_topics/ugrid/operations.rst index f0638800fa..a088b588e1 100644 --- a/docs/src/further_topics/ugrid/operations.rst +++ b/docs/src/further_topics/ugrid/operations.rst @@ -267,6 +267,7 @@ saves the file in a UGRID-conformant format: edge_data:units = "K" ; edge_data:mesh = "my_mesh" ; edge_data:location = "edge" ; + edge_data:coordinates = "latitude_0 longitude_0" ; int64 height(height) ; height:standard_name = "height" ; int64 face_data(Mesh2d_face, height) ; @@ -274,6 +275,7 @@ saves the file in a UGRID-conformant format: face_data:units = "K" ; face_data:mesh = "my_mesh" ; face_data:location = "face" ; + face_data:coordinates = "latitude_1 longitude_1" ; // global attributes: :Conventions = "CF-1.7" ; diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index d7b0843415..3e51198ca3 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -36,6 +36,11 @@ This document explains the changes made to Iris for this release #. `@acchamber`_ added error and warning messages about coordinate overlaps to :func:`~iris.cube.concatenate` to improve the concatenation process. (:pull:`5382`) +#. `@trexfeathers`_ included mesh location coordinates + (e.g. :attr:`~iris.experimental.ugrid.Mesh.face_coords`) in + the data variable's ``coordinates`` attribute when saving to NetCDF. + (:issue:`5206`, :pull:`5389`) + 🐛 Bugs Fixed ============= diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index 312eea9c43..c0cfd3d10b 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -895,6 +895,9 @@ def _add_mesh(self, cube_or_mesh): coord, element_dims=(mesh_dims[location],), ) + # Only created once per file, but need to fetch the + # name later in _add_inner_related_vars(). + self._name_coord_map.append(coord_name, coord) coord_names.append(coord_name) # Record the coordinates (if any) on the mesh variable. if coord_names: @@ -1024,15 +1027,32 @@ def _add_aux_coords(self, cube, cf_var_cube, dimension_names): Names associated with the dimensions of the cube. """ + from iris.experimental.ugrid.mesh import ( + Mesh, + MeshEdgeCoords, + MeshFaceCoords, + MeshNodeCoords, + ) + # Exclude any mesh coords, which are bundled in with the aux-coords. - aux_coords_no_mesh = [ + coords_to_add = [ coord for coord in cube.aux_coords if not hasattr(coord, "mesh") ] + + # Include any relevant mesh location coordinates. + mesh: Mesh = getattr(cube, "mesh") + mesh_location: str = getattr(cube, "location") + if mesh and mesh_location: + location_coords: MeshNodeCoords | MeshEdgeCoords | MeshFaceCoords = getattr( + mesh, f"{mesh_location}_coords" + ) + coords_to_add.extend(list(location_coords)) + return self._add_inner_related_vars( cube, cf_var_cube, dimension_names, - aux_coords_no_mesh, + coords_to_add, ) def _add_cell_measures(self, cube, cf_var_cube, dimension_names): diff --git a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex1_1d_mesh.cdl b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex1_1d_mesh.cdl index 517991a17a..9a9ae5627d 100644 --- a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex1_1d_mesh.cdl +++ b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex1_1d_mesh.cdl @@ -33,6 +33,7 @@ variables: float datavar(nMesh1_edge) ; datavar:mesh = "Mesh1" ; datavar:location = "edge" ; + datavar:coordinates = "Mesh1_edge_x Mesh1_edge_y" ; // global attributes: :Conventions = "CF-1.7" ; diff --git a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex2_2d_triangular.cdl b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex2_2d_triangular.cdl index 5d01a263d6..761ca2e98f 100644 --- a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex2_2d_triangular.cdl +++ b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex2_2d_triangular.cdl @@ -69,6 +69,7 @@ variables: float datavar(nMesh2_face) ; datavar:mesh = "Mesh2" ; datavar:location = "face" ; + datavar:coordinates = "Mesh2_face_x Mesh2_face_y" ; // global attributes: :Conventions = "CF-1.7" ; diff --git a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex3_2d_flexible.cdl b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex3_2d_flexible.cdl index 355799e0d8..aa5879867d 100644 --- a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex3_2d_flexible.cdl +++ b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex3_2d_flexible.cdl @@ -69,6 +69,7 @@ variables: float datavar(nMesh2_face) ; datavar:mesh = "Mesh2" ; datavar:location = "face" ; + datavar:coordinates = "Mesh2_face_x Mesh2_face_y" ; // global attributes: :Conventions = "CF-1.7" ; diff --git a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex4_3d_layered.cdl b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex4_3d_layered.cdl index 64962e79aa..173dd9462c 100644 --- a/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex4_3d_layered.cdl +++ b/lib/iris/tests/results/integration/experimental/ugrid_save/TestBasicSave/ugrid_ex4_3d_layered.cdl @@ -70,7 +70,7 @@ variables: float datavar(Mesh2_layers, nMesh2_face) ; datavar:mesh = "Mesh2" ; datavar:location = "face" ; - datavar:coordinates = "Mesh2_depth Mesh2_surface" ; + datavar:coordinates = "Mesh2_depth Mesh2_face_x Mesh2_face_y Mesh2_surface" ; double Mesh2_layers(Mesh2_layers) ; Mesh2_layers:axis = "Z" ; Mesh2_layers:units = "1" ; diff --git a/lib/iris/tests/results/unit/fileformats/netcdf/saver/Saver__ugrid/TestSaveUgrid__cube/basic_mesh.cdl b/lib/iris/tests/results/unit/fileformats/netcdf/saver/Saver__ugrid/TestSaveUgrid__cube/basic_mesh.cdl index 91516ddae3..6bb87f3a05 100644 --- a/lib/iris/tests/results/unit/fileformats/netcdf/saver/Saver__ugrid/TestSaveUgrid__cube/basic_mesh.cdl +++ b/lib/iris/tests/results/unit/fileformats/netcdf/saver/Saver__ugrid/TestSaveUgrid__cube/basic_mesh.cdl @@ -23,6 +23,7 @@ variables: float unknown(Mesh2d_faces) ; unknown:mesh = "Mesh2d" ; unknown:location = "face" ; + unknown:coordinates = "face_x face_y" ; // global attributes: :Conventions = "CF-1.7" ; diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py index 323b498d9c..27d9709fe6 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py @@ -403,6 +403,10 @@ def test_basic_mesh(self): all(vars[co][_VAR_DIMS] == [face_dim] for co in face_coords) ) + # The face coordinates should be referenced by the data variable. + for coord in face_coords: + self.assertIn(coord, a_props["coordinates"]) + # The dims of the datavar also == [] self.assertEqual(a_props[_VAR_DIMS], [face_dim]) @@ -460,8 +464,10 @@ def test_multi_cubes_common_mesh(self): v_a, v_b = vars["a"], vars["b"] self.assertEqual(v_a["mesh"], mesh_name) self.assertEqual(v_a["location"], "face") + self.assertEqual(v_a["coordinates"], "face_x face_y") self.assertEqual(v_b["mesh"], mesh_name) self.assertEqual(v_b["location"], "face") + self.assertEqual(v_b["coordinates"], "face_x face_y") def test_multi_cubes_different_locations(self): cube1 = make_cube(var_name="a", location="face") @@ -478,8 +484,10 @@ def test_multi_cubes_different_locations(self): v_a, v_b = vars["a"], vars["b"] self.assertEqual(v_a["mesh"], mesh_name) self.assertEqual(v_a["location"], "face") + self.assertEqual(v_a["coordinates"], "face_x face_y") self.assertEqual(v_b["mesh"], mesh_name) self.assertEqual(v_b["location"], "node") + self.assertEqual(v_b["coordinates"], "node_x node_y") # the main variables map the face and node dimensions face_dim = vars_meshdim(vars, "face") @@ -520,6 +528,7 @@ def test_multi_cubes_equal_meshes(self): for props in a_props, b_props: self.assertEqual(props["mesh"], "Mesh2d") self.assertEqual(props["location"], "face") + self.assertEqual(props["coordinates"], "face_x face_y") # the data variables map the appropriate node dimensions self.assertEqual(a_props[_VAR_DIMS], ["Mesh2d_faces"]) @@ -543,11 +552,15 @@ def test_multi_cubes_different_mesh(self): self.assertEqual(2, len(mesh_datavars)) self.assertEqual(["a", "b"], sorted(mesh_datavars.keys())) + def get_props_attrs(props: dict): + return props["mesh"], props["location"], props["coordinates"] + # the main variables reference the correct meshes, and 'face' location a_props, b_props = vars["a"], vars["b"] - mesh_a, loc_a = a_props["mesh"], a_props["location"] - mesh_b, loc_b = b_props["mesh"], b_props["location"] + mesh_a, loc_a, coords_a = get_props_attrs(a_props) + mesh_b, loc_b, coords_b = get_props_attrs(b_props) self.assertNotEqual(mesh_a, mesh_b) + self.assertNotEqual(coords_a, coords_b) self.assertEqual(loc_a, "face") self.assertEqual(loc_b, "face") @@ -664,6 +677,31 @@ def test_alternate_cube_dim_order(self): self.assertEqual(v_a[_VAR_DIMS], ["height", "Mesh2d_faces"]) self.assertEqual(v_b[_VAR_DIMS], ["Mesh2d_faces", "height"]) + def test_mixed_aux_coords(self): + """ + ``coordinates`` attribute should include mesh location coords and 'normal' coords. + """ + + cube = make_cube() + mesh_dim = cube.mesh_dim() + mesh_len = cube.shape[mesh_dim] + coord = AuxCoord(np.arange(mesh_len), var_name="face_index") + cube.add_aux_coord(coord, mesh_dim) + + # Save and snapshot the result + tempfile_path = self.check_save_cubes(cube) + dims, vars = scan_dataset(tempfile_path) + + # There is exactly 1 mesh-linked (data)var + data_vars = vars_w_props(vars, mesh="*") + ((_, a_props),) = data_vars.items() + + expected_coords = [c for c in cube.mesh.face_coords] + expected_coords.append(coord) + expected_coord_names = [c.var_name for c in expected_coords] + expected_coord_attr = " ".join(sorted(expected_coord_names)) + self.assertEqual(a_props["coordinates"], expected_coord_attr) + class TestSaveUgrid__mesh(tests.IrisTest): """Tests for saving meshes to a file.""" From 1efa4bff101c4bb0431848e6a113af4e3be14efb Mon Sep 17 00:00:00 2001 From: Alex Chamberlain-Clay <68277260+acchamber@users.noreply.github.com> Date: Mon, 31 Jul 2023 14:36:09 +0100 Subject: [PATCH 22/82] =?UTF-8?q?removed=20redundant=20timeattr=20check=20?= =?UTF-8?q?and=20added=20tests=20to=20ensure=20datetime/c=E2=80=A6=20(#539?= =?UTF-8?q?6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * removed redundant timeattr check and added tests to ensure datetime/cftime.datetime/partialdatetime play nicely. * responded to review at #5396 and added test/changes to common_cmp * responces to review * updated whats new --------- Co-authored-by: alex.chamberlain-clay --- docs/src/whatsnew/latest.rst | 4 +- lib/iris/coords.py | 14 -- lib/iris/tests/unit/coords/test_Cell.py | 163 +++++++++++++++++++----- 3 files changed, 134 insertions(+), 47 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 3e51198ca3..a16ce33172 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -45,7 +45,8 @@ This document explains the changes made to Iris for this release 🐛 Bugs Fixed ============= -#. N/A +#. `@acchamber`_ removed some obsolete code that prevented extraction of time points + from cubes with bounded times (:pull:`5175`) 💣 Incompatible Changes @@ -96,6 +97,7 @@ This document explains the changes made to Iris for this release (:pull:`5214`) + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 1f00e10840..1a6e8d4e6a 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -1464,12 +1464,6 @@ def __common_cmp__(self, other, operator_method): # - Simple matching me = self.point else: - if hasattr(other, "timetuple"): - raise TypeError( - "Cannot determine whether a point lies " - "within a bounded region for " - "datetime-like objects." - ) # Point-and-bound vs number # - Match if "within" the Cell if operator_method in [operator.gt, operator.le]: @@ -1510,14 +1504,6 @@ def contains_point(self, point): """ if self.bound is None: raise ValueError("Point cannot exist inside an unbounded cell.") - if hasattr(point, "timetuple") or np.any( - [hasattr(val, "timetuple") for val in self.bound] - ): - raise TypeError( - "Cannot determine whether a point lies within " - "a bounded region for datetime-like objects." - ) - return np.min(self.bound) <= point <= np.max(self.bound) diff --git a/lib/iris/tests/unit/coords/test_Cell.py b/lib/iris/tests/unit/coords/test_Cell.py index d191993d51..2408ec9f36 100644 --- a/lib/iris/tests/unit/coords/test_Cell.py +++ b/lib/iris/tests/unit/coords/test_Cell.py @@ -10,7 +10,6 @@ import iris.tests as tests # isort:skip import datetime -from unittest import mock import cftime import numpy as np @@ -31,9 +30,7 @@ def assert_raises_on_comparison(self, cell, other, exception_type, regexp): cell >= other def test_PartialDateTime_bounded_cell(self): - # Check that bounded comparisons to a PartialDateTime - # raise an exception. These are not supported as they - # depend on the calendar. + # Check bounded cell comparisons to a PartialDateTime dt = PartialDateTime(month=6) cell = Cell( datetime.datetime(2010, 1, 1), @@ -42,8 +39,23 @@ def test_PartialDateTime_bounded_cell(self): datetime.datetime(2011, 1, 1), ], ) + self.assertGreater(dt, cell) + self.assertGreaterEqual(dt, cell) + self.assertLess(cell, dt) + self.assertLessEqual(cell, dt) + + def test_cftime_calender_bounded_cell(self): + # Check that cell comparisons fail with different calendars + dt = cftime.datetime(2010, 3, 1, calendar="360_day") + cell = Cell( + datetime.datetime(2010, 1, 1), + bound=[ + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), + ], + ) self.assert_raises_on_comparison( - cell, dt, TypeError, "bounded region for datetime" + cell, dt, TypeError, "different calendars" ) def test_PartialDateTime_unbounded_cell(self): @@ -56,7 +68,7 @@ def test_PartialDateTime_unbounded_cell(self): self.assertGreaterEqual(dt, cell) def test_datetime_unbounded_cell(self): - # Check that cell comparison works with datetimes. + # Check that cell comparison works with datetimes & cftimes. dt = datetime.datetime(2000, 6, 15) cell = Cell(cftime.datetime(2000, 1, 1)) self.assertGreater(dt, cell) @@ -87,29 +99,40 @@ def test_len_1_numpy_array(self): class Test___eq__(tests.IrisTest): def test_datetimelike(self): - # Check that cell equality works with objects with a "timetuple". - dt = mock.Mock(timetuple=mock.Mock()) - cell = mock.MagicMock( - spec=Cell, point=datetime.datetime(2010, 3, 21), bound=None + # Check that cell equality works with different datetime objects + # using the same calendar + point = cftime.datetime(2010, 1, 1, calendar="gregorian") + cell = Cell( + datetime.datetime(2010, 1, 1), + bound=None, ) - _ = cell == dt - cell.__eq__.assert_called_once_with(dt) + self.assertEqual(cell, point) def test_datetimelike_bounded_cell(self): - # Check that equality with a datetime-like bounded cell - # raises an error. This is not supported as it - # depends on the calendar which is not always known from - # the datetime-like bound objects. - other = mock.Mock(timetuple=mock.Mock()) + # Check that cell equality works with bounded cells using different datetime objects + point = cftime.datetime(2010, 1, 1, calendar="gregorian") + cell = Cell( + datetime.datetime(2010, 1, 1), + bound=[ + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), + ], + ) + self.assertEqual(cell, point) + + def test_datetimelike_calenders_cell(self): + # Check that equality with a cell with a different calendar + # raises an error. This is not supported + point = cftime.datetime(2010, 1, 1, calendar="360_day") cell = Cell( - point=object(), + datetime.datetime(2010, 1, 1), bound=[ - mock.Mock(timetuple=mock.Mock()), - mock.Mock(timetuple=mock.Mock()), + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), ], ) - with self.assertRaisesRegex(TypeError, "bounded region for datetime"): - cell == other + with self.assertRaisesRegex(TypeError, "different calendars"): + cell >= point def test_PartialDateTime_other(self): cell = Cell(datetime.datetime(2010, 3, 2)) @@ -120,24 +143,100 @@ def test_PartialDateTime_other(self): class Test_contains_point(tests.IrisTest): - def test_datetimelike_bounded_cell(self): - point = object() + """ + Test that contains_point works for combinations of datetime, + cf.datatime, and PartialDateTime objects""" + + def test_datetime_PartialDateTime_point(self): + point = PartialDateTime(month=6) cell = Cell( - point=object(), + datetime.datetime(2010, 1, 1), bound=[ - mock.Mock(timetuple=mock.Mock()), - mock.Mock(timetuple=mock.Mock()), + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), ], ) - with self.assertRaisesRegex(TypeError, "bounded region for datetime"): + self.assertFalse(cell.contains_point(point)) + + def test_datetime_cftime_standard_point(self): + point = cftime.datetime(2010, 6, 15) + cell = Cell( + datetime.datetime(2010, 1, 1), + bound=[ + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), + ], + ) + self.assertTrue(cell.contains_point(point)) + + def test_datetime_cftime_360day_point(self): + point = cftime.datetime(2010, 6, 15, calendar="360_day") + cell = Cell( + datetime.datetime(2010, 1, 1), + bound=[ + datetime.datetime(2010, 1, 1), + datetime.datetime(2011, 1, 1), + ], + ) + with self.assertRaisesRegex(TypeError, "different calendars"): cell.contains_point(point) - def test_datetimelike_point(self): - point = mock.Mock(timetuple=mock.Mock()) - cell = Cell(point=object(), bound=[object(), object()]) - with self.assertRaisesRegex(TypeError, "bounded region for datetime"): + def test_cftime_standard_PartialDateTime_point(self): + point = PartialDateTime(month=6) + cell = Cell( + cftime.datetime(2010, 1, 1), + bound=[ + cftime.datetime(2010, 1, 1), + cftime.datetime(2011, 1, 1), + ], + ) + self.assertFalse(cell.contains_point(point)) + + def test_cftime_360day_PartialDateTime_point(self): + point = PartialDateTime(month=6) + cell = Cell( + cftime.datetime(2010, 1, 1, calendar="360_day"), + bound=[ + cftime.datetime(2010, 1, 1, calendar="360_day"), + cftime.datetime(2011, 1, 1, calendar="360_day"), + ], + ) + self.assertFalse(cell.contains_point(point)) + + def test_cftime_standard_datetime_point(self): + point = datetime.datetime(2010, 6, 1) + cell = Cell( + cftime.datetime(2010, 1, 1), + bound=[ + cftime.datetime(2010, 1, 1), + cftime.datetime(2011, 1, 1), + ], + ) + self.assertTrue(cell.contains_point(point)) + + def test_cftime_360day_datetime_point(self): + point = datetime.datetime(2010, 6, 1) + cell = Cell( + cftime.datetime(2010, 1, 1, calendar="360_day"), + bound=[ + cftime.datetime(2010, 1, 1, calendar="360_day"), + cftime.datetime(2011, 1, 1, calendar="360_day"), + ], + ) + with self.assertRaisesRegex(TypeError, "different calendars"): cell.contains_point(point) + def test_cftime_360_day_cftime_360day_point(self): + point = cftime.datetime(2010, 6, 15, calendar="360_day") + cell = Cell( + cftime.datetime(2010, 1, 1, calendar="360_day"), + bound=[ + cftime.datetime(2010, 1, 1, calendar="360_day"), + cftime.datetime(2011, 1, 1, calendar="360_day"), + ], + ) + self.assertTrue(cell.contains_point(point)) + class Test_numpy_comparison(tests.IrisTest): """ From ea2a2721101489d7c84f3b8437494ee5ed646d0a Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Mon, 31 Jul 2023 15:54:41 +0100 Subject: [PATCH 23/82] Avoid using deprecated ContourSet attributes (#5405) --- docs/src/whatsnew/latest.rst | 3 +++ lib/iris/plot.py | 26 ++++++++++++------- lib/iris/tests/unit/plot/test_contourf.py | 6 ++--- .../tests/unit/quickplot/test_contourf.py | 7 +++-- 4 files changed, 24 insertions(+), 18 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index a16ce33172..ce561ff9c4 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -96,6 +96,9 @@ This document explains the changes made to Iris for this release `"Xarray bridge" `_ facility. (:pull:`5214`) +#. `@rcomer`_ updated :func:`~iris.plot.contourf` to avoid using functionality + that is deprecated in Matplotlib v3.8 (:pull:`5405`) + .. comment diff --git a/lib/iris/plot.py b/lib/iris/plot.py index d319c1361b..ebcb5c3bcb 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -1155,16 +1155,26 @@ def contourf(cube, *args, **kwargs): # But if the polygons are virtually opaque then we can cover the seams # by drawing anti-aliased lines *underneath* the polygon joins. - # Figure out the alpha level for the contour plot - if result.alpha is None: - alpha = result.collections[0].get_facecolor()[0][3] + if hasattr(result, "get_antialiased"): + # Matplotlib v3.8 onwards. + antialiased = any(result.get_antialiased()) + # Figure out the colours and alpha level for the contour plot + colors = result.get_facecolor() + alpha = result.alpha or colors[0][3] + # Define a zorder just *below* the polygons to ensure we minimise any boundary shift. + zorder = result.zorder - 0.1 else: - alpha = result.alpha + antialiased = result.antialiased + # Figure out the alpha level for the contour plot + alpha = result.alpha or result.collections[0].get_facecolor()[0][3] + colors = [c[0] for c in result.tcolors] + # Define a zorder just *below* the polygons to ensure we minimise any boundary shift. + zorder = result.collections[0].zorder - 0.1 + # If the contours are anti-aliased and mostly opaque then draw lines under # the seams. - if result.antialiased and alpha > 0.95: + if antialiased and alpha > 0.95: levels = result.levels - colors = [c[0] for c in result.tcolors] if result.extend == "neither": levels = levels[1:-1] colors = colors[:-1] @@ -1177,11 +1187,7 @@ def contourf(cube, *args, **kwargs): else: colors = colors[:-1] if len(levels) > 0 and np.nanmax(cube.data) > levels[0]: - # Draw the lines just *below* the polygons to ensure we minimise - # any boundary shift. - zorder = result.collections[0].zorder - 0.1 axes = kwargs.get("axes", None) - contour( cube, levels=levels, diff --git a/lib/iris/tests/unit/plot/test_contourf.py b/lib/iris/tests/unit/plot/test_contourf.py index 0247fb5a91..de84e88a52 100644 --- a/lib/iris/tests/unit/plot/test_contourf.py +++ b/lib/iris/tests/unit/plot/test_contourf.py @@ -69,10 +69,8 @@ def setUp(self): self.bar_index = np.arange(self.bar.size) self.data = self.cube.data self.dataT = self.data.T - mocker = mock.Mock(alpha=0, antialiased=False) - self.mpl_patch = self.patch( - "matplotlib.pyplot.contourf", return_value=mocker - ) + mocker = mock.Mock(wraps=plt.contourf) + self.mpl_patch = self.patch("matplotlib.pyplot.contourf", mocker) self.draw_func = iplt.contourf diff --git a/lib/iris/tests/unit/quickplot/test_contourf.py b/lib/iris/tests/unit/quickplot/test_contourf.py index 2624ebd08e..e510e661ae 100644 --- a/lib/iris/tests/unit/quickplot/test_contourf.py +++ b/lib/iris/tests/unit/quickplot/test_contourf.py @@ -11,6 +11,7 @@ from unittest import mock +import matplotlib.pyplot as plt import numpy as np from iris.tests.stock import simple_2d @@ -42,10 +43,8 @@ def setUp(self): self.bar_index = np.arange(self.bar.size) self.data = self.cube.data self.dataT = self.data.T - mocker = mock.Mock(alpha=0, antialiased=False) - self.mpl_patch = self.patch( - "matplotlib.pyplot.contourf", return_value=mocker - ) + mocker = mock.Mock(wraps=plt.contourf) + self.mpl_patch = self.patch("matplotlib.pyplot.contourf", mocker) # Also need to mock the colorbar. self.patch("matplotlib.pyplot.colorbar") self.draw_func = qplt.contourf From b5f43fbd4ce22c8ed708c3d9c5769a927f689d56 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 12:54:52 +0100 Subject: [PATCH 24/82] [pre-commit.ci] pre-commit autoupdate (#5406) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/PyCQA/flake8: 6.0.0 → 6.1.0](https://github.com/PyCQA/flake8/compare/6.0.0...6.1.0) * Switch to isinstance(). (#5408) --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- lib/iris/_constraints.py | 10 +++++----- lib/iris/cube.py | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9dc69d2649..c641389768 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -43,7 +43,7 @@ repos: args: [--config=./pyproject.toml, .] - repo: https://github.com/PyCQA/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 types: [file, python] diff --git a/lib/iris/_constraints.py b/lib/iris/_constraints.py index bfd4865f56..1884cbcbd9 100644 --- a/lib/iris/_constraints.py +++ b/lib/iris/_constraints.py @@ -137,7 +137,7 @@ def __eq__(self, other): # attributes/names/coords : These can only be == if they contain the # *same* callable object (i.e. same object identity). eq = ( - type(other) == Constraint + isinstance(other, Constraint) and self._name == other._name and self._cube_func == other._cube_func and self._coord_constraints == other._coord_constraints @@ -244,7 +244,7 @@ def __init__(self, lhs, rhs, operator): def __eq__(self, other): eq = ( - type(other) == ConstraintCombination + isinstance(other, ConstraintCombination) and self.lhs == other.lhs and self.rhs == other.rhs and self.operator == other.operator @@ -300,7 +300,7 @@ def __repr__(self): def __eq__(self, other): eq = ( - type(other) == _CoordConstraint + isinstance(other, _CoordConstraint) and self.coord_name == other.coord_name and self._coord_thing == other._coord_thing ) @@ -544,7 +544,7 @@ def __init__(self, **attributes): def __eq__(self, other): eq = ( - type(other) == AttributeConstraint + isinstance(other, AttributeConstraint) and self._attributes == other._attributes ) return eq @@ -638,7 +638,7 @@ def __init__( super().__init__(cube_func=self._cube_func) def __eq__(self, other): - eq = type(other) == NameConstraint and all( + eq = isinstance(other, NameConstraint) and all( getattr(self, attname) == getattr(other, attname) for attname in self._names ) diff --git a/lib/iris/cube.py b/lib/iris/cube.py index a21844241f..35e3a903c6 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -776,7 +776,7 @@ def copy(self): """ Return a CubeList when CubeList.copy() is called. """ - if type(self) == CubeList: + if isinstance(self, CubeList): return deepcopy(self) From 41bcbaa03440db3c0496182b35018a74987cd1bf Mon Sep 17 00:00:00 2001 From: Alex Chamberlain-Clay <68277260+acchamber@users.noreply.github.com> Date: Mon, 7 Aug 2023 14:13:56 +0100 Subject: [PATCH 25/82] Fix for #5372 (#5412) * Added conversion to dtypes for points and bounds in unify_time_units * Added whats new entry and updated docstring * changed docs in response to review --- docs/src/whatsnew/latest.rst | 3 ++ .../tests/unit/util/test_unify_time_units.py | 30 +++++++++++++++++++ lib/iris/util.py | 8 ++++- 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index ce561ff9c4..9a9a18ccaa 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -45,6 +45,9 @@ This document explains the changes made to Iris for this release 🐛 Bugs Fixed ============= +#. `@acchamber`_ fixed a bug with :func:`~iris.util.unify_time_units` so it does not block + concatenation through different data types in rare instances. (:pull:`5372`) + #. `@acchamber`_ removed some obsolete code that prevented extraction of time points from cubes with bounded times (:pull:`5175`) diff --git a/lib/iris/tests/unit/util/test_unify_time_units.py b/lib/iris/tests/unit/util/test_unify_time_units.py index daf71890b1..8bee046dad 100644 --- a/lib/iris/tests/unit/util/test_unify_time_units.py +++ b/lib/iris/tests/unit/util/test_unify_time_units.py @@ -112,6 +112,36 @@ def test_multiple_calendars(self): unify_time_units(cubelist) self._common(expected, cubelist) + def test_units_dtype_ints(self): + cube0, cube1 = self.simple_1d_time_cubes() + cube0.coord("time").points = np.array([1, 2, 3, 4, 5], dtype=int) + cube1.coord("time").points = np.array([1, 2, 3, 4, 5], dtype=int) + cubelist = iris.cube.CubeList([cube0, cube1]) + unify_time_units(cubelist) + assert len(cubelist.concatenate()) == 1 + + def test_units_bounded_dtype_ints(self): + cube0, cube1 = self.simple_1d_time_cubes() + cube0.coord("time").bounds = np.array( + [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]], dtype=int + ) + cube1.coord("time").bounds = np.array( + [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5]], dtype=np.float64 + ) + cubelist = iris.cube.CubeList([cube0, cube1]) + unify_time_units(cubelist) + assert len(cubelist.concatenate()) == 1 + + def test_units_dtype_int_float(self): + cube0, cube1 = self.simple_1d_time_cubes() + cube0.coord("time").points = np.array([1, 2, 3, 4, 5], dtype=int) + cube1.coord("time").points = np.array( + [1, 2, 3, 4, 5], dtype=np.float64 + ) + cubelist = iris.cube.CubeList([cube0, cube1]) + unify_time_units(cubelist) + assert len(cubelist.concatenate()) == 1 + if __name__ == "__main__": tests.main() diff --git a/lib/iris/util.py b/lib/iris/util.py index 0b31ebdafc..c040b72b54 100644 --- a/lib/iris/util.py +++ b/lib/iris/util.py @@ -1471,7 +1471,8 @@ def unify_time_units(cubes): Performs an in-place conversion of the time units of all time coords in the cubes in a given iterable. One common epoch is defined for each calendar found in the cubes to prevent units being defined with inconsistencies - between epoch and calendar. + between epoch and calendar. During this process, all time coordinates have + their data type converted to 64-bit floats to allow for smooth concatenation. Each epoch is defined from the first suitable time coordinate found in the input cubes. @@ -1492,6 +1493,11 @@ def unify_time_units(cubes): for cube in cubes: for time_coord in cube.coords(): if time_coord.units.is_time_reference(): + time_coord.points = time_coord.core_points().astype("float64") + if time_coord.bounds is not None: + time_coord.bounds = time_coord.core_bounds().astype( + "float64" + ) epoch = epochs.setdefault( time_coord.units.calendar, time_coord.units.origin ) From 34aed746ac57cdb474c41c859164fa9d774d9ecb Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Mon, 7 Aug 2023 15:50:34 +0100 Subject: [PATCH 26/82] Minor docs navbar improvements. (#5415) --- docs/src/conf.py | 4 +++- docs/src/index.rst | 13 +++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/src/conf.py b/docs/src/conf.py index d7c04f2130..7f7322c1f8 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -294,7 +294,9 @@ def _dotv(version): "collapse_navigation": True, "navigation_depth": 3, "show_prev_next": True, - "navbar_align": "content", + "navbar_align": "left", + # TODO: review if 6 links is too crowded. + "header_links_before_dropdown": 6, "github_url": "https://github.com/SciTools/iris", "twitter_url": "https://twitter.com/scitools_iris", # icons available: https://fontawesome.com/v5.15/icons?d=gallery&m=free diff --git a/docs/src/index.rst b/docs/src/index.rst index 21971c2322..b353406f58 100644 --- a/docs/src/index.rst +++ b/docs/src/index.rst @@ -187,19 +187,20 @@ The legacy support resources: .. toctree:: - :caption: Iris API + :caption: What's New in Iris :maxdepth: 1 + :name: whats_new_index :hidden: - Iris API + whatsnew/index .. toctree:: - :caption: What's New in Iris + :caption: Iris API :maxdepth: 1 - :name: whats_new_index :hidden: - whatsnew/index + Iris API + -.. todolist:: \ No newline at end of file +.. todolist:: From 343977ad294dd521230fbac54ca95f36f7862316 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Wed, 9 Aug 2023 13:49:52 +0100 Subject: [PATCH 27/82] Avoid cftime warnings on pp-load (#5357) * Avoid cftime warnings on pp-load * whatsnew --- docs/src/whatsnew/latest.rst | 3 +++ lib/iris/fileformats/pp.py | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 9a9a18ccaa..6eade29273 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -50,6 +50,9 @@ This document explains the changes made to Iris for this release #. `@acchamber`_ removed some obsolete code that prevented extraction of time points from cubes with bounded times (:pull:`5175`) + +#. `@rcomer`_ modified pp-loading to avoid a ``cftime`` warning for non-standard + calendars. (:pull:`5357`) 💣 Incompatible Changes diff --git a/lib/iris/fileformats/pp.py b/lib/iris/fileformats/pp.py index ad0c6272ad..65e0e16d72 100644 --- a/lib/iris/fileformats/pp.py +++ b/lib/iris/fileformats/pp.py @@ -1486,7 +1486,7 @@ def t1(self): """ if not hasattr(self, "_t1"): - has_year_zero = self.lbyr == 0 + has_year_zero = self.lbyr == 0 or None calendar = ( None if self.lbmon == 0 or self.lbdat == 0 else self.calendar ) @@ -1520,7 +1520,7 @@ def t2(self): """ if not hasattr(self, "_t2"): - has_year_zero = self.lbyrd == 0 + has_year_zero = self.lbyrd == 0 or None calendar = ( None if self.lbmond == 0 or self.lbdatd == 0 else self.calendar ) @@ -1567,7 +1567,7 @@ def t1(self): """ if not hasattr(self, "_t1"): - has_year_zero = self.lbyr == 0 + has_year_zero = self.lbyr == 0 or None calendar = ( None if self.lbmon == 0 or self.lbdat == 0 else self.calendar ) @@ -1602,7 +1602,7 @@ def t2(self): """ if not hasattr(self, "_t2"): - has_year_zero = self.lbyrd == 0 + has_year_zero = self.lbyrd == 0 or None calendar = ( None if self.lbmond == 0 or self.lbdatd == 0 else self.calendar ) From 3531f7b0a27d25d50fe20f17c53e06e5ebfc2dc0 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:11:37 +0100 Subject: [PATCH 28/82] Updated environment lockfiles (#5366) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 172 +++++++++++++----------- requirements/locks/py311-linux-64.lock | 172 +++++++++++++----------- requirements/locks/py39-linux-64.lock | 178 +++++++++++++------------ 3 files changed, 282 insertions(+), 240 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index fa6050a524..9c5ea32d8e 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -1,9 +1,9 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 2b004b3b54cef3f1b8e174aef2273590c7e578f60de14562357ef83ec73063ce +# input_hash: 90bea26e2629b01270a880c650dfec7b34c38d9b6c6ddb4f8c9fee205d0e1ad6 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb @@ -21,6 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 @@ -33,7 +34,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_8.tar.bz2#9194c9bf9428035a05352d031462eae4 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -47,13 +48,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h803 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 +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/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -68,15 +69,19 @@ 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 -https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,27 +89,29 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 +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.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 +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/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -117,25 +124,28 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 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/linux-64/brotli-1.0.9-h166bdaf_8.tar.bz2#2ff08978892a3e8b954397c461f18418 -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.5.7-pyhd8ed1ab_0.conda#5d1b71c942b8421285934dad1d891ebc +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/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.1.0-pyhd8ed1ab_0.conda#7fcff9f6f123696e940bda77bd4d6551 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.3-unix_pyhd8ed1ab_2.tar.bz2#20e4087407c7cb04a40817114b333dbf +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-0.29.35-py310hc6cd4ac_0.conda#115ffd79412d084f541f485b92c94fcf +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py310hc6cd4ac_0.conda#b903ef2ce154e97f621fe30d999227ad https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2#b65b4d50dbd2d50fa0aeac367ec9eed7 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 -https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -143,25 +153,25 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py310hbf28c38_1.tar.bz2#ad5647e517ba68e2868ef2e6e6ff7723 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda#5597d9f9778af6883ae64f0e7d39416c https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda#5311a49aaea44b73935c84a6d9a68e5f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py310ha4c1d20_0.conda#03319f78e5c9c8d90c0110e2c6ed24f6 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py310ha4c1d20_0.conda#188e72aa313da668464e35309e9a32b0 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda#b0f0a014fc04012c05f39df15fe270ce https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff -https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 @@ -173,27 +183,24 @@ https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5 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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.4-pyhd8ed1ab_0.conda#5a31a7d564f551d0e6dff52fd8cb5b16 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.2-py_0.tar.bz2#68e01cac9d38d0e717cd5c87bc3d2cc9 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.1-pyhd8ed1ab_0.conda#6c8c4d6eb2325e59290ac6dbbeacd5f0 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-py_0.tar.bz2#67cd9d9c0382d37479b4d306c369a2d4 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.3-py_0.tar.bz2#d01180388e6d1838c3e1ad029590aa7a -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.5-pyhd8ed1ab_2.tar.bz2#9ff55a0901cf952f05c654394de76bf7 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py310h2372a71_0.conda#1c510e74c87dc9b8fe1f7f9e8dbcef96 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf +https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 +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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -201,72 +208,79 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.cond https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda#684399f9ddc0b9d6f3b6164f6107098e https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py310h2372a71_0.conda#13df1c4ea94f2e3326b15da1999e5999 -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.0-py310h5764c6d_1.tar.bz2#fd18cd597d23b2b5ddde23bd5b7aec32 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py310h2372a71_0.conda#d3d83b419c81ac718a9221442707882b -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py310h2372a71_0.conda#f939fe2998c888a77b310926a6c666f3 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 -https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py310h582fbeb_1.conda#cf62f6cff3536eafaaa0c740b0bf7465 -https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py310h582fbeb_0.conda#adcc7ea52e4d39d0a93f6a2ef36c7fd4 +https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h056c13c_1.conda#32d925cfd330e0cbb72b7618558a44e8 -https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py310hc6cd4ac_0.conda#a3217e1bff09702dfdfcb536825fc12d -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py310hc6cd4ac_0.conda#be1a7e420b7bac4ee02353d0e3161918 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf -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/matplotlib-base-3.7.1-py310he60537e_0.conda#68b2dd34c69d08b05a9db5e3596fe3ee -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py310h7cbd5c2_0.conda#e0b845c6b29a1ed2e409bef6c0f5d96b +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py310hf38f957_0.conda#9b55c9041c5a7f80f184a2cb05ec9663 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py310h7cbd5c2_1.conda#11e0099d4571b4974c04386e4ce679ed https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py310heca2aa9_3.conda#3b1946b676534472ce65181dda0b9554 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_4.conda#345beb10601d5360a15c033d68165a4f https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_h4f3791c_100.conda#405c5b3ad4ef53eb0d93043b54206dd7 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hde23a83_100.conda#d5de42b3b49fb20e01d1003085ef588f https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h20110ff_0.conda#11f5169aeff54ad7277476be8ba19ff7 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +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/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py310ha4c1d20_3.conda#0414d57832172f3cdcf56b5f053e177d +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py310ha4c1d20_0.conda#300d3b434872eb84965864f0fcc5b5da +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_4.conda#db878a0696f9a7980171fd3cf29cca22 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py310hff52083_0.conda#7e454b4a61754714a4a4d183641374da +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310h6f5dce6_101.conda#0d50bea104512f2728676a8bff8840d3 +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 -https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.4.1-pyhd8ed1ab_1.conda#c6b2e7903121c3210462a0866a561993 +https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.21.1-py310h7eb24ba_1.conda#e727db22a14344608c2caeccaa9e9d2b -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 -https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda#597e2d0e1c6bc2e4457714ff479fe142 -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.7-py310hab646b1_3.conda#d049da3204bf5ecb54a852b622f2d7d2 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.1-py310hff52083_0.conda#c2b60c44d38d32779006a15c2581f0d1 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index e0919fe2ef..42e5224fe1 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,9 +1,9 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 2f069ddfd9b505e06a2c4ed71dff8be24543629660bd8a39c1a41dde291bd352 +# input_hash: b73fe0fbcf5caf5854030c02a6233bae6e4061e9f4175a5d8810c6bb3d7701b2 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb @@ -21,6 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 @@ -33,7 +34,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_8.tar.bz2#9194c9bf9428035a05352d031462eae4 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -47,13 +48,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h803 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 +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/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -68,15 +69,19 @@ 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 -https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,27 +89,29 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 +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.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 +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/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -117,25 +124,28 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b -https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_8.tar.bz2#2ff08978892a3e8b954397c461f18418 -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.5.7-pyhd8ed1ab_0.conda#5d1b71c942b8421285934dad1d891ebc +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/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.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.1.0-pyhd8ed1ab_0.conda#7fcff9f6f123696e940bda77bd4d6551 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.3-unix_pyhd8ed1ab_2.tar.bz2#20e4087407c7cb04a40817114b333dbf +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-0.29.35-py311hb755f60_0.conda#17f4738a1ca6155a63d2a0cbd3e4a8b1 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py311hb755f60_0.conda#257dfede48699e2e6372528d08399e5a https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2#b65b4d50dbd2d50fa0aeac367ec9eed7 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 -https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -143,25 +153,25 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py311h4dd048b_1.tar.bz2#46d451f575392c01dc193069bd89766d https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py311h64a7726_0.conda#4df60430eca64502eb01e02df92246bf +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py311h64a7726_0.conda#71fd6f1734a0fa64d8f852ae7156ec45 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff -https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 @@ -173,26 +183,23 @@ https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5 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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.4-pyhd8ed1ab_0.conda#5a31a7d564f551d0e6dff52fd8cb5b16 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.2-py_0.tar.bz2#68e01cac9d38d0e717cd5c87bc3d2cc9 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.1-pyhd8ed1ab_0.conda#6c8c4d6eb2325e59290ac6dbbeacd5f0 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-py_0.tar.bz2#67cd9d9c0382d37479b4d306c369a2d4 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.3-py_0.tar.bz2#d01180388e6d1838c3e1ad029590aa7a -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.5-pyhd8ed1ab_2.tar.bz2#9ff55a0901cf952f05c654394de76bf7 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py311h459d7ec_0.conda#12b1c374ee90a1aa11ea921858394dc8 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf +https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 +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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -200,72 +207,79 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.cond https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py311h459d7ec_0.conda#3c2c65575c28b23afc5e4ff721a2fc9f -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.0-py311hd4cff14_1.tar.bz2#21523141b35484b1edafba962c6ea883 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py311h459d7ec_0.conda#b19f671a6b221f922cf871d71a71c0fa -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py311h459d7ec_0.conda#8c1ac2c00995248898220c4c1a9d81ab +https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c72_0.conda#4e9f59a060c3be52bc4ddc46ee9b6946 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 -https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py311h0b84326_1.conda#6be2190fdbf26a6c1d3356a54d955237 -https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df +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.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311h54d622a_1.conda#a894c65b48676c4973e9ee8b59bceb9e -https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py311hb755f60_0.conda#2b5430f2f1651f460c852e1fdd549184 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py311hb755f60_0.conda#17d25ab64a32872b349579fdb07bbdb2 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf -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/matplotlib-base-3.7.1-py311h8597a09_0.conda#70c3b734ffe82c16b6d121aaa11929a8 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py311h320fe9a_0.conda#509769b430266dc5c2f6a3eab0f23164 +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py311h54ef318_0.conda#2631a9e423855fb586c05f8a5ee8b177 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py311h320fe9a_1.conda#5f92f46bd33917832a99d1660b4075ac https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py311hcafe171_3.conda#0d79df2a96f6572fed2883374400b235 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py311hb755f60_4.conda#3cff4c98f775ff6439b95bb7917702e9 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_h4f3791c_100.conda#405c5b3ad4ef53eb0d93043b54206dd7 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311h4d7c953_100.conda#c03492d0342e512e58aa2d6c5fdaaa91 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h20110ff_0.conda#11f5169aeff54ad7277476be8ba19ff7 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +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/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py311h64a7726_3.conda#a01a3a7428e770db5a0c8c7ab5fce7f7 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py311h64a7726_0.conda#356da36102fc1eeb8a81e6d79e53bc7e +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_4.conda#afe5363b88d2e97266063558a6599bd0 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py311h38be061_0.conda#c056ffab165096669389e5a4eea4dc4d +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311h9a7c333_101.conda#1dc70c7c3352c0ff1f861d866860db37 +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 -https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.4.1-pyhd8ed1ab_1.conda#c6b2e7903121c3210462a0866a561993 +https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.21.1-py311hd88b842_1.conda#f19feb9440890ccb806a367ea9ae0654 -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 -https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda#597e2d0e1c6bc2e4457714ff479fe142 -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.7-py311ha74522f_3.conda#ad6dd0bed0cdf5f2d4eb2b989d6253b3 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.1-py311h38be061_0.conda#8fd462c8bcbba5a3affcb2d04e387476 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index a7b390c21d..f30b7d0405 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -1,9 +1,9 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: b3cb1f7bc6b32267d57b62a9f2f18ea72ba40a12bb0f57668771079837395d34 +# input_hash: a96712105b515671c42bd403fde393d6f10f99a02267d05c771ab9ca88f64093 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 +https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45 https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb @@ -21,6 +21,7 @@ https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 +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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 @@ -33,7 +34,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_8.tar.bz2#9194c9bf9428035a05352d031462eae4 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -47,13 +48,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h803 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 +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/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -68,15 +69,19 @@ 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 -https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 +https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,27 +89,29 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 +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.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_0.conda#aa8b86066614c4573f6db62c91978fa9 +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 +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/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_0.conda#753e078cccad40fe4b396bdcf27a3c15 +https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_0.conda#276339b0115d92c6e0793dcdc7afe308 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.16-h2782a2a_0_cpython.conda#95c9b7c96a7fd7342e0c9d0a917b8f78 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc @@ -117,25 +124,28 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb 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/linux-64/brotli-1.0.9-h166bdaf_8.tar.bz2#2ff08978892a3e8b954397c461f18418 -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.5.7-pyhd8ed1ab_0.conda#5d1b71c942b8421285934dad1d891ebc +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/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py39h5a03fae_9.conda#d1601752c6f47af7bedf838be3d8ca6b +https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.1.0-pyhd8ed1ab_0.conda#7fcff9f6f123696e940bda77bd4d6551 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.3-unix_pyhd8ed1ab_2.tar.bz2#20e4087407c7cb04a40817114b333dbf +https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-0.29.35-py39h3d6467e_0.conda#019c9509764e66c9d9d38b5ca365a9f4 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py39h3d6467e_0.conda#3d700ccea39ca04cb8b6210ac653e0b1 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.6-pyhd8ed1ab_0.tar.bz2#b65b4d50dbd2d50fa0aeac367ec9eed7 -https://conda.anaconda.org/conda-forge/linux-64/docutils-0.16-py39hf3d152e_3.tar.bz2#4f0fa7459a1f40a969aaad418b1c428c -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.1-pyhd8ed1ab_0.conda#7312299d7a0ea4993159229b7d2dceb2 -https://conda.anaconda.org/conda-forge/noarch/execnet-1.9.0-pyhd8ed1ab_0.tar.bz2#0e521f7a5e60d508b121d38b04874fb2 +https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 +https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.3-hfc55251_0.conda#8951eedf3cdf94dd733c1b5eee1f4880 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -143,25 +153,25 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1.tar.bz2#41679a052a8ce841c74df1ebc802e411 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_0.conda#b10174a063ec195f8fe1b278282c3149 +https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f 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/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.0-hb47c5f0_0.conda#9cfd7ad6e1539ca1ad172083586b3301 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda#9c858d105816f454c6b64f3e19184b60 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda#413374bab5022a5199c5dd89aef75df5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.0-py39h6183b62_0.conda#02b87fef8e4c72be8256435ed59fe8de +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda#f1c358d06344bd7f9a293f9af4b9b8fc 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.0.0-pyhd8ed1ab_5.tar.bz2#7d301a0d25f424d96175f810935f0da9 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda#1d54d3a75c3192ab7655d9c3d16809f1 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff -https://conda.anaconda.org/conda-forge/noarch/pygments-2.15.1-pyhd8ed1ab_0.conda#d316679235612869eba305aa7d41d9bf -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.0-pyhd8ed1ab_0.conda#d3ed087d1f7f8f5590e8e87b57a8ce64 +https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 @@ -173,100 +183,104 @@ https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5 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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.4-pyhd8ed1ab_0.conda#5a31a7d564f551d0e6dff52fd8cb5b16 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.2-py_0.tar.bz2#68e01cac9d38d0e717cd5c87bc3d2cc9 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.1-pyhd8ed1ab_0.conda#6c8c4d6eb2325e59290ac6dbbeacd5f0 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-py_0.tar.bz2#67cd9d9c0382d37479b4d306c369a2d4 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.3-py_0.tar.bz2#d01180388e6d1838c3e1ad029590aa7a -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.5-pyhd8ed1ab_2.tar.bz2#9ff55a0901cf952f05c654394de76bf7 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py39hd1e30aa_0.conda#da334eecb1ea2248e28294c49e6f6d89 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.40.0-pyhd8ed1ab_0.conda#49bb0d9e60ce1db25e151780331bb5f3 +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf +https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 +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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda#20080319ef73fbad74dcd6d62f2a3ffe https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py39h7633fee_0.conda#54e6f32e448fdc273606011f0940d076 -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.0-py39hb9d737c_1.tar.bz2#eb31327ace8dac15c2df243d9505a132 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py39hd1e30aa_0.conda#5f7c468bf9d9551a80187db7e809ef1f -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.0-nompi_hb72d44e_103.conda#975973a4350ab45ff1981fe535a12af5 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.7.0-pyha770c72_0.conda#ba3786c6846e46038fe60c785d46dc81 -https://conda.anaconda.org/conda-forge/noarch/importlib_resources-5.12.0-pyhd8ed1ab_0.conda#e5fd2260a231ee63b6969f4801082f2b +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_0.conda#434246edfc30e20c0847d4c2caff0a53 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py39hd1e30aa_0.conda#03e44d84ea9dd2432a633407401e5688 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +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.0.1-pyhd8ed1ab_0.conda#d978c61aa5fc2c69380d53ad56b5ae86 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_0.conda#e976871e132fe506da52c1240229246a +https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 -https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py39haaeba84_1.conda#d7aa9b99ed6ade75fbab1e4cedcb3ce2 -https://conda.anaconda.org/conda-forge/noarch/pip-23.1.2-pyhd8ed1ab_0.conda#7288da0d36821349cf1126e8670292df +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py39haaeba84_0.conda#f97a95fab7c69678ebf6b57396b1323e +https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_1.conda#f2465696f4396245eca4613f6e924796 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39hf1c3bca_1.conda#ae6bfe65e81d9b59a71cc01a2858650f -https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.9-py39h3d6467e_0.conda#6d990f672cc70e5c480ddb74b789a17c -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py39h3d6467e_0.conda#4eaef850715aff114e2126a2f1a7b1f0 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df -https://conda.anaconda.org/conda-forge/noarch/importlib-resources-5.12.0-pyhd8ed1ab_0.conda#3544c818f0720c89eb16ae6940ab440b -https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.7.0-hd8ed1ab_0.conda#27a4cec373ec84d1c1aa02a1e37f8eaf -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/pandas-2.0.2-py39h40cae4c_0.conda#de99b3f807c0b295a7df94623df0fb4c +https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda#54661981fd331e20847d8a49543dd9af +https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py39h40cae4c_1.conda#cfe677f02e507f76d6767379e4ff09a9 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.6.0-pyhd8ed1ab_0.conda#741384b21c1b512617f4ee4ea8457c5d +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py39h227be39_3.conda#9e381db00691e26bcf670c3586397be1 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_4.conda#b83a218fa97e9963c858d0db651a7506 https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.6.0-pyhd8ed1ab_0.conda#e2c66ccd8a5eedaddcb23739ed38ed27 +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.24-pyhd8ed1ab_0.conda#a4085ab0562d5081a9333435837b538a -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py39he190548_0.conda#f2a931db797bb58bd335f4a857b4c898 -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/netcdf4-1.6.4-nompi_py39h4e81c44_100.conda#360163b65cfd5e43ac60de5c6c3a2696 +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py39h0126182_0.conda#61cee808ff7830fcceeb4f336cc738b1 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.23.1-pyhd8ed1ab_0.conda#838b85f656b078bdd882ef97978e7f40 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.6.0-pyhd8ed1ab_0.conda#4ec79a27574d70c947faf0a51bbe4079 -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h20110ff_0.conda#11f5169aeff54ad7277476be8ba19ff7 +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-hbc2ea52_17.conda#452c7b08c21eea2ef01f4fd364d6affc +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 -https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.1-h98fae49_0.conda#4b827ee65a747c4a24f2a6ac7f3ff093 +https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 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/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py39h6183b62_3.conda#84c4007675da392fdb99faeefda69552 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py39h6183b62_0.conda#81212684c03e970520656f1a62ab9d39 +https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_4.conda#e12391692d70732bf1df08b7ecf40095 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py39hf3d152e_0.conda#6ce223b8b14df8bdfa72ac2a10c2fad3 +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4218a78_101.conda#8f5c25bb7accd1954d8b7fc689c5975c +https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 -https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.4.1-pyhd8ed1ab_1.conda#c6b2e7903121c3210462a0866a561993 +https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.21.1-py39h4bd5d67_1.conda#a60d65263a8ddbff5381ed91d4f6953e -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 -https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.0.5-h28d9a01_0.conda#597e2d0e1c6bc2e4457714ff479fe142 -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.7-py39h5c7b992_3.conda#19e30314fe824605750da905febb8ee6 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.1-py39hf3d152e_0.conda#682772fa385911fb5efffbce21b269c5 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 From becc890709beca7f23f556ed11685d13cc7c8a51 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Mon, 14 Aug 2023 10:55:56 +0100 Subject: [PATCH 29/82] Updated environment lockfiles (#5419) Co-authored-by: Lockfile bot --- requirements/locks/py39-linux-64.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index f30b7d0405..e598fba992 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -113,7 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.cond https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.9.16-h2782a2a_0_cpython.conda#95c9b7c96a7fd7342e0c9d0a917b8f78 +https://conda.anaconda.org/conda-forge/linux-64/python-3.9.17-h0755675_0_cpython.conda#384886ac3580bba3541ce65c992eb192 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 From 915c1f40e4af34dac7f87881bce376f972d644a6 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Tue, 15 Aug 2023 13:57:40 +0100 Subject: [PATCH 30/82] Update Installation Guide (#5416) --- docs/src/installing.rst | 59 ++++++++++++++---------------------- docs/src/whatsnew/latest.rst | 3 ++ 2 files changed, 26 insertions(+), 36 deletions(-) diff --git a/docs/src/installing.rst b/docs/src/installing.rst index cff9a27952..a8207c37a5 100644 --- a/docs/src/installing.rst +++ b/docs/src/installing.rst @@ -3,30 +3,26 @@ Installing ========== -Iris is available using conda for the following platforms: - -* Linux 64-bit, -* Mac OSX 64-bit, and -* Windows 64-bit. - -Windows 10 now has support for Linux distributions via WSL_ (Windows -Subsystem for Linux). This is a great option to get started with Iris -for users and developers. Be aware that we do not currently test against -any WSL_ distributions. - -.. _WSL: https://learn.microsoft.com/en-us/windows/wsl/install +Iris can be installed using conda or pip. .. note:: Iris is currently supported and tested against |python_support| running on Linux. We do not currently actively test on other platforms such as Windows or macOS. + Windows 10 now has support for Linux distributions via WSL_ (Windows + Subsystem for Linux). This is a great option to get started with + Iris for users and contributors. Be aware that we do not currently + test against any WSL_ distributions. + +.. _WSL: https://learn.microsoft.com/en-us/windows/wsl/install + .. note:: This documentation was built using Python |python_version|. .. _installing_using_conda: -Installing Using Conda (Users) ------------------------------- +Installing a Released Version Using Conda +----------------------------------------- To install Iris using conda, you must first download and install conda, for example from https://docs.conda.io/en/latest/miniconda.html. @@ -44,33 +40,24 @@ need the Iris sample data. This can also be installed using conda:: Further documentation on using conda and the features it provides can be found at https://docs.conda.io/projects/conda/en/latest/index.html. -.. _installing_from_source_without_conda: - -Installing from Source Without Conda on Debian-Based Linux Distros (Developers) -------------------------------------------------------------------------------- +.. _installing_using_pip: -Iris can also be installed without a conda environment. The instructions in -this section are valid for Debian-based Linux distributions (Debian, Ubuntu, -Kubuntu, etc.). +Installing a Released Version Using Pip +--------------------------------------- -Iris and its dependencies need some shared libraries in order to work properly. -These can be installed with apt:: +Iris is also available from https://pypi.org/ so can be installed with ``pip``:: - sudo apt-get install python3-pip python3-tk libudunits2-dev libproj-dev proj-bin libgeos-dev libcunit1-dev + pip install scitools-iris -The rest can be done with pip:: - - pip3 install scitools-iris +If you wish to run any of the code in the gallery you will also +need the Iris sample data. This can also be installed using pip:: -This procedure was tested on a Ubuntu 20.04 system on the -26th of July, 2021. -Be aware that through updates of the involved Debian packages, -dependency conflicts might arise or the procedure might have to be modified. + pip install iris-sample-data .. _installing_from_source: -Installing from Source with Conda (Developers) ----------------------------------------------- +Installing a Development Version from a Git Checkout +---------------------------------------------------- The latest Iris source release is available from https://github.com/SciTools/iris. @@ -78,9 +65,9 @@ https://github.com/SciTools/iris. For instructions on how to obtain the Iris project source from GitHub see :ref:`forking` and :ref:`set-up-fork` for instructions. -Once conda is installed, you can install Iris using conda and then activate -it. The example commands below assume you are in the root directory of your -local copy of Iris:: +Once conda is installed, you can create a development environment for Iris +using conda and then activate it. The example commands below assume you are in +the root directory of your local copy of Iris:: conda env create --force --file=requirements/iris.yml conda activate iris-dev diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 6eade29273..ed3b8092ba 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -94,6 +94,9 @@ This document explains the changes made to Iris for this release and :meth:`~iris.coords.Coord.convert_units` by including a link to the UDUNITS-2 documentation which contains lists of compatible units and aliases for them. +#. `@rcomer`_ updated the :ref:`Installation Guide` to reflect + that some things are now simpler. (:pull:`5416`) + 💼 Internal =========== From 8361532d141a16ec44ecf65e85162c583c7c6d06 Mon Sep 17 00:00:00 2001 From: Patrick Peglar Date: Wed, 16 Aug 2023 13:33:56 +0100 Subject: [PATCH 31/82] Update standard-names to #82 + add table version in std_names.py (#5423) --- docs/src/whatsnew/latest.rst | 6 + etc/cf-standard-name-table.xml | 2463 ++++++++++++++++-------------- lib/iris/tests/test_std_names.py | 10 +- tools/generate_std_names.py | 9 +- 4 files changed, 1334 insertions(+), 1154 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index ed3b8092ba..b500029789 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -41,6 +41,12 @@ This document explains the changes made to Iris for this release the data variable's ``coordinates`` attribute when saving to NetCDF. (:issue:`5206`, :pull:`5389`) +#. `@pp-mo`_ modified the install process to record the release version of the CF + standard-names table, when it creates the ``iris/std_names.py`` module. + The release number is also now available as + ``iris.std_names.CF_STANDARD_NAMES_TABLE_VERSION``. + (:pull:`5423`) + 🐛 Bugs Fixed ============= diff --git a/etc/cf-standard-name-table.xml b/etc/cf-standard-name-table.xml index 3b145ae86e..6e3c014849 100644 --- a/etc/cf-standard-name-table.xml +++ b/etc/cf-standard-name-table.xml @@ -1,7 +1,7 @@ - 81 - 2023-04-25T10:43:33Z + 82 + 2023-07-06T13:17:07Z Centre for Environmental Data Analysis support@ceda.ac.uk @@ -269,14 +269,14 @@ m - The altitude at top of atmosphere boundary layer is the elevation above sea level of the top of the (atmosphere) planetary boundary layer. The phrase "defined_by" provides the information of the tracer used for identifying the atmospheric boundary layer top. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. "By ranging instrument" means that the backscattering is obtained through ranging techniques like lidar and radar. + The altitude at top of atmosphere boundary layer is the elevation above sea level of the top of the (atmosphere) planetary boundary layer. The phrase "defined_by" provides the information of the tracer used for identifying the atmospheric boundary layer top. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. "By ranging instrument" means that the backscattering is obtained through ranging techniques like lidar and radar. m - The altitude at top of atmosphere mixed layer is the elevation above sea level of the top of the (atmosphere) mixed layer or convective boundary layer. The phrase "defined_by" provides the information of the tracer used for identifying the atmospheric boundary layer top. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. "By ranging instrument" means that the volume backscattering coefficient is obtained through ranging techniques like lidar and radar. + The altitude at top of atmosphere mixed layer is the elevation above sea level of the top of the (atmosphere) mixed layer or convective boundary layer. The phrase "defined_by" provides the information of the tracer used for identifying the atmospheric boundary layer top. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. "By ranging instrument" means that the volume backscattering coefficient is obtained through ranging techniques like lidar and radar. @@ -469,21 +469,21 @@ - J kg -1 + J kg-1 Convective(ly) available potential energy (often abbreviated CAPE) is a stability measure calculated by integrating the positive temperature difference between the surrounding atmosphere and a parcel of air lifted adiabatically from the surface to its equilibrium level. CAPE exists under conditions of potential instability, and measures the potential energy per unit mass that would be released by the unstable parcel if it were able to convect upwards to equilibrium. - J kg -1 + J kg-1 Convective inhibition is the amount of energy per unit mass required to overcome the negatively buoyant energy exerted by the environment on a parcel of air. Convective inhibition is often abbreviated as "CIN" or "CINH". It is calculated by integrating the negative temperature difference between the surrounding atmosphere and a parcel of air lifted adiabatically from a given starting height to its equilibrium level. A coordinate variable of original_air_pressure_of_lifted_parcel should be specified to indicate the starting height of the lifted parcel. - J kg -1 + J kg-1 Convective inhibition is the amount of energy per unit mass required to overcome the negatively buoyant energy exerted by the environment on a parcel of air. Convective inhibition is often abbreviated as "CIN" or "CINH". It is calculated by integrating the negative temperature difference between the surrounding atmosphere and a parcel of air lifted adiabatically from the surface to its equilibrium level. @@ -3170,6 +3170,20 @@ The phrase "ratio_of_X_to_Y" means X/Y. It may be expressed as a fraction, a percentage, or any other dimensionless representation of a fraction. Also known as specific gravity, where soil represents a dry soil sample. The density of a substance is its mass per unit volume. + + degree_north + + + The latitude of deployment of a station or instrument. The term can be used whenever the deployment position of a station or instrument needs to be supplied along with other types of positions. If a data variable has only one latitude coordinate variable, the standard name of latitude should generally be preferred to deployment_latitude, because latitude is recognised by generic software. If the deployment latitude is also the nominal latitude for a discrete geometry (as in Section 9.5 of the CF convention), the deployment latitude should also, or instead, be recorded in a coordinate variable with the standard name of latitude and axis="Y". Latitude is positive northward; its units of "degree_north" (or equivalent) indicate this explicitly. + + + + degree_east + + + The longitude of deployment of a station or instrument. The term can be used whenever the deployment position of a station or instrument needs to be supplied along with other types of positions. If a data variable has only one longitude coordinate variable, the standard name of longitude should generally be preferred to deployment_longitude, because longitude is recognised by generic software. If the deployment longitude is also the nominal longitude for a discrete geometry (as in Section 9.5 of the CF convention), the deployment longitude should also, or instead, be recorded in a coordinate variable with the standard name of longitude and axis="X". Longitude is positive eastward; its units of "degree_east" (or equivalent) indicate this explicitly. + + m @@ -3720,7 +3734,7 @@ kg m-2 - The quantity with standard name drainage_amount_through_base_of_soil_model is the amount of water that drains through the bottom of a soil column extending from the surface to a specified depth. “Drainage” is the process of removal of excess water from soil by gravitational flow. "Amount" means mass per unit area. A vertical coordinate variable or scalar coordinate with standard name "depth" should be used to specify the depth to which the soil column extends. + The quantity with standard name drainage_amount_through_base_of_soil_model is the amount of water that drains through the bottom of a soil column extending from the surface to a specified depth. "Drainage" is the process of removal of excess water from soil by gravitational flow. "Amount" means mass per unit area. A vertical coordinate variable or scalar coordinate with standard name "depth" should be used to specify the depth to which the soil column extends. @@ -4437,6 +4451,13 @@ Longitude is positive eastward; its units of degree_east (or equivalent) indicate this explicitly. In a latitude-longitude system defined with respect to a rotated North Pole, the standard name of grid_longitude should be used instead of longitude. Grid longitude is positive in the grid-eastward direction, but its units should be plain degree. + + mol m-3 s-1 + + + "Gross mole production" means the rate of creation of biomass per unit volume with no correction for respiration loss in terms of quantity of matter (moles). The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. "Prokaryotes" means all Bacteria and Archaea excluding photosynthetic cyanobacteria such as Synechococcus and Prochlorococcus or other separately named components of the prokaryotic population. + + kg m-2 s-1 @@ -4458,6 +4479,13 @@ "Production of carbon" means the production of biomass expressed as the mass of carbon which it contains. Gross primary production is the rate of synthesis of biomass from inorganic precursors by autotrophs ("producers"), for example, photosynthesis in plants or phytoplankton. The producers also respire some of this biomass and the difference is "net_primary_production". "Productivity" means production per unit area. The phrase "expressed_as" is used in the construction A_expressed_as_B, where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. + + kg m-3 s-1 + + + "Gross production" means the rate of creation of biomass per unit volume with no correction for respiration. The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. "Prokaryotes" means all Bacteria and Archaea excluding photosynthetic cyanobacteria such as Synechococcus and Prochlorococcus or other separately named components of the prokaryotic population. + + 1 @@ -7854,7 +7882,7 @@ - J Kg-1 + J kg-1 The lightning_potential_index measures the potential for charge generation and separation that leads to lightning flashes in convective thunderstorms. It is derived from the model simulated grid-scale updraft velocity and the mass mixing-ratios of liquid water, cloud ice, snow, and graupel. @@ -8539,6 +8567,13 @@ Mass concentration means mass per unit volume and is used in the construction mass_concentration_of_X_in_Y, where X is a material constituent of Y. A chemical species denoted by X may be described by a single term such as 'nitrogen' or a phrase such as 'nox_expressed_as_nitrogen'. The chemical formula for chlorine nitrate is ClONO2. + + kg m-3 + + + "Mass concentration" means mass per unit volume and is used in the construction "mass_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". Chlorophylls are the green pigments found in most plants, algae and cyanobacteria; their presence is essential for photosynthesis to take place. There are several different forms of chlorophyll that occur naturally. All contain a chlorin ring (chemical formula C20H16N4) which gives the green pigment and a side chain whose structure varies. The naturally occurring forms of chlorophyll contain between 35 and 55 carbon atoms. Chlorophyll-a is the most commonly occurring form of natural chlorophyll. The chemical formula of chlorophyll-a is C55H72O5N4Mg. "Sea ice" means all ice floating in the sea which has formed from freezing sea water, rather than by other processes such as calving of land ice to form icebergs. + + kg m-3 @@ -9260,6 +9295,13 @@ Mass concentration means mass per unit volume and is used in the construction mass_concentration_of_X_in_Y, where X is a material constituent of Y. It means the ratio of the mass of X to the mass of Y (including X). A chemical species denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". Petroleum hydrocarbons are compounds containing just carbon and hydrogen originating from the fossil fuel crude oil. + + kg m-3 + + + "Mass concentration" means mass per unit volume and is used in the construction "mass_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". Phaeopigments are non-photosynthetic pigments that are the degradation product of algal chlorophyll pigments. It is commonly formed during and after marine phytoplankton blooms. "Sea ice" means all ice floating in the sea which has formed from freezing sea water, rather than by other processes such as calving of land ice to form icebergs. + + kg m-3 @@ -9351,6 +9393,13 @@ Mass concentration means mass per unit volume and is used in the construction mass_concentration_of_X_in_Y, where X is a material constituent of Y. A chemical species denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". "Aerosol" means the system of suspended liquid or solid particles in air (except cloud droplets) and their carrier gas, the air itself. Aerosol takes up ambient water (a process known as hygroscopic growth) depending on the relative humidity and the composition of the aerosol. "Dry aerosol particles" means aerosol particles without any water uptake. "Primary particulate organic matter " means all organic matter emitted directly to the atmosphere as particles except elemental carbon. The sum of primary_particulate_organic_matter_dry_aerosol and secondary_particulate_organic_matter_dry_aerosol is particulate_organic_matter_dry_aerosol. + + kg m-3 + + + "Mass concentration" means mass per unit volume and is used in the construction "mass_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. "Prokaryotes" means all Bacteria and Archaea excluding photosynthetic cyanobacteria such as Synechococcus and Prochlorococcus or other separately named components of the prokaryotic population. + + kg m-3 @@ -11669,7 +11718,7 @@ - mol/m3 + mol m-3 "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". "Dissolved organic nitrogen" describes the nitrogen held in carbon compounds in solution. These are mostly generated by plankton excretion and decay. @@ -12123,6 +12172,13 @@ Mole concentration means number of moles per unit volume, also called "molarity", and is used in the construction mole_concentration_of_X_in_Y, where X is a material constituent of Y. A chemical species denoted by X may be described by a single term such as 'nitrogen' or a phrase such as 'nox_expressed_as_nitrogen'. The chemical formula for ozone is O3. + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + mol m-3 @@ -12130,6 +12186,41 @@ "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. Phosphorus means phosphorus in all chemical forms, commonly referred to as "total phosphorus". + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + mol m-3 @@ -12137,6 +12228,27 @@ Mole concentration means number of moles per unit volume, also called"molarity", and is used in the construction mole_concentration_of_X_in_Y, where X is a material constituent of Y. A chemical or biological species denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction A_expressed_as_B, where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Particulate means suspended solids of all sizes. + + mol m-3 @@ -12235,6 +12347,13 @@ Mole concentration means number of moles per unit volume, also called "molarity", and is used in the construction mole_concentration_of_X_in_Y, where X is a material constituent of Y. A chemical or biological species denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction A_expressed_as_B, where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. Picophytoplankton are phytoplankton of less than 2 micrometers in size. Phytoplankton are algae that grow where there is sufficient light to support photosynthesis. + + mol m-3 + + + "Mole concentration" means number of moles per unit volume, also called "molarity", and is used in the construction "mole_concentration_of_X_in_Y", where X is a material constituent of Y. A chemical species or biological group denoted by X may be described by a single term such as "nitrogen" or a phrase such as "nox_expressed_as_nitrogen". The phrase "expressed_as" is used in the construction "A_expressed_as_B", where B is a chemical constituent of A. It means that the quantity indicated by the standard name is calculated solely with respect to the B contained in A, neglecting all other chemical constituents of A. "Prokaryotes" means all Bacteria and Archaea excluding photosynthetic cyanobacteria such as Synechococcus and Prochlorococcus or other separately named components of the prokaryotic population. + + mol m-3 @@ -13877,7 +13996,7 @@ W - "Northward" indicates a vector component which is positive when directed northward (negative southward). The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. + "Northward" indicates a vector component which is positive when directed northward (negative southward). The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. @@ -14409,7 +14528,7 @@ kg s-1 - The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. + The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. @@ -14759,7 +14878,7 @@ kg s-1 - "y" indicates a vector component along the grid y-axis, positive with increasing y. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. + "y" indicates a vector component along the grid y-axis, positive with increasing y. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. @@ -14920,7 +15039,7 @@ m s-1 - "Heave rate" is the rate of displacement along the local vertical axis. Heave rate might not include changes to the “at rest” position of the platform with respect to the axis of displacement, which may change over time. The standard name platform_heave_rate should be chosen only if the sign convention of the data is unknown. For cases where the sign convention of the heave rate is known, a standard name of platform_heave_rate_down or platform_heave_rate_up should be chosen, as appropriate. A "platform" is a structure or vehicle that serves as a base for mounting sensors. Platforms include, but are not limited to, satellites, aeroplanes, ships, buoys, instruments, ground stations, and masts. + "Heave rate" is the rate of displacement along the local vertical axis. Heave rate might not include changes to the "at rest" position of the platform with respect to the axis of displacement, which may change over time. The standard name platform_heave_rate should be chosen only if the sign convention of the data is unknown. For cases where the sign convention of the heave rate is known, a standard name of platform_heave_rate_down or platform_heave_rate_up should be chosen, as appropriate. A "platform" is a structure or vehicle that serves as a base for mounting sensors. Platforms include, but are not limited to, satellites, aeroplanes, ships, buoys, instruments, ground stations, and masts. @@ -18154,7 +18273,7 @@ sr - The ratio of volume extinction coefficient to volume backwards scattering coefficient by ranging instrument in air due to ambient aerosol particles (often called "lidar ratio") is the ratio of the "volume extinction coefficient" and the "volume backwards scattering coefficient of radiative flux by ranging instrument in air due to ambient aerosol particles". The ratio is assumed to be related to the same wavelength as the incident radiation. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. The specification of a physical process by the phrase "due_to_" process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. + The ratio of volume extinction coefficient to volume backwards scattering coefficient by ranging instrument in air due to ambient aerosol particles (often called "lidar ratio") is the ratio of the "volume extinction coefficient" and the "volume backwards scattering coefficient of radiative flux by ranging instrument in air due to ambient aerosol particles". The ratio is assumed to be related to the same wavelength of incident radiation. "Ambient_aerosol" means that the aerosol is measured or modelled at the ambient state of pressure, temperature and relative humidity that exists in its immediate environment. "Ambient aerosol particles" are aerosol particles that have taken up ambient water through hygroscopic growth. The extent of hygroscopic growth depends on the relative humidity and the composition of the particles. The specification of a physical process by the phrase "due_to_" process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. @@ -18388,6 +18507,13 @@ The sea_floor_depth_below_sea_surface is the vertical distance between the sea surface and the seabed as measured at a given point in space including the variance caused by tides and possibly waves. + + s + + + "Sea floor sediment" is sediment deposited at the sea bed. "Sediment age" means the length of time elapsed since the sediment was deposited. The phrase "before_1950" is a transparent representation of the phrase "before_present", often used in the geological and archaeological domains to refer to time elapsed between an event and 1950 AD. + + m @@ -19704,6 +19830,13 @@ Speed is the magnitude of velocity. The specification of a physical process by the phrase "due_to_" process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. "Due to tides" means due to all astronomical gravity changes which manifest as tides. No distinction is made between different tidal components. + + s-1 + + + Speed is the magnitude of velocity. Sea water speed shear is the derivative of sea water speed with respect to depth. + + K 80 @@ -20355,6 +20488,13 @@ "specific" means per unit mass. Dry energy is the sum of dry static energy and kinetic energy. Dry static energy is the sum of enthalpy and potential energy (itself the sum of gravitational and centripetal potential energy). Enthalpy can be written either as (1) CpT, where Cp is heat capacity at constant pressure, T is absolute temperature, or (2) U+pV, where U is internal energy, p is pressure and V is volume. + + J kg-1 + + + The specific_enthalpy_of_air is the enthalpy of air per unit mass, which can be computed for an air sample as the sum of the enthalpy of the dry air and the enthalpy of the water vapor in that air, divided by the mass of dry air. + + J kg-1 @@ -20404,6 +20544,13 @@ "Specific" means per unit mass. "Turbulent kinetic energy" is the kinetic energy of chaotic fluctuations of the fluid flow. The dissipation of kinetic energy arises in ocean models as a result of the viscosity of sea water. + + m2 s-2 + + + Specific means per unit mass. "Turbulent kinetic energy" is the kinetic energy of all eddy-induced motion that is not resolved on the grid scale of the model. + + m2 s-2 @@ -24594,8 +24741,7 @@ kg m-2 s-1 - Methane emitted from the surface, generated by biomass burning (fires). Positive direction upwards. -The surface called "surface" means the lower boundary of the atmosphere. "Upward" indicates a vector component which is positive when directed upward (negative downward). In accordance with common usage in geophysical disciplines, "flux" implies per unit area, called "flux density" in physics. The chemical formula for methane is CH4. The mass is the total mass of the molecules. The specification of a physical process by the phrase "due_to_" process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. "Emission" means emission from a primary source located anywhere within the atmosphere, including at the lower boundary (i.e. the surface of the earth). "Emission" is a process entirely distinct from "re-emission" which is used in some standard names. The term "fires" means all biomass fires, whether naturally occurring or ignited by humans. The precise conditions under which fires produce and consume methane can vary between models. + Methane emitted from the surface, generated by biomass burning (fires). Positive direction upwards. The surface called "surface" means the lower boundary of the atmosphere. "Upward" indicates a vector component which is positive when directed upward (negative downward). In accordance with common usage in geophysical disciplines, "flux" implies per unit area, called "flux density" in physics. The chemical formula for methane is CH4. The mass is the total mass of the molecules. The specification of a physical process by the phrase "due_to_" process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. "Emission" means emission from a primary source located anywhere within the atmosphere, including at the lower boundary (i.e. the surface of the earth). "Emission" is a process entirely distinct from "re-emission" which is used in some standard names. The term "fires" means all biomass fires, whether naturally occurring or ignited by humans. The precise conditions under which fires produce and consume methane can vary between models. @@ -30335,7 +30481,7 @@ The surface called "surface" means the lower boundary of the atmospher W m-2 - The phrase "tendency_of_X" means derivative of X with respect to time. The phrase "expressed_as_heat_content" means that this quantity is calculated as the specific heat capacity times density of sea water multiplied by the conservative temperature of the sea water in the grid cell and integrated over depth. If used for a layer heat content, coordinate bounds should be used to define the extent of the layers. If no coordinate bounds are specified, it is assumed that the integral is calculated over the entire vertical extent of the medium, e.g, if the medium is sea water the integral is assumed to be calculated over the full depth of the ocean. Conservative Temperature is defined as part of the Thermodynamic Equation of Seawater 2010 (TEOS-10) which was adopted in 2010 by the International Oceanographic Commission (IOC). Conservative Temperature is specific potential enthalpy (which has the standard name sea_water_specific_potential_enthalpy) divided by a fixed value of the specific heat capacity of sea water, namely cp_0 = 3991.86795711963 J kg-1 K-1. Conservative Temperature is a more accurate measure of the "heat content" of sea water, by a factor of one hundred, than is potential temperature. Because of this, it can be regarded as being proportional to the heat content of sea water per unit mass. Reference: www.teos-10.org; McDougall, 2003 doi: 10.1175/1520-0485(2003)033<0945:PEACOV>2.0.CO;2. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. + The phrase "tendency_of_X" means derivative of X with respect to time. The phrase "expressed_as_heat_content" means that this quantity is calculated as the specific heat capacity times density of sea water multiplied by the conservative temperature of the sea water in the grid cell and integrated over depth. If used for a layer heat content, coordinate bounds should be used to define the extent of the layers. If no coordinate bounds are specified, it is assumed that the integral is calculated over the entire vertical extent of the medium, e.g, if the medium is sea water the integral is assumed to be calculated over the full depth of the ocean. Conservative Temperature is defined as part of the Thermodynamic Equation of Seawater 2010 (TEOS-10) which was adopted in 2010 by the International Oceanographic Commission (IOC). Conservative Temperature is specific potential enthalpy (which has the standard name sea_water_specific_potential_enthalpy) divided by a fixed value of the specific heat capacity of sea water, namely cp_0 = 3991.86795711963 J kg-1 K-1. Conservative Temperature is a more accurate measure of the "heat content" of sea water, by a factor of one hundred, than is potential temperature. Because of this, it can be regarded as being proportional to the heat content of sea water per unit mass. Reference: www.teos-10.org; McDougall, 2003 doi: 10.1175/1520-0485(2003)033<0945:PEACOV>2.0.CO;2. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. @@ -30384,7 +30530,7 @@ The surface called "surface" means the lower boundary of the atmospher W m-2 - The phrase "tendency_of_X" means derivative of X with respect to time. The phrase "expressed_as_heat_content" means that this quantity is calculated as the specific heat capacity times density of sea water multiplied by the potential temperature of the sea water in the grid cell and integrated over depth. If used for a layer heat content, coordinate bounds should be used to define the extent of the layers. If no coordinate bounds are specified, it is assumed that the integral is calculated over the entire vertical extent of the medium, e.g, if the medium is sea water the integral is assumed to be calculated over the full depth of the ocean. Potential temperature is the temperature a parcel of air or sea water would have if moved adiabatically to sea level pressure. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. + The phrase "tendency_of_X" means derivative of X with respect to time. The phrase "expressed_as_heat_content" means that this quantity is calculated as the specific heat capacity times density of sea water multiplied by the potential temperature of the sea water in the grid cell and integrated over depth. If used for a layer heat content, coordinate bounds should be used to define the extent of the layers. If no coordinate bounds are specified, it is assumed that the integral is calculated over the entire vertical extent of the medium, e.g, if the medium is sea water the integral is assumed to be calculated over the full depth of the ocean. Potential temperature is the temperature a parcel of air or sea water would have if moved adiabatically to sea level pressure. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. @@ -30475,7 +30621,7 @@ The surface called "surface" means the lower boundary of the atmospher kg m-2 s-1 - The phrase "tendency_of_X" means derivative of X with respect to time. "Content" indicates a quantity per unit area. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. + The phrase "tendency_of_X" means derivative of X with respect to time. "Content" indicates a quantity per unit area. The specification of a physical process by the phrase due_to_process means that the quantity named is a single term in a sum of terms which together compose the general quantity named by omitting the phrase. Parameterized eddy advection in an ocean model means the part due to a scheme representing parameterized eddy-induced advective effects not included in the resolved model velocity field. Parameterized submesoscale eddy advection occurs on a spatial scale of the order of 1 km horizontally. Reference: James C. McWilliams 2016, Submesoscale currents in the ocean, Proceedings of the Royal Society A: Mathematical, Physical and Engineering Sciences, volume 472, issue 2189. DOI: 10.1098/rspa.2016.0117. There are also standard names for parameterized_mesoscale_eddy_advection which, along with parameterized_submesoscale_eddy_advection, contributes to the total parameterized eddy advection. Additionally, when the parameterized advective process is represented in the model as a skew-diffusion rather than an advection, then the parameterized skew diffusion should be included in this diagnostic. The convergence of a skew-flux is identical (in the continuous formulation) to the convergence of an advective flux, making their tendencies the same. @@ -31388,7 +31534,7 @@ The surface called "surface" means the lower boundary of the atmospher The "Ultraviolet Index" (UVI) is a measure of the amount of solar ultraviolet radiation that reaches the surface of the earth depending on factors such as time of day and cloud cover. It is often used to alert the public of the need to limit sun exposure and use sun creams to protect the skin. Each point on the Index scale is equivalent to 25 mW m-2 of UV radiation (reference: Australian Bureau of Meteorology, http://www.bom.gov.au/uv/about_uv_index.shtml). The UVI range is expressed as a numeric value from 0 to 20 and sometimes graphically as bands of color indicating the attendant risk of skin damage. A UVI of 0-2 is described as 'Low' (represented graphically in green); a UVI of 11 or greater is described as "Extreme" (represented graphically in purple). The higher the UVI, the greater the potential health risk to humans and the less time it takes for harm to occur. A phrase "assuming_condition" indicates that the named quantity is the value which would obtain if all aspects of the system were unaltered except for the assumption of the circumstances specified by the condition. "Overcast" means a fractional sky cover of 95% or more when at least a portion of this amount is attributable to clouds or obscuring phenomena (such as haze, dust, smoke, fog, etc.) aloft. (Reference: AMS Glossary: http://glossary.ametsoc.org/wiki/Main_Page). Standard names are also defined for the quantities ultraviolet_index and ultraviolet_index_assuming_clear_sky. - + degree_C @@ -31724,13 +31870,6 @@ The surface called "surface" means the lower boundary of the atmospher The vertical_component_of_ocean_xy_tracer_diffusivity means the vertical component of the diffusivity of tracers in the ocean due to lateral mixing. This quantity could appear in formulations of lateral diffusivity in which "lateral" does not mean "iso-level", e.g. it would not be used for isopycnal diffusivity. "Tracer diffusivity" means the diffusivity of heat and salinity due to motion which is not resolved on the grid scale of the model. - - kg m-2 - - - “Drainage” is the process of removal of excess water from soil by gravitational flow. "Amount" means mass per unit area. The vertical drainage amount in soil is the amount of water that drains through the bottom of a soil column extending from the surface to a specified depth. - - m @@ -32298,6 +32437,20 @@ The surface called "surface" means the lower boundary of the atmospher Speed is the magnitude of velocity. Wind is defined as a two-dimensional (horizontal) air velocity vector, with no vertical component. (Vertical motion in the atmosphere has the standard name upward_air_velocity.) The wind speed is the magnitude of the wind velocity. A gust is a sudden brief period of high wind speed. In an observed timeseries of wind speed, the gust wind speed can be indicated by a cell_methods of maximum for the time-interval. In an atmospheric model which has a parametrised calculation of gustiness, the gust wind speed may be separately diagnosed from the wind speed. + + m s-1 + + + Speed is the magnitude of velocity. Wind is defined as a two-dimensional (horizontal) air velocity vector, with no vertical component. (Vertical motion in the atmosphere has the standard name upward_air_velocity.) The wind speed is the magnitude of the wind velocity. A gust is a sudden brief period of high wind speed. In an observed timeseries of wind speed, the gust wind speed can be indicated by a cell_methods of maximum for the time-interval. In an atmospheric model which has a parametrised calculation of gustiness, the gust wind speed may be separately diagnosed from the wind speed. The specification of a physical process by the phrase "due_to" process means that the quantity named is a single term in a list of terms, the maximum of which composes the general quantity named by omitting the phrase. + + + + m s-1 + + + Speed is the magnitude of velocity. Wind is defined as a two-dimensional (horizontal) air velocity vector, with no vertical component. (Vertical motion in the atmosphere has the standard name upward_air_velocity.) The wind speed is the magnitude of the wind velocity. A gust is a sudden brief period of high wind speed. In an observed timeseries of wind speed, the gust wind speed can be indicated by a cell_methods of maximum for the time-interval. In an atmospheric model which has a parametrised calculation of gustiness, the gust wind speed may be separately diagnosed from the wind speed. The specification of a physical process by the phrase "due_to" process means that the quantity named is a single term in a list of terms, the maximum of which composes the general quantity named by omitting the phrase. + + s-1 N136 @@ -32390,2248 +32543,2256 @@ The surface called "surface" means the lower boundary of the atmospher - - moles_of_particulate_inorganic_carbon_per_unit_mass_in_sea_water + + isotropic_longwave_radiance_in_air - - temperature_in_ground + + isotropic_shortwave_radiance_in_air - - biological_taxon_lsid + + water_evapotranspiration_flux - - tendency_of_atmosphere_number_content_of_aerosol_particles_due_to_turbulent_deposition + + drainage_amount_through_base_of_soil_model - - lagrangian_tendency_of_atmosphere_sigma_coordinate + + mole_fraction_of_ozone_in_air - - lagrangian_tendency_of_atmosphere_sigma_coordinate + + product_of_northward_wind_and_specific_humidity - - electrical_mobility_diameter_of_ambient_aerosol_particles + + radiation_wavelength - - diameter_of_ambient_aerosol_particles + + specific_gravitational_potential_energy - - mass_concentration_of_biomass_burning_dry_aerosol_particles_in_air + + surface_drag_coefficient_for_heat_in_air - - effective_radius_of_stratiform_cloud_rain_particles + + surface_drag_coefficient_for_momentum_in_air - - effective_radius_of_stratiform_cloud_ice_particles + + surface_drag_coefficient_in_air - - effective_radius_of_stratiform_cloud_graupel_particles + + water_flux_into_sea_water - - effective_radius_of_convective_cloud_snow_particles + + wind_mixing_energy_flux_into_sea_water - - effective_radius_of_convective_cloud_rain_particles + + mole_fraction_of_chlorine_dioxide_in_air - - effective_radius_of_convective_cloud_ice_particles + + mole_fraction_of_chlorine_monoxide_in_air - - histogram_of_backscattering_ratio_in_air_over_height_above_reference_ellipsoid + + mole_fraction_of_hypochlorous_acid_in_air - - backscattering_ratio_in_air + + surface_net_downward_radiative_flux - - soot_content_of_surface_snow + + surface_temperature - - liquid_water_content_of_surface_snow + + surface_temperature - - surface_snow_thickness + + surface_temperature - - thermal_energy_content_of_surface_snow + + surface_upward_sensible_heat_flux - - temperature_in_surface_snow + + mass_concentration_of_suspended_matter_in_sea_water - - integral_wrt_time_of_surface_downward_eastward_stress + + universal_thermal_comfort_index - - integral_wrt_time_of_surface_downward_northward_stress + + sea_surface_swell_wave_period - - sea_water_velocity_from_direction + + sea_surface_wind_wave_period - - sea_water_velocity_to_direction + + atmosphere_net_upward_convective_mass_flux - - sea_water_velocity_to_direction + + tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_deep_convection - - integral_wrt_depth_of_product_of_salinity_and_sea_water_density + + tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_shallow_convection - - integral_wrt_depth_of_product_of_conservative_temperature_and_sea_water_density + + tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_turbulence - - integral_wrt_depth_of_product_of_potential_temperature_and_sea_water_density + + wave_frequency - - volume_fraction_of_condensed_water_in_soil_at_wilting_point + + northward_eliassen_palm_flux_in_air - - volume_fraction_of_condensed_water_in_soil_at_field_capacity + + northward_heat_flux_in_air_due_to_eddy_advection - - volume_fraction_of_condensed_water_in_soil_at_critical_point + + upward_eliassen_palm_flux_in_air - - volume_fraction_of_condensed_water_in_soil + + upward_eastward_momentum_flux_in_air_due_to_nonorographic_eastward_gravity_waves - - product_of_lagrangian_tendency_of_air_pressure_and_specific_humidity + + upward_eastward_momentum_flux_in_air_due_to_nonorographic_westward_gravity_waves - - product_of_lagrangian_tendency_of_air_pressure_and_specific_humidity + + upward_eastward_momentum_flux_in_air_due_to_orographic_gravity_waves - - product_of_lagrangian_tendency_of_air_pressure_and_geopotential_height + + lwe_thickness_of_atmosphere_mass_content_of_water_vapor - - product_of_lagrangian_tendency_of_air_pressure_and_air_temperature + + mass_content_of_cloud_condensed_water_in_atmosphere_layer - - product_of_lagrangian_tendency_of_air_pressure_and_air_temperature + + mass_content_of_cloud_ice_in_atmosphere_layer - - tendency_of_sea_water_salinity_expressed_as_salt_content_due_to_parameterized_dianeutral_mixing + + mass_content_of_water_in_atmosphere_layer - - tendency_of_sea_water_potential_temperature_expressed_as_heat_content_due_to_parameterized_dianeutral_mixing + + mass_content_of_water_vapor_in_atmosphere_layer - - tendency_of_sea_water_conservative_temperature_expressed_as_heat_content_due_to_parameterized_dianeutral_mixing + + tendency_of_atmosphere_mass_content_of_water_due_to_advection - - rate_of_hydroxyl_radical_destruction_due_to_reaction_with_nmvoc + + tendency_of_atmosphere_mass_content_of_water_vapor - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_miscellaneous_phytoplankton + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_convection - - mole_fraction_of_inorganic_bromine_in_air + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_deep_convection - - water_vapor_saturation_deficit_in_air + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_shallow_convection - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_agricultural_waste_burning + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_turbulence - - tendency_of_atmosphere_moles_of_carbon_tetrachloride + + tendency_of_mass_content_of_water_vapor_in_atmosphere_layer - - tendency_of_atmosphere_moles_of_carbon_monoxide + + tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_convection - - platform_yaw + + tendency_of_middle_atmosphere_moles_of_carbon_monoxide - - platform_pitch + + tendency_of_middle_atmosphere_moles_of_methane - - platform_roll + + tendency_of_middle_atmosphere_moles_of_methyl_bromide - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_due_to_nitrate_utilization + + tendency_of_middle_atmosphere_moles_of_methyl_chloride - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_picophytoplankton + + tendency_of_middle_atmosphere_moles_of_molecular_hydrogen - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_phytoplankton + + tendency_of_troposphere_moles_of_carbon_monoxide - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diatoms + + tendency_of_troposphere_moles_of_methane - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_calcareous_phytoplankton + + tendency_of_troposphere_moles_of_methyl_bromide - - mole_concentration_of_diatoms_expressed_as_nitrogen_in_sea_water + + tendency_of_troposphere_moles_of_methyl_chloride - - tendency_of_mole_concentration_of_dissolved_inorganic_silicon_in_sea_water_due_to_biological_processes + + tendency_of_troposphere_moles_of_molecular_hydrogen - - tendency_of_mole_concentration_of_dissolved_inorganic_phosphorus_in_sea_water_due_to_biological_processes + + mass_fraction_of_convective_cloud_condensed_water_in_air - - tendency_of_atmosphere_mole_concentration_of_carbon_monoxide_due_to_chemical_destruction + + mass_fraction_of_ozone_in_air - - volume_extinction_coefficient_in_air_due_to_ambient_aerosol_particles + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_due_to_emission - - mole_fraction_of_noy_expressed_as_nitrogen_in_air + + tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_emission - - tendency_of_atmosphere_moles_of_methane + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_residential_and_commercial_combustion - - tendency_of_specific_humidity_due_to_stratiform_precipitation + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_waste_treatment_and_disposal - - tendency_of_air_temperature_due_to_stratiform_precipitation + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_savanna_and_grassland_fires - - stratiform_precipitation_flux + + tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_emission - - stratiform_precipitation_amount + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_land_transport - - lwe_thickness_of_stratiform_precipitation_amount + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_agricultural_waste_burning - - lwe_stratiform_precipitation_rate + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_energy_production_and_distribution - - water_evaporation_amount_from_canopy + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_maritime_transport - - water_evaporation_flux_from_canopy + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production_and_emission - - precipitation_flux_onto_canopy + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production_and_emission - - outgoing_water_volume_transport_along_river_channel + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_forest_fires - - tendency_of_sea_ice_amount_due_to_conversion_of_snow_to_sea_ice + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_industrial_processes_and_combustion - - tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_emission + + sea_surface_swell_wave_significant_height - - mass_fraction_of_mercury_dry_aerosol_particles_in_air + + sea_surface_wind_wave_significant_height - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_sublimation_of_surface_snow_and_ice + + sea_surface_wave_significant_height - - surface_snow_density + + mass_content_of_water_in_soil_layer - - atmosphere_upward_relative_vorticity + + mass_content_of_water_in_soil - - atmosphere_upward_absolute_vorticity + + sea_surface_swell_wave_to_direction - - area_type + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_gravitational_settling - - area_type + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_gravitational_settling - - mass_fraction_of_liquid_precipitation_in_air + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_turbulent_deposition - - mass_fraction_of_liquid_precipitation_in_air + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_turbulent_deposition - - tendency_of_mole_concentration_of_particulate_organic_matter_expressed_as_carbon_in_sea_water_due_to_net_primary_production_by_diazotrophic_phytoplankton + + tendency_of_atmosphere_moles_of_nitric_acid_trihydrate_ambient_aerosol_particles - - nitrogen_growth_limitation_of_diazotrophic_phytoplankton + + eastward_water_vapor_flux_in_air - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diazotrophic_phytoplankton + + kinetic_energy_dissipation_in_atmosphere_boundary_layer - - net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diazotrophic_phytoplankton + + lwe_stratiform_snowfall_rate - - mole_concentration_of_diazotrophic_phytoplankton_expressed_as_carbon_in_sea_water + + lwe_thickness_of_stratiform_snowfall_amount - - mass_concentration_of_diazotrophic_phytoplankton_expressed_as_chlorophyll_in_sea_water + + northward_water_vapor_flux_in_air - - iron_growth_limitation_of_diazotrophic_phytoplankton + + stratiform_rainfall_amount - - growth_limitation_of_diazotrophic_phytoplankton_due_to_solar_irradiance + + stratiform_rainfall_flux - - air_pseudo_equivalent_potential_temperature + + stratiform_rainfall_rate - - tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_cloud_liquid_water + + stratiform_snowfall_amount - - tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_cloud_liquid_water + + stratiform_snowfall_flux - - tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_cloud_liquid_water + + thickness_of_stratiform_rainfall_amount - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_wet_deposition - + + thickness_of_stratiform_snowfall_amount + - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_wet_deposition + + atmosphere_mass_content_of_cloud_condensed_water - - stratiform_cloud_area_fraction + + atmosphere_mass_content_of_cloud_ice - - surface_upwelling_radiance_per_unit_wavelength_in_air_reflected_by_sea_water + + atmosphere_mass_content_of_convective_cloud_condensed_water - - surface_upwelling_radiance_per_unit_wavelength_in_air_emerging_from_sea_water + + atmosphere_mass_content_of_water_vapor - - surface_upwelling_radiance_per_unit_wavelength_in_air + + surface_downward_mole_flux_of_carbon_dioxide - - surface_upwelling_longwave_flux_in_air + + surface_upward_mole_flux_of_carbon_dioxide - - incoming_water_volume_transport_along_river_channel + + atmosphere_mass_content_of_sulfate - - sea_water_potential_temperature_expressed_as_heat_content + + atmosphere_mass_content_of_sulfate - - sea_water_potential_temperature_expressed_as_heat_content + + change_over_time_in_atmosphere_mass_content_of_water_due_to_advection - - sea_ice_temperature_expressed_as_heat_content + + change_over_time_in_atmosphere_mass_content_of_water_due_to_advection - - sea_ice_temperature_expressed_as_heat_content + + atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles - - surface_downwelling_spherical_irradiance_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles - - surface_downwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol + + mass_fraction_of_particulate_organic_matter_dry_aerosol_particles_in_air - - surface_downwelling_shortwave_flux_in_air_assuming_clear_sky + + mass_fraction_of_primary_particulate_organic_matter_dry_aerosol_particles_in_air - - surface_downwelling_shortwave_flux_in_air + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition - - surface_downwelling_radiative_flux_per_unit_wavelength_in_sea_water + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_gravitational_settling - - surface_downwelling_radiative_flux_per_unit_wavelength_in_air + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_turbulent_deposition - - surface_downwelling_radiance_per_unit_wavelength_in_sea_water + + tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition - - surface_downwelling_photon_spherical_irradiance_per_unit_wavelength_in_sea_water + + tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition - - surface_downwelling_photon_radiance_per_unit_wavelength_in_sea_water + + tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition - - surface_downwelling_photon_flux_per_unit_wavelength_in_sea_water + + atmosphere_absorption_optical_thickness_due_to_ambient_aerosol_particles - - surface_downwelling_longwave_flux_in_air + + angstrom_exponent_of_ambient_aerosol_in_air - - integral_wrt_time_of_surface_downwelling_shortwave_flux_in_air + + atmosphere_absorption_optical_thickness_due_to_dust_ambient_aerosol_particles - - integral_wrt_time_of_surface_downwelling_longwave_flux_in_air + + atmosphere_absorption_optical_thickness_due_to_particulate_organic_matter_ambient_aerosol_particles - - downwelling_spherical_irradiance_per_unit_wavelength_in_sea_water + + atmosphere_absorption_optical_thickness_due_to_sulfate_ambient_aerosol_particles - - downwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol + + atmosphere_mass_content_of_ammonium_dry_aerosol_particles - - downwelling_radiative_flux_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_dust_dry_aerosol_particles - - downwelling_radiative_flux_per_unit_wavelength_in_air + + atmosphere_mass_content_of_mercury_dry_aerosol_particles - - downwelling_radiance_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_nitrate_dry_aerosol_particles - - downwelling_radiance_per_unit_wavelength_in_air + + atmosphere_mass_content_of_nitric_acid_trihydrate_ambient_aerosol_particles - - downwelling_photon_spherical_irradiance_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles - - downwelling_photon_radiance_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_sulfate_ambient_aerosol_particles - - downwelling_photon_flux_per_unit_wavelength_in_sea_water + + atmosphere_mass_content_of_sulfate_ambient_aerosol_particles - - surface_upwelling_shortwave_flux_in_air_assuming_clear_sky + + atmosphere_mass_content_of_sulfate_dry_aerosol_particles - - surface_upwelling_longwave_flux_in_air_assuming_clear_sky + + atmosphere_mass_content_of_water_in_ambient_aerosol_particles - - upwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol + + atmosphere_moles_of_nitric_acid_trihydrate_ambient_aerosol_particles - - upwelling_radiative_flux_per_unit_wavelength_in_sea_water + + atmosphere_optical_thickness_due_to_ambient_aerosol_particles - - upwelling_radiative_flux_per_unit_wavelength_in_air + + atmosphere_optical_thickness_due_to_ambient_aerosol_particles - - upwelling_radiance_per_unit_wavelength_in_air + + atmosphere_optical_thickness_due_to_dust_ambient_aerosol_particles - - surface_upwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol + + atmosphere_optical_thickness_due_to_dust_dry_aerosol_particles - - surface_upwelling_shortwave_flux_in_air + + atmosphere_optical_thickness_due_to_particulate_organic_matter_ambient_aerosol_particles - - surface_upwelling_radiative_flux_per_unit_wavelength_in_sea_water + + mass_concentration_of_dust_dry_aerosol_particles_in_air - - surface_upwelling_radiative_flux_per_unit_wavelength_in_air + + mass_concentration_of_coarse_mode_ambient_aerosol_particles_in_air - - surface_upwelling_radiance_per_unit_wavelength_in_sea_water + + mass_concentration_of_ammonium_dry_aerosol_particles_in_air - - platform_name + + atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur - - water_vapor_partial_pressure_in_air + + atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur - - effective_radius_of_stratiform_cloud_snow_particles + + mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_cfc11 + + mass_concentration_of_particulate_organic_matter_dry_aerosol_particles_in_air - - moles_of_cfc11_per_unit_mass_in_sea_water + + atmosphere_optical_thickness_due_to_water_in_ambient_aerosol_particles - - atmosphere_moles_of_cfc11 + + mass_concentration_of_mercury_dry_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_cfc113 + + mass_concentration_of_nitrate_dry_aerosol_particles_in_air - - atmosphere_moles_of_cfc113 + + mass_concentration_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_cfc114 + + mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_particles_in_air - - atmosphere_moles_of_cfc114 + + mass_concentration_of_sulfate_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_cfc115 + + mass_concentration_of_sulfate_ambient_aerosol_particles_in_air - - atmosphere_moles_of_cfc115 + + mass_concentration_of_sulfate_dry_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_cfc12 + + mass_concentration_of_water_in_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_halon2402 + + mass_fraction_of_ammonium_dry_aerosol_particles_in_air - - atmosphere_moles_of_halon2402 + + mass_fraction_of_dust_dry_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_hcc140a + + mass_fraction_of_nitrate_dry_aerosol_particles_in_air - - atmosphere_moles_of_hcc140a + + mass_fraction_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air - - tendency_of_troposphere_moles_of_hcc140a + + mass_fraction_of_secondary_particulate_organic_matter_dry_aerosol_particles_in_air - - tendency_of_middle_atmosphere_moles_of_hcc140a + + mass_fraction_of_sulfate_dry_aerosol_particles_in_air - - tendency_of_troposphere_moles_of_hcfc22 + + mass_fraction_of_water_in_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_moles_of_hcfc22 + + mole_concentration_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air - - atmosphere_moles_of_hcfc22 + + mole_fraction_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air - - product_of_northward_wind_and_lagrangian_tendency_of_air_pressure + + number_concentration_of_ambient_aerosol_particles_in_air - - product_of_eastward_wind_and_lagrangian_tendency_of_air_pressure + + number_concentration_of_coarse_mode_ambient_aerosol_particles_in_air - - carbon_mass_flux_into_litter_and_soil_due_to_anthropogenic_land_use_or_land_cover_change + + number_concentration_of_nucleation_mode_ambient_aerosol_particles_in_air - - floating_ice_shelf_area_fraction + + optical_thickness_of_atmosphere_layer_due_to_ambient_aerosol_particles - - atmosphere_moles_of_carbon_tetrachloride + + optical_thickness_of_atmosphere_layer_due_to_ambient_aerosol_particles - - mole_fraction_of_methylglyoxal_in_air + + tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_particles_due_to_dry_deposition - - mole_fraction_of_dichlorine_peroxide_in_air + + tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_particles_due_to_wet_deposition - - volume_scattering_coefficient_of_radiative_flux_in_air_due_to_ambient_aerosol_particles + + tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_dry_deposition - - volume_scattering_coefficient_of_radiative_flux_in_air_due_to_dried_aerosol_particles + + tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_gravitational_settling - - soil_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_turbulent_deposition - - slow_soil_pool_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_wet_deposition - - root_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_dry_deposition - - miscellaneous_living_matter_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_wet_deposition - - fast_soil_pool_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_nitrate_dry_aerosol_particles_due_to_dry_deposition - - medium_soil_pool_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition - - leaf_mass_content_of_carbon + + tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production - - carbon_mass_content_of_forestry_and_agricultural_products + + tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production - - carbon_mass_content_of_forestry_and_agricultural_products + + tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition - - surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration_for_biomass_maintenance + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_due_to_dry_deposition - - surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration_for_biomass_growth + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_dry_deposition - - surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_dry_deposition - - surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_respiration_in_soil + + x_wind - - surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_heterotrophic_respiration + + y_wind - - eastward_transformed_eulerian_mean_air_velocity + + land_ice_surface_specific_mass_balance_rate - - surface_litter_mass_content_of_carbon + + land_ice_lwe_surface_specific_mass_balance_rate - - litter_mass_content_of_carbon + + isotropic_radiance_per_unit_wavelength_in_air - - tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_wet_deposition + + isotropic_radiance_per_unit_wavelength_in_air - - mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water + + omnidirectional_spherical_irradiance_per_unit_wavelength_in_sea_water - - atmosphere_mass_content_of_convective_cloud_liquid_water + + mass_concentration_of_chlorophyll_in_sea_water - - effective_radius_of_cloud_liquid_water_particles_at_liquid_water_cloud_top + + mass_concentration_of_chlorophyll_in_sea_water - - air_equivalent_temperature + + tendency_of_atmosphere_moles_of_sulfate_dry_aerosol_particles - - air_pseudo_equivalent_temperature + + tendency_of_atmosphere_moles_of_methyl_bromide - - mass_content_of_cloud_liquid_water_in_atmosphere_layer + + tendency_of_atmosphere_moles_of_methyl_chloride - - air_equivalent_potential_temperature + + tendency_of_atmosphere_moles_of_molecular_hydrogen - - number_concentration_of_stratiform_cloud_liquid_water_particles_at_stratiform_liquid_water_cloud_top + + tendency_of_atmosphere_moles_of_nitrous_oxide - - number_concentration_of_convective_cloud_liquid_water_particles_at_convective_liquid_water_cloud_top + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_advection - - effective_radius_of_stratiform_cloud_liquid_water_particles_at_stratiform_liquid_water_cloud_top + + atmosphere_moles_of_carbon_monoxide - - effective_radius_of_stratiform_cloud_liquid_water_particles + + sea_surface_wind_wave_to_direction - - effective_radius_of_convective_cloud_liquid_water_particles_at_convective_liquid_water_cloud_top + + sea_surface_wave_mean_period - - effective_radius_of_convective_cloud_liquid_water_particles + + equivalent_thickness_at_stp_of_atmosphere_ozone_content - - effective_radius_of_cloud_liquid_water_particles + + atmosphere_moles_of_methane - - atmosphere_mass_content_of_cloud_liquid_water + + atmosphere_moles_of_methyl_bromide - - atmosphere_moles_of_cfc12 + + atmosphere_moles_of_methyl_chloride - - tendency_of_atmosphere_moles_of_halon1202 + + atmosphere_moles_of_molecular_hydrogen - - atmosphere_moles_of_halon1202 + + atmosphere_moles_of_nitrous_oxide - - tendency_of_atmosphere_moles_of_halon1211 + + sea_water_x_velocity - - atmosphere_moles_of_halon1211 + + sea_water_y_velocity - - tendency_of_atmosphere_moles_of_halon1301 + + integral_wrt_time_of_air_temperature_deficit - - atmosphere_moles_of_halon1301 + + integral_wrt_time_of_air_temperature_excess - - platform_id + + integral_wrt_time_of_surface_downward_latent_heat_flux - - mass_flux_of_carbon_into_litter_from_vegetation + + integral_wrt_time_of_surface_downward_sensible_heat_flux - - subsurface_litter_mass_content_of_carbon + + atmosphere_convective_available_potential_energy - - stem_mass_content_of_carbon + + atmosphere_convective_available_potential_energy - - mole_concentration_of_dissolved_inorganic_14C_in_sea_water + + gross_primary_productivity_of_biomass_expressed_as_carbon - - surface_downward_mass_flux_of_14C_dioxide_abiotic_analogue_expressed_as_carbon + + net_primary_productivity_of_biomass_expressed_as_carbon - - surface_downward_mass_flux_of_13C_dioxide_abiotic_analogue_expressed_as_13C + + net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_leaves - - mole_concentration_of_dissolved_inorganic_13C_in_sea_water + + net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_roots - - northward_transformed_eulerian_mean_air_velocity + + net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_wood - - surface_water_evaporation_flux + + tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_dry_deposition - - water_volume_transport_into_sea_water_from_rivers + + tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_emission - - stratiform_graupel_flux + + sea_surface_wind_wave_mean_period - - wood_debris_mass_content_of_carbon + + sea_surface_swell_wave_mean_period - - toa_outgoing_shortwave_flux_assuming_clear_sky_and_no_aerosol + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_emission - - water_flux_into_sea_water_from_rivers + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_emission - - integral_wrt_height_of_product_of_northward_wind_and_specific_humidity + + sea_surface_height_above_geoid - - integral_wrt_height_of_product_of_eastward_wind_and_specific_humidity + + sea_surface_height_above_geoid - - integral_wrt_depth_of_sea_water_temperature + + sea_floor_depth_below_geoid - - integral_wrt_depth_of_sea_water_temperature + + air_pressure_at_mean_sea_level - - integral_wrt_depth_of_sea_water_temperature + + lagrangian_tendency_of_air_pressure - - integral_wrt_depth_of_sea_water_temperature + + lagrangian_tendency_of_air_pressure - - integral_wrt_depth_of_sea_water_practical_salinity + + mass_concentration_of_elemental_carbon_dry_aerosol_particles_in_air - - magnitude_of_sea_ice_displacement + + atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles - - atmosphere_absorption_optical_thickness_due_to_sea_salt_ambient_aerosol_particles + + mass_fraction_of_elemental_carbon_dry_aerosol_particles_in_air - - atmosphere_absorption_optical_thickness_due_to_sea_salt_ambient_aerosol_particles + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_dry_deposition - - tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_deposition + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission - - tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_dry_deposition + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_energy_production_and_distribution - - surface_geostrophic_eastward_sea_water_velocity + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_forest_fires - - surface_geostrophic_northward_sea_water_velocity + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_industrial_processes_and_combustion - - tendency_of_sea_surface_height_above_mean_sea_level + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_land_transport - - surface_geostrophic_sea_water_y_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_maritime_transport - - surface_geostrophic_sea_water_x_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_residential_and_commercial_combustion - - surface_geostrophic_northward_sea_water_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_savanna_and_grassland_fires - - surface_geostrophic_northward_sea_water_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_waste_treatment_and_disposal - - surface_geostrophic_eastward_sea_water_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_gravitational_settling - - surface_geostrophic_eastward_sea_water_velocity_assuming_mean_sea_level_for_geoid + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_turbulent_deposition - - sea_surface_height_above_mean_sea_level + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_wet_deposition - - sea_surface_height_above_mean_sea_level + + tendency_of_mass_concentration_of_elemental_carbon_dry_aerosol_particles_in_air_due_to_emission_from_aviation - - sea_floor_depth_below_mean_sea_level + + integral_wrt_time_of_surface_net_downward_longwave_flux - - mass_fraction_of_pm10_ambient_aerosol_particles_in_air + + integral_wrt_time_of_surface_net_downward_shortwave_flux - - mass_fraction_of_pm10_ambient_aerosol_particles_in_air + + integral_wrt_time_of_toa_net_downward_shortwave_flux - - mass_concentration_of_pm10_ambient_aerosol_particles_in_air + + integral_wrt_time_of_toa_outgoing_longwave_flux - - atmosphere_optical_thickness_due_to_pm10_ambient_aerosol_particles + + northward_ocean_freshwater_transport_due_to_parameterized_eddy_advection - - mass_fraction_of_pm2p5_ambient_aerosol_particles_in_air + + northward_ocean_salt_transport_due_to_parameterized_eddy_advection - - mass_fraction_of_pm2p5_ambient_aerosol_particles_in_air + + ocean_heat_x_transport_due_to_parameterized_eddy_advection - - mass_concentration_of_pm2p5_ambient_aerosol_particles_in_air + + ocean_heat_y_transport_due_to_parameterized_eddy_advection - - atmosphere_optical_thickness_due_to_pm2p5_ambient_aerosol_particles + + ocean_mass_x_transport_due_to_advection_and_parameterized_eddy_advection - - mass_fraction_of_pm1_ambient_aerosol_particles_in_air + + ocean_mass_y_transport_due_to_advection_and_parameterized_eddy_advection - - mass_fraction_of_pm1_ambient_aerosol_particles_in_air + + ocean_meridional_overturning_mass_streamfunction_due_to_parameterized_eddy_advection - - mass_concentration_of_pm1_ambient_aerosol_particles_in_air + + ocean_y_overturning_mass_streamfunction_due_to_parameterized_eddy_advection - - atmosphere_optical_thickness_due_to_pm1_ambient_aerosol_particles + + tendency_of_sea_water_salinity_due_to_parameterized_eddy_advection - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_wet_deposition + + tendency_of_sea_water_temperature_due_to_parameterized_eddy_advection - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_wet_deposition + + northward_sea_water_velocity_due_to_parameterized_mesoscale_eddies - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_turbulent_deposition + + eastward_sea_water_velocity_due_to_parameterized_mesoscale_eddies - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_turbulent_deposition + + sea_water_x_velocity_due_to_parameterized_mesoscale_eddies - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_gravitational_settling + + sea_water_y_velocity_due_to_parameterized_mesoscale_eddies - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_gravitational_settling + + upward_sea_water_velocity_due_to_parameterized_mesoscale_eddies - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_dry_deposition + + ocean_tracer_biharmonic_diffusivity_due_to_parameterized_mesoscale_eddy_advection - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_dry_deposition + + ocean_tracer_laplacian_diffusivity_due_to_parameterized_mesoscale_eddy_advection - - tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_wet_deposition + + tendency_of_ocean_eddy_kinetic_energy_content_due_to_parameterized_eddy_advection - - tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_wet_deposition + + mole_concentration_of_mesozooplankton_expressed_as_nitrogen_in_sea_water - - tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_emission + + mole_concentration_of_microzooplankton_expressed_as_nitrogen_in_sea_water - - tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_dry_deposition + + mole_concentration_of_organic_detritus_expressed_as_nitrogen_in_sea_water - - mass_fraction_of_sea_salt_dry_aerosol_particles_in_air + + mole_concentration_of_organic_detritus_expressed_as_silicon_in_sea_water - - mass_fraction_of_sea_salt_dry_aerosol_particles_in_air + + northward_ocean_heat_transport_due_to_parameterized_eddy_advection - - mass_concentration_of_sea_salt_dry_aerosol_particles_in_air + + integral_wrt_depth_of_sea_water_practical_salinity - - mass_concentration_of_sea_salt_dry_aerosol_particles_in_air + + integral_wrt_depth_of_sea_water_temperature - - atmosphere_optical_thickness_due_to_sea_salt_ambient_aerosol_particles + + integral_wrt_depth_of_sea_water_temperature - - atmosphere_optical_thickness_due_to_sea_salt_ambient_aerosol_particles + + integral_wrt_depth_of_sea_water_temperature - - atmosphere_mass_content_of_sea_salt_dry_aerosol_particles + + integral_wrt_depth_of_sea_water_temperature - - atmosphere_mass_content_of_sea_salt_dry_aerosol_particles + + integral_wrt_height_of_product_of_eastward_wind_and_specific_humidity - - ocean_mixed_layer_thickness_defined_by_vertical_tracer_diffusivity_deficit + + integral_wrt_height_of_product_of_northward_wind_and_specific_humidity - - northward_ocean_heat_transport_due_to_parameterized_eddy_advection + + water_flux_into_sea_water_from_rivers - - tendency_of_ocean_eddy_kinetic_energy_content_due_to_parameterized_eddy_advection + + toa_outgoing_shortwave_flux_assuming_clear_sky_and_no_aerosol - - ocean_tracer_laplacian_diffusivity_due_to_parameterized_mesoscale_eddy_advection + + wood_debris_mass_content_of_carbon - - ocean_tracer_biharmonic_diffusivity_due_to_parameterized_mesoscale_eddy_advection + + stratiform_graupel_flux - - upward_sea_water_velocity_due_to_parameterized_mesoscale_eddies + + water_volume_transport_into_sea_water_from_rivers - - sea_water_y_velocity_due_to_parameterized_mesoscale_eddies + + surface_water_evaporation_flux - - sea_water_x_velocity_due_to_parameterized_mesoscale_eddies + + northward_transformed_eulerian_mean_air_velocity - - eastward_sea_water_velocity_due_to_parameterized_mesoscale_eddies + + ocean_mixed_layer_thickness_defined_by_vertical_tracer_diffusivity_deficit - - northward_sea_water_velocity_due_to_parameterized_mesoscale_eddies + + atmosphere_mass_content_of_sea_salt_dry_aerosol_particles - - tendency_of_sea_water_temperature_due_to_parameterized_eddy_advection + + atmosphere_mass_content_of_sea_salt_dry_aerosol_particles - - tendency_of_sea_water_salinity_due_to_parameterized_eddy_advection + + atmosphere_optical_thickness_due_to_sea_salt_ambient_aerosol_particles - - ocean_y_overturning_mass_streamfunction_due_to_parameterized_eddy_advection + + atmosphere_optical_thickness_due_to_sea_salt_ambient_aerosol_particles - - ocean_meridional_overturning_mass_streamfunction_due_to_parameterized_eddy_advection + + mass_concentration_of_sea_salt_dry_aerosol_particles_in_air - - ocean_mass_y_transport_due_to_advection_and_parameterized_eddy_advection + + mass_concentration_of_sea_salt_dry_aerosol_particles_in_air - - ocean_mass_x_transport_due_to_advection_and_parameterized_eddy_advection + + mass_fraction_of_sea_salt_dry_aerosol_particles_in_air - - ocean_heat_y_transport_due_to_parameterized_eddy_advection + + mass_fraction_of_sea_salt_dry_aerosol_particles_in_air - - ocean_heat_x_transport_due_to_parameterized_eddy_advection + + tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_dry_deposition - - northward_ocean_salt_transport_due_to_parameterized_eddy_advection + + tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_emission - - northward_ocean_freshwater_transport_due_to_parameterized_eddy_advection + + tendency_of_atmosphere_mass_content_of_pm10_sea_salt_dry_aerosol_particles_due_to_wet_deposition - - integral_wrt_time_of_toa_outgoing_longwave_flux + + tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_wet_deposition + + + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_dry_deposition + + + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_dry_deposition - - integral_wrt_time_of_toa_net_downward_shortwave_flux + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_gravitational_settling - - integral_wrt_time_of_surface_net_downward_shortwave_flux + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_gravitational_settling - - integral_wrt_time_of_surface_net_downward_longwave_flux + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_turbulent_deposition - - tendency_of_mass_concentration_of_elemental_carbon_dry_aerosol_particles_in_air_due_to_emission_from_aviation + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_turbulent_deposition - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_wet_deposition + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_wet_deposition - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_turbulent_deposition + + tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_wet_deposition - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_gravitational_settling + + atmosphere_optical_thickness_due_to_pm1_ambient_aerosol_particles - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_waste_treatment_and_disposal + + mass_concentration_of_pm1_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_savanna_and_grassland_fires + + mass_fraction_of_pm1_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_residential_and_commercial_combustion + + mass_fraction_of_pm1_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_maritime_transport + + atmosphere_optical_thickness_due_to_pm2p5_ambient_aerosol_particles - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_land_transport + + mass_concentration_of_pm2p5_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_industrial_processes_and_combustion + + mass_fraction_of_pm2p5_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_forest_fires + + mass_fraction_of_pm2p5_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_energy_production_and_distribution + + atmosphere_optical_thickness_due_to_pm10_ambient_aerosol_particles - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission + + mass_concentration_of_pm10_ambient_aerosol_particles_in_air - - tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_dry_deposition + + mass_fraction_of_pm10_ambient_aerosol_particles_in_air - - mass_fraction_of_elemental_carbon_dry_aerosol_particles_in_air + + mass_fraction_of_pm10_ambient_aerosol_particles_in_air - - atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles + + sea_floor_depth_below_mean_sea_level - - mass_concentration_of_elemental_carbon_dry_aerosol_particles_in_air + + sea_surface_height_above_mean_sea_level - - lagrangian_tendency_of_air_pressure + + sea_surface_height_above_mean_sea_level - - lagrangian_tendency_of_air_pressure + + surface_geostrophic_eastward_sea_water_velocity_assuming_mean_sea_level_for_geoid - - air_pressure_at_mean_sea_level + + surface_geostrophic_eastward_sea_water_velocity_assuming_mean_sea_level_for_geoid - - sea_floor_depth_below_geoid + + surface_geostrophic_northward_sea_water_velocity_assuming_mean_sea_level_for_geoid - - sea_surface_height_above_geoid + + surface_geostrophic_northward_sea_water_velocity_assuming_mean_sea_level_for_geoid - - sea_surface_height_above_geoid + + surface_geostrophic_sea_water_x_velocity_assuming_mean_sea_level_for_geoid - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_emission + + surface_geostrophic_sea_water_y_velocity_assuming_mean_sea_level_for_geoid - - tendency_of_atmosphere_mass_content_of_sea_salt_dry_aerosol_particles_due_to_emission + + tendency_of_sea_surface_height_above_mean_sea_level - - sea_surface_swell_wave_mean_period + + surface_geostrophic_northward_sea_water_velocity - - sea_surface_wind_wave_mean_period + + surface_geostrophic_eastward_sea_water_velocity - - sea_surface_wave_mean_period + + tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_dry_deposition - - sea_surface_wind_wave_to_direction + + tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_deposition - - atmosphere_moles_of_carbon_monoxide + + atmosphere_absorption_optical_thickness_due_to_sea_salt_ambient_aerosol_particles - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_advection + + atmosphere_absorption_optical_thickness_due_to_sea_salt_ambient_aerosol_particles - - tendency_of_atmosphere_moles_of_nitrous_oxide + + mole_concentration_of_dissolved_inorganic_13C_in_sea_water - - tendency_of_atmosphere_moles_of_molecular_hydrogen + + surface_downward_mass_flux_of_13C_dioxide_abiotic_analogue_expressed_as_13C - - tendency_of_atmosphere_moles_of_methyl_chloride + + surface_downward_mass_flux_of_14C_dioxide_abiotic_analogue_expressed_as_carbon - - tendency_of_atmosphere_moles_of_methyl_bromide + + mole_concentration_of_dissolved_inorganic_14C_in_sea_water - - y_wind + + stem_mass_content_of_carbon - - x_wind + + subsurface_litter_mass_content_of_carbon - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_dry_deposition + + mass_flux_of_carbon_into_litter_from_vegetation - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_dry_deposition + + platform_id - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_due_to_dry_deposition + + atmosphere_moles_of_halon1301 - - tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition + + tendency_of_atmosphere_moles_of_halon1301 - - tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production + + atmosphere_moles_of_halon1211 - - tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production + + tendency_of_atmosphere_moles_of_halon1211 - - tendency_of_atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition + + atmosphere_moles_of_halon1202 - - tendency_of_atmosphere_mass_content_of_nitrate_dry_aerosol_particles_due_to_dry_deposition + + tendency_of_atmosphere_moles_of_halon1202 - - tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_wet_deposition + + atmosphere_moles_of_cfc12 - - tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_dry_deposition + + atmosphere_mass_content_of_cloud_liquid_water - - tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_wet_deposition + + effective_radius_of_cloud_liquid_water_particles - - tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_turbulent_deposition + + effective_radius_of_convective_cloud_liquid_water_particles - - tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_gravitational_settling + + effective_radius_of_convective_cloud_liquid_water_particles_at_convective_liquid_water_cloud_top - - tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_dry_deposition + + effective_radius_of_stratiform_cloud_liquid_water_particles - - tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_particles_due_to_wet_deposition + + effective_radius_of_stratiform_cloud_liquid_water_particles_at_stratiform_liquid_water_cloud_top - - tendency_of_atmosphere_mass_content_of_ammonium_dry_aerosol_particles_due_to_dry_deposition + + magnitude_of_sea_ice_displacement - - optical_thickness_of_atmosphere_layer_due_to_ambient_aerosol_particles + + number_concentration_of_convective_cloud_liquid_water_particles_at_convective_liquid_water_cloud_top - - optical_thickness_of_atmosphere_layer_due_to_ambient_aerosol_particles + + number_concentration_of_stratiform_cloud_liquid_water_particles_at_stratiform_liquid_water_cloud_top - - number_concentration_of_nucleation_mode_ambient_aerosol_particles_in_air + + air_equivalent_potential_temperature - - number_concentration_of_coarse_mode_ambient_aerosol_particles_in_air + + mass_content_of_cloud_liquid_water_in_atmosphere_layer - - number_concentration_of_ambient_aerosol_particles_in_air + + air_pseudo_equivalent_temperature - - mole_fraction_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air + + air_equivalent_temperature - - mole_concentration_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air + + effective_radius_of_cloud_liquid_water_particles_at_liquid_water_cloud_top - - mass_fraction_of_water_in_ambient_aerosol_particles_in_air + + atmosphere_mass_content_of_convective_cloud_liquid_water - - mass_fraction_of_sulfate_dry_aerosol_particles_in_air + + mole_concentration_of_phytoplankton_expressed_as_nitrogen_in_sea_water - - mass_fraction_of_secondary_particulate_organic_matter_dry_aerosol_particles_in_air + + tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_riming_from_cloud_liquid_water - - mass_fraction_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air + + tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_heterogeneous_nucleation_from_cloud_liquid_water - - mass_fraction_of_nitrate_dry_aerosol_particles_in_air + + tendency_of_mass_fraction_of_stratiform_cloud_ice_in_air_due_to_melting_to_cloud_liquid_water - - mass_fraction_of_dust_dry_aerosol_particles_in_air + + air_pseudo_equivalent_potential_temperature - - mass_fraction_of_ammonium_dry_aerosol_particles_in_air + + growth_limitation_of_diazotrophic_phytoplankton_due_to_solar_irradiance - - mass_concentration_of_water_in_ambient_aerosol_particles_in_air + + iron_growth_limitation_of_diazotrophic_phytoplankton - - mass_concentration_of_sulfate_dry_aerosol_particles_in_air + + mass_concentration_of_diazotrophic_phytoplankton_expressed_as_chlorophyll_in_sea_water - - mass_concentration_of_sulfate_ambient_aerosol_particles_in_air + + mole_concentration_of_diazotrophic_phytoplankton_expressed_as_carbon_in_sea_water - - mass_concentration_of_sulfate_ambient_aerosol_particles_in_air + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diazotrophic_phytoplankton - - mass_concentration_of_secondary_particulate_organic_matter_dry_aerosol_particles_in_air + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diazotrophic_phytoplankton - - mass_concentration_of_nitric_acid_trihydrate_ambient_aerosol_particles_in_air + + nitrogen_growth_limitation_of_diazotrophic_phytoplankton - - mass_concentration_of_nitrate_dry_aerosol_particles_in_air + + tendency_of_mole_concentration_of_particulate_organic_matter_expressed_as_carbon_in_sea_water_due_to_net_primary_production_by_diazotrophic_phytoplankton - - mass_concentration_of_mercury_dry_aerosol_particles_in_air + + mass_fraction_of_liquid_precipitation_in_air - - atmosphere_optical_thickness_due_to_water_in_ambient_aerosol_particles + + mass_fraction_of_liquid_precipitation_in_air - - mass_concentration_of_particulate_organic_matter_dry_aerosol_particles_in_air + + area_type - - mass_concentration_of_primary_particulate_organic_matter_dry_aerosol_particles_in_air + + area_type - - atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur + + atmosphere_upward_absolute_vorticity - - atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur + + atmosphere_upward_relative_vorticity - - mass_concentration_of_ammonium_dry_aerosol_particles_in_air + + surface_snow_density - - mass_concentration_of_coarse_mode_ambient_aerosol_particles_in_air + + tendency_of_atmosphere_mass_content_of_water_vapor_due_to_sublimation_of_surface_snow_and_ice - - mass_concentration_of_dust_dry_aerosol_particles_in_air + + mass_fraction_of_mercury_dry_aerosol_particles_in_air - - atmosphere_optical_thickness_due_to_particulate_organic_matter_ambient_aerosol_particles + + tendency_of_atmosphere_mass_content_of_mercury_dry_aerosol_particles_due_to_emission - - atmosphere_optical_thickness_due_to_dust_dry_aerosol_particles + + tendency_of_sea_ice_amount_due_to_conversion_of_snow_to_sea_ice - - atmosphere_optical_thickness_due_to_dust_ambient_aerosol_particles + + outgoing_water_volume_transport_along_river_channel - - atmosphere_optical_thickness_due_to_ambient_aerosol_particles + + precipitation_flux_onto_canopy - - atmosphere_optical_thickness_due_to_ambient_aerosol_particles + + water_evaporation_flux_from_canopy - - atmosphere_moles_of_nitric_acid_trihydrate_ambient_aerosol_particles + + water_evaporation_amount_from_canopy - - atmosphere_mass_content_of_water_in_ambient_aerosol_particles + + lwe_stratiform_precipitation_rate - - atmosphere_mass_content_of_sulfate_dry_aerosol_particles + + lwe_thickness_of_stratiform_precipitation_amount - - atmosphere_mass_content_of_sulfate_ambient_aerosol_particles + + stratiform_precipitation_amount - - atmosphere_mass_content_of_sulfate_ambient_aerosol_particles + + stratiform_precipitation_flux - - atmosphere_mass_content_of_secondary_particulate_organic_matter_dry_aerosol_particles + + tendency_of_air_temperature_due_to_stratiform_precipitation - - atmosphere_mass_content_of_nitric_acid_trihydrate_ambient_aerosol_particles + + tendency_of_specific_humidity_due_to_stratiform_precipitation - - atmosphere_mass_content_of_nitrate_dry_aerosol_particles + + tendency_of_atmosphere_moles_of_methane - - atmosphere_mass_content_of_mercury_dry_aerosol_particles + + mole_fraction_of_noy_expressed_as_nitrogen_in_air - - atmosphere_mass_content_of_dust_dry_aerosol_particles + + volume_extinction_coefficient_in_air_due_to_ambient_aerosol_particles - - atmosphere_mass_content_of_ammonium_dry_aerosol_particles + + tendency_of_atmosphere_mole_concentration_of_carbon_monoxide_due_to_chemical_destruction - - atmosphere_absorption_optical_thickness_due_to_sulfate_ambient_aerosol_particles + + tendency_of_mole_concentration_of_dissolved_inorganic_phosphorus_in_sea_water_due_to_biological_processes - - atmosphere_absorption_optical_thickness_due_to_particulate_organic_matter_ambient_aerosol_particles + + tendency_of_mole_concentration_of_dissolved_inorganic_silicon_in_sea_water_due_to_biological_processes - - atmosphere_absorption_optical_thickness_due_to_dust_ambient_aerosol_particles + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_diatoms - - angstrom_exponent_of_ambient_aerosol_in_air + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_phytoplankton - - atmosphere_absorption_optical_thickness_due_to_ambient_aerosol_particles + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_picophytoplankton - - tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_due_to_nitrate_utilization - - tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition + + platform_roll - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_wet_deposition + + platform_pitch - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_turbulent_deposition + + platform_yaw - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_gravitational_settling + + tendency_of_atmosphere_moles_of_carbon_monoxide - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_dry_deposition + + tendency_of_atmosphere_moles_of_carbon_tetrachloride - - mass_fraction_of_primary_particulate_organic_matter_dry_aerosol_particles_in_air + + tendency_of_atmosphere_mass_content_of_elemental_carbon_dry_aerosol_particles_due_to_emission_from_agricultural_waste_burning - - mass_fraction_of_particulate_organic_matter_dry_aerosol_particles_in_air + + water_vapor_saturation_deficit_in_air - - atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles + + mole_fraction_of_inorganic_bromine_in_air - - atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_miscellaneous_phytoplankton - - tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_emission + + rate_of_hydroxyl_radical_destruction_due_to_reaction_with_nmvoc - - tendency_of_atmosphere_mass_content_of_pm2p5_sea_salt_dry_aerosol_particles_due_to_dry_deposition + + tendency_of_sea_water_conservative_temperature_expressed_as_heat_content_due_to_parameterized_dianeutral_mixing - - net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_wood + + tendency_of_sea_water_potential_temperature_expressed_as_heat_content_due_to_parameterized_dianeutral_mixing - - net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_roots + + tendency_of_atmosphere_mass_content_of_nitrogen_compounds_expressed_as_nitrogen_due_to_wet_deposition - - net_primary_productivity_of_biomass_expressed_as_carbon_accumulated_in_leaves + + eastward_transformed_eulerian_mean_air_velocity - - net_primary_productivity_of_biomass_expressed_as_carbon + + surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_heterotrophic_respiration - - gross_primary_productivity_of_biomass_expressed_as_carbon + + surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_respiration_in_soil - - atmosphere_convective_available_potential_energy + + surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration - - atmosphere_convective_available_potential_energy + + surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration_for_biomass_growth - - integral_wrt_time_of_surface_downward_sensible_heat_flux + + surface_upward_mass_flux_of_carbon_dioxide_expressed_as_carbon_due_to_plant_respiration_for_biomass_maintenance - - integral_wrt_time_of_surface_downward_latent_heat_flux + + carbon_mass_content_of_forestry_and_agricultural_products - - integral_wrt_time_of_air_temperature_excess + + carbon_mass_content_of_forestry_and_agricultural_products - - integral_wrt_time_of_air_temperature_deficit + + leaf_mass_content_of_carbon - - sea_water_y_velocity + + medium_soil_pool_mass_content_of_carbon - - sea_water_x_velocity + + fast_soil_pool_mass_content_of_carbon - - mole_concentration_of_organic_detritus_expressed_as_silicon_in_sea_water + + miscellaneous_living_matter_mass_content_of_carbon - - mole_concentration_of_organic_detritus_expressed_as_nitrogen_in_sea_water + + root_mass_content_of_carbon - - mole_concentration_of_microzooplankton_expressed_as_nitrogen_in_sea_water + + slow_soil_pool_mass_content_of_carbon - - mole_concentration_of_mesozooplankton_expressed_as_nitrogen_in_sea_water + + soil_mass_content_of_carbon - - atmosphere_moles_of_nitrous_oxide + + volume_scattering_coefficient_of_radiative_flux_in_air_due_to_dried_aerosol_particles - - atmosphere_moles_of_molecular_hydrogen + + volume_scattering_coefficient_of_radiative_flux_in_air_due_to_ambient_aerosol_particles - - atmosphere_moles_of_methyl_chloride + + mole_fraction_of_dichlorine_peroxide_in_air - - atmosphere_moles_of_methyl_bromide + + mole_fraction_of_methylglyoxal_in_air - - atmosphere_moles_of_methane + + atmosphere_moles_of_carbon_tetrachloride - - equivalent_thickness_at_stp_of_atmosphere_ozone_content + + floating_ice_shelf_area_fraction - - tendency_of_atmosphere_moles_of_nitric_acid_trihydrate_ambient_aerosol_particles + + carbon_mass_flux_into_litter_and_soil_due_to_anthropogenic_land_use_or_land_cover_change - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_turbulent_deposition + + product_of_eastward_wind_and_lagrangian_tendency_of_air_pressure - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_turbulent_deposition + + product_of_northward_wind_and_lagrangian_tendency_of_air_pressure - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_gravitational_settling + + atmosphere_moles_of_hcfc22 - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_gravitational_settling + + tendency_of_atmosphere_moles_of_hcfc22 - - sea_surface_swell_wave_to_direction + + tendency_of_troposphere_moles_of_hcfc22 - - mass_content_of_water_in_soil + + tendency_of_middle_atmosphere_moles_of_hcc140a - - mass_content_of_water_in_soil_layer + + tendency_of_troposphere_moles_of_hcc140a - - sea_surface_wave_significant_height + + atmosphere_moles_of_hcc140a - - sea_surface_wind_wave_significant_height + + tendency_of_atmosphere_moles_of_hcc140a - - sea_surface_swell_wave_significant_height + + atmosphere_moles_of_halon2402 - - tendency_of_atmosphere_moles_of_sulfate_dry_aerosol_particles + + upwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol - - mass_concentration_of_chlorophyll_in_sea_water + + surface_upwelling_longwave_flux_in_air_assuming_clear_sky - - mass_concentration_of_chlorophyll_in_sea_water + + surface_upwelling_shortwave_flux_in_air_assuming_clear_sky - - omnidirectional_spherical_irradiance_per_unit_wavelength_in_sea_water + + downwelling_photon_flux_per_unit_wavelength_in_sea_water - - isotropic_radiance_per_unit_wavelength_in_air + + downwelling_photon_radiance_per_unit_wavelength_in_sea_water - - isotropic_radiance_per_unit_wavelength_in_air + + downwelling_photon_spherical_irradiance_per_unit_wavelength_in_sea_water - - land_ice_lwe_surface_specific_mass_balance_rate + + downwelling_radiance_per_unit_wavelength_in_air - - land_ice_surface_specific_mass_balance_rate + + downwelling_radiance_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_industrial_processes_and_combustion + + downwelling_radiative_flux_per_unit_wavelength_in_air - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_forest_fires + + downwelling_radiative_flux_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production_and_emission + + downwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_due_to_net_chemical_production_and_emission + + downwelling_spherical_irradiance_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_maritime_transport + + integral_wrt_time_of_surface_downwelling_longwave_flux_in_air - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_energy_production_and_distribution + + integral_wrt_time_of_surface_downwelling_shortwave_flux_in_air - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_agricultural_waste_burning + + surface_downwelling_longwave_flux_in_air - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_land_transport + + surface_downwelling_photon_flux_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_primary_particulate_organic_matter_dry_aerosol_particles_due_to_emission + + surface_downwelling_photon_radiance_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_savanna_and_grassland_fires + + surface_downwelling_photon_spherical_irradiance_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_waste_treatment_and_disposal + + surface_downwelling_radiance_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_particulate_organic_matter_dry_aerosol_particles_expressed_as_carbon_due_to_emission_from_residential_and_commercial_combustion + + surface_downwelling_radiative_flux_per_unit_wavelength_in_air - - tendency_of_atmosphere_mass_content_of_dust_dry_aerosol_particles_due_to_emission + + surface_downwelling_radiative_flux_per_unit_wavelength_in_sea_water - - tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_due_to_emission + + surface_downwelling_shortwave_flux_in_air - - tendency_of_troposphere_moles_of_molecular_hydrogen + + surface_downwelling_shortwave_flux_in_air_assuming_clear_sky - - tendency_of_troposphere_moles_of_methyl_chloride + + surface_downwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol - - tendency_of_troposphere_moles_of_methyl_bromide + + surface_downwelling_spherical_irradiance_per_unit_wavelength_in_sea_water - - tendency_of_troposphere_moles_of_methane + + sea_ice_temperature_expressed_as_heat_content - - tendency_of_troposphere_moles_of_carbon_monoxide + + sea_ice_temperature_expressed_as_heat_content - - tendency_of_middle_atmosphere_moles_of_molecular_hydrogen + + sea_water_potential_temperature_expressed_as_heat_content - - tendency_of_middle_atmosphere_moles_of_methyl_chloride + + sea_water_potential_temperature_expressed_as_heat_content - - tendency_of_middle_atmosphere_moles_of_methyl_bromide + + incoming_water_volume_transport_along_river_channel - - tendency_of_middle_atmosphere_moles_of_methane + + surface_upwelling_longwave_flux_in_air - - tendency_of_middle_atmosphere_moles_of_carbon_monoxide + + surface_upwelling_radiance_per_unit_wavelength_in_air - - tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_convection + + surface_upwelling_radiance_per_unit_wavelength_in_air_emerging_from_sea_water - - tendency_of_mass_content_of_water_vapor_in_atmosphere_layer + + surface_upwelling_radiance_per_unit_wavelength_in_air_reflected_by_sea_water - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_turbulence + + stratiform_cloud_area_fraction - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_shallow_convection + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_wet_deposition - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_deep_convection + + tendency_of_atmosphere_mass_content_of_sulfate_dry_aerosol_particles_expressed_as_sulfur_due_to_wet_deposition - - tendency_of_atmosphere_mass_content_of_water_vapor_due_to_convection + + litter_mass_content_of_carbon - - tendency_of_atmosphere_mass_content_of_water_vapor + + surface_litter_mass_content_of_carbon - - tendency_of_atmosphere_mass_content_of_water_due_to_advection + + tendency_of_sea_water_salinity_expressed_as_salt_content_due_to_parameterized_dianeutral_mixing - - mass_content_of_water_vapor_in_atmosphere_layer + + product_of_lagrangian_tendency_of_air_pressure_and_air_temperature - - mass_content_of_water_in_atmosphere_layer + + product_of_lagrangian_tendency_of_air_pressure_and_air_temperature - - mass_content_of_cloud_ice_in_atmosphere_layer + + product_of_lagrangian_tendency_of_air_pressure_and_geopotential_height - - mass_content_of_cloud_condensed_water_in_atmosphere_layer + + product_of_lagrangian_tendency_of_air_pressure_and_specific_humidity - - lwe_thickness_of_atmosphere_mass_content_of_water_vapor + + product_of_lagrangian_tendency_of_air_pressure_and_specific_humidity - - change_over_time_in_atmosphere_mass_content_of_water_due_to_advection + + volume_fraction_of_condensed_water_in_soil - - change_over_time_in_atmosphere_mass_content_of_water_due_to_advection + + volume_fraction_of_condensed_water_in_soil_at_critical_point - - atmosphere_mass_content_of_sulfate + + volume_fraction_of_condensed_water_in_soil_at_field_capacity - - atmosphere_mass_content_of_sulfate + + volume_fraction_of_condensed_water_in_soil_at_wilting_point - - surface_upward_mole_flux_of_carbon_dioxide + + integral_wrt_depth_of_product_of_potential_temperature_and_sea_water_density - - surface_downward_mole_flux_of_carbon_dioxide + + integral_wrt_depth_of_product_of_conservative_temperature_and_sea_water_density - - atmosphere_mass_content_of_water_vapor + + integral_wrt_depth_of_product_of_salinity_and_sea_water_density - - atmosphere_mass_content_of_convective_cloud_condensed_water + + sea_water_velocity_to_direction - - atmosphere_mass_content_of_cloud_ice + + sea_water_velocity_to_direction - - atmosphere_mass_content_of_cloud_condensed_water + + sea_water_velocity_from_direction - - thickness_of_stratiform_snowfall_amount + + integral_wrt_time_of_surface_downward_northward_stress - - thickness_of_stratiform_rainfall_amount + + integral_wrt_time_of_surface_downward_eastward_stress - - stratiform_snowfall_flux + + temperature_in_surface_snow - - stratiform_snowfall_amount + + thermal_energy_content_of_surface_snow - - stratiform_rainfall_rate + + surface_snow_thickness - - stratiform_rainfall_flux + + liquid_water_content_of_surface_snow - - stratiform_rainfall_amount + + soot_content_of_surface_snow - - northward_water_vapor_flux_in_air + + backscattering_ratio_in_air - - lwe_thickness_of_stratiform_snowfall_amount + + histogram_of_backscattering_ratio_in_air_over_height_above_reference_ellipsoid - - lwe_stratiform_snowfall_rate + + effective_radius_of_convective_cloud_ice_particles - - kinetic_energy_dissipation_in_atmosphere_boundary_layer + + effective_radius_of_convective_cloud_rain_particles - - eastward_water_vapor_flux_in_air + + effective_radius_of_convective_cloud_snow_particles - - upward_eastward_momentum_flux_in_air_due_to_orographic_gravity_waves + + effective_radius_of_stratiform_cloud_graupel_particles - - upward_eastward_momentum_flux_in_air_due_to_nonorographic_westward_gravity_waves + + effective_radius_of_stratiform_cloud_ice_particles - - upward_eastward_momentum_flux_in_air_due_to_nonorographic_eastward_gravity_waves + + effective_radius_of_stratiform_cloud_rain_particles - - upward_eliassen_palm_flux_in_air + + mass_concentration_of_biomass_burning_dry_aerosol_particles_in_air - - northward_heat_flux_in_air_due_to_eddy_advection + + diameter_of_ambient_aerosol_particles - - northward_eliassen_palm_flux_in_air + + electrical_mobility_diameter_of_ambient_aerosol_particles - - wave_frequency + + lagrangian_tendency_of_atmosphere_sigma_coordinate - - tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_turbulence + + lagrangian_tendency_of_atmosphere_sigma_coordinate - - tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_shallow_convection + + tendency_of_atmosphere_number_content_of_aerosol_particles_due_to_turbulent_deposition - - tendency_of_mass_content_of_water_vapor_in_atmosphere_layer_due_to_deep_convection + + biological_taxon_lsid - - atmosphere_net_upward_convective_mass_flux + + temperature_in_ground - - mass_fraction_of_ozone_in_air + + tendency_of_atmosphere_moles_of_halon2402 - - mass_fraction_of_convective_cloud_condensed_water_in_air + + tendency_of_atmosphere_moles_of_cfc12 - - sea_surface_wind_wave_period + + atmosphere_moles_of_cfc115 - - sea_surface_swell_wave_period + + tendency_of_atmosphere_moles_of_cfc115 - - mass_concentration_of_suspended_matter_in_sea_water + + atmosphere_moles_of_cfc114 - - surface_upward_sensible_heat_flux + + tendency_of_atmosphere_moles_of_cfc114 - - surface_temperature + + atmosphere_moles_of_cfc113 - - surface_temperature + + tendency_of_atmosphere_moles_of_cfc113 - - surface_temperature + + atmosphere_moles_of_cfc11 - - surface_net_downward_radiative_flux + + moles_of_cfc11_per_unit_mass_in_sea_water - - mole_fraction_of_hypochlorous_acid_in_air + + tendency_of_atmosphere_moles_of_cfc11 - - mole_fraction_of_chlorine_monoxide_in_air + + effective_radius_of_stratiform_cloud_snow_particles - - mole_fraction_of_chlorine_dioxide_in_air + + water_vapor_partial_pressure_in_air - - wind_mixing_energy_flux_into_sea_water + + platform_name - - water_flux_into_sea_water + + surface_upwelling_radiance_per_unit_wavelength_in_sea_water - - surface_drag_coefficient_in_air + + surface_upwelling_radiative_flux_per_unit_wavelength_in_air - - surface_drag_coefficient_for_momentum_in_air + + surface_upwelling_radiative_flux_per_unit_wavelength_in_sea_water - - surface_drag_coefficient_for_heat_in_air + + surface_upwelling_shortwave_flux_in_air - - specific_gravitational_potential_energy + + surface_upwelling_shortwave_flux_in_air_assuming_clear_sky_and_no_aerosol - - radiation_wavelength + + upwelling_radiance_per_unit_wavelength_in_air - - product_of_northward_wind_and_specific_humidity + + upwelling_radiative_flux_per_unit_wavelength_in_air - - mole_fraction_of_ozone_in_air + + upwelling_radiative_flux_per_unit_wavelength_in_sea_water - - water_evapotranspiration_flux + + mole_concentration_of_diatoms_expressed_as_nitrogen_in_sea_water - - isotropic_shortwave_radiance_in_air + + net_primary_mole_productivity_of_biomass_expressed_as_carbon_by_calcareous_phytoplankton - - isotropic_longwave_radiance_in_air + + moles_of_particulate_inorganic_carbon_per_unit_mass_in_sea_water diff --git a/lib/iris/tests/test_std_names.py b/lib/iris/tests/test_std_names.py index 2093d14bf8..48d32acbee 100644 --- a/lib/iris/tests/test_std_names.py +++ b/lib/iris/tests/test_std_names.py @@ -7,7 +7,7 @@ # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip -from iris.std_names import STD_NAMES +from iris.std_names import CF_STANDARD_NAMES_TABLE_VERSION, STD_NAMES class TestStandardNames(tests.IrisTest): @@ -18,7 +18,7 @@ class TestStandardNames(tests.IrisTest): longMessage = True - def test_standard_names(self): + def test_standard_names_table(self): # Check we have a dict self.assertIsInstance(STD_NAMES, dict) @@ -46,6 +46,12 @@ def test_standard_names(self): "\nInvalid standard name(s) present in STD_NAMES", ) + def test_standard_names_version(self): + # Check we have a dict + self.assertIsInstance(CF_STANDARD_NAMES_TABLE_VERSION, int) + # Check the value is roughly sensible. + self.assertTrue(70 < CF_STANDARD_NAMES_TABLE_VERSION < 999) + if __name__ == "__main__": tests.main() diff --git a/tools/generate_std_names.py b/tools/generate_std_names.py index 08bacbe1e0..51a31ef971 100644 --- a/tools/generate_std_names.py +++ b/tools/generate_std_names.py @@ -37,6 +37,8 @@ This file is automatically generated. Do not edit this file by hand. +Generated from CF standard-name table version : {table_version} + The file will be generated during a standard build/installation:: python setup.py build @@ -76,6 +78,8 @@ def to_dict(infile, outfile): tree = ET.parse(infile) + cf_table_version_string = tree.find('version_number').text + for section in process_name_table(tree, 'entry', 'canonical_units'): values.update(section) @@ -87,7 +91,10 @@ def to_dict(infile, outfile): key : {'canonical_units' : values.get(valued['entry_id']).get('canonical_units')} }) - outfile.write(STD_VALUES_FILE_TEMPLATE + pprint.pformat(values)) + text = STD_VALUES_FILE_TEMPLATE.format(table_version=cf_table_version_string) + text += pprint.pformat(values) + text += f'\n\nCF_STANDARD_NAMES_TABLE_VERSION = {cf_table_version_string}\n' + outfile.write(text) if __name__ == "__main__": From 75ff780642423c6617c90ea7476a545adbca08d8 Mon Sep 17 00:00:00 2001 From: Patrick Peglar Date: Wed, 16 Aug 2023 16:14:01 +0100 Subject: [PATCH 32/82] V3.7.x.updates (#5424) * Whats new updates for v3.7.0rc0 . --- docs/src/whatsnew/{latest.rst => 3.7.rst} | 54 ++++++++--- docs/src/whatsnew/index.rst | 4 +- docs/src/whatsnew/latest.rst.template | 107 ---------------------- 3 files changed, 45 insertions(+), 120 deletions(-) rename docs/src/whatsnew/{latest.rst => 3.7.rst} (71%) delete mode 100644 docs/src/whatsnew/latest.rst.template diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/3.7.rst similarity index 71% rename from docs/src/whatsnew/latest.rst rename to docs/src/whatsnew/3.7.rst index b500029789..237e2873cb 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/3.7.rst @@ -1,23 +1,37 @@ .. include:: ../common_links.inc -|iris_version| |build_date| [unreleased] -**************************************** +v3.7 (16 Aug 2023) [release candidate] +************************************** This document explains the changes made to Iris for this release (:doc:`View all changes `.) -.. dropdown:: |iris_version| Release Highlights +.. dropdown:: v3.7 Release Highlights :color: primary :icon: info :animate: fade-in :open: - The highlights for this major/minor release of Iris include: + There are no major feature highlights for this release of Iris, but it's worth + noting that, in addition to some important bug fixes in specific areas, this time + we have made a number of improvements for user-experience and usability, + notably : - * N/A + * improved messaging for :ref:`CubeList.concatenate() ` + and :ref:`Cube.convert_units() `. - And finally, get in touch with us on :issue:`GitHub` if you have + * avoid warnings which may occur in :ref:`pp loading ` + and :ref:`contourf `. + + * :ref:`documentation supports Dark mode `. + + * :ref:`added a "Dask Best Practices" guide ` + ( :ref:`here ` ) . + + * :ref:`improved the Installation Guide `. + + Please do get in touch with us on :issue:`GitHub` if you have any issues or feature requests for improving Iris. Enjoy! @@ -33,8 +47,11 @@ This document explains the changes made to Iris for this release #. `@rcomer`_ rewrote :func:`~iris.util.broadcast_to_shape` so it now handles lazy data. (:pull:`5307`) -#. `@acchamber`_ added error and warning messages about coordinate overlaps to - :func:`~iris.cube.concatenate` to improve the concatenation process. (:pull:`5382`) +.. _concat_warnings: + +#. `@acchamber`_ added error and warning messages about coordinate overlaps to + :func:`~iris.cube.CubeList.concatenate` to improve the concatenation process. + (:pull:`5382`) #. `@trexfeathers`_ included mesh location coordinates (e.g. :attr:`~iris.experimental.ugrid.Mesh.face_coords`) in @@ -57,9 +74,13 @@ This document explains the changes made to Iris for this release #. `@acchamber`_ removed some obsolete code that prevented extraction of time points from cubes with bounded times (:pull:`5175`) +.. _cftime_warnings: + #. `@rcomer`_ modified pp-loading to avoid a ``cftime`` warning for non-standard calendars. (:pull:`5357`) +#. `@rsdavies`_ modified the CF compliant standard name for m01s00i023 (:issue:`4566`) + 💣 Incompatible Changes ======================= @@ -71,7 +92,6 @@ This document explains the changes made to Iris for this release =========================== #. `@rcomer`_ made :meth:`~iris.cube.Cube.aggregated_by` faster. (:pull:`4970`) -#. `@rsdavies`_ modified the CF compliant standard name for m01s00i023 :issue:`4566` 🔥 Deprecations =============== @@ -88,17 +108,27 @@ This document explains the changes made to Iris for this release 📚 Documentation ================ +.. _docs_dark: + #. `@tkknight`_ prepared the documentation for dark mode and enable the option to use it. By default the theme will be based on the users system settings, defaulting to ``light`` if no system setting is found. (:pull:`5299`) +.. _dask_guide: + #. `@HGWright`_ added a :doc:`/further_topics/dask_best_practices/index` section into the user guide, containing advice and use cases to help users - get the best out of Dask with Iris. + get the best out of Dask with Iris. (:pull:`5190`) + +.. _convert_docs: #. `@acchamber`_ improved documentation for :meth:`~iris.cube.Cube.convert_units` and :meth:`~iris.coords.Coord.convert_units` by including a link to the UDUNITS-2 documentation which contains lists of compatible units and aliases for them. + (:pull:`5388`) + + +.. _installdocs_update: #. `@rcomer`_ updated the :ref:`Installation Guide` to reflect that some things are now simpler. (:pull:`5416`) @@ -109,7 +139,9 @@ This document explains the changes made to Iris for this release #. `@pp-mo`_ supported loading and saving netcdf :class:`netCDF4.Dataset` compatible objects in place of file-paths, as hooks for a forthcoming `"Xarray bridge" `_ facility. - (:pull:`5214`) + (:pull:`5214`, :pull:`5212`) + +.. _contour_future: #. `@rcomer`_ updated :func:`~iris.plot.contourf` to avoid using functionality that is deprecated in Matplotlib v3.8 (:pull:`5405`) diff --git a/docs/src/whatsnew/index.rst b/docs/src/whatsnew/index.rst index dce7458a13..d2a15be1f7 100644 --- a/docs/src/whatsnew/index.rst +++ b/docs/src/whatsnew/index.rst @@ -5,13 +5,13 @@ What's New in Iris ------------------ -.. include:: latest.rst +.. include:: 3.7.rst .. toctree:: :maxdepth: 1 :hidden: - latest.rst + 3.7.rst 3.6.rst 3.5.rst 3.4.rst diff --git a/docs/src/whatsnew/latest.rst.template b/docs/src/whatsnew/latest.rst.template deleted file mode 100644 index 966a91e976..0000000000 --- a/docs/src/whatsnew/latest.rst.template +++ /dev/null @@ -1,107 +0,0 @@ -.. include:: ../common_links.inc - -|iris_version| |build_date| [unreleased] -**************************************** - -This document explains the changes made to Iris for this release -(:doc:`View all changes `.) - - -.. dropdown:: |iris_version| Release Highlights - :color: primary - :icon: info - :animate: fade-in - :open: - - The highlights for this major/minor release of Iris include: - - * N/A - - And finally, get in touch with us on :issue:`GitHub` if you have - any issues or feature requests for improving Iris. Enjoy! - - -NOTE: section BELOW is a template for bugfix patches -==================================================== - (Please remove this section when creating an initial 'latest.rst' - -|iris_version| |build_date| -=========================== - -.. dropdown:: |iris_version| Patches - :color: primary - :icon: alert - :animate: fade-in - - The patches in this release of Iris include: - - #. N/A - -NOTE: section ABOVE is a template for bugfix patches -==================================================== - (Please remove this section when creating an initial 'latest.rst') - - -📢 Announcements -================ - -#. N/A - - -✨ Features -=========== - -#. N/A - - -🐛 Bugs Fixed -============= - -#. N/A - - -💣 Incompatible Changes -======================= - -#. N/A - - -🚀 Performance Enhancements -=========================== - -#. N/A - - -🔥 Deprecations -=============== - -#. N/A - - -🔗 Dependencies -=============== - -#. N/A - - -📚 Documentation -================ - -#. N/A - - -💼 Internal -=========== - -#. N/A - - -.. comment - Whatsnew author names (@github name) in alphabetical order. Note that, - core dev names are automatically included by the common_links.inc: - - - - -.. comment - Whatsnew resources in alphabetical order: From fccf9e603b694f3cf682028a3f3b35402422bd16 Mon Sep 17 00:00:00 2001 From: Patrick Peglar Date: Fri, 18 Aug 2023 11:18:04 +0100 Subject: [PATCH 33/82] Tweak indents to fix list numbering. (#5427) --- docs/src/whatsnew/3.7.rst | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docs/src/whatsnew/3.7.rst b/docs/src/whatsnew/3.7.rst index 237e2873cb..d5ea21f3d7 100644 --- a/docs/src/whatsnew/3.7.rst +++ b/docs/src/whatsnew/3.7.rst @@ -47,7 +47,7 @@ This document explains the changes made to Iris for this release #. `@rcomer`_ rewrote :func:`~iris.util.broadcast_to_shape` so it now handles lazy data. (:pull:`5307`) -.. _concat_warnings: + .. _concat_warnings: #. `@acchamber`_ added error and warning messages about coordinate overlaps to :func:`~iris.cube.CubeList.concatenate` to improve the concatenation process. @@ -74,7 +74,7 @@ This document explains the changes made to Iris for this release #. `@acchamber`_ removed some obsolete code that prevented extraction of time points from cubes with bounded times (:pull:`5175`) -.. _cftime_warnings: + .. _cftime_warnings: #. `@rcomer`_ modified pp-loading to avoid a ``cftime`` warning for non-standard calendars. (:pull:`5357`) @@ -104,35 +104,33 @@ This document explains the changes made to Iris for this release #. N/A - 📚 Documentation ================ - .. _docs_dark: #. `@tkknight`_ prepared the documentation for dark mode and enable the option to use it. By default the theme will be based on the users system settings, defaulting to ``light`` if no system setting is found. (:pull:`5299`) -.. _dask_guide: + .. _dask_guide: #. `@HGWright`_ added a :doc:`/further_topics/dask_best_practices/index` section into the user guide, containing advice and use cases to help users get the best out of Dask with Iris. (:pull:`5190`) -.. _convert_docs: + .. _convert_docs: #. `@acchamber`_ improved documentation for :meth:`~iris.cube.Cube.convert_units` and :meth:`~iris.coords.Coord.convert_units` by including a link to the UDUNITS-2 documentation which contains lists of compatible units and aliases for them. (:pull:`5388`) - -.. _installdocs_update: + .. _installdocs_update: #. `@rcomer`_ updated the :ref:`Installation Guide` to reflect that some things are now simpler. (:pull:`5416`) + 💼 Internal =========== @@ -141,7 +139,7 @@ This document explains the changes made to Iris for this release `"Xarray bridge" `_ facility. (:pull:`5214`, :pull:`5212`) -.. _contour_future: + .. _contour_future: #. `@rcomer`_ updated :func:`~iris.plot.contourf` to avoid using functionality that is deprecated in Matplotlib v3.8 (:pull:`5405`) From f21f4c47fe358c64fce2533550168e157381860b Mon Sep 17 00:00:00 2001 From: Patrick Peglar Date: Thu, 17 Aug 2023 17:51:05 +0100 Subject: [PATCH 34/82] Restore latest Whats New files. --- docs/src/whatsnew/index.rst | 3 +- docs/src/whatsnew/latest.rst | 85 ++++++++++++++++++++ docs/src/whatsnew/latest.rst.template | 107 ++++++++++++++++++++++++++ 3 files changed, 194 insertions(+), 1 deletion(-) create mode 100644 docs/src/whatsnew/latest.rst create mode 100644 docs/src/whatsnew/latest.rst.template diff --git a/docs/src/whatsnew/index.rst b/docs/src/whatsnew/index.rst index d2a15be1f7..c556f82761 100644 --- a/docs/src/whatsnew/index.rst +++ b/docs/src/whatsnew/index.rst @@ -5,12 +5,13 @@ What's New in Iris ------------------ -.. include:: 3.7.rst +.. include:: latest.rst .. toctree:: :maxdepth: 1 :hidden: + latest.rst 3.7.rst 3.6.rst 3.5.rst diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst new file mode 100644 index 0000000000..72b74bdf42 --- /dev/null +++ b/docs/src/whatsnew/latest.rst @@ -0,0 +1,85 @@ +.. include:: ../common_links.inc + +|iris_version| |build_date| [unreleased] +**************************************** + +This document explains the changes made to Iris for this release +(:doc:`View all changes `.) + + +.. dropdown:: |iris_version| Release Highlights + :color: primary + :icon: info + :animate: fade-in + :open: + + The highlights for this major/minor release of Iris include: + + * N/A + + And finally, get in touch with us on :issue:`GitHub` if you have + any issues or feature requests for improving Iris. Enjoy! + + +📢 Announcements +================ + +#. N/A + + +✨ Features +=========== + +#. N/A + + +🐛 Bugs Fixed +============= + +#. N/A + + +💣 Incompatible Changes +======================= + +#. N/A + + +🚀 Performance Enhancements +=========================== + +#. N/A + + +🔥 Deprecations +=============== + +#. N/A + + +🔗 Dependencies +=============== + +#. N/A + + +📚 Documentation +================ + +#. N/A + + +💼 Internal +=========== + +#. N/A + + + +.. comment + Whatsnew author names (@github name) in alphabetical order. Note that, + core dev names are automatically included by the common_links.inc: + + +.. comment + Whatsnew resources in alphabetical order: diff --git a/docs/src/whatsnew/latest.rst.template b/docs/src/whatsnew/latest.rst.template new file mode 100644 index 0000000000..966a91e976 --- /dev/null +++ b/docs/src/whatsnew/latest.rst.template @@ -0,0 +1,107 @@ +.. include:: ../common_links.inc + +|iris_version| |build_date| [unreleased] +**************************************** + +This document explains the changes made to Iris for this release +(:doc:`View all changes `.) + + +.. dropdown:: |iris_version| Release Highlights + :color: primary + :icon: info + :animate: fade-in + :open: + + The highlights for this major/minor release of Iris include: + + * N/A + + And finally, get in touch with us on :issue:`GitHub` if you have + any issues or feature requests for improving Iris. Enjoy! + + +NOTE: section BELOW is a template for bugfix patches +==================================================== + (Please remove this section when creating an initial 'latest.rst' + +|iris_version| |build_date| +=========================== + +.. dropdown:: |iris_version| Patches + :color: primary + :icon: alert + :animate: fade-in + + The patches in this release of Iris include: + + #. N/A + +NOTE: section ABOVE is a template for bugfix patches +==================================================== + (Please remove this section when creating an initial 'latest.rst') + + +📢 Announcements +================ + +#. N/A + + +✨ Features +=========== + +#. N/A + + +🐛 Bugs Fixed +============= + +#. N/A + + +💣 Incompatible Changes +======================= + +#. N/A + + +🚀 Performance Enhancements +=========================== + +#. N/A + + +🔥 Deprecations +=============== + +#. N/A + + +🔗 Dependencies +=============== + +#. N/A + + +📚 Documentation +================ + +#. N/A + + +💼 Internal +=========== + +#. N/A + + +.. comment + Whatsnew author names (@github name) in alphabetical order. Note that, + core dev names are automatically included by the common_links.inc: + + + + +.. comment + Whatsnew resources in alphabetical order: From ff897eb3050452218b7dd27e911d7c5f1678c052 Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Mon, 21 Aug 2023 09:46:55 +0100 Subject: [PATCH 35/82] Merge the benchmark fixes and enhancements to `main` (#5437) * Improve benchmark runner printing (#5429) * More sensible print and run functions. * Avoid permanent modifications in _subprocess_runner. * Post on demand benchmark results as comment (big refactor) (#5430) * On demand benchmarking. * Correct gh query. * Correct assignee spacing. * What's new entry. * Better comparison commits for PR benchmarking (#5431) * Don't check out head_ref - benchmark the GH simulated merge commit instead. * What's New entry. * Warn via issue if overnight benchmarks fail (#5432) * Include a warning step for overnight benchmarking. * Fix for failure warning script. * Better formatting of warning issue title. * What's new entry. * Minor benchmark improvements (#5433) * Use shlex.split() for bm_runner commands. * Minor documentation clarifications. * Set benchmark runs to error if the subprocess errors (#5434) * Set benchmark runs to error if the subprocess errors. * Still compare results even from a broken run. * Still upload reports if overnight run fails. * What's New entry. * Hard-code conda channel into asv_delegated_conda.py (#5435) * What's new entry. * What's New entry. * Hard-code conda channel into asv_delegated_conda.py . * Fix some rebase confusion in the What's New. * Inflate benchmark data to ensure laziness (#5436) * Inflate benchmark data to ensure laziness. * What's New entry. * Benchmark feature branch what's new entry (#5438) * What's new entry. * Correct user name @ESadek-MO. * Missing colon. --- .github/workflows/benchmarks_report.yml | 83 ++++ .../{benchmark.yml => benchmarks_run.yml} | 76 ++-- .gitignore | 1 + benchmarks/asv.conf.json | 1 - benchmarks/asv_delegated_conda.py | 4 + .../experimental/ugrid/regions_combine.py | 2 +- benchmarks/benchmarks/load/__init__.py | 2 +- benchmarks/benchmarks/load/ugrid.py | 2 +- benchmarks/benchmarks/save.py | 2 +- benchmarks/bm_runner.py | 362 ++++++++++++++---- docs/src/whatsnew/latest.rst | 7 +- 11 files changed, 408 insertions(+), 134 deletions(-) create mode 100644 .github/workflows/benchmarks_report.yml rename .github/workflows/{benchmark.yml => benchmarks_run.yml} (57%) diff --git a/.github/workflows/benchmarks_report.yml b/.github/workflows/benchmarks_report.yml new file mode 100644 index 0000000000..cffa1b1ef4 --- /dev/null +++ b/.github/workflows/benchmarks_report.yml @@ -0,0 +1,83 @@ +# Post any reports generated by benchmarks_run.yml . +# Separated for security: +# https://securitylab.github.com/research/github-actions-preventing-pwn-requests/ + +name: benchmarks-report +run-name: Report benchmark results + +on: + workflow_run: + workflows: [benchmarks-run] + types: + - completed + +jobs: + download: + runs-on: ubuntu-latest + outputs: + reports_exist: ${{ steps.unzip.outputs.reports_exist }} + steps: + - name: Download artifact + id: download-artifact + # https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow + uses: actions/github-script@v6 + with: + script: | + let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ + owner: context.repo.owner, + repo: context.repo.repo, + run_id: context.payload.workflow_run.id, + }); + let matchArtifact = allArtifacts.data.artifacts.filter((artifact) => { + return artifact.name == "benchmark_reports" + })[0]; + if (typeof matchArtifact != 'undefined') { + let download = await github.rest.actions.downloadArtifact({ + owner: context.repo.owner, + repo: context.repo.repo, + artifact_id: matchArtifact.id, + archive_format: 'zip', + }); + let fs = require('fs'); + fs.writeFileSync(`${process.env.GITHUB_WORKSPACE}/benchmark_reports.zip`, Buffer.from(download.data)); + }; + + - name: Unzip artifact + id: unzip + run: | + if test -f "benchmark_reports.zip"; then + reports_exist=1 + unzip benchmark_reports.zip -d benchmark_reports + else + reports_exist=0 + fi + echo "reports_exist=$reports_exist" >> "$GITHUB_OUTPUT" + + - name: Store artifact + uses: actions/upload-artifact@v3 + with: + name: benchmark_reports + path: benchmark_reports + + post_reports: + runs-on: ubuntu-latest + needs: download + if: needs.download.outputs.reports_exist == 1 + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Download artifact + uses: actions/download-artifact@v3 + with: + name: benchmark_reports + path: .github/workflows/benchmark_reports + + - name: Set up Python + # benchmarks/bm_runner.py only needs builtins to run. + uses: actions/setup-python@v3 + + - name: Post reports + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: python benchmarks/bm_runner.py _gh_post diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmarks_run.yml similarity index 57% rename from .github/workflows/benchmark.yml rename to .github/workflows/benchmarks_run.yml index 5be56c1d80..a39c531a77 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmarks_run.yml @@ -1,6 +1,9 @@ -# Use ASV to check for performance regressions in the last 24 hours' commits. +# Use ASV to check for performance regressions, either: +# - In the last 24 hours' commits. +# - Introduced by this pull request. -name: benchmark-check +name: benchmarks-run +run-name: Run benchmarks on: schedule: @@ -9,7 +12,7 @@ on: workflow_dispatch: inputs: first_commit: - description: "Argument to be passed to the overnight benchmark script." + description: "First commit to benchmark (see bm_runner.py > Overnight)." required: false type: string pull_request: @@ -74,12 +77,17 @@ jobs: - name: Benchmark this pull request if: ${{ github.event.label.name == 'benchmark_this' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PR_NUMBER: ${{ github.event.number }} run: | - git checkout ${{ github.head_ref }} python benchmarks/bm_runner.py branch origin/${{ github.base_ref }} - name: Run overnight benchmarks + id: overnight if: ${{ github.event_name != 'pull_request' }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | first_commit=${{ inputs.first_commit }} if [ "$first_commit" == "" ] @@ -92,57 +100,27 @@ jobs: python benchmarks/bm_runner.py overnight $first_commit fi - - name: Create issues for performance shifts - if: ${{ github.event_name != 'pull_request' }} + - name: Warn of failure + if: > + failure() && + steps.overnight.outcome == 'failure' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - if [ -d benchmarks/.asv/performance-shifts ] - then - cd benchmarks/.asv/performance-shifts - for commit_file in * - do - commit="${commit_file%.*}" - pr_number=$(git log "$commit"^! --oneline | grep -o "#[0-9]*" | tail -1 | cut -c 2-) - author=$(gh pr view $pr_number --json author -q '.["author"]["login"]' --repo $GITHUB_REPOSITORY) - merger=$(gh pr view $pr_number --json mergedBy -q '.["mergedBy"]["login"]' --repo $GITHUB_REPOSITORY) - # Find a valid assignee from author/merger/nothing. - if curl -s https://api.github.com/users/$author | grep -q '"type": "User"'; then - assignee=$author - elif curl -s https://api.github.com/users/$merger | grep -q '"type": "User"'; then - assignee=$merger - else - assignee="" - fi - title="Performance Shift(s): \`$commit\`" - body=" - Benchmark comparison has identified performance shifts at - - * commit $commit (#$pr_number). - - Please review the report below and \ - take corrective/congratulatory action as appropriate \ - :slightly_smiling_face: + title="Overnight benchmark workflow failed: \`${{ github.run_id }}\`" + body="Generated by GHA run [\`${{github.run_id}}\`](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}})" + gh issue create --title "$title" --body "$body" --label "Bot" --label "Type: Performance" --repo $GITHUB_REPOSITORY -
- Performance shift report - - \`\`\` - $(cat $commit_file) - \`\`\` - -
- - Generated by GHA run [\`${{github.run_id}}\`](https://github.com/${{github.repository}}/actions/runs/${{github.run_id}}) - " - gh issue create --title "$title" --body "$body" --assignee $assignee --label "Bot" --label "Type: Performance" --repo $GITHUB_REPOSITORY - done - fi + - name: Upload any benchmark reports + if: success() || steps.overnight.outcome == 'failure' + uses: actions/upload-artifact@v3 + with: + name: benchmark_reports + path: .github/workflows/benchmark_reports - name: Archive asv results if: ${{ always() }} uses: actions/upload-artifact@v3 with: - name: asv-report - path: | - benchmarks/.asv/results + name: asv-raw-results + path: benchmarks/.asv/results diff --git a/.gitignore b/.gitignore index 4d0b474e8a..42d02d8c71 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ pip-cache # asv data, environments, results .asv benchmarks/.data +.github/workflows/benchmark_reports #Translations *.mo diff --git a/benchmarks/asv.conf.json b/benchmarks/asv.conf.json index faa7f6daee..fab5bcb44e 100644 --- a/benchmarks/asv.conf.json +++ b/benchmarks/asv.conf.json @@ -4,7 +4,6 @@ "project_url": "https://github.com/SciTools/iris", "repo": "..", "environment_type": "conda-delegated", - "conda_channels": ["conda-forge", "defaults"], "show_commit_url": "http://github.com/scitools/iris/commit/", "branches": ["upstream/main"], diff --git a/benchmarks/asv_delegated_conda.py b/benchmarks/asv_delegated_conda.py index 250a4e032d..22a3110075 100644 --- a/benchmarks/asv_delegated_conda.py +++ b/benchmarks/asv_delegated_conda.py @@ -66,6 +66,8 @@ def __init__( ignored.append("`requirements`") if tagged_env_vars: ignored.append("`tagged_env_vars`") + if conf.conda_channels: + ignored.append("conda_channels") if conf.conda_environment_file: ignored.append("`conda_environment_file`") message = ( @@ -75,6 +77,8 @@ def __init__( log.warning(message) requirements = {} tagged_env_vars = {} + # All that is required to create ASV's bare-bones environment. + conf.conda_channels = ["defaults"] conf.conda_environment_file = None super().__init__(conf, python, requirements, tagged_env_vars) diff --git a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py index c5f8fb564e..16044c663a 100644 --- a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py +++ b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py @@ -30,7 +30,7 @@ class MixinCombineRegions: # Characterise time taken + memory-allocated, for various stages of combine # operations on cubesphere-like test data. - params = [4, 500] + params = [50, 500] param_names = ["cubesphere-N"] def _parametrised_cache_filename(self, n_cubesphere, content_name): diff --git a/benchmarks/benchmarks/load/__init__.py b/benchmarks/benchmarks/load/__init__.py index 1b0ea696f6..3b2a83b1b1 100644 --- a/benchmarks/benchmarks/load/__init__.py +++ b/benchmarks/benchmarks/load/__init__.py @@ -27,7 +27,7 @@ class LoadAndRealise: # For data generation timeout = 600.0 params = [ - [(2, 2, 2), (1280, 960, 5), (2, 2, 1000)], + [(50, 50, 2), (1280, 960, 5), (2, 2, 1000)], [False, True], ["FF", "PP", "NetCDF"], ] diff --git a/benchmarks/benchmarks/load/ugrid.py b/benchmarks/benchmarks/load/ugrid.py index 350a78e128..35c8754171 100644 --- a/benchmarks/benchmarks/load/ugrid.py +++ b/benchmarks/benchmarks/load/ugrid.py @@ -77,7 +77,7 @@ class DataRealisation: warmup_time = 0.0 timeout = 300.0 - params = [1, int(2e5)] + params = [int(1e4), int(2e5)] param_names = ["number of faces"] def setup_common(self, **kwargs): diff --git a/benchmarks/benchmarks/save.py b/benchmarks/benchmarks/save.py index 3551c72528..d00c66a0ca 100644 --- a/benchmarks/benchmarks/save.py +++ b/benchmarks/benchmarks/save.py @@ -21,7 +21,7 @@ class NetcdfSave: - params = [[1, 600], [False, True]] + params = [[50, 600], [False, True]] param_names = ["cubesphere-N", "is_unstructured"] def setup(self, n_cubesphere, is_unstructured): diff --git a/benchmarks/bm_runner.py b/benchmarks/bm_runner.py index f3efb0ea31..b3145fbdf1 100644 --- a/benchmarks/bm_runner.py +++ b/benchmarks/bm_runner.py @@ -15,8 +15,10 @@ from os import environ from pathlib import Path import re +import shlex import subprocess from tempfile import NamedTemporaryFile +from textwrap import dedent from typing import Literal # The threshold beyond which shifts are 'notable'. See `asv compare`` docs @@ -24,6 +26,9 @@ COMPARE_FACTOR = 1.2 BENCHMARKS_DIR = Path(__file__).parent +ROOT_DIR = BENCHMARKS_DIR.parent +# Storage location for reports used in GitHub actions. +GH_REPORT_DIR = ROOT_DIR.joinpath(".github", "workflows", "benchmark_reports") # Common ASV arguments for all run_types except `custom`. ASV_HARNESS = ( @@ -32,17 +37,27 @@ ) -def _subprocess_run_print(args, **kwargs): +def echo(echo_string: str): # Use subprocess for printing to reduce chance of printing out of sequence # with the subsequent calls. - subprocess.run(["echo", f"BM_RUNNER DEBUG: {' '.join(args)}"]) + subprocess.run(["echo", f"BM_RUNNER DEBUG: {echo_string}"]) + + +def _subprocess_runner(args, asv=False, **kwargs): + # Avoid permanent modifications if the same arguments are used more than once. + args = args.copy() + kwargs = kwargs.copy() + if asv: + args.insert(0, "asv") + kwargs["cwd"] = BENCHMARKS_DIR + echo(" ".join(args)) + kwargs.setdefault("check", True) return subprocess.run(args, **kwargs) -def _subprocess_run_asv(args, **kwargs): - args.insert(0, "asv") - kwargs["cwd"] = BENCHMARKS_DIR - return _subprocess_run_print(args, **kwargs) +def _subprocess_runner_capture(args, **kwargs) -> str: + result = _subprocess_runner(args, capture_output=True, **kwargs) + return result.stdout.decode().rstrip() def _check_requirements(package: str) -> None: @@ -61,19 +76,18 @@ def _prep_data_gen_env() -> None: Create/access a separate, unchanging environment for generating test data. """ - root_dir = BENCHMARKS_DIR.parent python_version = "3.11" data_gen_var = "DATA_GEN_PYTHON" if data_gen_var in environ: - print("Using existing data generation environment.") + echo("Using existing data generation environment.") else: - print("Setting up the data generation environment ...") + echo("Setting up the data generation environment ...") # Get Nox to build an environment for the `tests` session, but don't # run the session. Will re-use a cached environment if appropriate. - _subprocess_run_print( + _subprocess_runner( [ "nox", - f"--noxfile={root_dir / 'noxfile.py'}", + f"--noxfile={ROOT_DIR / 'noxfile.py'}", "--session=tests", "--install-only", f"--python={python_version}", @@ -82,14 +96,14 @@ def _prep_data_gen_env() -> None: # Find the environment built above, set it to be the data generation # environment. data_gen_python = next( - (root_dir / ".nox").rglob(f"tests*/bin/python{python_version}") + (ROOT_DIR / ".nox").rglob(f"tests*/bin/python{python_version}") ).resolve() environ[data_gen_var] = str(data_gen_python) - print("Installing Mule into data generation environment ...") + echo("Installing Mule into data generation environment ...") mule_dir = data_gen_python.parents[1] / "resources" / "mule" if not mule_dir.is_dir(): - _subprocess_run_print( + _subprocess_runner( [ "git", "clone", @@ -97,7 +111,7 @@ def _prep_data_gen_env() -> None: str(mule_dir), ] ) - _subprocess_run_print( + _subprocess_runner( [ str(data_gen_python), "-m", @@ -107,7 +121,7 @@ def _prep_data_gen_env() -> None: ] ) - print("Data generation environment ready.") + echo("Data generation environment ready.") def _setup_common() -> None: @@ -116,41 +130,192 @@ def _setup_common() -> None: _prep_data_gen_env() - print("Setting up ASV ...") - _subprocess_run_asv(["machine", "--yes"]) + echo("Setting up ASV ...") + _subprocess_runner(["machine", "--yes"], asv=True) - print("Setup complete.") + echo("Setup complete.") def _asv_compare(*commits: str, overnight_mode: bool = False) -> None: - """Run through a list of commits comparing each one to the next.""" + """ + Run through a list of commits comparing each one to the next. + """ commits = [commit[:8] for commit in commits] - shifts_dir = BENCHMARKS_DIR / ".asv" / "performance-shifts" for i in range(len(commits) - 1): before = commits[i] after = commits[i + 1] - asv_command = ( + asv_command = shlex.split( f"compare {before} {after} --factor={COMPARE_FACTOR} --split" ) - _subprocess_run_asv(asv_command.split(" ")) - - if overnight_mode: - # Record performance shifts. - # Run the command again but limited to only showing performance - # shifts. - shifts = _subprocess_run_asv( - [*asv_command.split(" "), "--only-changed"], - capture_output=True, - text=True, - ).stdout - if shifts: - # Write the shifts report to a file. - # Dir is used by .github/workflows/benchmarks.yml, - # but not cached - intended to be discarded after run. - shifts_dir.mkdir(exist_ok=True, parents=True) - shifts_path = (shifts_dir / after).with_suffix(".txt") - with shifts_path.open("w") as shifts_file: - shifts_file.write(shifts) + + comparison = _subprocess_runner_capture(asv_command, asv=True) + echo(comparison) + shifts = _subprocess_runner_capture( + [*asv_command, "--only-changed"], asv=True + ) + + if shifts or (not overnight_mode): + # For the overnight run: only post if there are shifts. + _gh_create_reports(after, comparison, shifts) + + +def _gh_create_reports( + commit_sha: str, results_full: str, results_shifts: str +) -> None: + """ + If running under GitHub Actions: record the results in report(s). + + Posting the reports is done by :func:`_gh_post_reports`, which must be run + within a separate action to comply with GHA's security limitations. + """ + if "GITHUB_ACTIONS" not in environ: + # Only run when within GHA. + return + + pr_number = environ.get("PR_NUMBER", None) + on_pull_request = pr_number is not None + run_id = environ["GITHUB_RUN_ID"] + repo = environ["GITHUB_REPOSITORY"] + gha_run_link = ( + f"[`{run_id}`](https://github.com/{repo}/actions/runs/{run_id})" + ) + + GH_REPORT_DIR.mkdir(exist_ok=True) + commit_dir = GH_REPORT_DIR / commit_sha + commit_dir.mkdir() + command_path = commit_dir / "command.txt" + body_path = commit_dir / "body.txt" + + performance_report = dedent( + ( + """ + ### Performance Benchmark Report: {commit_sha} + +
+ Performance shifts + + ``` + {results_shifts} + ``` + +
+ +
+ Full benchmark results + + ``` + {results_full} + ``` + +
+ + Generated by GHA run {gha_run_link} + """ + ) + ) + performance_report = performance_report.format( + commit_sha=commit_sha, + results_shifts=results_shifts, + results_full=results_full, + gha_run_link=gha_run_link, + ) + + if on_pull_request: + # Command to post the report as a comment on the active PR. + body_path.write_text(performance_report) + command = ( + f"gh pr comment {pr_number} " + f"--body-file {body_path.absolute()} " + f"--repo {repo}" + ) + command_path.write_text(command) + + else: + # Command to post the report as new issue. + commit_msg = _subprocess_runner_capture( + f"git log {commit_sha}^! --oneline".split(" ") + ) + # Intended for benchmarking commits on trunk - should include a PR + # number due to our squash policy. + pr_tag_match = re.search("#[0-9]*", commit_msg) + + assignee = "" + pr_tag = "pull request number unavailable" + if pr_tag_match is not None: + pr_tag = pr_tag_match.group(0) + + for login_type in ("author", "mergedBy"): + gh_query = f'.["{login_type}"]["login"]' + command = shlex.split( + f"gh pr view {pr_tag[1:]} " + f"--json {login_type} -q '{gh_query}' " + f"--repo {repo}" + ) + login = _subprocess_runner_capture(command) + + command = [ + "curl", + "-s", + f"https://api.github.com/users/{login}", + ] + login_info = _subprocess_runner_capture(command) + is_user = '"type": "User"' in login_info + if is_user: + assignee = login + break + + title = f"Performance Shift(s): `{commit_sha}`" + body = dedent( + ( + f""" + Benchmark comparison has identified performance shifts at: + + * commit {commit_sha} ({pr_tag}). + +

+ Please review the report below and + take corrective/congratulatory action as appropriate + :slightly_smiling_face: +

+ """ + ) + ) + body += performance_report + body_path.write_text(body) + + command = ( + "gh issue create " + f'--title "{title}" ' + f"--body-file {body_path.absolute()} " + '--label "Bot" ' + '--label "Type: Performance" ' + f"--repo {repo}" + ) + if assignee: + command += f" --assignee {assignee}" + command_path.write_text(command) + + +def _gh_post_reports() -> None: + """ + If running under GitHub Actions: post pre-prepared benchmark reports. + + Reports are prepared by :func:`_gh_create_reports`, which must be run + within a separate action to comply with GHA's security limitations. + """ + if "GITHUB_ACTIONS" not in environ: + # Only run when within GHA. + return + + commit_dirs = [x for x in GH_REPORT_DIR.iterdir() if x.is_dir()] + for commit_dir in commit_dirs: + command_path = commit_dir / "command.txt" + command = command_path.read_text() + + # Security: only accept certain commands to run. + assert command.startswith(("gh issue create", "gh pr comment")) + + _subprocess_runner(shlex.split(command)) class _SubParserGenerator(ABC): @@ -168,18 +333,21 @@ def __init__(self, subparsers: ArgumentParser.add_subparsers) -> None: formatter_class=argparse.RawTextHelpFormatter, ) self.add_arguments() - self.subparser.add_argument( - "asv_args", - nargs=argparse.REMAINDER, - help="Any number of arguments to pass down to ASV.", - ) + self.add_asv_arguments() self.subparser.set_defaults(func=self.func) @abstractmethod def add_arguments(self) -> None: - """All self.subparser.add_argument() calls.""" + """All custom self.subparser.add_argument() calls.""" _ = NotImplemented + def add_asv_arguments(self) -> None: + self.subparser.add_argument( + "asv_args", + nargs=argparse.REMAINDER, + help="Any number of arguments to pass down to the ASV benchmark command.", + ) + @staticmethod @abstractmethod def func(args: argparse.Namespace): @@ -197,11 +365,11 @@ class Overnight(_SubParserGenerator): name = "overnight" description = ( "Benchmarks all commits between the input **first_commit** to ``HEAD``, " - "comparing each to its parent for performance shifts. If a commit causes " - "shifts, the output is saved to a file:\n" - "``.asv/performance-shifts/``\n\n" + "comparing each to its parent for performance shifts. If running on " + "GitHub Actions: performance shift(s) will be reported in a new issue.\n" "Designed for checking the previous 24 hours' commits, typically in a " - "scheduled script." + "scheduled script.\n" + "Uses `asv run`." ) epilog = ( "e.g. python bm_runner.py overnight a1b23d4\n" @@ -220,16 +388,20 @@ def func(args: argparse.Namespace) -> None: _setup_common() commit_range = f"{args.first_commit}^^.." - asv_command = ASV_HARNESS.format(posargs=commit_range) - _subprocess_run_asv([*asv_command.split(" "), *args.asv_args]) - # git rev-list --first-parent is the command ASV uses. - git_command = f"git rev-list --first-parent {commit_range}" - commit_string = _subprocess_run_print( - git_command.split(" "), capture_output=True, text=True - ).stdout - commit_list = commit_string.rstrip().split("\n") - _asv_compare(*reversed(commit_list), overnight_mode=True) + git_command = shlex.split( + f"git rev-list --first-parent {commit_range}" + ) + commit_string = _subprocess_runner_capture(git_command) + commit_list = commit_string.split("\n") + + asv_command = shlex.split(ASV_HARNESS.format(posargs=commit_range)) + try: + _subprocess_runner([*asv_command, *args.asv_args], asv=True) + finally: + # Designed for long running - want to compare/post any valid + # results even if some are broken. + _asv_compare(*reversed(commit_list), overnight_mode=True) class Branch(_SubParserGenerator): @@ -237,11 +409,15 @@ class Branch(_SubParserGenerator): description = ( "Performs the same operations as ``overnight``, but always on two commits " "only - ``HEAD``, and ``HEAD``'s merge-base with the input " - "**base_branch**. Output from this run is never saved to a file. Designed " + "**base_branch**. If running on GitHub Actions: HEAD will be GitHub's " + "merge commit and merge-base will be the merge target. Performance " + "comparisons will be posted in a comment on the relevant pull request.\n" + "Designed " "for testing if the active branch's changes cause performance shifts - " "anticipating what would be caught by ``overnight`` once merged.\n\n" "**For maximum accuracy, avoid using the machine that is running this " - "session. Run time could be >1 hour for the full benchmark suite.**" + "session. Run time could be >1 hour for the full benchmark suite.**\n" + "Uses `asv run`." ) epilog = ( "e.g. python bm_runner.py branch upstream/main\n" @@ -259,19 +435,22 @@ def add_arguments(self) -> None: def func(args: argparse.Namespace) -> None: _setup_common() - git_command = f"git merge-base HEAD {args.base_branch}" - merge_base = _subprocess_run_print( - git_command.split(" "), capture_output=True, text=True - ).stdout[:8] + git_command = shlex.split("git rev-parse HEAD") + head_sha = _subprocess_runner_capture(git_command)[:8] + + git_command = shlex.split( + f"git merge-base {head_sha} {args.base_branch}" + ) + merge_base = _subprocess_runner_capture(git_command)[:8] with NamedTemporaryFile("w") as hashfile: - hashfile.writelines([merge_base, "\n", "HEAD"]) + hashfile.writelines([merge_base, "\n", head_sha]) hashfile.flush() commit_range = f"HASHFILE:{hashfile.name}" - asv_command = ASV_HARNESS.format(posargs=commit_range) - _subprocess_run_asv([*asv_command.split(" "), *args.asv_args]) + asv_command = shlex.split(ASV_HARNESS.format(posargs=commit_range)) + _subprocess_runner([*asv_command, *args.asv_args], asv=True) - _asv_compare(merge_base, "HEAD") + _asv_compare(merge_base, head_sha) class _CSPerf(_SubParserGenerator, ABC): @@ -281,7 +460,8 @@ class _CSPerf(_SubParserGenerator, ABC): "Run the on-demand {} suite of benchmarks (part of the UK Met " "Office NG-VAT project) for the ``HEAD`` of ``upstream/main`` only, " "and publish the results to the input **publish_dir**, within a " - "unique subdirectory for this run." + "unique subdirectory for this run.\n" + "Uses `asv run`." ) epilog = ( "e.g. python bm_runner.py {0} my_publish_dir\n" @@ -325,15 +505,19 @@ def csperf( # Don't fail the whole run if memory blows on 1 benchmark. asv_command = asv_command.replace(" --strict", "") # Only do a single round. - asv_command = re.sub(r"rounds=\d", "rounds=1", asv_command) - _subprocess_run_asv([*asv_command.split(" "), *args.asv_args]) + asv_command = shlex.split( + re.sub(r"rounds=\d", "rounds=1", asv_command) + ) + _subprocess_runner([*asv_command, *args.asv_args], asv=True) - asv_command = f"publish {commit_range} --html-dir={publish_subdir}" - _subprocess_run_asv(asv_command.split(" ")) + asv_command = shlex.split( + f"publish {commit_range} --html-dir={publish_subdir}" + ) + _subprocess_runner(asv_command, asv=True) # Print completion message. location = BENCHMARKS_DIR / ".asv" - print( + echo( f'New ASV results for "{run_type}".\n' f'See "{publish_subdir}",' f'\n or JSON files under "{location / "results"}".' @@ -380,7 +564,29 @@ def add_arguments(self) -> None: @staticmethod def func(args: argparse.Namespace) -> None: _setup_common() - _subprocess_run_asv([args.asv_sub_command, *args.asv_args]) + _subprocess_runner([args.asv_sub_command, *args.asv_args], asv=True) + + +class GhPost(_SubParserGenerator): + name = "_gh_post" + description = ( + "Used by GitHub Actions to post benchmark reports that were prepared " + "during previous actions. Separated to comply with GitHub's security " + "requirements." + ) + epilog = "Sole acceptable syntax: python bm_runner.py _gh_post" + + @staticmethod + def func(args: argparse.Namespace) -> None: + _gh_post_reports() + + # No arguments permitted for this subclass: + + def add_arguments(self) -> None: + pass + + def add_asv_arguments(self) -> None: + pass def main(): @@ -390,7 +596,7 @@ def main(): ) subparsers = parser.add_subparsers(required=True) - for gen in (Overnight, Branch, CPerf, SPerf, Custom): + for gen in (Overnight, Branch, CPerf, SPerf, Custom, GhPost): _ = gen(subparsers).subparser parsed = parser.parse_args() diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 72b74bdf42..35e2158141 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -72,8 +72,11 @@ This document explains the changes made to Iris for this release 💼 Internal =========== -#. N/A - +#. `@trexfeathers`_ and `@ESadek-MO`_ (reviewer) performed a suite of fixes and + improvements for benchmarking, primarily to get + :ref:`on demand pull request benchmarking ` + working properly. (Main pull request: :pull:`5437`, more detail: + :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) .. comment From 687f4a7af0d21d7a66febda475fbb4884a556944 Mon Sep 17 00:00:00 2001 From: Agriya Khetarpal <74401230+agriyakhetarpal@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:35:10 +0530 Subject: [PATCH 36/82] =?UTF-8?q?Do=20not=20run=20CI=20stale=20bot=20on=20?= =?UTF-8?q?`Dragon=20=F0=9F=90=89`=20labelled=20issues=20and=20PRs=20(#542?= =?UTF-8?q?5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/stale.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 203dc43b4e..67b0515e8b 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -33,7 +33,7 @@ jobs: Otherwise this issue will be automatically closed in 28 days time. # Comment on the staled prs. - stale-pr-message: | + stale-pr-message: | In order to maintain a backlog of relevant PRs, we automatically label them as stale after 500 days of inactivity. If this PR is still important to you, then please comment on this PR and the stale label will be removed. @@ -43,7 +43,7 @@ jobs: # Comment on the staled issues while closed. close-issue-message: | This stale issue has been automatically closed due to a lack of community activity. - + If you still care about this issue, then please either: * Re-open this issue, if you have sufficient permissions, or * Add a comment pinging `@SciTools/iris-devs` who will re-open on your behalf. @@ -51,12 +51,12 @@ jobs: # Comment on the staled prs while closed. close-pr-message: | This stale PR has been automatically closed due to a lack of community activity. - + If you still care about this PR, then please either: * Re-open this PR, if you have sufficient permissions, or * Add a comment pinging `@SciTools/iris-devs` who will re-open on your behalf. - # Label to apply on staled issues. + # Label to apply on staled issues. stale-issue-label: Stale # Label to apply on staled prs. @@ -64,11 +64,11 @@ jobs: # Labels on issues exempted from stale. exempt-issue-labels: - "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue" + "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎" # Labels on prs exempted from stale. exempt-pr-labels: - "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue" + "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎" # Max number of operations per run. operations-per-run: 300 From dc4fac6cb710a0004922c9a516888f1f054c36b0 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 11:35:12 +0100 Subject: [PATCH 37/82] Updated environment lockfiles (#5439) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 34 +++++++++++++------------- requirements/locks/py311-linux-64.lock | 34 +++++++++++++------------- requirements/locks/py39-linux-64.lock | 32 ++++++++++++------------ 3 files changed, 50 insertions(+), 50 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index 9c5ea32d8e..5dbb9d5824 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -66,7 +66,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852 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-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 +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.0-h93469e0_0.conda#580a52a05f5be28ce00764149017c6d4 @@ -109,7 +109,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar. https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a -https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 @@ -131,7 +131,7 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py310hd8f1fb https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb @@ -139,7 +139,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py310hc6cd4ac_0.con https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d @@ -175,10 +175,10 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py310h1fa729e_0.conda#8d155ac95b1dfe585bcb6bec6a91c73b +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_0.conda#75e60ce53c01a121039b3050c9e1f759 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py310h5764c6d_5.tar.bz2#9e68d2ff6d98737c855b65f48dd3c597 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -188,7 +188,7 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py310h2372a71_0.conda#1c510e74c87dc9b8fe1f7f9e8dbcef96 +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_0.conda#dfb49d3ac440e1a236080f9c300e642f https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d @@ -207,7 +207,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835 https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda#684399f9ddc0b9d6f3b6164f6107098e -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py310h2372a71_0.conda#13df1c4ea94f2e3326b15da1999e5999 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py310h2372a71_0.conda#c0967a89cb3c2b8f493b5990dcd7c26d https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py310h2372a71_0.conda#f939fe2998c888a77b310926a6c666f3 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 @@ -249,16 +249,16 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 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/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 @@ -277,10 +277,10 @@ https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#406 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 -https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 +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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 42e5224fe1..c2cd474acc 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -66,7 +66,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852 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-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 +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.0-h93469e0_0.conda#580a52a05f5be28ce00764149017c6d4 @@ -109,7 +109,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar. https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a -https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 @@ -131,7 +131,7 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py311ha362b7 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb @@ -139,7 +139,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py311hb755f60_0.con https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d @@ -175,10 +175,10 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py311h2582759_0.conda#dfcc3e6e30d6ec2b2bb416fcd8ff4dc1 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_0.conda#87b306459b81b7a7aaad37222d537a4f https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py311hd4cff14_5.tar.bz2#da8769492e423103c59f469f4f17f8d9 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -188,7 +188,7 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py311h459d7ec_0.conda#12b1c374ee90a1aa11ea921858394dc8 +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_0.conda#7d9a31416c18704f55946ff7cf8da5dc https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -206,7 +206,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py311h459d7ec_0.conda#3c2c65575c28b23afc5e4ff721a2fc9f +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py311h459d7ec_0.conda#1b0db1a905b509db652609560ae9a2d5 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py311h459d7ec_0.conda#8c1ac2c00995248898220c4c1a9d81ab https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 @@ -248,16 +248,16 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 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/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 @@ -276,10 +276,10 @@ https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#406 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 -https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 +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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index e598fba992..ffd9d01cf5 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -66,7 +66,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852 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-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 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.1-h0b41bf4_0.conda#e9c3bcf0e0c719431abec8ca447eee27 +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.0-h93469e0_0.conda#580a52a05f5be28ce00764149017c6d4 @@ -109,7 +109,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar. https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a -https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 @@ -131,7 +131,7 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py39h5a03fae https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 -https://conda.anaconda.org/conda-forge/noarch/click-8.1.6-unix_pyh707e725_0.conda#64dbb3b205546691a61204d1cfb208e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb @@ -139,7 +139,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py39h3d6467e_0.cond https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f -https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.2-pyhd8ed1ab_0.conda#de4cb3384374e1411f0454edcf546cdb +https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d @@ -175,10 +175,10 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.2.0-py39h72bdee0_0.conda#18927f971926b7271600368de71de557 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_0.conda#41841cc1d7387bb7a30cdde4d88afbf4 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py39hb9d737c_5.tar.bz2#ef9db3c38ae7275f6b14491cfe61a248 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.0.0-pyhd8ed1ab_0.conda#5a7739d0f57ee64133c9d32e6507c46d +https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 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 @@ -188,7 +188,7 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py39hd1e30aa_0.conda#da334eecb1ea2248e28294c49e6f6d89 +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_0.conda#ee7f18d58a96b04fdbd2e55f7694ae0d https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d @@ -247,17 +247,17 @@ https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.0-pyhd8ed1ab_0.conda#160a92928fc4a0ca40a64b586a2cf671 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py39h0126182_0.conda#61cee808ff7830fcceeb4f336cc738b1 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.2-pyhd8ed1ab_0.conda#a218f3be8ab6185a475c8168a86e18ae +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.10.57-hbc2ea52_17.conda#452c7b08c21eea2ef01f4fd364d6affc https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.0-pyhd8ed1ab_0.conda#974b4a00b0e100e341cd9f179b05f574 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 @@ -277,10 +277,10 @@ https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#406 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 -https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.13.0-pyhd8ed1ab_0.conda#26c51b97ce59bbcce6a35ff45bc5c900 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.6-pyhd8ed1ab_0.conda#5bba7b5823474cb3fcd4e4cbf942da61 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.4-pyhd8ed1ab_0.conda#73dcd0eb2252cbd1530fd1e6e3cbbb03 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.3-pyhd8ed1ab_0.conda#fb4d6329a57e20e03d7aecd18c7ca918 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.5-pyhd8ed1ab_0.conda#85466265b76473cc1d02420056cbc4e3 +https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 +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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.7-pyhd8ed1ab_0.conda#01e35beea8aff61cdb445b90a7adf7d4 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 From 0ba95baa07dc70030171c3a769c68d6abd261774 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 11:35:52 +0100 Subject: [PATCH 38/82] [pre-commit.ci] pre-commit autoupdate (#5440) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/blacken-docs: 1.15.0 → 1.16.0](https://github.com/asottile/blacken-docs/compare/1.15.0...1.16.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c641389768..f89f9f487e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -56,7 +56,7 @@ repos: args: [--filter-files] - repo: https://github.com/asottile/blacken-docs - rev: 1.15.0 + rev: 1.16.0 hooks: - id: blacken-docs types: [file, rst] From 50ee726bf15fc44a8e6ad2da7fb981c6c08528f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Aug 2023 11:36:22 +0100 Subject: [PATCH 39/82] Bump actions/setup-python from 3 to 4 (#5443) Bumps [actions/setup-python](https://github.com/actions/setup-python) from 3 to 4. - [Release notes](https://github.com/actions/setup-python/releases) - [Commits](https://github.com/actions/setup-python/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/setup-python dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/benchmarks_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/benchmarks_report.yml b/.github/workflows/benchmarks_report.yml index cffa1b1ef4..365fc733a5 100644 --- a/.github/workflows/benchmarks_report.yml +++ b/.github/workflows/benchmarks_report.yml @@ -75,7 +75,7 @@ jobs: - name: Set up Python # benchmarks/bm_runner.py only needs builtins to run. - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 - name: Post reports env: From c4dcfd37b7868d41fe0256e842405f3913ff6e9c Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Tue, 22 Aug 2023 16:54:52 +0100 Subject: [PATCH 40/82] DOC: remove advice to delete main branch (#5335) --- .../developers_guide/gitwash/development_workflow.rst | 10 +--------- docs/src/developers_guide/gitwash/git_links.inc | 1 - 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/docs/src/developers_guide/gitwash/development_workflow.rst b/docs/src/developers_guide/gitwash/development_workflow.rst index b086922d5b..b38ddd6e90 100644 --- a/docs/src/developers_guide/gitwash/development_workflow.rst +++ b/docs/src/developers_guide/gitwash/development_workflow.rst @@ -14,8 +14,7 @@ Workflow Summary In what follows we'll refer to the upstream iris ``main`` branch, as "trunk". -* Don't use your ``main`` (that is on your fork) branch for anything. - Consider deleting it. +* Don't use your ``main`` (that is on your fork) branch for development. * When you are starting a new set of changes, fetch any changes from trunk, and start a new *feature branch* from that. * Make a new branch for each separable set of changes |emdash| "one task, one @@ -34,13 +33,6 @@ what you've done, and why you did it. See `linux git workflow`_ for some explanation. -Consider Deleting Your Main Branch -================================== - -It may sound strange, but deleting your own ``main`` branch can help reduce -confusion about which branch you are on. See `deleting master on github`_ for -details. - .. _update-mirror-trunk: Update the Mirror of Trunk diff --git a/docs/src/developers_guide/gitwash/git_links.inc b/docs/src/developers_guide/gitwash/git_links.inc index 11d037ccf4..42bd556c3d 100644 --- a/docs/src/developers_guide/gitwash/git_links.inc +++ b/docs/src/developers_guide/gitwash/git_links.inc @@ -28,6 +28,5 @@ .. _git config: http://schacon.github.com/git/git-config.html .. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html -.. _deleting master on github: https://matthew-brett.github.io/pydagogue/gh_delete_master.html .. |emdash| unicode:: U+02014 From 4892d78d421cffe8cb7c4b3dd75fcb6f91193c5b Mon Sep 17 00:00:00 2001 From: scottrobinson02 <113097180+scottrobinson02@users.noreply.github.com> Date: Fri, 1 Sep 2023 16:06:31 +0100 Subject: [PATCH 41/82] Units when dividing a coordinate by a cube (#5331) * Commit * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: scott.robinson Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- lib/iris/cube.py | 1 + lib/iris/tests/unit/cube/test_Cube.py | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/lib/iris/cube.py b/lib/iris/cube.py index 35e3a903c6..aec80dce47 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -3722,6 +3722,7 @@ def __idiv__(self, other): def __rdiv__(self, other): data = 1 / self.core_data() reciprocal = self.copy(data=data) + reciprocal.units = reciprocal.units**-1 return iris.analysis.maths.multiply(reciprocal, other) __truediv__ = __div__ diff --git a/lib/iris/tests/unit/cube/test_Cube.py b/lib/iris/tests/unit/cube/test_Cube.py index 8084ab31fa..a733665df8 100644 --- a/lib/iris/tests/unit/cube/test_Cube.py +++ b/lib/iris/tests/unit/cube/test_Cube.py @@ -2754,6 +2754,13 @@ def test_bad_coord(self): _ = self.cube.coord(bad_coord) +class Test_coord_division_units(tests.IrisTest): + def test(self): + aux = AuxCoord(1, long_name="length", units="metres") + cube = Cube(1, units="seconds") + self.assertEqual((aux / cube).units, "m.s-1") + + class Test__getitem_CellMeasure(tests.IrisTest): def setUp(self): cube = Cube(np.arange(6).reshape(2, 3)) From 897d4dc60d9e066dca2d17213968dcca2a0d2008 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Mon, 4 Sep 2023 14:16:56 +0100 Subject: [PATCH 42/82] whatsnew for #5331 (#5458) --- docs/src/whatsnew/latest.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 35e2158141..2de3dc1ced 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -36,7 +36,8 @@ This document explains the changes made to Iris for this release 🐛 Bugs Fixed ============= -#. N/A +#. `@scottrobinson02`_ fixed the output units when dividing a coordinate by a + cube. (:issue:`5305`, :pull:`5331`) 💣 Incompatible Changes @@ -83,6 +84,7 @@ This document explains the changes made to Iris for this release Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: +.. _@scottrobinson02: https://github.com/scottrobinson02 .. comment Whatsnew resources in alphabetical order: From f162be86fe22211f0d80f9be9cfc916d49bfb3bc Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Wed, 6 Sep 2023 09:43:21 +0100 Subject: [PATCH 43/82] Updated environment lockfiles (#5448) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 104 +++++++++++------------- requirements/locks/py311-linux-64.lock | 106 +++++++++++-------------- requirements/locks/py39-linux-64.lock | 106 +++++++++++-------------- 3 files changed, 137 insertions(+), 179 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index 5dbb9d5824..ed387a25a8 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -19,13 +19,12 @@ https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda# https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 -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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 -https://conda.anaconda.org/conda-forge/linux-64/geos-3.11.2-hcb278e6_0.conda#3b8e364995e3575e57960d29c1e5ab14 +https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 @@ -34,7 +33,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -69,15 +68,11 @@ 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -85,36 +80,34 @@ https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -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/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e -https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 @@ -124,10 +117,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 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/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/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py310hd8f1fbe_9.conda#e2047ad2af52c01845f58b580c6cbd5c +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_0.conda#fb6201eb1daa3a3a2f91a4833bdf27c7 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 @@ -135,13 +126,13 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py310hc6cd4ac_0.conda#b903ef2ce154e97f621fe30d999227ad +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py310hc6cd4ac_0.conda#d1157aba60e67df614438afd5cd53564 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b @@ -151,12 +142,12 @@ https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#3427 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py310hbf28c38_1.tar.bz2#ad5647e517ba68e2868ef2e6e6ff7723 +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_0.conda#741385a84f6a1b6623eb39226cc669e8 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 -https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 @@ -166,7 +157,7 @@ https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py310ha4c1d20_0.conda#188e72aa313da668464e35309e9a32b0 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda#b0f0a014fc04012c05f39df15fe270ce https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff @@ -177,7 +168,7 @@ https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_0.conda#75e60ce53c01a121039b3050c9e1f759 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py310h5764c6d_5.tar.bz2#9e68d2ff6d98737c855b65f48dd3c597 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_0.conda#511120451bf728d52bb37c73d4069e57 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -191,7 +182,7 @@ https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_0.conda#dfb49d3ac440e1a236080f9c300e642f https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -199,8 +190,6 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_ https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 -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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -209,12 +198,12 @@ https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda#684399f9ddc0b9d6f3b6164f6107098e https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py310h2372a71_0.conda#c0967a89cb3c2b8f493b5990dcd7c26d https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py310h2372a71_0.conda#f939fe2998c888a77b310926a6c666f3 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py310h2372a71_0.conda#1f18231ffab82f236ce074b2aaa07e54 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +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/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 @@ -227,17 +216,17 @@ https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h056c13c_1.conda#32d925cfd330e0cbb72b7618558a44e8 +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_2.conda#a46061c83ed37bfa05d1ee96ec2fbb08 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py310hc6cd4ac_0.conda#be1a7e420b7bac4ee02353d0e3161918 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py310hf38f957_0.conda#9b55c9041c5a7f80f184a2cb05ec9663 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py310h7cbd5c2_1.conda#11e0099d4571b4974c04386e4ce679ed +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py310hcc13569_0.conda#6c92da4ec4e301d09a365c0584e632c8 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 @@ -247,33 +236,30 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_102.conda#487a1c19dd3eacfd055ad614e9acde87 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_102.conda#6025039727a049ab4c0f2aab842c01cb https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 -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/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py310ha4c1d20_0.conda#300d3b434872eb84965864f0fcc5b5da +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py310ha4c1d20_0.conda#d1ec73b85cb90900c40c7fbcd36059e8 +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_4.conda#db878a0696f9a7980171fd3cf29cca22 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py310hff52083_0.conda#7e454b4a61754714a4a4d183641374da -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310h6f5dce6_101.conda#0d50bea104512f2728676a8bff8840d3 -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 @@ -283,4 +269,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8e 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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index c2cd474acc..7542d2bff0 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -19,13 +19,12 @@ https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda# https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 -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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 -https://conda.anaconda.org/conda-forge/linux-64/geos-3.11.2-hcb278e6_0.conda#3b8e364995e3575e57960d29c1e5ab14 +https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 @@ -34,7 +33,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -69,15 +68,11 @@ 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -85,36 +80,34 @@ https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -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/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e -https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc +https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda#f0288cb82594b1cbc71111d1cd3c5422 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 @@ -124,10 +117,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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/atk-1.0-2.38.0-hd4edc92_1.tar.bz2#6c72ec3e660a51736913ef6ea68c454b -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/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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_0.conda#b8128d083dbf6abd472b1a3e98b0b83d https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 @@ -135,13 +126,13 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py311hb755f60_0.conda#257dfede48699e2e6372528d08399e5a +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py311hb755f60_0.conda#81d4eacf7eb2d40beee33aa71e8f94ad https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b @@ -151,12 +142,12 @@ https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#3427 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py311h4dd048b_1.tar.bz2#46d451f575392c01dc193069bd89766d +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_0.conda#f53903649188b99e6b44c560c69f5b23 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 -https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 @@ -166,7 +157,7 @@ https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py311h64a7726_0.conda#71fd6f1734a0fa64d8f852ae7156ec45 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff @@ -177,7 +168,7 @@ https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_0.conda#87b306459b81b7a7aaad37222d537a4f https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py311hd4cff14_5.tar.bz2#da8769492e423103c59f469f4f17f8d9 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_0.conda#30eaaf31141e785a445bf1ede6235fe3 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -190,7 +181,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_0.conda#7d9a31416c18704f55946ff7cf8da5dc https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -198,8 +189,6 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_ https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 -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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -208,12 +197,12 @@ https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py311h459d7ec_0.conda#1b0db1a905b509db652609560ae9a2d5 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py311h459d7ec_0.conda#8c1ac2c00995248898220c4c1a9d81ab +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py311h459d7ec_0.conda#fc327c0ea015db3b6484eabb37d44e60 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +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/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 @@ -226,17 +215,17 @@ https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311h54d622a_1.conda#a894c65b48676c4973e9ee8b59bceb9e +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_2.conda#10a1953d2f74d292b5de093ceea104b2 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py311hb755f60_0.conda#17d25ab64a32872b349579fdb07bbdb2 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py311h54ef318_0.conda#2631a9e423855fb586c05f8a5ee8b177 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py311h320fe9a_1.conda#5f92f46bd33917832a99d1660b4075ac +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py311h320fe9a_0.conda#7f35501e126df510b250ad893482ef45 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c @@ -246,33 +235,30 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 +https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hacb5139_102.conda#487a1c19dd3eacfd055ad614e9acde87 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311he8ad708_102.conda#b48083ba918347f30efa94f7dc694919 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 -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/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd +https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py311h64a7726_0.conda#356da36102fc1eeb8a81e6d79e53bc7e +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_0.conda#18d094fb8e4ac52f93a4f4857a8f1e8f +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_4.conda#afe5363b88d2e97266063558a6599bd0 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py311h38be061_0.conda#c056ffab165096669389e5a4eea4dc4d -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311h9a7c333_101.conda#1dc70c7c3352c0ff1f861d866860db37 -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 @@ -282,4 +268,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8e 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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index ffd9d01cf5..24a1b7cc90 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -19,13 +19,12 @@ https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda# https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 -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-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 -https://conda.anaconda.org/conda-forge/linux-64/geos-3.11.2-hcb278e6_0.conda#3b8e364995e3575e57960d29c1e5ab14 +https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 @@ -34,7 +33,7 @@ https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -69,15 +68,11 @@ 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.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/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_9.conda#081aa22f4581c08e4372b0b6c2f8478e -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_9.conda#1f0a03af852a9659ed2bf08f2f1704fd +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -85,36 +80,34 @@ https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.9.2-hc929e4a_1.tar.bz2#5b122b50e738c4be5c3f2899f010d7cf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b 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.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 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/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.2-hfc55251_7.conda#32ae18eb2a687912fc9e92a501c0a11b -https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.28-h3870b5a_0.conda#b775667301ab249f94ad2bea91fc4223 +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc -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/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b -https://conda.anaconda.org/conda-forge/linux-64/libllvm16-16.0.6-h5cf9203_2.conda#dbfb446bd165f61f9c82aed9188e297a +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_0.conda#8ad377fb60abab446a9f02c62b3c2190 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e -https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.9.17-h0755675_0_cpython.conda#384886ac3580bba3541ce65c992eb192 -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.42.0-h2c6b66d_0.conda#1192f6ec654a5bc4ee1d64bdc4a3e5cc +https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 +https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 @@ -124,10 +117,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.con 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-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb 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/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/brotli-1.0.9-h166bdaf_9.conda#4601544b4982ba1861fa9b9c607b2c06 -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.0.9-py39h5a03fae_9.conda#d1601752c6f47af7bedf838be3d8ca6b +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_0.conda#8a1b6b1f5e230aaf6408d6b0aef3492f https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 @@ -135,13 +126,13 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.0-py39h3d6467e_0.conda#3d700ccea39ca04cb8b6210ac653e0b1 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py39h3d6467e_0.conda#f90bb794d0f7463fbe28596796aa0100 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.2-pyhd8ed1ab_0.conda#53522ec72e6adae42bd373ef58357230 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b @@ -151,12 +142,12 @@ https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#3427 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py39hf939315_1.tar.bz2#41679a052a8ce841c74df1ebc802e411 +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_0.conda#3822b0ae733e022c10469c0e46bdddc4 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 -https://conda.anaconda.org/conda-forge/linux-64/libclang13-16.0.6-default_h4d60ac6_1.conda#d4f1b86334951062797b483a01b0c765 -https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f -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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 @@ -166,7 +157,7 @@ https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda#f1c358d06344bd7f9a293f9af4b9b8fc 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 -https://conda.anaconda.org/conda-forge/noarch/pluggy-1.2.0-pyhd8ed1ab_0.conda#7263924c642d22e311d9e59b839f1b33 +https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda#1d54d3a75c3192ab7655d9c3d16809f1 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff @@ -177,7 +168,7 @@ https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_0.conda#41841cc1d7387bb7a30cdde4d88afbf4 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py39hb9d737c_5.tar.bz2#ef9db3c38ae7275f6b14491cfe61a248 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_0.conda#ccecb3196b3678e9b5fc8441d681c203 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -191,7 +182,7 @@ https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_0.conda#ee7f18d58a96b04fdbd2e55f7694ae0d https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 -https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.1-pyhd8ed1ab_0.conda#8f467ba2db2b5470d297953d9c1f9c7d +https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -199,8 +190,6 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_ https://conda.anaconda.org/conda-forge/noarch/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 -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.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc @@ -208,13 +197,13 @@ https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py39h7633fee_0.conda#54e6f32e448fdc273606011f0940d076 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_0.conda#434246edfc30e20c0847d4c2caff0a53 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.0-py39hd1e30aa_0.conda#03e44d84ea9dd2432a633407401e5688 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py39hd1e30aa_0.conda#de06dc7edaddbd3b60c050f3a95d6fe6 https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.1-nompi_h4f84152_100.conda#ff9ae10aa224826c07da7ef26cb0b717 +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.0.1-pyhd8ed1ab_0.conda#d978c61aa5fc2c69380d53ad56b5ae86 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 -https://conda.anaconda.org/conda-forge/linux-64/libclang-16.0.6-default_h1cdf331_1.conda#af08bc8704b09630241c50bd9fc3de4a +https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 @@ -227,17 +216,17 @@ https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39hf1c3bca_1.conda#ae6bfe65e81d9b59a71cc01a2858650f +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda#d79ed0ee1738151284ebd97092a6a210 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py39h3d6467e_0.conda#4eaef850715aff114e2126a2f1a7b1f0 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.13-heb0bb06_2.conda#c0866da05d5e7bb3a3f6b68bcbf7537b https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda#54661981fd331e20847d8a49543dd9af https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py39h40cae4c_1.conda#cfe677f02e507f76d6767379e4ff09a9 +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py39hddac248_0.conda#0a3624f600f51df010a274176e356ac5 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb @@ -246,34 +235,31 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a -https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.3-he9c0e7f_4.conda#7695770e1d722ce9029a2ea30c060a3d -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.8.1-pyhd8ed1ab_0.conda#cda1fad481e5a7d5489c0cc44d099b9d -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.26-pyhd8ed1ab_0.conda#1ca86f154e13f4aa20b48e20d6bbf924 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py39h0126182_0.conda#61cee808ff7830fcceeb4f336cc738b1 +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/netcdf4-1.6.4-nompi_py39h4282601_102.conda#05390bd5ad0ddc2f719392d087673344 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 -https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.3-pyhd8ed1ab_0.conda#e5abd7f3cb1050de9bce3027d8ffb2e7 -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/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.8.1-pyhd8ed1ab_0.conda#a9709f3c314d77cf4730b7806790f4bd +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 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/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_12.conda#60fd4bdf187f88bac57cdc1a052f2811 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.1-py39h6183b62_0.conda#81212684c03e970520656f1a62ab9d39 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h6183b62_0.conda#c7074f28bd86170a8235ddc995b4ee57 +https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h7e745eb_109.conda#9e208615247477427acbd0900ca7038f https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_4.conda#e12391692d70732bf1df08b7ecf40095 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py39hf3d152e_0.conda#6ce223b8b14df8bdfa72ac2a10c2fad3 -https://conda.anaconda.org/conda-forge/linux-64/netcdf-fortran-4.6.1-nompi_hec59055_101.conda#c84dbed01258db73689f72abc01c5e1a -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4218a78_101.conda#8f5c25bb7accd1954d8b7fc689c5975c -https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_ha7f9e30_1.conda#f3516df9a5e2b2ef3e3be2b350f9e93d -https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_1.conda#4067029ad6872d49f6d43c05dd1f51a9 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 @@ -283,4 +269,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8e 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/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.8-pyhd8ed1ab_0.conda#1e6eb6f55c967ed84a6c87306e7a9411 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 From c526ce0e5e9f1715fc81c29c9526bfda0a78deca Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Sep 2023 14:34:25 +0100 Subject: [PATCH 44/82] Bump scitools/workflows from 2023.06.0 to 2023.09.0 (#5471) Bumps [scitools/workflows](https://github.com/scitools/workflows) from 2023.06.0 to 2023.09.0. - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](https://github.com/scitools/workflows/compare/2023.06.0...2023.09.0) --- updated-dependencies: - dependency-name: scitools/workflows dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-manifest.yml | 2 +- .github/workflows/refresh-lockfiles.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-manifest.yml b/.github/workflows/ci-manifest.yml index c42eb90104..548cc3be1d 100644 --- a/.github/workflows/ci-manifest.yml +++ b/.github/workflows/ci-manifest.yml @@ -23,4 +23,4 @@ concurrency: jobs: manifest: name: "check-manifest" - uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.06.0 + uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.09.0 diff --git a/.github/workflows/refresh-lockfiles.yml b/.github/workflows/refresh-lockfiles.yml index 453014fa2a..c800381316 100644 --- a/.github/workflows/refresh-lockfiles.yml +++ b/.github/workflows/refresh-lockfiles.yml @@ -14,5 +14,5 @@ on: jobs: refresh_lockfiles: - uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.06.0 + uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.09.0 secrets: inherit From 0155124906d178cced088780ecbb39dd257e6993 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 14:16:26 +0100 Subject: [PATCH 45/82] [pre-commit.ci] pre-commit autoupdate (#5489) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.7.0 → 23.9.1](https://github.com/psf/black/compare/23.7.0...23.9.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f89f9f487e..32c51d35f9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,7 +36,7 @@ repos: additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.7.0 + rev: 23.9.1 hooks: - id: black pass_filenames: false From 228049053ab6b54c8313d95fb9889a484d4dca65 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 14:17:55 +0100 Subject: [PATCH 46/82] Bump scitools/workflows from 2023.09.0 to 2023.09.1 (#5490) Bumps [scitools/workflows](https://github.com/scitools/workflows) from 2023.09.0 to 2023.09.1. - [Release notes](https://github.com/scitools/workflows/releases) - [Commits](https://github.com/scitools/workflows/compare/2023.09.0...2023.09.1) --- updated-dependencies: - dependency-name: scitools/workflows dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci-manifest.yml | 2 +- .github/workflows/refresh-lockfiles.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-manifest.yml b/.github/workflows/ci-manifest.yml index 548cc3be1d..391f944310 100644 --- a/.github/workflows/ci-manifest.yml +++ b/.github/workflows/ci-manifest.yml @@ -23,4 +23,4 @@ concurrency: jobs: manifest: name: "check-manifest" - uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.09.0 + uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.09.1 diff --git a/.github/workflows/refresh-lockfiles.yml b/.github/workflows/refresh-lockfiles.yml index c800381316..a3f0c7f05f 100644 --- a/.github/workflows/refresh-lockfiles.yml +++ b/.github/workflows/refresh-lockfiles.yml @@ -14,5 +14,5 @@ on: jobs: refresh_lockfiles: - uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.09.0 + uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.09.1 secrets: inherit From 8b336e976d1d3b54c215fad49e9e744eab71ba0a Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:13:29 +0100 Subject: [PATCH 47/82] No longer use ASV --strict. (#5496) --- benchmarks/bm_runner.py | 16 ++++++++++------ docs/src/whatsnew/latest.rst | 3 +++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/benchmarks/bm_runner.py b/benchmarks/bm_runner.py index b3145fbdf1..b0f98c04ac 100644 --- a/benchmarks/bm_runner.py +++ b/benchmarks/bm_runner.py @@ -32,8 +32,7 @@ # Common ASV arguments for all run_types except `custom`. ASV_HARNESS = ( - "run {posargs} --attribute rounds=4 --interleave-rounds --strict " - "--show-stderr" + "run {posargs} --attribute rounds=4 --interleave-rounds --show-stderr" ) @@ -501,14 +500,19 @@ def csperf( asv_command = ( ASV_HARNESS.format(posargs=commit_range) + f" --bench={run_type}" ) - # C/SPerf benchmarks are much bigger than the CI ones: - # Don't fail the whole run if memory blows on 1 benchmark. - asv_command = asv_command.replace(" --strict", "") + # Only do a single round. asv_command = shlex.split( re.sub(r"rounds=\d", "rounds=1", asv_command) ) - _subprocess_runner([*asv_command, *args.asv_args], asv=True) + try: + _subprocess_runner([*asv_command, *args.asv_args], asv=True) + except subprocess.CalledProcessError as err: + # C/SPerf benchmarks are much bigger than the CI ones: + # Don't fail the whole run if memory blows on 1 benchmark. + # ASV produces return code of 2 if the run includes crashes. + if err.returncode != 2: + raise asv_command = shlex.split( f"publish {commit_range} --html-dir={publish_subdir}" diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 2de3dc1ced..66a48f7b46 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -79,6 +79,9 @@ This document explains the changes made to Iris for this release working properly. (Main pull request: :pull:`5437`, more detail: :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) +#. `@trexfeathers`_ adapted benchmarking to work with ASV ``>=v0.6`` by no + longer using the ``--strict`` argument. (:pull:`5496`) + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, From c53481ea5357c556a1927a637d07da380be8a69d Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Thu, 14 Sep 2023 10:10:32 +0100 Subject: [PATCH 48/82] Remove uses of logging.warn (#5488) * Align UGRID CF warnings with other CF warnings. * Replace remaining uses of logging warnings. * Assert for UserWarnings * Better test variable names. * What's New entry. --------- Co-authored-by: Henry Wright <84939917+HGWright@users.noreply.github.com> --- docs/src/whatsnew/latest.rst | 4 ++ lib/iris/experimental/ugrid/cf.py | 54 +++++-------------- lib/iris/experimental/ugrid/load.py | 10 ++-- .../experimental/test_ugrid_load.py | 19 +++---- ...test_CFUGridAuxiliaryCoordinateVariable.py | 51 ++++++++++-------- .../cf/test_CFUGridConnectivityVariable.py | 48 ++++++++++------- .../ugrid/cf/test_CFUGridMeshVariable.py | 42 +++++++++------ 7 files changed, 113 insertions(+), 115 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 66a48f7b46..8391f2ced6 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -79,10 +79,14 @@ This document explains the changes made to Iris for this release working properly. (Main pull request: :pull:`5437`, more detail: :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) +#. `@trexfeathers`_ replaced all uses of the ``logging.WARNING`` level, in + favour of using Python warnings, following team agreement. (:pull:`5488`) + #. `@trexfeathers`_ adapted benchmarking to work with ASV ``>=v0.6`` by no longer using the ``--strict`` argument. (:pull:`5496`) + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: diff --git a/lib/iris/experimental/ugrid/cf.py b/lib/iris/experimental/ugrid/cf.py index 2d8d6cc448..86b76c7a75 100644 --- a/lib/iris/experimental/ugrid/cf.py +++ b/lib/iris/experimental/ugrid/cf.py @@ -10,15 +10,11 @@ Eventual destination: :mod:`iris.fileformats.cf`. """ -import logging +import warnings -from ...config import get_logger from ...fileformats import cf from .mesh import Connectivity -# Configure the logger. -logger = get_logger(__name__, propagate=True, handler=False) - class CFUGridConnectivityVariable(cf.CFVariable): """ @@ -50,8 +46,6 @@ class CFUGridConnectivityVariable(cf.CFVariable): def identify(cls, variables, ignore=None, target=None, warn=True): result = {} ignore, target = cls._identify_common(variables, ignore, target) - # TODO: reconsider logging level when we have consistent practice. - log_level = logging.WARNING if warn else logging.DEBUG # Identify all CF-UGRID connectivity variables. for nc_var_name, nc_var in target.items(): @@ -70,11 +64,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"{name}, referenced by netCDF variable " f"{nc_var_name}" ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -88,11 +79,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"as a CF-UGRID connectivity - is a " f"CF-netCDF label variable." ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) return result @@ -131,8 +119,6 @@ class CFUGridAuxiliaryCoordinateVariable(cf.CFVariable): def identify(cls, variables, ignore=None, target=None, warn=True): result = {} ignore, target = cls._identify_common(variables, ignore, target) - # TODO: reconsider logging level when we have consistent practice. - log_level = logging.WARNING if warn else logging.DEBUG # Identify any CF-UGRID-relevant auxiliary coordinate variables. for nc_var_name, nc_var in target.items(): @@ -149,11 +135,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"variable {name}, referenced by netCDF " f"variable {nc_var_name}" ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -170,11 +153,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"auxiliary coordinate - is a " f"CF-netCDF label variable." ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) return result @@ -205,8 +185,6 @@ class CFUGridMeshVariable(cf.CFVariable): def identify(cls, variables, ignore=None, target=None, warn=True): result = {} ignore, target = cls._identify_common(variables, ignore, target) - # TODO: reconsider logging level when we have consistent practice. - log_level = logging.WARNING if warn else logging.DEBUG # Identify all CF-UGRID mesh variables. all_vars = target == variables @@ -232,11 +210,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"Missing CF-UGRID mesh variable {name}, " f"referenced by netCDF variable {nc_var_name}" ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -250,11 +225,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"CF-UGRID mesh - is a CF-netCDF label " f"variable." ) - logger.log( - level=log_level, - msg=message, - extra=dict(cls=cls.__name__), - ) + if warn: + warnings.warn(message) return result diff --git a/lib/iris/experimental/ugrid/load.py b/lib/iris/experimental/ugrid/load.py index cfa3935991..d2670ac690 100644 --- a/lib/iris/experimental/ugrid/load.py +++ b/lib/iris/experimental/ugrid/load.py @@ -15,6 +15,7 @@ from itertools import groupby from pathlib import Path import threading +import warnings from ...config import get_logger from ...coords import AuxCoord @@ -350,8 +351,7 @@ def _build_mesh(cf, mesh_var, file_path): ) if cf_role_message: cf_role_message += " Correcting to 'mesh_topology'." - # TODO: reconsider logging level when we have consistent practice. - logger.warning(cf_role_message, extra=dict(cls=None)) + warnings.warn(cf_role_message) if hasattr(mesh_var, "volume_node_connectivity"): topology_dimension = 3 @@ -369,8 +369,7 @@ def _build_mesh(cf, mesh_var, file_path): f" : *Assuming* topology_dimension={topology_dimension}" ", consistent with the attached connectivities." ) - # TODO: reconsider logging level when we have consistent practice. - logger.warning(msg, extra=dict(cls=None)) + warnings.warn(msg) else: quoted_topology_dimension = mesh_var.topology_dimension if quoted_topology_dimension != topology_dimension: @@ -382,8 +381,7 @@ def _build_mesh(cf, mesh_var, file_path): f"{quoted_topology_dimension}" " -- ignoring this as it is inconsistent." ) - # TODO: reconsider logging level when we have consistent practice. - logger.warning(msg=msg, extra=dict(cls=None)) + warnings.warn(msg) node_dimension = None edge_dimension = getattr(mesh_var, "edge_dimension", None) diff --git a/lib/iris/tests/integration/experimental/test_ugrid_load.py b/lib/iris/tests/integration/experimental/test_ugrid_load.py index af97458ded..b0b60ee506 100644 --- a/lib/iris/tests/integration/experimental/test_ugrid_load.py +++ b/lib/iris/tests/integration/experimental/test_ugrid_load.py @@ -16,8 +16,9 @@ from collections.abc import Iterable +import pytest + from iris import Constraint, load -from iris.experimental.ugrid import logger from iris.experimental.ugrid.load import ( PARSE_UGRID_ON_LOAD, load_mesh, @@ -168,8 +169,8 @@ def create_synthetic_file(self, **create_kwargs): def test_mesh_bad_topology_dimension(self): # Check that the load generates a suitable warning. - log_regex = r"topology_dimension.* ignoring" - with self.assertLogs(logger, level="WARNING", msg_regex=log_regex): + warn_regex = r"topology_dimension.* ignoring" + with pytest.warns(UserWarning, match=warn_regex): template = "minimal_bad_topology_dim" dim_line = "mesh_var:topology_dimension = 1 ;" # which is wrong ! cube = self.create_synthetic_test_cube( @@ -181,8 +182,8 @@ def test_mesh_bad_topology_dimension(self): def test_mesh_no_topology_dimension(self): # Check that the load generates a suitable warning. - log_regex = r"Mesh variable.* has no 'topology_dimension'" - with self.assertLogs(logger, level="WARNING", msg_regex=log_regex): + warn_regex = r"Mesh variable.* has no 'topology_dimension'" + with pytest.warns(UserWarning, match=warn_regex): template = "minimal_bad_topology_dim" dim_line = "" # don't create ANY topology_dimension property cube = self.create_synthetic_test_cube( @@ -194,8 +195,8 @@ def test_mesh_no_topology_dimension(self): def test_mesh_bad_cf_role(self): # Check that the load generates a suitable warning. - log_regex = r"inappropriate cf_role" - with self.assertLogs(logger, level="WARNING", msg_regex=log_regex): + warn_regex = r"inappropriate cf_role" + with pytest.warns(UserWarning, match=warn_regex): template = "minimal_bad_mesh_cf_role" dim_line = 'mesh_var:cf_role = "foo" ;' _ = self.create_synthetic_test_cube( @@ -204,8 +205,8 @@ def test_mesh_bad_cf_role(self): def test_mesh_no_cf_role(self): # Check that the load generates a suitable warning. - log_regex = r"no cf_role attribute" - with self.assertLogs(logger, level="WARNING", msg_regex=log_regex): + warn_regex = r"no cf_role attribute" + with pytest.warns(UserWarning, match=warn_regex): template = "minimal_bad_mesh_cf_role" dim_line = "" _ = self.create_synthetic_test_cube( diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py index bdf1d5e03b..a4e0e05a08 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py @@ -14,12 +14,13 @@ # importing anything else. import iris.tests as tests # isort:skip +import re +import warnings + import numpy as np +import pytest -from iris.experimental.ugrid.cf import ( - CFUGridAuxiliaryCoordinateVariable, - logger, -) +from iris.experimental.ugrid.cf import CFUGridAuxiliaryCoordinateVariable from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( netcdf_ugrid_variable, ) @@ -213,26 +214,30 @@ def test_warn(self): "ref_source": ref_source, } - # The warn kwarg and expected corresponding log level. - warn_and_level = {True: "WARNING", False: "DEBUG"} + def operation(warn: bool): + warnings.warn("emit at least 1 warning") + result = CFUGridAuxiliaryCoordinateVariable.identify( + vars_all, warn=warn + ) + self.assertDictEqual({}, result) # Missing warning. - log_regex = rf"Missing CF-netCDF auxiliary coordinate variable {subject_name}.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - result = CFUGridAuxiliaryCoordinateVariable.identify( - vars_all, warn=warn - ) - self.assertDictEqual({}, result) + warn_regex = rf"Missing CF-netCDF auxiliary coordinate variable {subject_name}.*" + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] # String variable warning. - log_regex = r".*is a CF-netCDF label variable.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - vars_all[subject_name] = netcdf_ugrid_variable( - subject_name, "", np.bytes_ - ) - result = CFUGridAuxiliaryCoordinateVariable.identify( - vars_all, warn=warn - ) - self.assertDictEqual({}, result) + warn_regex = r".*is a CF-netCDF label variable.*" + vars_all[subject_name] = netcdf_ugrid_variable( + subject_name, "", np.bytes_ + ) + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py index 7d461b324a..27d5c1db90 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py @@ -14,9 +14,13 @@ # importing anything else. import iris.tests as tests # isort:skip +import re +import warnings + import numpy as np +import pytest -from iris.experimental.ugrid.cf import CFUGridConnectivityVariable, logger +from iris.experimental.ugrid.cf import CFUGridConnectivityVariable from iris.experimental.ugrid.mesh import Connectivity from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( netcdf_ugrid_variable, @@ -199,26 +203,30 @@ def test_warn(self): "ref_source": ref_source, } - # The warn kwarg and expected corresponding log level. - warn_and_level = {True: "WARNING", False: "DEBUG"} + def operation(warn: bool): + warnings.warn("emit at least 1 warning") + result = CFUGridConnectivityVariable.identify(vars_all, warn=warn) + self.assertDictEqual({}, result) # Missing warning. - log_regex = rf"Missing CF-UGRID connectivity variable {subject_name}.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - result = CFUGridConnectivityVariable.identify( - vars_all, warn=warn - ) - self.assertDictEqual({}, result) + warn_regex = ( + rf"Missing CF-UGRID connectivity variable {subject_name}.*" + ) + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] # String variable warning. - log_regex = r".*is a CF-netCDF label variable.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - vars_all[subject_name] = netcdf_ugrid_variable( - subject_name, "", np.bytes_ - ) - result = CFUGridConnectivityVariable.identify( - vars_all, warn=warn - ) - self.assertDictEqual({}, result) + warn_regex = r".*is a CF-netCDF label variable.*" + vars_all[subject_name] = netcdf_ugrid_variable( + subject_name, "", np.bytes_ + ) + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py index 08915f7cff..6b278cf1b1 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py @@ -14,9 +14,13 @@ # importing anything else. import iris.tests as tests # isort:skip +import re +import warnings + import numpy as np +import pytest -from iris.experimental.ugrid.cf import CFUGridMeshVariable, logger +from iris.experimental.ugrid.cf import CFUGridMeshVariable from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( netcdf_ugrid_variable, ) @@ -242,22 +246,28 @@ def test_warn(self): "ref_source": ref_source, } - # The warn kwarg and expected corresponding log level. - warn_and_level = {True: "WARNING", False: "DEBUG"} + def operation(warn: bool): + warnings.warn("emit at least 1 warning") + result = CFUGridMeshVariable.identify(vars_all, warn=warn) + self.assertDictEqual({}, result) # Missing warning. - log_regex = rf"Missing CF-UGRID mesh variable {subject_name}.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - result = CFUGridMeshVariable.identify(vars_all, warn=warn) - self.assertDictEqual({}, result) + warn_regex = rf"Missing CF-UGRID mesh variable {subject_name}.*" + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] # String variable warning. - log_regex = r".*is a CF-netCDF label variable.*" - for warn, level in warn_and_level.items(): - with self.assertLogs(logger, level=level, msg_regex=log_regex): - vars_all[subject_name] = netcdf_ugrid_variable( - subject_name, "", np.bytes_ - ) - result = CFUGridMeshVariable.identify(vars_all, warn=warn) - self.assertDictEqual({}, result) + warn_regex = r".*is a CF-netCDF label variable.*" + vars_all[subject_name] = netcdf_ugrid_variable( + subject_name, "", np.bytes_ + ) + with pytest.warns(UserWarning, match=warn_regex): + operation(warn=True) + with pytest.warns() as record: + operation(warn=False) + warn_list = [str(w.message) for w in record] + assert list(filter(re.compile(warn_regex).match, warn_list)) == [] From 064e6ee85417ab312dcbceaa2d334dd6bf9e1f25 Mon Sep 17 00:00:00 2001 From: Elias <110238618+ESadek-MO@users.noreply.github.com> Date: Thu, 14 Sep 2023 15:07:54 +0100 Subject: [PATCH 49/82] idiff acceptance fix (#5482) * removed duplication case in Accept * updated docstring * corrected whatsnew (hopefully) * the merge undid the fix. Here we go * removed trailng . from whatsnew * changed ref to mod --- docs/src/whatsnew/latest.rst | 3 +++ lib/iris/tests/graphics/idiff.py | 17 ++++++----------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 8391f2ced6..35b6121c41 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -38,6 +38,9 @@ This document explains the changes made to Iris for this release #. `@scottrobinson02`_ fixed the output units when dividing a coordinate by a cube. (:issue:`5305`, :pull:`5331`) + +#. `@ESadek-MO`_ has updated :mod:`iris.tests.graphics.idiff` to stop duplicated file names + preventing acceptance. (:issue:`5098`, :pull:`5482`) 💣 Incompatible Changes diff --git a/lib/iris/tests/graphics/idiff.py b/lib/iris/tests/graphics/idiff.py index a355f2cf82..62e72f4e0e 100755 --- a/lib/iris/tests/graphics/idiff.py +++ b/lib/iris/tests/graphics/idiff.py @@ -73,17 +73,12 @@ def diff_viewer( repo = graphics.read_repo_json() def accept(event): - if test_id not in repo: - repo[test_id] = phash - graphics.write_repo_json(repo) - out_file = result_dir / (test_id + ".png") - result_path.rename(out_file) - msg = f"ACCEPTED: {result_path.name} -> {out_file.name}" - print(msg) - else: - msg = f"DUPLICATE: {result_path.name} -> {expected_path.name} (ignored)" - print(msg) - result_path.unlink() + repo[test_id] = phash + graphics.write_repo_json(repo) + out_file = result_dir / (test_id + ".png") + result_path.rename(out_file) + msg = f"ACCEPTED: {result_path.name} -> {out_file.name}" + print(msg) diff_fname.unlink() plt.close() From 10cec6911db04782b9b532601b2929c60ab3125c Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Tue, 19 Sep 2023 13:28:36 +0100 Subject: [PATCH 50/82] Environment lockfiles auto-update, including `asv_runner`. (#5503) * Updated environment lockfiles * Include asv_runner - to support ASV>=0.6 . --------- Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 131 +++++++++++++------------ requirements/locks/py311-linux-64.lock | 131 +++++++++++++------------ requirements/locks/py39-linux-64.lock | 129 ++++++++++++------------ requirements/py310.yml | 1 + requirements/py311.yml | 1 + requirements/py39.yml | 1 + 6 files changed, 200 insertions(+), 194 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index ed387a25a8..efa5431823 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 90bea26e2629b01270a880c650dfec7b34c38d9b6c6ddb4f8c9fee205d0e1ad6 +# input_hash: bc0383c4702650016b286d9f1d4b405e53a5c85772e04622e3c10fd51465463a @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,17 +9,15 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-3_cp310.conda#4eb33d14d794b0f4be116443ffed3853 https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_1.conda#8bb001683321dcbde117a7337b5aace7 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 @@ -28,7 +26,7 @@ https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fd https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 -https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f @@ -38,12 +36,12 @@ 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-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c 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-h0b41bf4_0.conda#1edd9e67bdb90d78cea97733ff6b54e6 +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b @@ -70,13 +68,13 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,31 +82,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec 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/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/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc +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_0.conda#aeafb07a327e3f14a796bf081ea07472 -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -116,6 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.con https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 +https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_0.conda#fb6201eb1daa3a3a2f91a4833bdf27c7 @@ -132,11 +130,11 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#1 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -144,9 +142,10 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_0.conda#741385a84f6a1b6623eb39226cc669e8 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-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 @@ -154,7 +153,6 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda#5597d9f9778af6883ae64f0e7d39416c https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda#5311a49aaea44b73935c84a6d9a68e5f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py310ha4c1d20_0.conda#188e72aa313da668464e35309e9a32b0 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d @@ -162,25 +160,25 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda#b0f0a014fc04012c05f39df15fe270ce https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_0.conda#75e60ce53c01a121039b3050c9e1f759 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +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-py310h2372a71_0.conda#511120451bf728d52bb37c73d4069e57 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 +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/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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae +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/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 +https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_0.conda#dfb49d3ac440e1a236080f9c300e642f -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -192,41 +190,36 @@ https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835 -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py310hd41b1e2_0.conda#684399f9ddc0b9d6f3b6164f6107098e -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py310h2372a71_0.conda#c0967a89cb3c2b8f493b5990dcd7c26d +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py310h2372a71_0.conda#0834a720fe60f511913ac52cd01e40dc https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py310h2372a71_0.conda#1f18231ffab82f236ce074b2aaa07e54 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 +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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py310h582fbeb_0.conda#adcc7ea52e4d39d0a93f6a2ef36c7fd4 https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +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/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_2.conda#a46061c83ed37bfa05d1ee96ec2fbb08 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py310hc6cd4ac_0.conda#be1a7e420b7bac4ee02353d0e3161918 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py310hf38f957_0.conda#9b55c9041c5a7f80f184a2cb05ec9663 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py310hcc13569_0.conda#6c92da4ec4e301d09a365c0584e632c8 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py310ha4c1d20_0.conda#1ac91334ffc1f3fd297319cd1c74b34e https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 @@ -236,31 +229,38 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c -https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py310hd41b1e2_0.conda#e00d52a8657a79b0a7c8c10559784759 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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/netcdf4-1.6.4-nompi_py310hba70d50_102.conda#6025039727a049ab4c0f2aab842c01cb -https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb -https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py310hcc13569_0.conda#6c92da4ec4e301d09a365c0584e632c8 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py310hb13e2d6_1.conda#4f522fc9cb8ecfa25e39f5c2ea65b16b +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_2.conda#a46061c83ed37bfa05d1ee96ec2fbb08 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py310h62c0568_0.conda#0ba9c5af7a6cd0244a8ae2038c89317f +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_102.conda#6025039727a049ab4c0f2aab842c01cb +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py310ha4c1d20_0.conda#d1ec73b85cb90900c40c7fbcd36059e8 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_4.conda#db878a0696f9a7980171fd3cf29cca22 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py310hff52083_0.conda#7e454b4a61754714a4a4d183641374da -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py310hff52083_0.conda#6c194758494847c927ad3bcf37fafa49 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -270,3 +270,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 + diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 7542d2bff0..ff6f4ff76c 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: b73fe0fbcf5caf5854030c02a6233bae6e4061e9f4175a5d8810c6bb3d7701b2 +# input_hash: e651bbc39258b157d888d85ff878fc5c3d62cc9a632c7b8bf515b62cd8d2da53 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,17 +9,15 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-3_cp311.conda#c2e2630ddb68cf52eec74dc7dfab20b5 https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_1.conda#8bb001683321dcbde117a7337b5aace7 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 @@ -28,7 +26,7 @@ https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fd https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 -https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f @@ -38,12 +36,12 @@ 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-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c 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-h0b41bf4_0.conda#1edd9e67bdb90d78cea97733ff6b54e6 +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b @@ -70,13 +68,13 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,31 +82,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec 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/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/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc +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_0.conda#aeafb07a327e3f14a796bf081ea07472 -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda#f0288cb82594b1cbc71111d1cd3c5422 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -116,6 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.con https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_0.conda#b8128d083dbf6abd472b1a3e98b0b83d @@ -132,11 +130,11 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#1 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -144,9 +142,10 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_0.conda#f53903649188b99e6b44c560c69f5b23 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-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 @@ -154,7 +153,6 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py311h64a7726_0.conda#71fd6f1734a0fa64d8f852ae7156ec45 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d @@ -162,25 +160,25 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_0.conda#87b306459b81b7a7aaad37222d537a4f -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +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_0.conda#30eaaf31141e785a445bf1ede6235fe3 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 +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/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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae +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/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 +https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_0.conda#7d9a31416c18704f55946ff7cf8da5dc -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 @@ -191,41 +189,36 @@ https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.0-py311h459d7ec_0.conda#1b0db1a905b509db652609560ae9a2d5 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py311h459d7ec_0.conda#d23df37f3a595e8ffca99642ab6df3eb https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py311h459d7ec_0.conda#fc327c0ea015db3b6484eabb37d44e60 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 +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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 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.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +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/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_2.conda#10a1953d2f74d292b5de093ceea104b2 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py311hb755f60_0.conda#17d25ab64a32872b349579fdb07bbdb2 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py311h54ef318_0.conda#2631a9e423855fb586c05f8a5ee8b177 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py311h320fe9a_0.conda#7f35501e126df510b250ad893482ef45 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py311h64a7726_0.conda#bf16a9f625126e378302f08e7ed67517 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c @@ -235,31 +228,38 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c -https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py311h9547e67_0.conda#db5b3b0093d0d4565e5c89578108402e +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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/netcdf4-1.6.4-nompi_py311he8ad708_102.conda#b48083ba918347f30efa94f7dc694919 -https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb -https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py311h320fe9a_0.conda#7f35501e126df510b250ad893482ef45 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_1.conda#58af16843fc4469770bdbaf45d3a19de +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_2.conda#10a1953d2f74d292b5de093ceea104b2 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +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.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py311h54ef318_0.conda#b67672c2f39ef2912a1814e29e42c7ca +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311he8ad708_102.conda#b48083ba918347f30efa94f7dc694919 +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_0.conda#18d094fb8e4ac52f93a4f4857a8f1e8f +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_4.conda#afe5363b88d2e97266063558a6599bd0 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py311h38be061_0.conda#c056ffab165096669389e5a4eea4dc4d -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py311h38be061_0.conda#8148b139a0560666d661cf1d179a0cca +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -269,3 +269,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 + diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 24a1b7cc90..fc574db4f3 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: a96712105b515671c42bd403fde393d6f10f99a02267d05c771ab9ca88f64093 +# input_hash: 8b81c2e9972c5059e1b9013a49eddbd4697c92807d6f5d5282350b6c6d0dc518 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,17 +9,15 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.1.0-h15d22d2_0.conda#afb656a334c409dd9805508af1c89c7a -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.1.0-hfd8a6a1_0.conda#067bcc23164642f4c226da631f2a2e1d +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda#0dd193187d54e585cac7eab942a8847e https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.1.0-h69a702a_0.conda#506dc07710dd5b0ba63cbf134897fc10 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.1.0-he5830b7_0.conda#56ca14d57ac29a75d23a39eb3ee0ddeb +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_1.conda#8bb001683321dcbde117a7337b5aace7 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c -https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.9-hd590300_0.conda#a0c6f0e7e1a467f5678f94dea18c8aa7 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 @@ -28,7 +26,7 @@ https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fd https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda#96f3b11872ef6fad973eac856cd2624f https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 -https://conda.anaconda.org/conda-forge/linux-64/icu-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 +https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f @@ -38,12 +36,12 @@ 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-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c 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-h0b41bf4_0.conda#1edd9e67bdb90d78cea97733ff6b54e6 +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.23-pthreads_h80387f5_0.conda#9c5ea51ccb8ffae7d06c645869d24ce6 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b @@ -70,13 +68,13 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-17_linux64_openblas.conda#57fb44770b1bc832fb2dbefa1bd502de https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -84,31 +82,30 @@ https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.cond https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h0d562d8_0.conda#558ab736404275d7df61c473c1af35aa -https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_0.conda#d597567092897b1f1c7350f32e03944e -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_2.conda#a55ff0ed12efd86cf3a3dfb750adb950 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec 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/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/blosc-1.21.4-h0f2a231_0.conda#876286b5941933a0f558777e57d883cc +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_0.conda#aeafb07a327e3f14a796bf081ea07472 -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-17_linux64_openblas.conda#7ef0969b00fe3d6eef56a8151d3afb29 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.4-hebfc3b9_0.conda#c6f951789c888f7bbd2dd6858eab69de -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-17_linux64_openblas.conda#a2103882c46492e26500fcb56c03de8b +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_2.conda#b2f09078f50b9e859aca3f0dc1cc8b7e +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-hc3e0081_0.tar.bz2#d4c341e0379c31e9e781d4f204726867 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -116,6 +113,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.con https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.6-h8ee46fc_0.conda#7590b76c3d11d21caa44f3fc38ac584a 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-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb +https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_0.conda#8a1b6b1f5e230aaf6408d6b0aef3492f @@ -132,11 +130,11 @@ https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#1 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0.conda#e6518222753f519e911e83136d2158d9 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 -https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.3-pyhd8ed1ab_0.conda#3104cf0ab9fb9de393051bf92b10dbe9 +https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.6.0-pyh1a96a4e_0.conda#50ea2067ec92dfcc38b4f07992d7e235 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.76.4-hfc55251_0.conda#76ac435b8668f636a39fcb155c3543fd +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 @@ -144,9 +142,10 @@ https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_0.conda#3822b0ae733e022c10469c0e46bdddc4 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-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.2.1-hca28451_0.conda#96aec6156d58591f5a4e67056521ce1b +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 @@ -154,7 +153,6 @@ https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda#9c858d105816f454c6b64f3e19184b60 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda#413374bab5022a5199c5dd89aef75df5 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.25.2-py39h6183b62_0.conda#f1c358d06344bd7f9a293f9af4b9b8fc 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d @@ -162,25 +160,25 @@ https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd715 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda#1d54d3a75c3192ab7655d9c3d16809f1 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.0.9-pyhd8ed1ab_0.tar.bz2#e8fbc1b54b25f4b08281467bc13b70cc +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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_0.conda#41841cc1d7387bb7a30cdde4d88afbf4 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3-pyhd8ed1ab_0.conda#d3076b483092a435832603243567bc31 +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-py39hd1e30aa_0.conda#ccecb3196b3678e9b5fc8441d681c203 -https://conda.anaconda.org/conda-forge/noarch/setuptools-68.1.2-pyhd8ed1ab_0.conda#4fe12573bf499ff85a0a364e00cc5c53 +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/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.3.2.post1-pyhd8ed1ab_0.tar.bz2#146f4541d643d48fc8a75cacf69f03ae +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/tblib-1.7.0-pyhd8ed1ab_0.tar.bz2#3d4afc31302aa7be471feb6be048ed76 +https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f5580336fe091d46f9a2ea97da044550 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_0.conda#ee7f18d58a96b04fdbd2e55f7694ae0d -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda#c39d6a09fe819de4951c2642629d9115 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -192,41 +190,37 @@ https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1ab_0.conda#46a2e6e3dfa718ce3492018d5a110dd6 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda#20080319ef73fbad74dcd6d62f2a3ffe -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py39h7633fee_0.conda#54e6f32e448fdc273606011f0940d076 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_0.conda#434246edfc30e20c0847d4c2caff0a53 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py39hd1e30aa_0.conda#de06dc7edaddbd3b60c050f3a95d6fe6 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.4-hfc55251_0.conda#dbcec5fd9c6c8be24b23575048755a59 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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.0.1-pyhd8ed1ab_0.conda#d978c61aa5fc2c69380d53ad56b5ae86 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 +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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-hfa28ad5_6.conda#ef06bee47510a7f5db3c2297a51d6ce2 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b -https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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.0-pyhd8ed1ab_0.conda#721dab5803ea92ce02ddc4ee50aa0c48 +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py39haaeba84_0.conda#f97a95fab7c69678ebf6b57396b1323e https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 -https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.0-pyhd8ed1ab_0.conda#3cfe9b9e958e7238a386933c75d190db +https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 +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/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda#d79ed0ee1738151284ebd97092a6a210 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py39h3d6467e_0.conda#4eaef850715aff114e2126a2f1a7b1f0 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda#f96688577f1faa58096d06a45136afa2 +https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_0.conda#2f45c1da3828ec2dc44d84b68916e3e7 -https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda#98db5f8813f45e2b29766aff0e4a499c https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda#54661981fd331e20847d8a49543dd9af https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py39hddac248_0.conda#0a3624f600f51df010a274176e356ac5 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py39h6183b62_0.conda#a50279322335a176d74ed167f9ce468b https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb @@ -235,32 +229,38 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.co https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.0-pyhd8ed1ab_0.conda#7bcadb3fcbb9fadeb53abef5b53b1f98 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-hf7dbed1_0.conda#ad8e8068208846032d6e9ce73d406cee -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.27-pyhd8ed1ab_0.conda#6fbde8d3bdd1874132a1b26a3554b22c -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.2-py39h0126182_0.conda#61cee808ff7830fcceeb4f336cc738b1 +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py39h7633fee_0.conda#b673f03c191683996e66c881f90aff2b +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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/netcdf4-1.6.4-nompi_py39h4282601_102.conda#05390bd5ad0ddc2f719392d087673344 -https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-heaa33ce_1.conda#cde553e0e32389e26595db4eacf859eb -https://conda.anaconda.org/conda-forge/noarch/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.0-py39hddac248_0.conda#0a3624f600f51df010a274176e356ac5 +https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h474f0d3_1.conda#f62409d868e23c1f97ae2b0db5658385 +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda#d79ed0ee1738151284ebd97092a6a210 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.0-pyhd8ed1ab_0.conda#e72cf2f28bd6288a790c13592648f265 +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 +https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.56.3-h98fae49_0.conda#620e754f4344f4c27259ff460a2b9c50 -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/pre-commit-3.3.3-pyha770c72_0.conda#dd64a0e440754ed97610b3e6b502b6b1 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py39he9076e7_0.conda#a529a20267af9f085c7f991cae79fef2 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4282601_102.conda#05390bd5ad0ddc2f719392d087673344 +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h7fe3ca9_15.conda#f09d307dd78e61e4eb2c6c2f81056d0e -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h6183b62_0.conda#c7074f28bd86170a8235ddc995b4ee57 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb -https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a +https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_4.conda#e12391692d70732bf1df08b7ecf40095 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.2-py39hf3d152e_0.conda#6ce223b8b14df8bdfa72ac2a10c2fad3 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.13.3-pyhd8ed1ab_0.conda#07aca5f2dea315dcc16680d6891e9056 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py39hf3d152e_0.conda#e348333b50ff1f978f3d6af24512de0b +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -270,3 +270,4 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 + diff --git a/requirements/py310.yml b/requirements/py310.yml index 2ba8abb7ae..fd549a9cf7 100644 --- a/requirements/py310.yml +++ b/requirements/py310.yml @@ -35,6 +35,7 @@ dependencies: - python-stratify # Test dependencies. + - asv_runner - distributed - filelock - imagehash >=4.0 diff --git a/requirements/py311.yml b/requirements/py311.yml index 80e112d850..a883e5d87a 100644 --- a/requirements/py311.yml +++ b/requirements/py311.yml @@ -35,6 +35,7 @@ dependencies: - python-stratify # Test dependencies. + - asv_runner - distributed - filelock - imagehash >=4.0 diff --git a/requirements/py39.yml b/requirements/py39.yml index ed6a5eda54..5b3c17510e 100644 --- a/requirements/py39.yml +++ b/requirements/py39.yml @@ -35,6 +35,7 @@ dependencies: - python-stratify # Test dependencies. + - asv_runner - distributed - filelock - imagehash >=4.0 From b6e39d758fc17e167b9323b25484965453846dbf Mon Sep 17 00:00:00 2001 From: Alex Chamberlain-Clay <68277260+acchamber@users.noreply.github.com> Date: Thu, 21 Sep 2023 16:13:07 +0100 Subject: [PATCH 51/82] Updated all np.product calls to np.prod (#5493) * Updated all np.product calls to np.prod * added whats new * review responses * no typos here * added link to name * Update docs/src/whatsnew/latest.rst Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> * Update docs/src/whatsnew/latest.rst Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> --------- Co-authored-by: Elias <110238618+ESadek-MO@users.noreply.github.com> --- docs/src/whatsnew/latest.rst | 6 ++++++ lib/iris/fileformats/_structured_array_identification.py | 2 +- lib/iris/pandas.py | 2 +- lib/iris/tests/integration/netcdf/test_thread_safety.py | 2 +- lib/iris/tests/unit/pandas/test_pandas.py | 6 +++--- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 35b6121c41..a9b470296f 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -82,6 +82,9 @@ This document explains the changes made to Iris for this release working properly. (Main pull request: :pull:`5437`, more detail: :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) +#. `@acchamber`_ removed several warnings from iris related to Numpy 1.25 deprecations. + (:pull:`5493`) + #. `@trexfeathers`_ replaced all uses of the ``logging.WARNING`` level, in favour of using Python warnings, following team agreement. (:pull:`5488`) @@ -90,11 +93,14 @@ This document explains the changes made to Iris for this release + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: .. _@scottrobinson02: https://github.com/scottrobinson02 +.. _@acchamber: https://github.com/acchamber + .. comment Whatsnew resources in alphabetical order: diff --git a/lib/iris/fileformats/_structured_array_identification.py b/lib/iris/fileformats/_structured_array_identification.py index b313500de7..11c62983e3 100644 --- a/lib/iris/fileformats/_structured_array_identification.py +++ b/lib/iris/fileformats/_structured_array_identification.py @@ -417,7 +417,7 @@ def filter_strides_of_length(length): # If we are to build another dimension on top of this possible # structure, we need to compute the stride that would be # needed for that dimension. - next_stride = np.product( + next_stride = np.prod( [struct.size for (_, struct) in potential] ) diff --git a/lib/iris/pandas.py b/lib/iris/pandas.py index 4d6681e94e..4c06530627 100644 --- a/lib/iris/pandas.py +++ b/lib/iris/pandas.py @@ -398,7 +398,7 @@ def as_cubes( cube_shape = getattr(pandas_index, "levshape", (pandas_index.nunique(),)) n_rows = len(pandas_structure) - if np.product(cube_shape) > n_rows: + if np.prod(cube_shape) > n_rows: message = ( f"Not all index values have a corresponding row - {n_rows} rows " f"cannot be reshaped into {cube_shape}. Consider padding with NaN " diff --git a/lib/iris/tests/integration/netcdf/test_thread_safety.py b/lib/iris/tests/integration/netcdf/test_thread_safety.py index 5ed32d0671..c5779250a2 100644 --- a/lib/iris/tests/integration/netcdf/test_thread_safety.py +++ b/lib/iris/tests/integration/netcdf/test_thread_safety.py @@ -38,7 +38,7 @@ def tiny_chunks(): def _check_tiny_loaded_chunks(cube: Cube): assert cube.has_lazy_data() cube_lazy_data = cube.core_data() - assert np.product(cube_lazy_data.chunksize) < cube_lazy_data.size + assert np.prod(cube_lazy_data.chunksize) < cube_lazy_data.size with dask.config.set({"array.chunk-size": "1KiB"}): yield _check_tiny_loaded_chunks diff --git a/lib/iris/tests/unit/pandas/test_pandas.py b/lib/iris/tests/unit/pandas/test_pandas.py index fd716bd7c9..d74d7cad9c 100644 --- a/lib/iris/tests/unit/pandas/test_pandas.py +++ b/lib/iris/tests/unit/pandas/test_pandas.py @@ -1075,7 +1075,7 @@ def test_ancillary_variable(self): def test_3d_with_2d_coord(self): df = self._create_pandas(index_levels=3) coord_shape = df.index.levshape[:2] - coord_values = np.arange(np.product(coord_shape)) + coord_values = np.arange(np.prod(coord_shape)) coord_name = "foo" df[coord_name] = coord_values.repeat(df.index.levshape[-1]) result = iris.pandas.as_cubes(df, aux_coord_cols=[coord_name]) @@ -1089,7 +1089,7 @@ def test_3d_with_2d_coord(self): def test_coord_varies_all_indices(self): df = self._create_pandas(index_levels=3) coord_shape = df.index.levshape - coord_values = np.arange(np.product(coord_shape)) + coord_values = np.arange(np.prod(coord_shape)) coord_name = "foo" df[coord_name] = coord_values result = iris.pandas.as_cubes(df, aux_coord_cols=[coord_name]) @@ -1105,7 +1105,7 @@ def test_category_coord(self): # increment. df = self._create_pandas(index_levels=2) coord_shape = df.index.levshape - coord_values = np.arange(np.product(coord_shape)) + coord_values = np.arange(np.prod(coord_shape)) coord_name = "foo" # Create a repeating value along a dimension. From 4f126a0bcb52851a6f28667da65d43d0af89a252 Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Fri, 22 Sep 2023 11:30:09 +0100 Subject: [PATCH 52/82] Categorise warnings (#5498) * Introduce IrisUserWarning. * Align existing warning subcategories. * Plant a flag for future DeprecationWarning use. * Introduce test_categorised_warnings(). * Fix backwards compatibility of existing warnings classes. * Categorise all Iris warnings. * Fix test_categorised_warnings() by using ast module. * Add missing warning category kwargs. * Warnings combo experiment. * Warnings combo finalise. * Fix stray comma in coords.py. * Fix failing tests. * Categorise warning tests. * What's New entry. --- docs/src/whatsnew/latest.rst | 8 +- lib/iris/__init__.py | 2 + lib/iris/_concatenate.py | 3 +- lib/iris/_deprecation.py | 10 +- lib/iris/analysis/_regrid.py | 3 +- lib/iris/analysis/calculus.py | 6 +- lib/iris/analysis/cartography.py | 23 +- lib/iris/analysis/geometry.py | 8 +- lib/iris/analysis/maths.py | 3 +- lib/iris/aux_factory.py | 68 ++++-- lib/iris/config.py | 12 +- lib/iris/coord_systems.py | 7 +- lib/iris/coords.py | 18 +- lib/iris/cube.py | 8 +- lib/iris/exceptions.py | 209 ++++++++++++++++++ lib/iris/experimental/regrid.py | 3 +- lib/iris/experimental/ugrid/cf.py | 27 ++- lib/iris/experimental/ugrid/load.py | 31 ++- lib/iris/fileformats/_ff.py | 35 ++- .../fileformats/_nc_load_rules/actions.py | 29 ++- .../fileformats/_nc_load_rules/helpers.py | 130 +++++++++-- lib/iris/fileformats/cf.py | 50 ++++- lib/iris/fileformats/name_loaders.py | 10 +- lib/iris/fileformats/netcdf/loader.py | 22 +- lib/iris/fileformats/netcdf/saver.py | 41 +++- lib/iris/fileformats/nimrod_load_rules.py | 26 ++- lib/iris/fileformats/pp.py | 47 +++- lib/iris/fileformats/pp_save_rules.py | 3 +- lib/iris/fileformats/rules.py | 10 +- lib/iris/iterate.py | 5 +- lib/iris/pandas.py | 5 +- lib/iris/plot.py | 6 +- lib/iris/tests/graphics/idiff.py | 3 +- .../experimental/test_ugrid_load.py | 9 +- .../integration/netcdf/test_delayed_save.py | 8 +- .../tests/integration/netcdf/test_general.py | 6 +- .../netcdf/test_self_referencing.py | 9 +- lib/iris/tests/integration/test_pp.py | 6 +- lib/iris/tests/test_coding_standards.py | 61 +++++ lib/iris/tests/test_concatenate.py | 13 +- lib/iris/tests/test_coordsystem.py | 3 +- lib/iris/tests/test_hybrid.py | 9 +- lib/iris/tests/test_iterate.py | 5 +- lib/iris/tests/test_netcdf.py | 5 +- .../unit/analysis/cartography/test_project.py | 4 +- .../geometry/test_geometry_area_weights.py | 5 +- lib/iris/tests/unit/coords/test_Coord.py | 14 +- lib/iris/tests/unit/cube/test_Cube.py | 12 +- ...test_CFUGridAuxiliaryCoordinateVariable.py | 14 +- .../cf/test_CFUGridConnectivityVariable.py | 14 +- .../ugrid/cf/test_CFUGridMeshVariable.py | 14 +- .../tests/unit/fileformats/ff/test_FF2PP.py | 4 +- .../unit/fileformats/ff/test_FFHeader.py | 5 +- .../name_loaders/test__build_cell_methods.py | 5 +- .../nc_load_rules/actions/__init__.py | 3 +- .../helpers/test_parse_cell_methods.py | 5 +- .../netcdf/loader/test__load_aux_factory.py | 4 +- .../fileformats/netcdf/saver/test_Saver.py | 7 +- .../saver/test_Saver__lazy_stream_data.py | 3 +- .../netcdf/saver/test__fillvalue_report.py | 8 +- .../nimrod_load_rules/test_vertical_coord.py | 2 +- .../tests/unit/fileformats/pp/test_PPField.py | 7 +- 62 files changed, 930 insertions(+), 205 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index a9b470296f..4c732c43df 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -30,7 +30,9 @@ This document explains the changes made to Iris for this release ✨ Features =========== -#. N/A +#. `@trexfeathers`_ and `@HGWright`_ (reviewer) sub-categorised all Iris' + :class:`UserWarning`\s for richer filtering. The full index of + sub-categories can be seen here: :mod:`iris.exceptions` . (:pull:`5498`) 🐛 Bugs Fixed @@ -38,7 +40,7 @@ This document explains the changes made to Iris for this release #. `@scottrobinson02`_ fixed the output units when dividing a coordinate by a cube. (:issue:`5305`, :pull:`5331`) - + #. `@ESadek-MO`_ has updated :mod:`iris.tests.graphics.idiff` to stop duplicated file names preventing acceptance. (:issue:`5098`, :pull:`5482`) @@ -87,7 +89,7 @@ This document explains the changes made to Iris for this release #. `@trexfeathers`_ replaced all uses of the ``logging.WARNING`` level, in favour of using Python warnings, following team agreement. (:pull:`5488`) - + #. `@trexfeathers`_ adapted benchmarking to work with ASV ``>=v0.6`` by no longer using the ``--strict`` argument. (:pull:`5496`) diff --git a/lib/iris/__init__.py b/lib/iris/__init__.py index 0e6670533f..2a3bd8a753 100644 --- a/lib/iris/__init__.py +++ b/lib/iris/__init__.py @@ -175,6 +175,8 @@ def __init__(self, datum_support=False, pandas_ndim=False): # self.__dict__['example_future_flag'] = example_future_flag self.__dict__["datum_support"] = datum_support self.__dict__["pandas_ndim"] = pandas_ndim + # TODO: next major release: set IrisDeprecation to subclass + # DeprecationWarning instead of UserWarning. def __repr__(self): # msg = ('Future(example_future_flag={})') diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index c6d58b1622..837afd73f3 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -16,6 +16,7 @@ import iris.coords import iris.cube +import iris.exceptions from iris.util import array_equal, guess_coord_axis # @@ -998,7 +999,7 @@ def register( raise iris.exceptions.ConcatenateError([msg]) elif not match: msg = f"Found cubes with overlap on concatenate axis {candidate_axis}, skipping concatenation for these cubes" - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisUserWarning) # Check for compatible AuxCoords. if match: diff --git a/lib/iris/_deprecation.py b/lib/iris/_deprecation.py index 73fcedcd82..8ad762a558 100644 --- a/lib/iris/_deprecation.py +++ b/lib/iris/_deprecation.py @@ -12,7 +12,13 @@ class IrisDeprecation(UserWarning): - """An Iris deprecation warning.""" + """ + An Iris deprecation warning. + + Note this subclasses UserWarning for backwards compatibility with Iris' + original deprection warnings. Should subclass DeprecationWarning at the + next major release. + """ pass @@ -44,7 +50,7 @@ def warn_deprecated(msg, stacklevel=2): >>> """ - warnings.warn(msg, IrisDeprecation, stacklevel=stacklevel) + warnings.warn(msg, category=IrisDeprecation, stacklevel=stacklevel) # A Mixin for a wrapper class that copies the docstring of the wrapped class diff --git a/lib/iris/analysis/_regrid.py b/lib/iris/analysis/_regrid.py index 4592a0ede7..65679cd968 100644 --- a/lib/iris/analysis/_regrid.py +++ b/lib/iris/analysis/_regrid.py @@ -20,6 +20,7 @@ snapshot_grid, ) from iris.analysis._scipy_interpolate import _RegularGridInterpolator +from iris.exceptions import IrisImpossibleUpdateWarning from iris.util import _meshgrid, guess_coord_axis @@ -1136,6 +1137,6 @@ def regrid_reference_surface( "Cannot update aux_factory {!r} because of dropped" " coordinates.".format(factory.name()) ) - warnings.warn(msg) + warnings.warn(msg, category=IrisImpossibleUpdateWarning) return result diff --git a/lib/iris/analysis/calculus.py b/lib/iris/analysis/calculus.py index 75b7d86406..44b1adc580 100644 --- a/lib/iris/analysis/calculus.py +++ b/lib/iris/analysis/calculus.py @@ -24,6 +24,7 @@ import iris.analysis.maths import iris.coord_systems import iris.coords +from iris.exceptions import IrisUserWarning from iris.util import delta __all__ = ["cube_delta", "curl", "differentiate"] @@ -85,7 +86,10 @@ def _construct_midpoint_coord(coord, circular=None): "Construction coordinate midpoints for the '{}' coordinate, " "though it has the attribute 'circular'={}." ) - warnings.warn(msg.format(circular, coord.circular, coord.name())) + warnings.warn( + msg.format(circular, coord.circular, coord.name()), + category=IrisUserWarning, + ) if coord.ndim != 1: raise iris.exceptions.CoordinateMultiDimError(coord) diff --git a/lib/iris/analysis/cartography.py b/lib/iris/analysis/cartography.py index 0d17f0b38a..0fae5bc499 100644 --- a/lib/iris/analysis/cartography.py +++ b/lib/iris/analysis/cartography.py @@ -401,16 +401,25 @@ def area_weights(cube, normalize=False): cs = cube.coord_system("CoordSystem") if isinstance(cs, iris.coord_systems.GeogCS): if cs.inverse_flattening != 0.0: - warnings.warn("Assuming spherical earth from ellipsoid.") + warnings.warn( + "Assuming spherical earth from ellipsoid.", + category=iris.exceptions.IrisDefaultingWarning, + ) radius_of_earth = cs.semi_major_axis elif isinstance(cs, iris.coord_systems.RotatedGeogCS) and ( cs.ellipsoid is not None ): if cs.ellipsoid.inverse_flattening != 0.0: - warnings.warn("Assuming spherical earth from ellipsoid.") + warnings.warn( + "Assuming spherical earth from ellipsoid.", + category=iris.exceptions.IrisDefaultingWarning, + ) radius_of_earth = cs.ellipsoid.semi_major_axis else: - warnings.warn("Using DEFAULT_SPHERICAL_EARTH_RADIUS.") + warnings.warn( + "Using DEFAULT_SPHERICAL_EARTH_RADIUS.", + category=iris.exceptions.IrisDefaultingWarning, + ) radius_of_earth = DEFAULT_SPHERICAL_EARTH_RADIUS # Get the lon and lat coords and axes @@ -551,7 +560,7 @@ def cosine_latitude_weights(cube): warnings.warn( "Out of range latitude values will be " "clipped to the valid range.", - UserWarning, + category=iris.exceptions.IrisDefaultingWarning, ) points = lat.points l_weights = np.cos(points).clip(0.0, 1.0) @@ -665,7 +674,8 @@ def project(cube, target_proj, nx=None, ny=None): # Assume WGS84 latlon if unspecified warnings.warn( "Coordinate system of latitude and longitude " - "coordinates is not specified. Assuming WGS84 Geodetic." + "coordinates is not specified. Assuming WGS84 Geodetic.", + category=iris.exceptions.IrisDefaultingWarning, ) orig_cs = iris.coord_systems.GeogCS( semi_major_axis=6378137.0, inverse_flattening=298.257223563 @@ -857,7 +867,8 @@ def project(cube, target_proj, nx=None, ny=None): lat_coord.name(), lon_coord.name(), [coord.name() for coord in discarded_coords], - ) + ), + category=iris.exceptions.IrisIgnoringWarning, ) # TODO handle derived coords/aux_factories diff --git a/lib/iris/analysis/geometry.py b/lib/iris/analysis/geometry.py index b246b518d4..9898f4e974 100644 --- a/lib/iris/analysis/geometry.py +++ b/lib/iris/analysis/geometry.py @@ -74,7 +74,7 @@ def _extract_relevant_cube_slice(cube, geometry): except ValueError: warnings.warn( "The geometry exceeds the cube's x dimension at the " "lower end.", - UserWarning, + category=iris.exceptions.IrisGeometryExceedWarning, ) x_min_ix = 0 if x_ascending else x_coord.points.size - 1 @@ -84,7 +84,7 @@ def _extract_relevant_cube_slice(cube, geometry): except ValueError: warnings.warn( "The geometry exceeds the cube's x dimension at the " "upper end.", - UserWarning, + category=iris.exceptions.IrisGeometryExceedWarning, ) x_max_ix = x_coord.points.size - 1 if x_ascending else 0 @@ -94,7 +94,7 @@ def _extract_relevant_cube_slice(cube, geometry): except ValueError: warnings.warn( "The geometry exceeds the cube's y dimension at the " "lower end.", - UserWarning, + category=iris.exceptions.IrisGeometryExceedWarning, ) y_min_ix = 0 if y_ascending else y_coord.points.size - 1 @@ -104,7 +104,7 @@ def _extract_relevant_cube_slice(cube, geometry): except ValueError: warnings.warn( "The geometry exceeds the cube's y dimension at the " "upper end.", - UserWarning, + category=iris.exceptions.IrisGeometryExceedWarning, ) y_max_ix = y_coord.points.size - 1 if y_ascending else 0 diff --git a/lib/iris/analysis/maths.py b/lib/iris/analysis/maths.py index b77c6cd80f..5e180c6ee2 100644 --- a/lib/iris/analysis/maths.py +++ b/lib/iris/analysis/maths.py @@ -988,7 +988,8 @@ def _broadcast_cube_coord_data(cube, other, operation_name, dim=None): if other.has_bounds(): warnings.warn( "Using {!r} with a bounded coordinate is not well " - "defined; ignoring bounds.".format(operation_name) + "defined; ignoring bounds.".format(operation_name), + category=iris.exceptions.IrisIgnoringBoundsWarning, ) points = other.points diff --git a/lib/iris/aux_factory.py b/lib/iris/aux_factory.py index f49de62b3f..323c89e3fb 100644 --- a/lib/iris/aux_factory.py +++ b/lib/iris/aux_factory.py @@ -21,6 +21,7 @@ metadata_manager_factory, ) import iris.coords +from iris.exceptions import IrisIgnoringBoundsWarning class AuxCoordFactory(CFVariableMixin, metaclass=ABCMeta): @@ -441,7 +442,9 @@ def _check_dependencies(pressure_at_top, sigma, surface_air_pressure): f"Coordinate '{coord.name()}' has bounds. These will " "be disregarded" ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Check units if sigma.units.is_unknown(): @@ -522,7 +525,8 @@ def make_coord(self, coord_dims_func): if pressure_at_top.shape[-1:] not in [(), (1,)]: warnings.warn( "Pressure at top coordinate has bounds. These are being " - "disregarded" + "disregarded", + category=IrisIgnoringBoundsWarning, ) pressure_at_top_pts = nd_points_by_key["pressure_at_top"] bds_shape = list(pressure_at_top_pts.shape) + [1] @@ -530,7 +534,8 @@ def make_coord(self, coord_dims_func): if surface_air_pressure.shape[-1:] not in [(), (1,)]: warnings.warn( "Surface pressure coordinate has bounds. These are being " - "disregarded" + "disregarded", + category=IrisIgnoringBoundsWarning, ) surface_air_pressure_pts = nd_points_by_key[ "surface_air_pressure" @@ -595,7 +600,9 @@ def __init__(self, delta=None, sigma=None, orography=None): "Orography coordinate {!r} has bounds." " These will be disregarded.".format(orography.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) self.delta = delta self.sigma = sigma @@ -684,7 +691,7 @@ def make_coord(self, coord_dims_func): warnings.warn( "Orography coordinate has bounds. " "These are being disregarded.", - UserWarning, + category=IrisIgnoringBoundsWarning, stacklevel=2, ) orography_pts = nd_points_by_key["orography"] @@ -739,7 +746,9 @@ def update(self, old_coord, new_coord=None): "Orography coordinate {!r} has bounds." " These will be disregarded.".format(new_coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) self.orography = new_coord @@ -806,7 +815,9 @@ def _check_dependencies(delta, sigma, surface_air_pressure): "Surface pressure coordinate {!r} has bounds. These will" " be disregarded.".format(surface_air_pressure.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Check units. if sigma is not None and sigma.units.is_unknown(): @@ -898,7 +909,8 @@ def make_coord(self, coord_dims_func): if surface_air_pressure.shape[-1:] not in [(), (1,)]: warnings.warn( "Surface pressure coordinate has bounds. " - "These are being disregarded." + "These are being disregarded.", + category=IrisIgnoringBoundsWarning, ) surface_air_pressure_pts = nd_points_by_key[ "surface_air_pressure" @@ -1012,7 +1024,9 @@ def _check_dependencies(sigma, eta, depth, depth_c, nsigma, zlev): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(term, coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) for coord, term in ((depth_c, "depth_c"), (nsigma, "nsigma")): if coord is not None and coord.shape != (1,): @@ -1187,7 +1201,9 @@ def make_coord(self, coord_dims_func): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(key, name) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Swap bounds with points. bds_shape = list(nd_points_by_key[key].shape) + [1] bounds = nd_points_by_key[key].reshape(bds_shape) @@ -1268,7 +1284,9 @@ def _check_dependencies(sigma, eta, depth): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(term, coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Check units. if sigma is not None and sigma.units.is_unknown(): @@ -1349,7 +1367,9 @@ def make_coord(self, coord_dims_func): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(key, name) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Swap bounds with points. bds_shape = list(nd_points_by_key[key].shape) + [1] bounds = nd_points_by_key[key].reshape(bds_shape) @@ -1444,7 +1464,9 @@ def _check_dependencies(s, c, eta, depth, depth_c): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(term, coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) if depth_c is not None and depth_c.shape != (1,): msg = ( @@ -1543,7 +1565,9 @@ def make_coord(self, coord_dims_func): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(key, name) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Swap bounds with points. bds_shape = list(nd_points_by_key[key].shape) + [1] bounds = nd_points_by_key[key].reshape(bds_shape) @@ -1637,7 +1661,9 @@ def _check_dependencies(s, eta, depth, a, b, depth_c): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(term, coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) coords = ((a, "a"), (b, "b"), (depth_c, "depth_c")) for coord, term in coords: @@ -1740,7 +1766,9 @@ def make_coord(self, coord_dims_func): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(key, name) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Swap bounds with points. bds_shape = list(nd_points_by_key[key].shape) + [1] bounds = nd_points_by_key[key].reshape(bds_shape) @@ -1839,7 +1867,9 @@ def _check_dependencies(s, c, eta, depth, depth_c): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(term, coord.name()) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) if depth_c is not None and depth_c.shape != (1,): msg = ( @@ -1938,7 +1968,9 @@ def make_coord(self, coord_dims_func): "The {} coordinate {!r} has bounds. " "These are being disregarded.".format(key, name) ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=IrisIgnoringBoundsWarning, stacklevel=2 + ) # Swap bounds with points. bds_shape = list(nd_points_by_key[key].shape) + [1] bounds = nd_points_by_key[key].reshape(bds_shape) diff --git a/lib/iris/config.py b/lib/iris/config.py index 79d141e53f..03d3d363a6 100644 --- a/lib/iris/config.py +++ b/lib/iris/config.py @@ -36,6 +36,8 @@ import os.path import warnings +import iris.exceptions + def get_logger( name, datefmt=None, fmt=None, level=None, propagate=None, handler=True @@ -145,7 +147,10 @@ def get_dir_option(section, option, default=None): "Ignoring config item {!r}:{!r} (section:option) as {!r}" " is not a valid directory path." ) - warnings.warn(msg.format(section, option, c_path)) + warnings.warn( + msg.format(section, option, c_path), + category=iris.exceptions.IrisIgnoringWarning, + ) return path @@ -251,7 +256,10 @@ def __setattr__(self, name, value): "Attempting to set invalid value {!r} for " "attribute {!r}. Defaulting to {!r}." ) - warnings.warn(wmsg.format(value, name, good_value)) + warnings.warn( + wmsg.format(value, name, good_value), + category=iris.exceptions.IrisDefaultingWarning, + ) value = good_value self.__dict__[name] = value diff --git a/lib/iris/coord_systems.py b/lib/iris/coord_systems.py index edf0c1871b..e2003d1286 100644 --- a/lib/iris/coord_systems.py +++ b/lib/iris/coord_systems.py @@ -15,6 +15,8 @@ import cartopy.crs as ccrs import numpy as np +import iris.exceptions + def _arg_default(value, default, cast_as=float): """Apply a default value and type for an optional kwarg.""" @@ -449,7 +451,7 @@ def inverse_flattening(self, value): "the GeogCS object. To change other properties set them explicitly" " or create a new GeogCS instance." ) - warnings.warn(wmsg, UserWarning) + warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) value = float(value) self._inverse_flattening = value @@ -818,7 +820,8 @@ def as_cartopy_crs(self): warnings.warn( "Discarding false_easting and false_northing that are " - "not used by Cartopy." + "not used by Cartopy.", + category=iris.exceptions.IrisDefaultingWarning, ) return ccrs.Orthographic( diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 1a6e8d4e6a..3ff9bc8e5e 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -2057,7 +2057,8 @@ def contiguous_bounds(self): if self.ndim == 1: warnings.warn( "Coordinate {!r} is not bounded, guessing " - "contiguous bounds.".format(self.name()) + "contiguous bounds.".format(self.name()), + category=iris.exceptions.IrisGuessBoundsWarning, ) bounds = self._guess_bounds() elif self.ndim == 2: @@ -2224,7 +2225,10 @@ def serialize(x): "Collapsing a multi-dimensional coordinate. " "Metadata may not be fully descriptive for {!r}." ) - warnings.warn(msg.format(self.name())) + warnings.warn( + msg.format(self.name()), + category=iris.exceptions.IrisVagueMetadataWarning, + ) else: try: self._sanity_check_bounds() @@ -2234,7 +2238,10 @@ def serialize(x): "Metadata may not be fully descriptive for {!r}. " "Ignoring bounds." ) - warnings.warn(msg.format(str(exc), self.name())) + warnings.warn( + msg.format(str(exc), self.name()), + category=iris.exceptions.IrisVagueMetadataWarning, + ) self.bounds = None else: if not self.is_contiguous(): @@ -2242,7 +2249,10 @@ def serialize(x): "Collapsing a non-contiguous coordinate. " "Metadata may not be fully descriptive for {!r}." ) - warnings.warn(msg.format(self.name())) + warnings.warn( + msg.format(self.name()), + category=iris.exceptions.IrisVagueMetadataWarning, + ) if self.has_bounds(): item = self.core_bounds() diff --git a/lib/iris/cube.py b/lib/iris/cube.py index aec80dce47..60fdbc9c94 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -3857,7 +3857,10 @@ def collapsed(self, coords, aggregator, **kwargs): ] if lat_match: for coord in lat_match: - warnings.warn(msg.format(coord.name())) + warnings.warn( + msg.format(coord.name()), + category=iris.exceptions.IrisUserWarning, + ) # Determine the dimensions we need to collapse (and those we don't) if aggregator.cell_method == "peak": @@ -4444,7 +4447,8 @@ def rolling_window(self, coord, aggregator, window, **kwargs): if coord_.has_bounds(): warnings.warn( "The bounds of coordinate %r were ignored in " - "the rolling window operation." % coord_.name() + "the rolling window operation." % coord_.name(), + category=iris.exceptions.IrisIgnoringBoundsWarning, ) if coord_.ndim != 1: diff --git a/lib/iris/exceptions.py b/lib/iris/exceptions.py index 5d3da3349e..919917a01d 100644 --- a/lib/iris/exceptions.py +++ b/lib/iris/exceptions.py @@ -180,3 +180,212 @@ class CannotAddError(ValueError): """Raised when an object (e.g. coord) cannot be added to a :class:`~iris.cube.Cube`.""" pass + + +############################################################################### +# WARNINGS +# Please namespace all warning objects (i.e. prefix with Iris...). + + +class IrisUserWarning(UserWarning): + """ + Base class for :class:`UserWarning`\\ s generated by Iris. + """ + + pass + + +class IrisLoadWarning(IrisUserWarning): + """Any warning relating to loading.""" + + pass + + +class IrisSaveWarning(IrisUserWarning): + """Any warning relating to saving.""" + + pass + + +class IrisCfWarning(IrisUserWarning): + """Any warning relating to :term:`CF Conventions` .""" + + pass + + +class IrisIgnoringWarning(IrisUserWarning): + """ + Any warning that involves an Iris operation not using some information. + + E.g. :class:`~iris.aux_factory.AuxCoordFactory` generation disregarding + bounds. + """ + + pass + + +class IrisDefaultingWarning(IrisUserWarning): + """ + Any warning that involves Iris changing invalid/missing information. + + E.g. creating a :class:`~iris.coords.AuxCoord` from an invalid + :class:`~iris.coords.DimCoord` definition. + """ + + pass + + +class IrisVagueMetadataWarning(IrisUserWarning): + """Warnings where object metadata may not be fully descriptive.""" + + pass + + +class IrisUnsupportedPlottingWarning(IrisUserWarning): + """Warnings where support for a plotting module/function is not guaranteed.""" + + pass + + +class IrisImpossibleUpdateWarning(IrisUserWarning): + """ + Warnings where it is not possible to update an object. + + Mainly generated during regridding where the necessary information for + updating an :class:`~iris.aux_factory.AuxCoordFactory` is no longer + present. + """ + + pass + + +class IrisGeometryExceedWarning(IrisUserWarning): + """:mod:`iris.analysis.geometry` warnings about geometry exceeding dimensions.""" + + pass + + +class IrisMaskValueMatchWarning(IrisUserWarning): + """Warnings where the value representing masked data is actually present in data.""" + + pass + + +######## + + +class IrisCfLoadWarning(IrisCfWarning, IrisLoadWarning): + """Any warning relating to both loading and :term:`CF Conventions` .""" + + pass + + +class IrisCfSaveWarning(IrisCfWarning, IrisSaveWarning): + """Any warning relating to both saving and :term:`CF Conventions` .""" + + pass + + +class IrisCfInvalidCoordParamWarning(IrisCfLoadWarning): + """ + Warnings where incorrect information for CF coord construction is in a file. + """ + + pass + + +class IrisCfMissingVarWarning(IrisCfLoadWarning): + """ + Warnings where a CF variable references another variable that is not in the file. + """ + + pass + + +class IrisCfLabelVarWarning(IrisCfLoadWarning, IrisIgnoringWarning): + """ + Warnings where a CF string/label variable is being used inappropriately. + """ + + pass + + +class IrisCfNonSpanningVarWarning(IrisCfLoadWarning, IrisIgnoringWarning): + """ + Warnings where a CF variable is ignored because it does not span the required dimension. + """ + + pass + + +######## + + +class IrisIgnoringBoundsWarning(IrisIgnoringWarning): + """ + Warnings where bounds information has not been used by an Iris operation. + """ + + pass + + +class IrisCannotAddWarning(IrisIgnoringWarning): + """ + Warnings where a member object cannot be added to a :class:`~iris.cube.Cube` . + """ + + pass + + +class IrisGuessBoundsWarning(IrisDefaultingWarning): + """ + Warnings where Iris has filled absent bounds information with a best estimate. + """ + + pass + + +class IrisPpClimModifiedWarning(IrisSaveWarning, IrisDefaultingWarning): + """ + Warnings where a climatology has been modified while saving :term:`Post Processing (PP) Format` . + """ + + pass + + +class IrisFactoryCoordNotFoundWarning(IrisLoadWarning): + """ + Warnings where a referenced factory coord can not be found when loading a variable in :term:`NetCDF Format`. + """ + + pass + + +class IrisNimrodTranslationWarning(IrisLoadWarning): + """ + For unsupported vertical coord types in :mod:`iris.file_formats.nimrod_load_rules`. + + (Pre-dates the full categorisation of Iris UserWarnings). + """ + + pass + + +class IrisUnknownCellMethodWarning(IrisCfLoadWarning): + """ + If a loaded :class:`~iris.coords.CellMethod` is not one the method names known to Iris. + + (Pre-dates the full categorisation of Iris UserWarnings). + """ + + pass + + +class IrisSaverFillValueWarning(IrisMaskValueMatchWarning, IrisSaveWarning): + """ + For fill value complications during Iris file saving :term:`NetCDF Format`. + + (Pre-dates the full categorisation of Iris UserWarnings). + """ + + pass diff --git a/lib/iris/experimental/regrid.py b/lib/iris/experimental/regrid.py index 76c6002d2b..d5fa7c6f72 100644 --- a/lib/iris/experimental/regrid.py +++ b/lib/iris/experimental/regrid.py @@ -43,6 +43,7 @@ import iris.analysis.cartography import iris.coord_systems import iris.cube +from iris.exceptions import IrisImpossibleUpdateWarning from iris.util import _meshgrid wmsg = ( @@ -538,7 +539,7 @@ def regrid_reference_surface( "Cannot update aux_factory {!r} because of dropped" " coordinates.".format(factory.name()) ) - warnings.warn(msg) + warnings.warn(msg, category=IrisImpossibleUpdateWarning) return result def __call__(self, src_cube): diff --git a/lib/iris/experimental/ugrid/cf.py b/lib/iris/experimental/ugrid/cf.py index 86b76c7a75..42c1cfd0a3 100644 --- a/lib/iris/experimental/ugrid/cf.py +++ b/lib/iris/experimental/ugrid/cf.py @@ -12,6 +12,7 @@ """ import warnings +from ...exceptions import IrisCfLabelVarWarning, IrisCfMissingVarWarning from ...fileformats import cf from .mesh import Connectivity @@ -65,7 +66,9 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"{nc_var_name}" ) if warn: - warnings.warn(message) + warnings.warn( + message, category=IrisCfMissingVarWarning + ) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -80,7 +83,9 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"CF-netCDF label variable." ) if warn: - warnings.warn(message) + warnings.warn( + message, category=IrisCfLabelVarWarning + ) return result @@ -136,7 +141,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"variable {nc_var_name}" ) if warn: - warnings.warn(message) + warnings.warn( + message, + category=IrisCfMissingVarWarning, + ) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -154,7 +162,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"CF-netCDF label variable." ) if warn: - warnings.warn(message) + warnings.warn( + message, + category=IrisCfLabelVarWarning, + ) return result @@ -211,7 +222,9 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"referenced by netCDF variable {nc_var_name}" ) if warn: - warnings.warn(message) + warnings.warn( + message, category=IrisCfMissingVarWarning + ) else: # Restrict to non-string type i.e. not a # CFLabelVariable. @@ -226,7 +239,9 @@ def identify(cls, variables, ignore=None, target=None, warn=True): f"variable." ) if warn: - warnings.warn(message) + warnings.warn( + message, category=IrisCfLabelVarWarning + ) return result diff --git a/lib/iris/experimental/ugrid/load.py b/lib/iris/experimental/ugrid/load.py index d2670ac690..67d1491930 100644 --- a/lib/iris/experimental/ugrid/load.py +++ b/lib/iris/experimental/ugrid/load.py @@ -19,6 +19,11 @@ from ...config import get_logger from ...coords import AuxCoord +from ...exceptions import ( + IrisCfWarning, + IrisDefaultingWarning, + IrisIgnoringWarning, +) from ...fileformats._nc_load_rules.helpers import get_attr_units, get_names from ...fileformats.netcdf import loader as nc_loader from ...io import decode_uri, expand_filespecs @@ -35,6 +40,20 @@ logger = get_logger(__name__, propagate=True, handler=False) +class _WarnComboCfDefaulting(IrisCfWarning, IrisDefaultingWarning): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboCfDefaultingIgnoring( + _WarnComboCfDefaulting, IrisIgnoringWarning +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + class ParseUGridOnLoad(threading.local): def __init__(self): """ @@ -351,7 +370,10 @@ def _build_mesh(cf, mesh_var, file_path): ) if cf_role_message: cf_role_message += " Correcting to 'mesh_topology'." - warnings.warn(cf_role_message) + warnings.warn( + cf_role_message, + category=_WarnComboCfDefaulting, + ) if hasattr(mesh_var, "volume_node_connectivity"): topology_dimension = 3 @@ -369,7 +391,7 @@ def _build_mesh(cf, mesh_var, file_path): f" : *Assuming* topology_dimension={topology_dimension}" ", consistent with the attached connectivities." ) - warnings.warn(msg) + warnings.warn(msg, category=_WarnComboCfDefaulting) else: quoted_topology_dimension = mesh_var.topology_dimension if quoted_topology_dimension != topology_dimension: @@ -381,7 +403,10 @@ def _build_mesh(cf, mesh_var, file_path): f"{quoted_topology_dimension}" " -- ignoring this as it is inconsistent." ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboCfDefaultingIgnoring, + ) node_dimension = None edge_dimension = getattr(mesh_var, "edge_dimension", None) diff --git a/lib/iris/fileformats/_ff.py b/lib/iris/fileformats/_ff.py index 2545bc39ae..5121b47976 100644 --- a/lib/iris/fileformats/_ff.py +++ b/lib/iris/fileformats/_ff.py @@ -13,7 +13,11 @@ import numpy as np -from iris.exceptions import NotYetImplementedError +from iris.exceptions import ( + IrisDefaultingWarning, + IrisLoadWarning, + NotYetImplementedError, +) from iris.fileformats._ff_cross_references import STASH_TRANS from . import pp @@ -118,6 +122,12 @@ REAL_POLE_LON = 5 +class _WarnComboLoadingDefaulting(IrisDefaultingWarning, IrisLoadWarning): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + class Grid: """ An abstract class representing the default/file-level grid @@ -431,7 +441,8 @@ def grid(self): grid_class = NewDynamics warnings.warn( "Staggered grid type: {} not currently interpreted, assuming " - "standard C-grid".format(self.grid_staggering) + "standard C-grid".format(self.grid_staggering), + category=_WarnComboLoadingDefaulting, ) grid = grid_class( self.column_dependent_constants, @@ -554,7 +565,7 @@ def range_order(range1, range2, resolution): "may be incorrect, not having taken into account the " "boundary size." ) - warnings.warn(msg) + warnings.warn(msg, category=IrisLoadWarning) else: range2 = field_dim[0] - res_low range1 = field_dim[0] - halo_dim * res_low @@ -628,7 +639,8 @@ def _adjust_field_for_lbc(self, field): "The LBC has a bdy less than 0. No " "case has previously been seen of " "this, and the decompression may be " - "erroneous." + "erroneous.", + category=IrisLoadWarning, ) field.bzx -= field.bdx * boundary_packing.x_halo field.bzy -= field.bdy * boundary_packing.y_halo @@ -741,7 +753,8 @@ def _extract_field(self): "which has not been explicitly " "handled by the fieldsfile loader." " Assuming the data is on a P grid" - ".".format(stash, subgrid) + ".".format(stash, subgrid), + category=_WarnComboLoadingDefaulting, ) field.x, field.y = grid.vectors(subgrid) @@ -757,14 +770,18 @@ def _extract_field(self): "STASH to grid type mapping. Picking the P " "position as the cell type".format(stash) ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboLoadingDefaulting, + ) field.bzx, field.bdx = grid.regular_x(subgrid) field.bzy, field.bdy = grid.regular_y(subgrid) field.bplat = grid.pole_lat field.bplon = grid.pole_lon elif no_x or no_y: warnings.warn( - "Partially missing X or Y coordinate values." + "Partially missing X or Y coordinate values.", + category=IrisLoadWarning, ) # Check for LBC fields. @@ -810,7 +827,9 @@ def _extract_field(self): "Input field skipped as PPField creation failed :" " error = {!r}" ) - warnings.warn(msg.format(str(valerr))) + warnings.warn( + msg.format(str(valerr)), category=IrisLoadWarning + ) def __iter__(self): return pp._interpret_fields(self._extract_field()) diff --git a/lib/iris/fileformats/_nc_load_rules/actions.py b/lib/iris/fileformats/_nc_load_rules/actions.py index 09237d3f11..be84b65132 100644 --- a/lib/iris/fileformats/_nc_load_rules/actions.py +++ b/lib/iris/fileformats/_nc_load_rules/actions.py @@ -44,6 +44,7 @@ import warnings from iris.config import get_logger +import iris.exceptions import iris.fileformats.cf import iris.fileformats.pp as pp @@ -53,6 +54,24 @@ logger = get_logger(__name__, fmt="[%(funcName)s]") +class _WarnComboCfLoadIgnoring( + iris.exceptions.IrisCfLoadWarning, + iris.exceptions.IrisIgnoringWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboLoadIgnoring( + iris.exceptions.IrisLoadWarning, + iris.exceptions.IrisIgnoringWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + def _default_rulenamesfunc(func_name): # A simple default function to deduce the rules-name from an action-name. funcname_prefix = "action_" @@ -471,7 +490,10 @@ def action_formula_type(engine, formula_root_fact): succeed = False rule_name += f"(FAILED - unrecognised formula type = {formula_type!r})" msg = f"Ignored formula of unrecognised type: {formula_type!r}." - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboCfLoadIgnoring, + ) if succeed: # Check we don't already have one. existing_type = engine.requires.get("formula_type") @@ -486,7 +508,10 @@ def action_formula_type(engine, formula_root_fact): f"Formula of type ={formula_type!r} " f"overrides another of type ={existing_type!r}.)" ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboLoadIgnoring, + ) rule_name += f"_{formula_type}" # Set 'requires' info for iris.fileformats.netcdf._load_aux_factory. engine.requires["formula_type"] = formula_type diff --git a/lib/iris/fileformats/_nc_load_rules/helpers.py b/lib/iris/fileformats/_nc_load_rules/helpers.py index bbf9c660c5..19a9cd18ca 100644 --- a/lib/iris/fileformats/_nc_load_rules/helpers.py +++ b/lib/iris/fileformats/_nc_load_rules/helpers.py @@ -219,6 +219,42 @@ ] +class _WarnComboIgnoringLoad( + iris.exceptions.IrisIgnoringWarning, + iris.exceptions.IrisLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboDefaultingLoad( + iris.exceptions.IrisDefaultingWarning, + iris.exceptions.IrisLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboDefaultingCfLoad( + iris.exceptions.IrisCfLoadWarning, + iris.exceptions.IrisDefaultingWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboIgnoringCfLoad( + iris.exceptions.IrisIgnoringWarning, + iris.exceptions.IrisCfLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + def _split_cell_methods(nc_cell_methods: str) -> List[re.Match]: """ Split a CF cell_methods attribute string into a list of zero or more cell @@ -256,7 +292,11 @@ def _split_cell_methods(nc_cell_methods: str) -> List[re.Match]: "Cell methods may be incorrectly parsed due to mismatched " "brackets" ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, + category=iris.exceptions.IrisCfLoadWarning, + stacklevel=2, + ) if bracket_depth > 0 and ind in name_start_inds: name_start_inds.remove(ind) @@ -275,14 +315,21 @@ def _split_cell_methods(nc_cell_methods: str) -> List[re.Match]: msg = ( f"Failed to fully parse cell method string: {nc_cell_methods}" ) - warnings.warn(msg, UserWarning, stacklevel=2) + warnings.warn( + msg, category=iris.exceptions.IrisCfLoadWarning, stacklevel=2 + ) continue nc_cell_methods_matches.append(nc_cell_method_match) return nc_cell_methods_matches -class UnknownCellMethodWarning(Warning): +class UnknownCellMethodWarning(iris.exceptions.IrisUnknownCellMethodWarning): + """ + Backwards compatible form of :class:`iris.exceptions.IrisUnknownCellMethodWarning`. + """ + + # TODO: remove at the next major release. pass @@ -320,7 +367,7 @@ def parse_cell_methods(nc_cell_methods): msg = "NetCDF variable contains unknown cell method {!r}" warnings.warn( msg.format("{}".format(method_words[0])), - UnknownCellMethodWarning, + category=UnknownCellMethodWarning, ) d[_CM_METHOD] = method name = d[_CM_NAME] @@ -389,7 +436,6 @@ def parse_cell_methods(nc_cell_methods): ################################################################################ def build_cube_metadata(engine): """Add the standard meta data to the cube.""" - cf_var = engine.cf_var cube = engine.cube @@ -436,7 +482,10 @@ def build_cube_metadata(engine): cube.attributes[str(attr_name)] = attr_value except ValueError as e: msg = "Skipping global attribute {!r}: {}" - warnings.warn(msg.format(attr_name, str(e))) + warnings.warn( + msg.format(attr_name, str(e)), + category=_WarnComboIgnoringLoad, + ) ################################################################################ @@ -479,7 +528,7 @@ def _get_ellipsoid(cf_grid_var): "applied. To apply the datum when loading, use the " "iris.FUTURE.datum_support flag." ) - warnings.warn(wmsg, FutureWarning, stacklevel=14) + warnings.warn(wmsg, category=FutureWarning, stacklevel=14) datum = None if datum is not None: @@ -512,7 +561,10 @@ def build_rotated_coordinate_system(engine, cf_grid_var): cf_grid_var, CF_ATTR_GRID_NORTH_POLE_LON, 0.0 ) if north_pole_latitude is None or north_pole_longitude is None: - warnings.warn("Rotated pole position is not fully specified") + warnings.warn( + "Rotated pole position is not fully specified", + category=iris.exceptions.IrisCfLoadWarning, + ) north_pole_grid_lon = getattr( cf_grid_var, CF_ATTR_GRID_NORTH_POLE_GRID_LON, 0.0 @@ -859,7 +911,10 @@ def get_attr_units(cf_var, attributes): msg = "Ignoring netCDF variable {!r} invalid units {!r}".format( cf_var.cf_name, attr_units ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboIgnoringCfLoad, + ) attributes["invalid_units"] = attr_units attr_units = UNKNOWN_UNIT_STRING @@ -948,7 +1003,8 @@ def get_cf_bounds_var(cf_coord_var): if attr_bounds is not None and attr_climatology is not None: warnings.warn( "Ignoring climatology in favour of bounds attribute " - "on NetCDF variable {!r}.".format(cf_coord_var.cf_name) + "on NetCDF variable {!r}.".format(cf_coord_var.cf_name), + category=_WarnComboIgnoringCfLoad, ) return cf_bounds_var, climatological @@ -1007,7 +1063,10 @@ def build_dimension_coordinate( if ma.is_masked(points_data): points_data = ma.filled(points_data) msg = "Gracefully filling {!r} dimension coordinate masked points" - warnings.warn(msg.format(str(cf_coord_var.cf_name))) + warnings.warn( + msg.format(str(cf_coord_var.cf_name)), + category=_WarnComboDefaultingLoad, + ) # Get any coordinate bounds. cf_bounds_var, climatological = get_cf_bounds_var(cf_coord_var) @@ -1017,7 +1076,10 @@ def build_dimension_coordinate( if ma.is_masked(bounds_data): bounds_data = ma.filled(bounds_data) msg = "Gracefully filling {!r} dimension coordinate masked bounds" - warnings.warn(msg.format(str(cf_coord_var.cf_name))) + warnings.warn( + msg.format(str(cf_coord_var.cf_name)), + category=_WarnComboDefaultingLoad, + ) # Handle transposed bounds where the vertex dimension is not # the last one. Test based on shape to support different # dimension names. @@ -1082,7 +1144,10 @@ def build_dimension_coordinate( "Failed to create {name!r} dimension coordinate: {error}\n" "Gracefully creating {name!r} auxiliary coordinate instead." ) - warnings.warn(msg.format(name=str(cf_coord_var.cf_name), error=e_msg)) + warnings.warn( + msg.format(name=str(cf_coord_var.cf_name), error=e_msg), + category=_WarnComboDefaultingCfLoad, + ) coord = iris.coords.AuxCoord( points_data, standard_name=standard_name, @@ -1097,7 +1162,10 @@ def build_dimension_coordinate( try: cube.add_aux_coord(coord, data_dims) except iris.exceptions.CannotAddError as e_msg: - warnings.warn(coord_skipped_msg.format(error=e_msg)) + warnings.warn( + coord_skipped_msg.format(error=e_msg), + category=iris.exceptions.IrisCannotAddWarning, + ) coord_skipped = True else: # Add the dimension coordinate to the cube. @@ -1108,7 +1176,10 @@ def build_dimension_coordinate( # Scalar coords are placed in the aux_coords container. cube.add_aux_coord(coord, data_dims) except iris.exceptions.CannotAddError as e_msg: - warnings.warn(coord_skipped_msg.format(error=e_msg)) + warnings.warn( + coord_skipped_msg.format(error=e_msg), + category=iris.exceptions.IrisCannotAddWarning, + ) coord_skipped = True if not coord_skipped: @@ -1186,7 +1257,10 @@ def build_auxiliary_coordinate( cube.add_aux_coord(coord, data_dims) except iris.exceptions.CannotAddError as e_msg: msg = "{name!r} coordinate not added to Cube: {error}" - warnings.warn(msg.format(name=str(cf_coord_var.cf_name), error=e_msg)) + warnings.warn( + msg.format(name=str(cf_coord_var.cf_name), error=e_msg), + category=iris.exceptions.IrisCannotAddWarning, + ) else: # Make a list with names, stored on the engine, so we can find them all later. engine.cube_parts["coordinates"].append((coord, cf_coord_var.cf_name)) @@ -1237,7 +1311,10 @@ def build_cell_measures(engine, cf_cm_var): cube.add_cell_measure(cell_measure, data_dims) except iris.exceptions.CannotAddError as e_msg: msg = "{name!r} cell measure not added to Cube: {error}" - warnings.warn(msg.format(name=str(cf_cm_var.cf_name), error=e_msg)) + warnings.warn( + msg.format(name=str(cf_cm_var.cf_name), error=e_msg), + category=iris.exceptions.IrisCannotAddWarning, + ) else: # Make a list with names, stored on the engine, so we can find them all later. engine.cube_parts["cell_measures"].append( @@ -1286,7 +1363,10 @@ def build_ancil_var(engine, cf_av_var): cube.add_ancillary_variable(av, data_dims) except iris.exceptions.CannotAddError as e_msg: msg = "{name!r} ancillary variable not added to Cube: {error}" - warnings.warn(msg.format(name=str(cf_av_var.cf_name), error=e_msg)) + warnings.warn( + msg.format(name=str(cf_av_var.cf_name), error=e_msg), + category=iris.exceptions.IrisCannotAddWarning, + ) else: # Make a list with names, stored on the engine, so we can find them all later. engine.cube_parts["ancillary_variables"].append( @@ -1503,7 +1583,8 @@ def has_supported_mercator_parameters(engine, cf_name): ): warnings.warn( "It does not make sense to provide both " - '"scale_factor_at_projection_origin" and "standard_parallel".' + '"scale_factor_at_projection_origin" and "standard_parallel".', + category=iris.exceptions.IrisCfInvalidCoordParamWarning, ) is_valid = False @@ -1533,7 +1614,10 @@ def has_supported_polar_stereographic_parameters(engine, cf_name): latitude_of_projection_origin != 90 and latitude_of_projection_origin != -90 ): - warnings.warn('"latitude_of_projection_origin" must be +90 or -90.') + warnings.warn( + '"latitude_of_projection_origin" must be +90 or -90.', + category=iris.exceptions.IrisCfInvalidCoordParamWarning, + ) is_valid = False if ( @@ -1542,14 +1626,16 @@ def has_supported_polar_stereographic_parameters(engine, cf_name): ): warnings.warn( "It does not make sense to provide both " - '"scale_factor_at_projection_origin" and "standard_parallel".' + '"scale_factor_at_projection_origin" and "standard_parallel".', + category=iris.exceptions.IrisCfInvalidCoordParamWarning, ) is_valid = False if scale_factor_at_projection_origin is None and standard_parallel is None: warnings.warn( 'One of "scale_factor_at_projection_origin" and ' - '"standard_parallel" is required.' + '"standard_parallel" is required.', + category=iris.exceptions.IrisCfInvalidCoordParamWarning, ) is_valid = False diff --git a/lib/iris/fileformats/cf.py b/lib/iris/fileformats/cf.py index 2ed01846bd..f412955adb 100644 --- a/lib/iris/fileformats/cf.py +++ b/lib/iris/fileformats/cf.py @@ -23,6 +23,7 @@ import numpy as np import numpy.ma as ma +import iris.exceptions from iris.fileformats.netcdf import _thread_safe_nc import iris.util @@ -280,7 +281,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF ancillary data variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: result[name] = CFAncillaryDataVariable( name, variables[name] @@ -323,7 +327,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF auxiliary coordinate variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: # Restrict to non-string type i.e. not a CFLabelVariable. if not _is_str_dtype(variables[name]): @@ -369,7 +376,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF boundary variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: result[name] = CFBoundaryVariable( name, variables[name] @@ -441,7 +451,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF climatology variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: result[name] = CFClimatologyVariable( name, variables[name] @@ -582,7 +595,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if warn: message = "Missing CF-netCDF formula term variable %r, referenced by netCDF variable %r" warnings.warn( - message % (variable_name, nc_var_name) + message % (variable_name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, ) else: if variable_name not in result: @@ -646,7 +660,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF grid mapping variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: result[name] = CFGridMappingVariable( name, variables[name] @@ -685,7 +702,10 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if name not in variables: if warn: message = "Missing CF-netCDF label variable %r, referenced by netCDF variable %r" - warnings.warn(message % (name, nc_var_name)) + warnings.warn( + message % (name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, + ) else: # Register variable, but only allow string type. var = variables[name] @@ -857,7 +877,8 @@ def identify(cls, variables, ignore=None, target=None, warn=True): if warn: message = "Missing CF-netCDF measure variable %r, referenced by netCDF variable %r" warnings.warn( - message % (variable_name, nc_var_name) + message % (variable_name, nc_var_name), + category=iris.exceptions.IrisCfMissingVarWarning, ) else: result[variable_name] = CFMeasureVariable( @@ -1069,7 +1090,8 @@ def __init__(self, file_source, warn=False, monotonic=False): ]: warnings.warn( "Optimise CF-netCDF loading by converting data from NetCDF3 " - 'to NetCDF4 file format using the "nccopy" command.' + 'to NetCDF4 file format using the "nccopy" command.', + category=iris.exceptions.IrisLoadWarning, ) self._check_monotonic = monotonic @@ -1210,7 +1232,10 @@ def _build(cf_variable): cf_variable.dimensions, ) ) - warnings.warn(msg) + warnings.warn( + msg, + category=iris.exceptions.IrisCfNonSpanningVarWarning, + ) # Build CF data variable relationships. if isinstance(cf_variable, CFDataVariable): @@ -1261,7 +1286,10 @@ def _build(cf_variable): cf_variable.dimensions, ) ) - warnings.warn(msg) + warnings.warn( + msg, + category=iris.exceptions.IrisCfNonSpanningVarWarning, + ) # Add the CF group to the variable. cf_variable.cf_group = cf_group diff --git a/lib/iris/fileformats/name_loaders.py b/lib/iris/fileformats/name_loaders.py index 0189a8806f..cb8867b6ea 100644 --- a/lib/iris/fileformats/name_loaders.py +++ b/lib/iris/fileformats/name_loaders.py @@ -17,7 +17,7 @@ import iris.coord_systems from iris.coords import AuxCoord, CellMethod, DimCoord import iris.cube -from iris.exceptions import TranslationError +from iris.exceptions import IrisLoadWarning, TranslationError import iris.util EARTH_RADIUS = 6371229.0 @@ -273,7 +273,9 @@ def _parse_units(units): try: units = cf_units.Unit(units) except ValueError: - warnings.warn("Unknown units: {!r}".format(units)) + warnings.warn( + "Unknown units: {!r}".format(units), category=IrisLoadWarning + ) units = cf_units.Unit(None) return units @@ -611,7 +613,9 @@ def _build_cell_methods(av_or_ints, coord): else: cell_method = None msg = "Unknown {} statistic: {!r}. Unable to create cell method." - warnings.warn(msg.format(coord, av_or_int)) + warnings.warn( + msg.format(coord, av_or_int), category=IrisLoadWarning + ) cell_methods.append(cell_method) # NOTE: this can be a None return cell_methods diff --git a/lib/iris/fileformats/netcdf/loader.py b/lib/iris/fileformats/netcdf/loader.py index 20d255ea44..29202af89e 100644 --- a/lib/iris/fileformats/netcdf/loader.py +++ b/lib/iris/fileformats/netcdf/loader.py @@ -50,6 +50,15 @@ NetCDFDataProxy = _thread_safe_nc.NetCDFDataProxy +class _WarnComboIgnoringBoundsLoad( + iris.exceptions.IrisIgnoringBoundsWarning, + iris.exceptions.IrisLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + def _actions_engine(): # Return an 'actions engine', which provides a pyke-rules-like interface to # the core cf translation code. @@ -352,7 +361,8 @@ def coord_from_term(term): return coord warnings.warn( "Unable to find coordinate for variable " - "{!r}".format(name) + "{!r}".format(name), + category=iris.exceptions.IrisFactoryCoordNotFoundWarning, ) if formula_type == "atmosphere_sigma_coordinate": @@ -393,7 +403,10 @@ def coord_from_term(term): coord_p0.name() ) ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboIgnoringBoundsLoad, + ) coord_a = coord_from_term("a") if coord_a is not None: if coord_a.units.is_unknown(): @@ -584,7 +597,10 @@ def load_cubes(file_sources, callback=None, constraints=None): try: _load_aux_factory(engine, cube) except ValueError as e: - warnings.warn("{}".format(e)) + warnings.warn( + "{}".format(e), + category=iris.exceptions.IrisLoadWarning, + ) # Perform any user registered callback function. cube = run_callback(callback, cube, cf_var, file_source) diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index c0cfd3d10b..1ff69df1f7 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -157,6 +157,15 @@ } +class _WarnComboMaskSave( + iris.exceptions.IrisMaskValueMatchWarning, + iris.exceptions.IrisSaveWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + class CFNameCoordMap: """Provide a simple CF name to CF coordinate mapping.""" @@ -308,7 +317,12 @@ def _data_fillvalue_check(arraylib, data, check_value): return is_masked, contains_value -class SaverFillValueWarning(UserWarning): +class SaverFillValueWarning(iris.exceptions.IrisSaverFillValueWarning): + """ + Backwards compatible form of :class:`iris.exceptions.IrisSaverFillValueWarning`. + """ + + # TODO: remove at the next major release. pass @@ -359,7 +373,10 @@ def _fillvalue_report(fill_info, is_masked, contains_fill_value, warn=False): ) if warn and result is not None: - warnings.warn(result) + warnings.warn( + result, + category=_WarnComboMaskSave, + ) return result @@ -733,7 +750,7 @@ def write( msg = "cf_profile is available but no {} defined.".format( "cf_patch" ) - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisCfSaveWarning) @staticmethod def check_attribute_compliance(container, data_dtype): @@ -1144,7 +1161,7 @@ def _add_aux_factories(self, cube, cf_var_cube, dimension_names): "Unable to determine formula terms " "for AuxFactory: {!r}".format(factory) ) - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisSaveWarning) else: # Override `standard_name`, `long_name`, and `axis` of the # primary coord that signals the presence of a dimensionless @@ -2126,7 +2143,10 @@ def add_ellipsoid(ellipsoid): # osgb (a specific tmerc) elif isinstance(cs, iris.coord_systems.OSGB): - warnings.warn("OSGB coordinate system not yet handled") + warnings.warn( + "OSGB coordinate system not yet handled", + category=iris.exceptions.IrisSaveWarning, + ) # lambert azimuthal equal area elif isinstance( @@ -2195,7 +2215,8 @@ def add_ellipsoid(ellipsoid): warnings.warn( "Unable to represent the horizontal " "coordinate system. The coordinate system " - "type %r is not yet implemented." % type(cs) + "type %r is not yet implemented." % type(cs), + category=iris.exceptions.IrisSaveWarning, ) self._coord_systems.append(cs) @@ -2359,7 +2380,7 @@ def set_packing_ncattrs(cfvar): "attribute, but {attr_name!r} should only be a CF " "global attribute.".format(attr_name=attr_name) ) - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisCfSaveWarning) _setncattr(cf_var, attr_name, value) @@ -2593,7 +2614,9 @@ def complete(self, issue_warnings=True) -> List[Warning]: if issue_warnings: # Issue any delayed warnings from the compute. for delayed_warning in result_warnings: - warnings.warn(delayed_warning) + warnings.warn( + delayed_warning, category=iris.exceptions.IrisSaveWarning + ) return result_warnings @@ -2911,7 +2934,7 @@ def is_valid_packspec(p): msg = "cf_profile is available but no {} defined.".format( "cf_patch_conventions" ) - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisCfSaveWarning) # Add conventions attribute. sman.update_global_attributes(Conventions=conventions) diff --git a/lib/iris/fileformats/nimrod_load_rules.py b/lib/iris/fileformats/nimrod_load_rules.py index fd1ccb0e95..17db0644ee 100644 --- a/lib/iris/fileformats/nimrod_load_rules.py +++ b/lib/iris/fileformats/nimrod_load_rules.py @@ -16,7 +16,11 @@ import iris import iris.coord_systems from iris.coords import DimCoord -from iris.exceptions import CoordinateNotFoundError, TranslationError +from iris.exceptions import ( + CoordinateNotFoundError, + IrisNimrodTranslationWarning, + TranslationError, +) __all__ = ["run"] @@ -28,7 +32,12 @@ ) -class TranslationWarning(Warning): +class TranslationWarning(IrisNimrodTranslationWarning): + """ + Backwards compatible form of :class:`iris.exceptions.IrisNimrodTranslationWarning`. + """ + + # TODO: remove at the next major release. pass @@ -181,7 +190,8 @@ def units(cube, field): warnings.warn( "Unhandled units '{0}' recorded in cube attributes.".format( field_units - ) + ), + category=IrisNimrodTranslationWarning, ) cube.attributes["invalid_units"] = field_units @@ -417,7 +427,8 @@ def coord_system(field, handle_metadata_errors): if any([is_missing(field, v) for v in crs_args]): warnings.warn( "Coordinate Reference System is not completely defined. " - "Plotting and reprojection may be impaired." + "Plotting and reprojection may be impaired.", + category=IrisNimrodTranslationWarning, ) coord_sys = iris.coord_systems.TransverseMercator( *crs_args, iris.coord_systems.GeogCS(**ellipsoid) @@ -539,7 +550,7 @@ def vertical_coord(cube, field): f"{field.vertical_coord_type} != {field.reference_vertical_coord_type}. " f"Assuming {field.vertical_coord_type}" ) - warnings.warn(msg) + warnings.warn(msg, category=IrisNimrodTranslationWarning) coord_point = field.vertical_coord if coord_point == 8888.0: @@ -586,7 +597,7 @@ def vertical_coord(cube, field): warnings.warn( "Vertical coord {!r} not yet handled" "".format(field.vertical_coord_type), - TranslationWarning, + category=TranslationWarning, ) @@ -831,7 +842,8 @@ def probability_coord(cube, field, handle_metadata_errors): ) warnings.warn( f"No default units for {coord_name} coord of {cube.name()}. " - "Meta-data may be incomplete." + "Meta-data may be incomplete.", + category=IrisNimrodTranslationWarning, ) new_coord = iris.coords.AuxCoord( np.array(coord_val, dtype=np.float32), bounds=bounds, **coord_keys diff --git a/lib/iris/fileformats/pp.py b/lib/iris/fileformats/pp.py index 65e0e16d72..e19ba3adff 100644 --- a/lib/iris/fileformats/pp.py +++ b/lib/iris/fileformats/pp.py @@ -27,6 +27,7 @@ from iris._lazy_data import as_concrete_data, as_lazy_data, is_lazy_data import iris.config import iris.coord_systems +import iris.exceptions # NOTE: this is for backwards-compatitibility *ONLY* # We could simply remove it for v2.0 ? @@ -220,6 +221,33 @@ } +class _WarnComboLoadingMask( + iris.exceptions.IrisLoadWarning, + iris.exceptions.IrisMaskValueMatchWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboLoadingDefaulting( + iris.exceptions.IrisDefaultingWarning, + iris.exceptions.IrisLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + +class _WarnComboIgnoringLoad( + iris.exceptions.IrisIgnoringWarning, + iris.exceptions.IrisLoadWarning, +): + """One-off combination of warning classes - enhances user filtering.""" + + pass + + class STASH(collections.namedtuple("STASH", "model section item")): """ A class to hold a single STASH code. @@ -1165,7 +1193,10 @@ def save(self, file_handle): "missing data. To save these as normal values, please " "set the field BMDI not equal to any valid data points." ) - warnings.warn(msg.format(mdi)) + warnings.warn( + msg.format(mdi), + category=_WarnComboLoadingMask, + ) if isinstance(data, ma.MaskedArray): if ma.is_masked(data): data = data.filled(fill_value=mdi) @@ -1290,7 +1321,8 @@ def save(self, file_handle): warnings.warn( "Downcasting array precision from float64 to float32" " for save.If float64 precision is required then" - " please save in a different format" + " please save in a different format", + category=_WarnComboLoadingDefaulting, ) data = data.astype(">f4") lb[self.HEADER_DICT["lbuser"][0]] = 1 @@ -1732,7 +1764,8 @@ def _interpret_fields(fields): warnings.warn( "Landmask compressed fields existed without a " "landmask to decompress with. The data will have " - "a shape of (0, 0) and will not read." + "a shape of (0, 0) and will not read.", + category=iris.exceptions.IrisLoadWarning, ) mask_shape = (0, 0) else: @@ -1901,7 +1934,10 @@ def _field_gen(filename, read_data_bytes, little_ended=False): "Unable to interpret field {}. {}. Skipping " "the remainder of the file.".format(field_count, str(e)) ) - warnings.warn(msg) + warnings.warn( + msg, + category=_WarnComboIgnoringLoad, + ) break # Skip the trailing 4-byte word containing the header length @@ -1921,7 +1957,8 @@ def _field_gen(filename, read_data_bytes, little_ended=False): warnings.warn( wmsg.format( pp_field.lblrec * PP_WORD_DEPTH, len_of_data_plus_extra - ) + ), + category=_WarnComboIgnoringLoad, ) break diff --git a/lib/iris/fileformats/pp_save_rules.py b/lib/iris/fileformats/pp_save_rules.py index 0369fc9fd0..998255ff2b 100644 --- a/lib/iris/fileformats/pp_save_rules.py +++ b/lib/iris/fileformats/pp_save_rules.py @@ -10,6 +10,7 @@ import iris from iris.aux_factory import HybridHeightFactory, HybridPressureFactory +from iris.exceptions import IrisPpClimModifiedWarning from iris.fileformats._ff_cross_references import STASH_TRANS from iris.fileformats._pp_lbproc_pairs import LBPROC_MAP from iris.fileformats.rules import ( @@ -890,4 +891,4 @@ def verify(cube, field): def _conditional_warning(condition, warning): if condition: - warnings.warn(warning) + warnings.warn(warning, category=IrisPpClimModifiedWarning) diff --git a/lib/iris/fileformats/rules.py b/lib/iris/fileformats/rules.py index 707fd58757..d5a4b9c823 100644 --- a/lib/iris/fileformats/rules.py +++ b/lib/iris/fileformats/rules.py @@ -47,7 +47,8 @@ def as_cube(self): src_cubes = src_cubes.merge(unique=False) if len(src_cubes) > 1: warnings.warn( - "Multiple reference cubes for {}".format(self.name) + "Multiple reference cubes for {}".format(self.name), + category=iris.exceptions.IrisUserWarning, ) src_cube = src_cubes[-1] @@ -329,7 +330,7 @@ def _make_cube(field, converter): cube.units = metadata.units except ValueError: msg = "Ignoring PP invalid units {!r}".format(metadata.units) - warnings.warn(msg) + warnings.warn(msg, category=iris.exceptions.IrisIgnoringWarning) cube.attributes["invalid_units"] = metadata.units cube.units = cf_units._UNKNOWN_UNIT_STRING @@ -350,7 +351,10 @@ def _resolve_factory_references( except _ReferenceError as e: msg = "Unable to create instance of {factory}. " + str(e) factory_name = factory.factory_class.__name__ - warnings.warn(msg.format(factory=factory_name)) + warnings.warn( + msg.format(factory=factory_name), + category=iris.exceptions.IrisUserWarning, + ) else: aux_factory = factory.factory_class(*args) cube.add_aux_factory(aux_factory) diff --git a/lib/iris/iterate.py b/lib/iris/iterate.py index cf16c9cbe6..cc82433e85 100644 --- a/lib/iris/iterate.py +++ b/lib/iris/iterate.py @@ -14,6 +14,8 @@ import numpy as np +from iris.exceptions import IrisUserWarning + __all__ = ["izip"] @@ -164,7 +166,8 @@ def izip(*cubes, **kwargs): warnings.warn( "Iterating over coordinate '%s' in step whose " "definitions match but whose values " - "differ." % coord_a.name() + "differ." % coord_a.name(), + category=IrisUserWarning, ) return _ZipSlicesIterator( diff --git a/lib/iris/pandas.py b/lib/iris/pandas.py index 4c06530627..cb26b638e4 100644 --- a/lib/iris/pandas.py +++ b/lib/iris/pandas.py @@ -29,6 +29,7 @@ from iris._deprecation import warn_deprecated from iris.coords import AncillaryVariable, AuxCoord, CellMeasure, DimCoord from iris.cube import Cube, CubeList +from iris.exceptions import IrisIgnoringWarning def _get_dimensional_metadata(name, values, calendar=None, dm_class=None): @@ -446,7 +447,7 @@ def format_dimensional_metadata(dm_class_, values_, name_, dimensions_): if columns_ignored: ignored_args = ", ".join([t[2] for t in class_arg_mapping]) message = f"The input pandas_structure is a Series; ignoring arguments: {ignored_args} ." - warnings.warn(message) + warnings.warn(message, category=IrisIgnoringWarning) class_arg_mapping = [] non_data_names = [] @@ -896,7 +897,7 @@ def merge_metadata(meta_var_list): "'iris.FUTURE.pandas_ndim = True'. More info is in the " "documentation." ) - warnings.warn(message, FutureWarning) + warnings.warn(message, category=FutureWarning) # The legacy behaviour. data = cube.data diff --git a/lib/iris/plot.py b/lib/iris/plot.py index ebcb5c3bcb..28b458f715 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -34,7 +34,7 @@ import iris.coord_systems import iris.coords import iris.cube -from iris.exceptions import IrisError +from iris.exceptions import IrisError, IrisUnsupportedPlottingWarning # Importing iris.palette to register the brewer palettes. import iris.palette @@ -2023,7 +2023,7 @@ def update_animation_iris(i, cubes, vmin, vmax, coords): "use: {}." ) msg = msg.format(plot_func.__module__, supported) - warnings.warn(msg, UserWarning) + warnings.warn(msg, category=IrisUnsupportedPlottingWarning) supported = ["contour", "contourf", "pcolor", "pcolormesh"] if plot_func.__name__ not in supported: @@ -2032,7 +2032,7 @@ def update_animation_iris(i, cubes, vmin, vmax, coords): "use: {}." ) msg = msg.format(plot_func.__name__, supported) - warnings.warn(msg, UserWarning) + warnings.warn(msg, category=IrisUnsupportedPlottingWarning) # Determine plot range. vmin = kwargs.pop("vmin", min([cc.data.min() for cc in cubes])) diff --git a/lib/iris/tests/graphics/idiff.py b/lib/iris/tests/graphics/idiff.py index 62e72f4e0e..4af7f4726d 100755 --- a/lib/iris/tests/graphics/idiff.py +++ b/lib/iris/tests/graphics/idiff.py @@ -28,6 +28,7 @@ from matplotlib.testing.exceptions import ImageComparisonFailure # noqa import matplotlib.widgets as mwidget # noqa +from iris.exceptions import IrisIgnoringWarning # noqa import iris.tests # noqa import iris.tests.graphics as graphics # noqa @@ -151,7 +152,7 @@ def step_over_diffs(result_dir, display=True): distance = graphics.get_phash(reference_image_path) - phash except FileNotFoundError: wmsg = "Ignoring unregistered test result {!r}." - warnings.warn(wmsg.format(test_key)) + warnings.warn(wmsg.format(test_key), category=IrisIgnoringWarning) continue processed = True diff --git a/lib/iris/tests/integration/experimental/test_ugrid_load.py b/lib/iris/tests/integration/experimental/test_ugrid_load.py index b0b60ee506..d94e85d2f5 100644 --- a/lib/iris/tests/integration/experimental/test_ugrid_load.py +++ b/lib/iris/tests/integration/experimental/test_ugrid_load.py @@ -19,6 +19,7 @@ import pytest from iris import Constraint, load +from iris.exceptions import IrisCfWarning from iris.experimental.ugrid.load import ( PARSE_UGRID_ON_LOAD, load_mesh, @@ -170,7 +171,7 @@ def create_synthetic_file(self, **create_kwargs): def test_mesh_bad_topology_dimension(self): # Check that the load generates a suitable warning. warn_regex = r"topology_dimension.* ignoring" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns(IrisCfWarning, match=warn_regex): template = "minimal_bad_topology_dim" dim_line = "mesh_var:topology_dimension = 1 ;" # which is wrong ! cube = self.create_synthetic_test_cube( @@ -183,7 +184,7 @@ def test_mesh_bad_topology_dimension(self): def test_mesh_no_topology_dimension(self): # Check that the load generates a suitable warning. warn_regex = r"Mesh variable.* has no 'topology_dimension'" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns(IrisCfWarning, match=warn_regex): template = "minimal_bad_topology_dim" dim_line = "" # don't create ANY topology_dimension property cube = self.create_synthetic_test_cube( @@ -196,7 +197,7 @@ def test_mesh_no_topology_dimension(self): def test_mesh_bad_cf_role(self): # Check that the load generates a suitable warning. warn_regex = r"inappropriate cf_role" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns(IrisCfWarning, match=warn_regex): template = "minimal_bad_mesh_cf_role" dim_line = 'mesh_var:cf_role = "foo" ;' _ = self.create_synthetic_test_cube( @@ -206,7 +207,7 @@ def test_mesh_bad_cf_role(self): def test_mesh_no_cf_role(self): # Check that the load generates a suitable warning. warn_regex = r"no cf_role attribute" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns(IrisCfWarning, match=warn_regex): template = "minimal_bad_mesh_cf_role" dim_line = "" _ = self.create_synthetic_test_cube( diff --git a/lib/iris/tests/integration/netcdf/test_delayed_save.py b/lib/iris/tests/integration/netcdf/test_delayed_save.py index 616feb3b0e..09f6235aab 100644 --- a/lib/iris/tests/integration/netcdf/test_delayed_save.py +++ b/lib/iris/tests/integration/netcdf/test_delayed_save.py @@ -17,8 +17,8 @@ import pytest import iris +from iris.exceptions import IrisSaverFillValueWarning from iris.fileformats.netcdf._thread_safe_nc import default_fillvals -from iris.fileformats.netcdf.saver import SaverFillValueWarning import iris.tests from iris.tests.stock import realistic_4d @@ -311,7 +311,7 @@ def test_fill_warnings(self, warning_type, output_path, save_is_delayed): result_warnings = [ log.message for log in logged_warnings - if isinstance(log.message, SaverFillValueWarning) + if isinstance(log.message, IrisSaverFillValueWarning) ] if save_is_delayed: @@ -320,7 +320,9 @@ def test_fill_warnings(self, warning_type, output_path, save_is_delayed): # Complete the operation now with warnings.catch_warnings(): # NOTE: warnings should *not* be issued here, instead they are returned. - warnings.simplefilter("error", category=SaverFillValueWarning) + warnings.simplefilter( + "error", category=IrisSaverFillValueWarning + ) result_warnings = result.compute() # Either way, we should now have 2 similar warnings. diff --git a/lib/iris/tests/integration/netcdf/test_general.py b/lib/iris/tests/integration/netcdf/test_general.py index dc0c29455f..6214f09e7e 100644 --- a/lib/iris/tests/integration/netcdf/test_general.py +++ b/lib/iris/tests/integration/netcdf/test_general.py @@ -25,7 +25,7 @@ from iris.coords import CellMethod from iris.cube import Cube, CubeList import iris.exceptions -from iris.fileformats.netcdf import Saver, UnknownCellMethodWarning +from iris.fileformats.netcdf import Saver # Get the netCDF4 module, but in a sneaky way that avoids triggering the "do not import # netCDF4" check in "iris.tests.test_coding_standards.test_netcdf4_import()". @@ -141,7 +141,9 @@ def test_unknown_method(self): warning_messages = [ warn for warn in warning_messages - if isinstance(warn, UnknownCellMethodWarning) + if isinstance( + warn, iris.exceptions.IrisUnknownCellMethodWarning + ) ] self.assertEqual(len(warning_messages), 1) message = warning_messages[0].args[0] diff --git a/lib/iris/tests/integration/netcdf/test_self_referencing.py b/lib/iris/tests/integration/netcdf/test_self_referencing.py index 3395296e11..554fabb4fc 100644 --- a/lib/iris/tests/integration/netcdf/test_self_referencing.py +++ b/lib/iris/tests/integration/netcdf/test_self_referencing.py @@ -16,6 +16,7 @@ import numpy as np import iris +from iris.exceptions import IrisCfMissingVarWarning from iris.fileformats.netcdf import _thread_safe_nc @@ -46,7 +47,9 @@ def test_cmip6_volcello_load_issue_3367(self): with mock.patch("warnings.warn") as warn: # ensure file loads without failure cube = iris.load_cube(self.fname) - warn.assert_has_calls([mock.call(expected_msg)]) + warn.assert_has_calls( + [mock.call(expected_msg, category=IrisCfMissingVarWarning)] + ) # extra check to ensure correct variable was found assert cube.standard_name == "ocean_volume" @@ -113,7 +116,9 @@ def test_self_referencing_load_issue_3367(self): with mock.patch("warnings.warn") as warn: # ensure file loads without failure cube = iris.load_cube(self.temp_dir_path) - warn.assert_called_with(expected_msg) + warn.assert_called_with( + expected_msg, category=IrisCfMissingVarWarning + ) # extra check to ensure correct variable was found assert cube.standard_name == "ocean_volume" diff --git a/lib/iris/tests/integration/test_pp.py b/lib/iris/tests/integration/test_pp.py index e654694aa7..026bdae58a 100644 --- a/lib/iris/tests/integration/test_pp.py +++ b/lib/iris/tests/integration/test_pp.py @@ -18,7 +18,7 @@ from iris.aux_factory import HybridHeightFactory, HybridPressureFactory from iris.coords import AuxCoord, CellMethod, DimCoord from iris.cube import Cube -from iris.exceptions import IgnoreCubeException +from iris.exceptions import IgnoreCubeException, IrisUserWarning import iris.fileformats.pp from iris.fileformats.pp import load_pairs_from_fields import iris.fileformats.pp_load_rules @@ -290,7 +290,7 @@ def test_hybrid_pressure_with_duplicate_references(self): "iris.fileformats.pp.load", new=load ) as load, mock.patch("warnings.warn") as warn: _, _, _ = iris.fileformats.pp.load_cubes("DUMMY") - warn.assert_called_with(msg) + warn.assert_called_with(msg, category=IrisUserWarning) def test_hybrid_height_with_non_standard_coords(self): # Check the save rules are using the AuxFactory to find the @@ -415,7 +415,7 @@ def test_hybrid_height_round_trip_no_reference(self): "Unable to create instance of HybridHeightFactory. " "The source data contains no field(s) for 'orography'." ) - warn.assert_called_with(msg) + warn.assert_called_with(msg, category=IrisUserWarning) # Check the data cube is set up to use hybrid height. self._test_coord( diff --git a/lib/iris/tests/test_coding_standards.py b/lib/iris/tests/test_coding_standards.py index 6cea9dc001..54309e3906 100644 --- a/lib/iris/tests/test_coding_standards.py +++ b/lib/iris/tests/test_coding_standards.py @@ -8,6 +8,7 @@ # importing anything else import iris.tests as tests # isort:skip +import ast from datetime import datetime from fnmatch import fnmatch from glob import glob @@ -133,6 +134,66 @@ def test_python_versions(): assert search in path.read_text() +def test_categorised_warnings(): + """ + To ensure that all UserWarnings raised by Iris are categorised, for ease of use. + + No obvious category? Use the parent: + :class:`iris.exceptions.IrisUserWarning`. + + Warning matches multiple categories? Create a one-off combo class. For + example: + + .. code-block:: python + + class _WarnComboCfDefaulting(IrisCfWarning, IrisDefaultingWarning): + \""" + One-off combination of warning classes - enhances user filtering. + \""" + pass + + """ + warns_without_category = [] + warns_with_user_warning = [] + tmp_list = [] + + for file_path in Path(IRIS_DIR).rglob("*.py"): + file_text = file_path.read_text() + parsed = ast.parse(source=file_text) + calls = filter(lambda node: hasattr(node, "func"), ast.walk(parsed)) + warn_calls = filter( + lambda c: getattr(c.func, "attr", None) == "warn", calls + ) + + warn_call: ast.Call + for warn_call in warn_calls: + warn_ref = f"{file_path}:{warn_call.lineno}" + tmp_list.append(warn_ref) + + category_kwargs = filter( + lambda k: k.arg == "category", warn_call.keywords + ) + category_kwarg: ast.keyword = next(category_kwargs, None) + + if category_kwarg is None: + warns_without_category.append(warn_ref) + # Work with Attribute or Name instances. + elif ( + getattr(category_kwarg.value, "attr", None) + or getattr(category_kwarg.value, "id", None) + ) == "UserWarning": + warns_with_user_warning.append(warn_ref) + + # This avoids UserWarnings being raised by unwritten default behaviour. + assert ( + warns_without_category == [] + ), "All warnings raised by Iris must be raised with the category kwarg." + + assert ( + warns_with_user_warning == [] + ), "No warnings raised by Iris can be the base UserWarning class." + + class TestLicenseHeaders(tests.IrisTest): @staticmethod def whatchanged_parse(whatchanged_output): diff --git a/lib/iris/tests/test_concatenate.py b/lib/iris/tests/test_concatenate.py index 9287a79fda..ec92838466 100644 --- a/lib/iris/tests/test_concatenate.py +++ b/lib/iris/tests/test_concatenate.py @@ -20,6 +20,7 @@ from iris.aux_factory import HybridHeightFactory from iris.coords import AncillaryVariable, AuxCoord, CellMeasure, DimCoord import iris.cube +from iris.exceptions import IrisUserWarning import iris.tests.stock as stock @@ -340,7 +341,8 @@ def test_points_overlap_increasing(self): cubes.append(_make_cube((0, 2), y, 1)) cubes.append(_make_cube((1, 3), y, 2)) with pytest.warns( - UserWarning, match="Found cubes with overlap on concatenate axis" + IrisUserWarning, + match="Found cubes with overlap on concatenate axis", ): result = concatenate(cubes) self.assertEqual(len(result), 2) @@ -351,7 +353,8 @@ def test_points_overlap_decreasing(self): cubes.append(_make_cube(x, (3, 0, -1), 1)) cubes.append(_make_cube(x, (1, -1, -1), 2)) with pytest.warns( - UserWarning, match="Found cubes with overlap on concatenate axis" + IrisUserWarning, + match="Found cubes with overlap on concatenate axis", ): result = concatenate(cubes) self.assertEqual(len(result), 2) @@ -366,7 +369,8 @@ def test_bounds_overlap_increasing(self): ) cubes.append(cube) with pytest.warns( - UserWarning, match="Found cubes with overlap on concatenate axis" + IrisUserWarning, + match="Found cubes with overlap on concatenate axis", ): result = concatenate(cubes) self.assertEqual(len(result), 2) @@ -381,7 +385,8 @@ def test_bounds_overlap_decreasing(self): ) cubes.append(cube) with pytest.warns( - UserWarning, match="Found cubes with overlap on concatenate axis" + IrisUserWarning, + match="Found cubes with overlap on concatenate axis", ): result = concatenate(cubes) self.assertEqual(len(result), 2) diff --git a/lib/iris/tests/test_coordsystem.py b/lib/iris/tests/test_coordsystem.py index 7cd15297cc..2e5aef249c 100644 --- a/lib/iris/tests/test_coordsystem.py +++ b/lib/iris/tests/test_coordsystem.py @@ -18,6 +18,7 @@ ) import iris.coords import iris.cube +from iris.exceptions import IrisUserWarning import iris.tests.stock @@ -341,7 +342,7 @@ def test_inverse_flattening_change(self): cs = GeogCS(6543210, 6500000) initial_crs = cs.as_cartopy_crs() with self.assertWarnsRegex( - UserWarning, + IrisUserWarning, "Setting inverse_flattening does not affect other properties of the GeogCS object.", ): cs.inverse_flattening = cs.inverse_flattening + 1 diff --git a/lib/iris/tests/test_hybrid.py b/lib/iris/tests/test_hybrid.py index 76fc971a08..b070f36a7a 100644 --- a/lib/iris/tests/test_hybrid.py +++ b/lib/iris/tests/test_hybrid.py @@ -18,6 +18,7 @@ import iris from iris.aux_factory import HybridHeightFactory, HybridPressureFactory +from iris.exceptions import IrisIgnoringBoundsWarning import iris.tests.stock @@ -136,7 +137,7 @@ def test_invalid_dependencies(self): with warnings.catch_warnings(): # Cause all warnings to raise Exceptions warnings.simplefilter("error") - with self.assertRaises(UserWarning): + with self.assertRaises(IrisIgnoringBoundsWarning): _ = HybridHeightFactory(orography=sigma) def test_bounded_orography(self): @@ -154,7 +155,7 @@ def test_bounded_orography(self): with warnings.catch_warnings(): # Cause all warnings to raise Exceptions warnings.simplefilter("error") - with self.assertRaisesRegex(UserWarning, msg): + with self.assertRaisesRegex(IrisIgnoringBoundsWarning, msg): self.cube.coord("altitude") @@ -215,7 +216,7 @@ def test_invalid_dependencies(self): with warnings.catch_warnings(): # Cause all warnings to raise Exceptions warnings.simplefilter("error") - with self.assertRaises(UserWarning): + with self.assertRaises(IrisIgnoringBoundsWarning): _ = HybridPressureFactory( sigma=sigma, surface_air_pressure=sigma ) @@ -235,7 +236,7 @@ def test_bounded_surface_pressure(self): with warnings.catch_warnings(): # Cause all warnings to raise Exceptions warnings.simplefilter("error") - with self.assertRaisesRegex(UserWarning, msg): + with self.assertRaisesRegex(IrisIgnoringBoundsWarning, msg): self.cube.coord("air_pressure") diff --git a/lib/iris/tests/test_iterate.py b/lib/iris/tests/test_iterate.py index ec86d2f69d..6317ef32b5 100644 --- a/lib/iris/tests/test_iterate.py +++ b/lib/iris/tests/test_iterate.py @@ -22,6 +22,7 @@ import iris import iris.analysis +from iris.exceptions import IrisUserWarning import iris.iterate import iris.tests.stock @@ -365,12 +366,12 @@ def test_izip_different_valued_coords(self): warnings.simplefilter( "error" ) # Cause all warnings to raise Exceptions - with self.assertRaises(UserWarning): + with self.assertRaises(IrisUserWarning): iris.iterate.izip( self.cube_a, self.cube_b, coords=self.coord_names ) # Call with coordinates, rather than names - with self.assertRaises(UserWarning): + with self.assertRaises(IrisUserWarning): iris.iterate.izip( self.cube_a, self.cube_b, coords=[latitude, longitude] ) diff --git a/lib/iris/tests/test_netcdf.py b/lib/iris/tests/test_netcdf.py index 6438140ed9..2e389942bf 100644 --- a/lib/iris/tests/test_netcdf.py +++ b/lib/iris/tests/test_netcdf.py @@ -26,6 +26,7 @@ from iris._lazy_data import is_lazy_data import iris.analysis.trajectory import iris.coord_systems as icoord_systems +from iris.exceptions import IrisCfSaveWarning from iris.fileformats._nc_load_rules import helpers as ncload_helpers import iris.fileformats.netcdf from iris.fileformats.netcdf import _thread_safe_nc @@ -1099,7 +1100,9 @@ def test_conflicting_global_attributes(self): with self.temp_filename(suffix=".nc") as filename: with mock.patch("warnings.warn") as warn: iris.save([self.cube, self.cube2], filename) - warn.assert_called_with(expected_msg) + warn.assert_called_with( + expected_msg, category=IrisCfSaveWarning + ) self.assertCDL( filename, ("netcdf", "netcdf_save_confl_global_attr.cdl") ) diff --git a/lib/iris/tests/unit/analysis/cartography/test_project.py b/lib/iris/tests/unit/analysis/cartography/test_project.py index 8649cc55ea..c00830aacc 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_project.py +++ b/lib/iris/tests/unit/analysis/cartography/test_project.py @@ -16,6 +16,7 @@ import iris.coord_systems import iris.coords import iris.cube +from iris.exceptions import IrisDefaultingWarning import iris.tests import iris.tests.stock @@ -161,7 +162,8 @@ def test_no_coord_system(self): warn.assert_called_once_with( "Coordinate system of latitude and " "longitude coordinates is not specified. " - "Assuming WGS84 Geodetic." + "Assuming WGS84 Geodetic.", + category=IrisDefaultingWarning, ) diff --git a/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py b/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py index 49e03a1174..62ab1ae283 100644 --- a/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py +++ b/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py @@ -21,6 +21,7 @@ from iris.analysis.geometry import geometry_area_weights from iris.coords import DimCoord from iris.cube import Cube +from iris.exceptions import IrisGeometryExceedWarning import iris.tests.stock as stock @@ -148,7 +149,9 @@ def test_distinct_xy_bounds_pole(self): "The geometry exceeds the " "cube's y dimension at the upper end.", ) - self.assertTrue(issubclass(w[-1].category, UserWarning)) + self.assertTrue( + issubclass(w[-1].category, IrisGeometryExceedWarning) + ) target = np.array( [ [0, top_cell_half, top_cell_half, 0], diff --git a/lib/iris/tests/unit/coords/test_Coord.py b/lib/iris/tests/unit/coords/test_Coord.py index 69b6b70c96..c548d017f2 100644 --- a/lib/iris/tests/unit/coords/test_Coord.py +++ b/lib/iris/tests/unit/coords/test_Coord.py @@ -19,7 +19,7 @@ import iris from iris.coords import AuxCoord, Coord, DimCoord from iris.cube import Cube -from iris.exceptions import UnitConversionError +from iris.exceptions import IrisVagueMetadataWarning, UnitConversionError from iris.tests.unit.coords import CoordTestMixin Pair = collections.namedtuple("Pair", "points bounds") @@ -482,7 +482,7 @@ def test_numeric_nd_multidim_bounds_warning(self): "Collapsing a multi-dimensional coordinate. " "Metadata may not be fully descriptive for 'y'." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): coord.collapsed() def test_lazy_nd_multidim_bounds_warning(self): @@ -493,7 +493,7 @@ def test_lazy_nd_multidim_bounds_warning(self): "Collapsing a multi-dimensional coordinate. " "Metadata may not be fully descriptive for 'y'." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): coord.collapsed() def test_numeric_nd_noncontiguous_bounds_warning(self): @@ -504,7 +504,7 @@ def test_numeric_nd_noncontiguous_bounds_warning(self): "Collapsing a non-contiguous coordinate. " "Metadata may not be fully descriptive for 'y'." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): coord.collapsed() def test_lazy_nd_noncontiguous_bounds_warning(self): @@ -515,7 +515,7 @@ def test_lazy_nd_noncontiguous_bounds_warning(self): "Collapsing a non-contiguous coordinate. " "Metadata may not be fully descriptive for 'y'." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): coord.collapsed() def test_numeric_3_bounds(self): @@ -530,7 +530,7 @@ def test_numeric_3_bounds(self): r"1D coordinates with 2 bounds. Metadata may not be fully " r"descriptive for 'x'. Ignoring bounds." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): collapsed_coord = coord.collapsed() self.assertFalse(collapsed_coord.has_lazy_points()) @@ -553,7 +553,7 @@ def test_lazy_3_bounds(self): r"1D coordinates with 2 bounds. Metadata may not be fully " r"descriptive for 'x'. Ignoring bounds." ) - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisVagueMetadataWarning, msg): collapsed_coord = coord.collapsed() self.assertTrue(collapsed_coord.has_lazy_points()) diff --git a/lib/iris/tests/unit/cube/test_Cube.py b/lib/iris/tests/unit/cube/test_Cube.py index a733665df8..443c9db546 100644 --- a/lib/iris/tests/unit/cube/test_Cube.py +++ b/lib/iris/tests/unit/cube/test_Cube.py @@ -40,6 +40,8 @@ AncillaryVariableNotFoundError, CellMeasureNotFoundError, CoordinateNotFoundError, + IrisUserWarning, + IrisVagueMetadataWarning, UnitConversionError, ) import iris.tests.stock as stock @@ -676,7 +678,10 @@ def _assert_warn_collapse_without_weight(self, coords, warn): # Ensure that warning is raised. msg = "Collapsing spatial coordinate {!r} without weighting" for coord in coords: - self.assertIn(mock.call(msg.format(coord)), warn.call_args_list) + self.assertIn( + mock.call(msg.format(coord), category=IrisUserWarning), + warn.call_args_list, + ) def _assert_nowarn_collapse_without_weight(self, coords, warn): # Ensure that warning is not raised. @@ -765,7 +770,10 @@ def _assert_warn_cannot_check_contiguity(self, warn): f"bounds. Metadata may not be fully descriptive for " f"'{coord}'. Ignoring bounds." ) - self.assertIn(mock.call(msg), warn.call_args_list) + self.assertIn( + mock.call(msg, category=IrisVagueMetadataWarning), + warn.call_args_list, + ) def _assert_cube_as_expected(self, cube): """Ensure that cube data and coordinates are as expected.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py index a4e0e05a08..641b6b7b44 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py @@ -20,6 +20,7 @@ import numpy as np import pytest +import iris.exceptions from iris.experimental.ugrid.cf import CFUGridAuxiliaryCoordinateVariable from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( netcdf_ugrid_variable, @@ -215,7 +216,10 @@ def test_warn(self): } def operation(warn: bool): - warnings.warn("emit at least 1 warning") + warnings.warn( + "emit at least 1 warning", + category=iris.exceptions.IrisUserWarning, + ) result = CFUGridAuxiliaryCoordinateVariable.identify( vars_all, warn=warn ) @@ -223,7 +227,9 @@ def operation(warn: bool): # Missing warning. warn_regex = rf"Missing CF-netCDF auxiliary coordinate variable {subject_name}.*" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfMissingVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) @@ -235,7 +241,9 @@ def operation(warn: bool): vars_all[subject_name] = netcdf_ugrid_variable( subject_name, "", np.bytes_ ) - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfLabelVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py index 27d5c1db90..5a68a8c03f 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py @@ -20,6 +20,7 @@ import numpy as np import pytest +import iris.exceptions from iris.experimental.ugrid.cf import CFUGridConnectivityVariable from iris.experimental.ugrid.mesh import Connectivity from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( @@ -204,7 +205,10 @@ def test_warn(self): } def operation(warn: bool): - warnings.warn("emit at least 1 warning") + warnings.warn( + "emit at least 1 warning", + category=iris.exceptions.IrisUserWarning, + ) result = CFUGridConnectivityVariable.identify(vars_all, warn=warn) self.assertDictEqual({}, result) @@ -212,7 +216,9 @@ def operation(warn: bool): warn_regex = ( rf"Missing CF-UGRID connectivity variable {subject_name}.*" ) - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfMissingVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) @@ -224,7 +230,9 @@ def operation(warn: bool): vars_all[subject_name] = netcdf_ugrid_variable( subject_name, "", np.bytes_ ) - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfLabelVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py index 6b278cf1b1..8302c30177 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py @@ -20,6 +20,7 @@ import numpy as np import pytest +import iris.exceptions from iris.experimental.ugrid.cf import CFUGridMeshVariable from iris.tests.unit.experimental.ugrid.cf.test_CFUGridReader import ( netcdf_ugrid_variable, @@ -247,13 +248,18 @@ def test_warn(self): } def operation(warn: bool): - warnings.warn("emit at least 1 warning") + warnings.warn( + "emit at least 1 warning", + category=iris.exceptions.IrisUserWarning, + ) result = CFUGridMeshVariable.identify(vars_all, warn=warn) self.assertDictEqual({}, result) # Missing warning. warn_regex = rf"Missing CF-UGRID mesh variable {subject_name}.*" - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfMissingVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) @@ -265,7 +271,9 @@ def operation(warn: bool): vars_all[subject_name] = netcdf_ugrid_variable( subject_name, "", np.bytes_ ) - with pytest.warns(UserWarning, match=warn_regex): + with pytest.warns( + iris.exceptions.IrisCfLabelVarWarning, match=warn_regex + ): operation(warn=True) with pytest.warns() as record: operation(warn=False) diff --git a/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py b/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py index cec4f53bc3..16943c0c15 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py +++ b/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py @@ -15,7 +15,7 @@ import numpy as np -from iris.exceptions import NotYetImplementedError +from iris.exceptions import IrisLoadWarning, NotYetImplementedError import iris.fileformats._ff as ff from iris.fileformats._ff import FF2PP import iris.fileformats.pp as pp @@ -467,7 +467,7 @@ def test_unequal_spacing_eitherside(self): with mock.patch("warnings.warn") as warn: result = ff2pp._det_border(field_x, None) - warn.assert_called_with(msg) + warn.assert_called_with(msg, category=IrisLoadWarning) self.assertIs(result, field_x) def test_increasing_field_values(self): diff --git a/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py b/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py index 6a65397086..72d522ec85 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py +++ b/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py @@ -14,7 +14,7 @@ import numpy as np -from iris.fileformats._ff import FFHeader +from iris.fileformats._ff import FFHeader, _WarnComboLoadingDefaulting MyGrid = collections.namedtuple("MyGrid", "column row real horiz_grid_type") @@ -60,7 +60,8 @@ def test_unknown(self): grid = header.grid() warn.assert_called_with( "Staggered grid type: 0 not currently" - " interpreted, assuming standard C-grid" + " interpreted, assuming standard C-grid", + category=_WarnComboLoadingDefaulting, ) self.assertIs(grid, mock.sentinel.grid) diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py b/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py index ded635984c..624837c19d 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py @@ -15,6 +15,7 @@ from unittest import mock import iris.coords +from iris.exceptions import IrisLoadWarning from iris.fileformats.name_loaders import _build_cell_methods @@ -104,7 +105,7 @@ def test_unrecognised(self): "Unknown {} statistic: {!r}. Unable to " "create cell method.".format(coord_name, unrecognised_heading) ) - warn.assert_called_with(expected_msg) + warn.assert_called_with(expected_msg, category=IrisLoadWarning) def test_unrecognised_similar_to_no_averaging(self): unrecognised_headings = [ @@ -129,7 +130,7 @@ def test_unrecognised_similar_to_no_averaging(self): "Unknown {} statistic: {!r}. Unable to " "create cell method.".format(coord_name, unrecognised_heading) ) - warn.assert_called_with(expected_msg) + warn.assert_called_with(expected_msg, category=IrisLoadWarning) if __name__ == "__main__": diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py index 399a987f11..38882810d2 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py @@ -12,6 +12,7 @@ import tempfile import warnings +from iris.exceptions import IrisLoadWarning import iris.fileformats._nc_load_rules.engine from iris.fileformats.cf import CFReader import iris.fileformats.netcdf @@ -138,7 +139,7 @@ def run_testcase(self, warning_regex=None, **testcase_kwargs): if warning_regex is None: context = self.assertNoWarningsRegexp() else: - context = self.assertWarnsRegex(UserWarning, warning_regex) + context = self.assertWarnsRegex(IrisLoadWarning, warning_regex) with context: cube = self.load_cube_from_cdl(cdl_string, cdl_path, nc_path) diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py index 729a2d8b14..9935a6e5ae 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py @@ -15,6 +15,7 @@ from unittest import mock from iris.coords import CellMethod +from iris.exceptions import IrisCfLoadWarning from iris.fileformats._nc_load_rules.helpers import parse_cell_methods @@ -123,7 +124,7 @@ def test_comment_bracket_mismatch_warning(self): ] for cell_method_str in cell_method_strings: with self.assertWarns( - UserWarning, + IrisCfLoadWarning, msg="Cell methods may be incorrectly parsed due to mismatched brackets", ): _ = parse_cell_methods(cell_method_str) @@ -139,7 +140,7 @@ def test_badly_formatted_warning(self): ] for cell_method_str in cell_method_strings: with self.assertWarns( - UserWarning, + IrisCfLoadWarning, msg=f"Failed to fully parse cell method string: {cell_method_str}", ): _ = parse_cell_methods(cell_method_str) diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py index 841935cc81..c15c8737fd 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py @@ -16,6 +16,7 @@ from iris.coords import DimCoord from iris.cube import Cube +from iris.exceptions import IrisFactoryCoordNotFoundWarning from iris.fileformats.netcdf.loader import _load_aux_factory @@ -165,7 +166,8 @@ def test_formula_terms_ap_missing_coords(self): with mock.patch("warnings.warn") as warn: _load_aux_factory(self.engine, self.cube) warn.assert_called_once_with( - "Unable to find coordinate for variable " "'ap'" + "Unable to find coordinate for variable " "'ap'", + category=IrisFactoryCoordNotFoundWarning, ) self._check_no_delta() diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py index 12af318c01..af0d7bcd30 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py @@ -31,6 +31,7 @@ ) from iris.coords import AuxCoord, DimCoord from iris.cube import Cube +from iris.exceptions import IrisMaskValueMatchWarning from iris.fileformats.netcdf import Saver, _thread_safe_nc import iris.tests.stock as stock @@ -555,7 +556,7 @@ def test_contains_fill_value_passed(self): cube = self._make_cube(">f4") fill_value = 1 with self.assertWarnsRegex( - UserWarning, + IrisMaskValueMatchWarning, "contains unmasked data points equal to the fill-value", ): with self._netCDF_var(cube, fill_value=fill_value): @@ -567,7 +568,7 @@ def test_contains_fill_value_byte(self): cube = self._make_cube(">i1") fill_value = 1 with self.assertWarnsRegex( - UserWarning, + IrisMaskValueMatchWarning, "contains unmasked data points equal to the fill-value", ): with self._netCDF_var(cube, fill_value=fill_value): @@ -579,7 +580,7 @@ def test_contains_default_fill_value(self): cube = self._make_cube(">f4") cube.data[0, 0] = _thread_safe_nc.default_fillvals["f4"] with self.assertWarnsRegex( - UserWarning, + IrisMaskValueMatchWarning, "contains unmasked data points equal to the fill-value", ): with self._netCDF_var(cube): diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py index 9686c88abf..da5f2d88fa 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py @@ -18,6 +18,7 @@ import numpy as np import pytest +from iris.exceptions import IrisMaskValueMatchWarning import iris.fileformats.netcdf._thread_safe_nc as threadsafe_nc from iris.fileformats.netcdf.saver import Saver, _FillvalueCheckInfo @@ -183,5 +184,5 @@ def test_warnings(self, compute, data_form): if n_expected_warnings > 0: warning = issued_warnings[0] msg = "contains unmasked data points equal to the fill-value, 2.0" - assert isinstance(warning, UserWarning) + assert isinstance(warning, IrisMaskValueMatchWarning) assert msg in warning.args[0] diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py index b2e4b63e3a..317f75bb8c 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py @@ -11,9 +11,9 @@ import numpy as np import pytest +from iris.exceptions import IrisSaverFillValueWarning from iris.fileformats.netcdf._thread_safe_nc import default_fillvals from iris.fileformats.netcdf.saver import ( - SaverFillValueWarning, _fillvalue_report, _FillvalueCheckInfo, ) @@ -93,12 +93,14 @@ def test_warn(self, has_collision): expected_msg = "'' contains unmasked data points equal to the fill-value" # Enter a warnings context that checks for the error. warning_context = pytest.warns( - SaverFillValueWarning, match=expected_msg + IrisSaverFillValueWarning, match=expected_msg ) warning_context.__enter__() else: # Check that we get NO warning of the expected type. - warnings.filterwarnings("error", category=SaverFillValueWarning) + warnings.filterwarnings( + "error", category=IrisSaverFillValueWarning + ) # Do call: it should raise AND return a warning, ONLY IF there was a collision. result = _fillvalue_report( diff --git a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py index 44dcf8ac48..2279bcffc3 100644 --- a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py +++ b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py @@ -63,7 +63,7 @@ def test_unhandled(self): vertical_coord_val=1.0, vertical_coord_type=-1 ) warn.assert_called_once_with( - "Vertical coord -1 not yet handled", TranslationWarning + "Vertical coord -1 not yet handled", category=TranslationWarning ) def test_null(self): diff --git a/lib/iris/tests/unit/fileformats/pp/test_PPField.py b/lib/iris/tests/unit/fileformats/pp/test_PPField.py index 316894ded1..f2bbf97a80 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_PPField.py +++ b/lib/iris/tests/unit/fileformats/pp/test_PPField.py @@ -13,6 +13,7 @@ import numpy as np +from iris.exceptions import IrisDefaultingWarning, IrisMaskValueMatchWarning import iris.fileformats.pp as pp from iris.fileformats.pp import PPField, SplittableInt @@ -91,7 +92,7 @@ def field_checksum(data): data_64 = np.linspace(0, 1, num=10, endpoint=False).reshape(2, 5) checksum_32 = field_checksum(data_64.astype(">f4")) msg = "Downcasting array precision from float64 to float32 for save." - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisDefaultingWarning, msg): checksum_64 = field_checksum(data_64.astype(">f8")) self.assertEqual(checksum_32, checksum_64) @@ -104,7 +105,7 @@ def test_masked_mdi_value_warning(self): [1.0, field.bmdi, 3.0], dtype=np.float32 ) msg = "PPField data contains unmasked points" - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisMaskValueMatchWarning, msg): with self.temp_filename(".pp") as temp_filename: with open(temp_filename, "wb") as pp_file: field.save(pp_file) @@ -116,7 +117,7 @@ def test_unmasked_mdi_value_warning(self): # Make float32 data, as float64 default produces an extra warning. field.data = np.array([1.0, field.bmdi, 3.0], dtype=np.float32) msg = "PPField data contains unmasked points" - with self.assertWarnsRegex(UserWarning, msg): + with self.assertWarnsRegex(IrisMaskValueMatchWarning, msg): with self.temp_filename(".pp") as temp_filename: with open(temp_filename, "wb") as pp_file: field.save(pp_file) From f05404766bb24d234d5bd7003d372e1c68468aa0 Mon Sep 17 00:00:00 2001 From: Elias <110238618+ESadek-MO@users.noreply.github.com> Date: Fri, 22 Sep 2023 12:44:40 +0100 Subject: [PATCH 53/82] Replaced pkg_resources version parser with packager version parser. (#5511) * removed pkg_resources version parse references * Corrected pull num * Fix What's New indentation * Fix What's New indentation. --------- Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --- docs/src/whatsnew/latest.rst | 5 +++-- .../tests/unit/experimental/ugrid/mesh/test_Connectivity.py | 4 ++-- .../tests/unit/experimental/ugrid/mesh/test_MeshCoord.py | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 4c732c43df..b342a51a01 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -84,8 +84,9 @@ This document explains the changes made to Iris for this release working properly. (Main pull request: :pull:`5437`, more detail: :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) -#. `@acchamber`_ removed several warnings from iris related to Numpy 1.25 deprecations. - (:pull:`5493`) +#. `@acchamber`_ and `@ESadek-MO`_ resolved several deprecation to reduce + number of warnings raised during tests. + (:pull:`5493`, :pull:`5511`) #. `@trexfeathers`_ replaced all uses of the ``logging.WARNING`` level, in favour of using Python warnings, following team agreement. (:pull:`5488`) diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py index f343f4be24..7e90555801 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py @@ -14,7 +14,7 @@ import numpy as np from numpy import ma -from pkg_resources import parse_version +from packaging import version from iris._lazy_data import as_lazy_data, is_lazy_data from iris.experimental.ugrid.mesh import Connectivity @@ -63,7 +63,7 @@ def test_indices(self): def test_read_only(self): attributes = ("indices", "cf_role", "start_index", "location_axis") - if parse_version(python_version()) >= parse_version("3.11"): + if version.parse(python_version()) >= version.parse("3.11"): msg = "object has no setter" else: msg = "can't set attribute" diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py index cb90c176b6..ba7306bded 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py @@ -17,7 +17,7 @@ import dask.array as da import numpy as np -from pkg_resources import parse_version +from packaging import version import pytest from iris._lazy_data import as_lazy_data, is_lazy_data @@ -79,7 +79,7 @@ def setUp(self): def test_fixed_metadata(self): # Check that you cannot set any of these on an existing MeshCoord. meshcoord = self.meshcoord - if parse_version(python_version()) >= parse_version("3.11"): + if version.parse(python_version()) >= version.parse("3.11"): msg = "object has no setter" else: msg = "can't set attribute" From d923f343f59a20bad1c0273d44f47716d8bd6838 Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Mon, 25 Sep 2023 08:54:40 +0100 Subject: [PATCH 54/82] Docs page on filtering warnings (#5509) * Docs page on filtering warnings. * What's New entry. * Warnings doctest relative path. * Corrections to command line warning filtering. * Typo. --- .../src/further_topics/filtering_warnings.rst | 271 ++++++++++++++++++ docs/src/userguide/index.rst | 1 + docs/src/whatsnew/latest.rst | 3 +- 3 files changed, 274 insertions(+), 1 deletion(-) create mode 100644 docs/src/further_topics/filtering_warnings.rst diff --git a/docs/src/further_topics/filtering_warnings.rst b/docs/src/further_topics/filtering_warnings.rst new file mode 100644 index 0000000000..689ea69a52 --- /dev/null +++ b/docs/src/further_topics/filtering_warnings.rst @@ -0,0 +1,271 @@ +.. _filtering-warnings: + +================== +Filtering Warnings +================== + +Since Iris cannot predict your specific needs, it by default raises Warnings +for anything that might be a problem for **any** user, and is designed to work with +you to ``ignore`` Warnings which you do not find helpful. + +.. testsetup:: filtering_warnings + + from pathlib import Path + import sys + import warnings + + import iris + import iris.coord_systems + import iris.exceptions + + # Hack to ensure doctests actually see Warnings that are raised, and that + # they have a relative path (so a test pass is not machine-dependent). + warnings.filterwarnings("default") + IRIS_FILE = Path(iris.__file__) + def custom_warn(message, category, filename, lineno, file=None, line=None): + filepath = Path(filename) + filename = str(filepath.relative_to(IRIS_FILE.parents[1])) + sys.stdout.write(warnings.formatwarning(message, category, filename, lineno)) + warnings.showwarning = custom_warn + + geog_cs_globe = iris.coord_systems.GeogCS(6400000) + orthographic_coord_system = iris.coord_systems.Orthographic( + longitude_of_projection_origin=0, + latitude_of_projection_origin=0, + ellipsoid=geog_cs_globe, + ) + + + def my_operation(): + geog_cs_globe.inverse_flattening = 0.1 + _ = orthographic_coord_system.as_cartopy_crs() + +Here is a hypothetical operation - ``my_operation()`` - which raises two +Warnings: + +.. doctest:: filtering_warnings + + >>> my_operation() + ... + iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) + iris/coord_systems.py:821: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + warnings.warn( + +Warnings can be suppressed using the Python warnings filter with the ``ignore`` +action. Detailed information is available in the Python documentation: +:external+python:mod:`warnings`. + +The key points are: + +- :ref:`When`: a warnings filter can be applied + either from the command line or from within Python. +- :ref:`What`: a warnings filter accepts + various arguments to specify which Warnings are being filtered. Both broad + and narrow filters are possible. + +.. _warning-filter-application: + +**When** a Warnings Filter can be Applied +----------------------------------------- + +- **Command line:** setting the :external+python:envvar:`PYTHONWARNINGS` + environment variable. +- **Command line:** the `python -W `_ + command line argument. +- **Within Python:** use :func:`warnings.filterwarnings` . + +The :ref:`warning-filter-specificity` section demonstrates using +:func:`warnings.filterwarnings`, and shows the equivalent **command line** +approaches. + + +.. _warning-filter-specificity: + +**What** Warnings will be Filtered +---------------------------------- + +.. note:: + + For all of these examples we are using the + :class:`~warnings.catch_warnings` context manager to ensure any changes to + settings are temporary. + + This should always work fine for the ``ignore`` + warning filter action, but note that some of the other actions + may not behave correctly with all Iris operations, as + :class:`~warnings.catch_warnings` is not thread-safe (e.g. using the + ``once`` action may cause 1 warning per chunk of lazy data). + +Specific Warnings +~~~~~~~~~~~~~~~~~ + +**When you do not want a specific warning, but still want all others.** + +You can target specific Warning messages, e.g. + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings("ignore", message="Discarding false_easting") + ... my_operation() + ... + iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) + +:: + + python -W ignore:"Discarding false_easting" + export PYTHONWARNINGS=ignore:"Discarding false_easting" + +---- + +Or you can target Warnings raised by specific lines of specific modules, e.g. + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=454) + ... my_operation() + ... + iris/coord_systems.py:821: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + warnings.warn( + +:: + + python -W ignore:::iris.coord_systems:454 + export PYTHONWARNINGS=ignore:::iris.coord_systems:454 + +Warnings from a Common Source +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**When you do not want ANY warnings raised by a module, or collection of +modules.** + +E.g. filtering the ``coord_systems`` module: + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings("ignore", module="iris.coord_systems") + ... my_operation() + +:: + + python -W ignore:::iris.coord_systems + export PYTHONWARNINGS=ignore:::iris.coord_systems + +---- + +If using :func:`warnings.filterwarnings` , you can also use partial +definitions. The below example will ``ignore`` all Warnings from ``iris`` as a +whole. + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings("ignore", module="iris") + ... my_operation() + +The above 'partial' filter is not available with the command line approaches. + +Warnings of a Common Type +~~~~~~~~~~~~~~~~~~~~~~~~~ + +**When you do not want any Warnings of the same nature, from anywhere in the +code you are calling.** + +The below example will ``ignore`` any +:class:`~iris.exceptions.IrisDefaultingWarning` that gets raised by *any* +module during execution: + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings( + ... "ignore", + ... category=iris.exceptions.IrisDefaultingWarning + ... ) + ... my_operation() + ... + iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) + +---- + +Using :class:`~iris.exceptions.IrisUserWarning` in the filter will ``ignore`` +both Warnings, since :class:`~iris.exceptions.IrisDefaultingWarning` subclasses +:class:`~iris.exceptions.IrisUserWarning` : + +.. doctest:: filtering_warnings + + >>> with warnings.catch_warnings(): + ... warnings.filterwarnings( + ... "ignore", + ... category=iris.exceptions.IrisUserWarning + ... ) + ... my_operation() + +---- + +The command line approaches can only handle the built-in Warning +categories (`cpython#66733`_):: + + python -W ignore::UserWarning + export PYTHONWARNINGS=ignore::UserWarning + +---- + +There are several built-in Python warning categories that can be used here +(:class:`DeprecationWarning` being a popular example, see +:external+python:mod:`warnings` for more). Since Iris has +so many different warnings that might be raised, Iris subclasses +:class:`UserWarning` to :class:`~iris.exceptions.IrisUserWarning`, which itself +has **many** specialised subclasses. These subclasses exist to give you more +granularity in your warning filtering; you can see the full list by +searching the :mod:`iris.exceptions` page for ``warning`` . + +.. attention:: + + If you have ideas for adding/altering Iris' warning categories, please + :ref:`get in touch`! The categories exist to + make your life easier, and it is simple to make modifications. + + +More Detail +----------- + +Different people use Iris for very different purposes, from quick file +visualisation to extract-transform-load to statistical analysis. These +contrasting priorities mean disagreement on which Iris problems can be ignored +and which are critically important. + +For problems that prevent Iris functioning: **Concrete Exceptions** are raised, which +stop code from running any further - no debate here. For less catastrophic +problems: **Warnings** are raised, +which notify you (in ``stderr``) but allow code to continue running. The Warnings are +there because Iris may **OR may not** function in the way you expect, +depending on what you need - e.g. a problem might prevent data being saved to +NetCDF, but statistical analysis will still work fine. + +Examples of Iris Warnings +~~~~~~~~~~~~~~~~~~~~~~~~~ + +- If you attempt to plot un-bounded point data as a ``pcolormesh``: Iris will + guess appropriate bounds around each point so that quadrilaterals can be + plotted. This permanently modifies the relevant coordinates, so the you are + warned in case downstream operations assume un-bounded coordinates. +- If you load a NetCDF file where a CF variable references another variable - + e.g. ``my_var:coordinates = "depth_var" ;`` - but the referenced variable + (``depth_var``) is not in the file: Iris will still construct + its data model, but without this reference relationship. You are warned since + the file includes an error and the loaded result might therefore not be as + expected. + + +.. testcleanup:: filtering_warnings + + warnings.filterwarnings("ignore") + + +.. _cpython#66733: https://github.com/python/cpython/issues/66733 diff --git a/docs/src/userguide/index.rst b/docs/src/userguide/index.rst index 771aa450a3..c87323da8e 100644 --- a/docs/src/userguide/index.rst +++ b/docs/src/userguide/index.rst @@ -42,6 +42,7 @@ they may serve as a useful reference for future exploration. :maxdepth: 2 :caption: Further Topics + ../further_topics/filtering_warnings ../further_topics/metadata ../further_topics/lenient_metadata ../further_topics/lenient_maths diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index b342a51a01..b4396ad0d5 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -72,7 +72,8 @@ This document explains the changes made to Iris for this release 📚 Documentation ================ -#. N/A +#. `@trexfeathers`_ documented the intended use of warnings filtering with + Iris. See :ref:`filtering-warnings`. (:pull:`5509`) 💼 Internal From 78ec427d9069073b92addd29d53f51afd3b3b566 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 10:29:13 +0100 Subject: [PATCH 55/82] Updated environment lockfiles (#5513) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 87 +++++++++++++------------ requirements/locks/py311-linux-64.lock | 83 ++++++++++++------------ requirements/locks/py39-linux-64.lock | 89 +++++++++++++------------- 3 files changed, 128 insertions(+), 131 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index efa5431823..ac9c50ade5 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: bc0383c4702650016b286d9f1d4b405e53a5c85772e04622e3c10fd51465463a +# input_hash: 94966cd7393527bff211c87589678b2ffe1697705267a20b2708a4cc27da5376 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,14 +9,14 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-3_cp310.conda#4eb33d14d794b0f4be116443ffed3853 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.10-4_cp310.conda#26322ec5d7712c3ded99dd656142b8ce https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a 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_1.conda#8bb001683321dcbde117a7337b5aace7 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -32,11 +32,11 @@ https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d @@ -45,13 +45,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -74,7 +74,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25c 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2.conda#e75a75a6eaf6f318dae2631158c46575 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -101,7 +101,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py310hc6cd4ac_0.conda#d1157aba60e67df614438afd5cd53564 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py310hc6cd4ac_2.conda#51af196e0a8d2f253b695f9a63d53f4b https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 @@ -132,41 +132,41 @@ https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 -https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +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/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_0.conda#741385a84f6a1b6623eb39226cc669e8 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 +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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_0.conda#5597d9f9778af6883ae64f0e7d39416c -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hdf3cbec_0.conda#5311a49aaea44b73935c84a6d9a68e5f +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_1.conda#b74e07a054c479e45a83a83fc5be713c +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hd41b1e2_1.conda#39cac2febd98523afe9ed8e33c22f67d https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h1fa729e_0.conda#b0f0a014fc04012c05f39df15fe270ce +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda#cb25177acf28cc35cfa6c1ac1c679e22 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_0.conda#75e60ce53c01a121039b3050c9e1f759 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_1.conda#708d39474e54ba0f1832afb551633338 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-py310h2372a71_0.conda#511120451bf728d52bb37c73d4069e57 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 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/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -177,22 +177,22 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f55 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_0.conda#dfb49d3ac440e1a236080f9c300e642f +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda#b23e0147fa5f7a9380e06334c7266ad5 https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h5764c6d_0.tar.bz2#e972c5a1f472561cf4a91962cb01f4b4 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h2372a71_1.conda#cd944e0f7a4d1529c6707bd65423bd64 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 +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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h255011f_3.conda#800596144bb613cd7ac58b80900ce835 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py310h2372a71_0.conda#0834a720fe60f511913ac52cd01e40dc +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h2fee648_5.conda#fef75d6c60d8a1cc7e6d1707f470a4e2 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py310h2372a71_1.conda#d0d56bc5723b41cc1af97e2b78c54b9b https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py310h2372a71_0.conda#1f18231ffab82f236ce074b2aaa07e54 https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 @@ -201,29 +201,29 @@ https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c7 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py310h582fbeb_0.conda#adcc7ea52e4d39d0a93f6a2ef36c7fd4 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py310h29da1c1_1.conda#8e93b1c69cddf89fd412178d3d418bae https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 +https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 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/linux-64/sip-6.7.11-py310hc6cd4ac_0.conda#be1a7e420b7bac4ee02353d0e3161918 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py310hc6cd4ac_1.conda#c7936ec7db24bb913671a1bc5eb2b79d https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py310ha4c1d20_0.conda#1ac91334ffc1f3fd297319cd1c74b34e +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py310hb13e2d6_0.conda#ac3b67e928cc71548efad9b522d42fef https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py310h24ef57a_1.conda#a689e86d7bbab67f889fc384aa72b088 -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_4.conda#345beb10601d5360a15c033d68165a4f +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py310h32c33b7_1.conda#453939b9853937e80c94e9eb3da75981 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b @@ -232,11 +232,11 @@ https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.ta https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py310hd41b1e2_0.conda#e00d52a8657a79b0a7c8c10559784759 https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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.0-py310hcc13569_0.conda#6c92da4ec4e301d09a365c0584e632c8 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py310hcc13569_0.conda#ae976997aad218dc467d206ded2c8d8e https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py310hb13e2d6_1.conda#4f522fc9cb8ecfa25e39f5c2ea65b16b @@ -249,7 +249,7 @@ https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.cond https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py310h62c0568_0.conda#0ba9c5af7a6cd0244a8ae2038c89317f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py310h62c0568_1.conda#d6fe03e8d9e80b6e20b7ae60bf4f88b0 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_102.conda#6025039727a049ab4c0f2aab842c01cb https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d @@ -258,9 +258,9 @@ https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.c https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_4.conda#db878a0696f9a7980171fd3cf29cca22 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py310hff52083_0.conda#6c194758494847c927ad3bcf37fafa49 -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py310hff52083_1.conda#8cc0628c9703cf5c8404465e838cc5ae +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -270,4 +270,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 - diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index ff6f4ff76c..2d41a7dd3f 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: e651bbc39258b157d888d85ff878fc5c3d62cc9a632c7b8bf515b62cd8d2da53 +# input_hash: 40113e38fffa3a31ce64e60231c756c740914d9f0444edaeecd07e598851abc8 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,14 +9,14 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-3_cp311.conda#c2e2630ddb68cf52eec74dc7dfab20b5 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229 +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/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_1.conda#8bb001683321dcbde117a7337b5aace7 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -32,11 +32,11 @@ https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d @@ -45,13 +45,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -74,7 +74,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25c 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2.conda#e75a75a6eaf6f318dae2631158c46575 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -101,7 +101,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda#f0288cb82594b1cbc71111d1cd3c5422 @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py311hb755f60_0.conda#81d4eacf7eb2d40beee33aa71e8f94ad +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py311hb755f60_2.conda#35878142ccd98f076942b40ffb3cfbab https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 @@ -132,41 +132,41 @@ https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 -https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +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/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_0.conda#f53903649188b99e6b44c560c69f5b23 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_0.conda#9904dc4adb5d547cb21e136f98cb24b0 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311ha3edf6b_0.conda#7415f24f8c44e44152623d93c5015000 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311h9547e67_1.conda#079d914d7d7341663e30823c10083c0f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h2582759_0.conda#a90f8e278c1cd7064b2713e6b7db87e6 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h459d7ec_1.conda#490d7fa8675afd1aa6f1b2332d156a45 https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_0.conda#87b306459b81b7a7aaad37222d537a4f +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_1.conda#7e2181758f84a9c7e776af10fbb2f1a0 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_0.conda#30eaaf31141e785a445bf1ede6235fe3 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a 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/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -177,7 +177,7 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f55 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_0.conda#7d9a31416c18704f55946ff7cf8da5dc +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda#a700fcb5cedd3e72d0c75d095c7a6eda https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -185,13 +185,13 @@ https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 +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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311h409f033_3.conda#9025d0786dbbe4bc91fd8e85502decce -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py311h459d7ec_0.conda#d23df37f3a595e8ffca99642ab6df3eb +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311hb3a22ac_5.conda#75d52ef1d318d18e554aadd13ce91b9d +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py311h459d7ec_1.conda#bb0e424cb11a7e86700d0bf69e24faec https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py311h459d7ec_0.conda#fc327c0ea015db3b6484eabb37d44e60 https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 @@ -200,29 +200,29 @@ https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c7 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py311h0b84326_0.conda#4b24acdc1fbbae9da03147e7d2cf8c8a +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/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 +https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 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/linux-64/sip-6.7.11-py311hb755f60_0.conda#17d25ab64a32872b349579fdb07bbdb2 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py311hb755f60_1.conda#e09eb6aad3607fb6f2c071a2c6a26e1d https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py311h64a7726_0.conda#bf16a9f625126e378302f08e7ed67517 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py311ha169711_1.conda#92633556d37e88ce45193374d408072c -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py311hb755f60_4.conda#3cff4c98f775ff6439b95bb7917702e9 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_1.conda#2e48207ebbd3e25ad14881a27e51fa1e +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py311hb755f60_5.conda#e4d262cc3600e70b505a6761d29f6207 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b @@ -231,11 +231,11 @@ https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.ta https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py311h9547e67_0.conda#db5b3b0093d0d4565e5c89578108402e https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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.0-py311h320fe9a_0.conda#7f35501e126df510b250ad893482ef45 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py311h320fe9a_0.conda#1692362ba82f0556099f0143f7842de3 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_1.conda#58af16843fc4469770bdbaf45d3a19de @@ -248,7 +248,7 @@ https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.cond https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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_0.conda#b67672c2f39ef2912a1814e29e42c7ca +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/netcdf4-1.6.4-nompi_py311he8ad708_102.conda#b48083ba918347f30efa94f7dc694919 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 @@ -257,9 +257,9 @@ https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.c https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_4.conda#afe5363b88d2e97266063558a6599bd0 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py311h38be061_0.conda#8148b139a0560666d661cf1d179a0cca -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_5.conda#ec7e45bc76d9d0b69a74a2075932b8e8 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py311h38be061_1.conda#6a2cd22264c8a61c8a571bb6e524775f +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -269,4 +269,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 - diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index fc574db4f3..fac192e99b 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 8b81c2e9972c5059e1b9013a49eddbd4697c92807d6f5d5282350b6c6d0dc518 +# input_hash: cc8b627bc99f75128e66e8d5f19fad191f76de7f27898db96e0eef7d6dc6e83a @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.7.22-hbcca054_0.conda#a73ecd2988327ad4c8f2c331482917f2 @@ -9,14 +9,14 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-hab24e00_0.tar.bz2#19410c3df09dfb12d1206132a1d357c5 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_1.conda#acfb4817400db5804030a3a7ef7909a1 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-3_cp39.conda#0dd193187d54e585cac7eab942a8847e +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_2.conda#9172c297304f2a20134fc56c97fbe229 +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda#bfe4b3259a8ac6cdf0037752904da6a7 https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a 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_1.conda#8bb001683321dcbde117a7337b5aace7 +https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_2.conda#e2042154faafe61969556f28bade94b9 https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2#73aaf86a425cc6e73fcf236a5a46396d 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_1.conda#ff8999574b465089ba0aa25a5e865bd0 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.conda#c28003b0be0494f9a7664389146716ff https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 @@ -32,11 +32,11 @@ https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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_1.conda#a0d27fd5c6f05aa45e9602b1db49581c +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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d @@ -45,13 +45,13 @@ https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2# https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 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/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.2-hd590300_0.conda#e5ac5227582d6c83ccf247288c0eb095 +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.1.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 @@ -74,7 +74,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25c 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/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_1.conda#394218a92951499aed2ab1bafb30b570 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2.conda#e75a75a6eaf6f318dae2631158c46575 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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 @@ -101,7 +101,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.1-h8b53f26_1.conda#5b09e13d732dda1a2bc9adc711164f4d +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.cond https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda#b325bfc4cff7d7f8a868f1f7ecc4ed16 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.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py39h3d6467e_0.conda#f90bb794d0f7463fbe28596796aa0100 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py39h3d6467e_2.conda#3e27ec02c612b1580e94fe8468c28040 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f @@ -132,41 +132,41 @@ https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.1.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.9.1-pyh1a96a4e_0.conda#d69753ff6ee3c84a6638921dd95db662 -https://conda.anaconda.org/conda-forge/linux-64/gdk-pixbuf-2.42.10-h6b639ba_2.conda#ee8220db21db8094998005990418fe5b +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/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/noarch/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_0.conda#3822b0ae733e022c10469c0e46bdddc4 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda#c9f74d717e5a2847a9f8b779c54130f2 +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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.1-hbf2b3c1_0.conda#4963f3f12db45a576f2b8fbe9a0b8569 +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_0.conda#9c858d105816f454c6b64f3e19184b60 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h4b4f3f3_0.conda#413374bab5022a5199c5dd89aef75df5 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h7633fee_1.conda#45d24492a2acf7d8ad8c4de6491a4fe2 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 -https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-hfec8fc6_2.conda#5ce6a42505c6e9e6151c54c3ec8d68ea +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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39h72bdee0_0.conda#1d54d3a75c3192ab7655d9c3d16809f1 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda#c2e412b0f11e5983bcfc35d9beb91ecb https://conda.anaconda.org/conda-forge/noarch/pycparser-2.21-pyhd8ed1ab_0.tar.bz2#076becd9e05608f8dc72757d5f3a91ff https://conda.anaconda.org/conda-forge/noarch/pygments-2.16.1-pyhd8ed1ab_0.conda#40e5cb18165466773619e5c963f00a7b 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_0.conda#41841cc1d7387bb7a30cdde4d88afbf4 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_1.conda#6295f6164ced8634e3d95cd5d08ad95d 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-py39hd1e30aa_0.conda#ccecb3196b3678e9b5fc8441d681c203 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda#37218233bcdc310e4fde6453bc1b40d8 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/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e @@ -177,54 +177,54 @@ https://conda.anaconda.org/conda-forge/noarch/tblib-2.0.0-pyhd8ed1ab_0.conda#f55 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/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_0.conda#ee7f18d58a96b04fdbd2e55f7694ae0d +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874 https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hb9d737c_0.tar.bz2#230d65004135bf312504a1bbcb0c7a08 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hd1e30aa_1.conda#7c7ab84210a972d9efe49655802e904c https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 -https://conda.anaconda.org/conda-forge/noarch/zipp-3.16.2-pyhd8ed1ab_0.conda#2da0451b54c4563c32490cb1b7cf68a1 +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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39he91dace_3.conda#20080319ef73fbad74dcd6d62f2a3ffe +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39h7a31438_5.conda#a2271dc58a5291d18b42fa4d45d42218 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_0.conda#434246edfc30e20c0847d4c2caff0a53 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py39hd1e30aa_0.conda#de06dc7edaddbd3b60c050f3a95d6fe6 https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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.0.1-pyhd8ed1ab_0.conda#d978c61aa5fc2c69380d53ad56b5ae86 +https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1ab_0.conda#48b0d98e0c0ec810d3ccc2a0926c8c0e https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h74d50f4_7.conda#3453ac94a99ad9daf17e8a313d274567 +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.0-py39haaeba84_0.conda#f97a95fab7c69678ebf6b57396b1323e +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py39h444a776_1.conda#52ad49ce520bec37ff0423b16c8bb052 https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 -https://conda.anaconda.org/conda-forge/linux-64/proj-9.2.1-ha643af7_0.conda#e992387307f4403ba0ec07d009032550 +https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 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/linux-64/sip-6.7.11-py39h3d6467e_0.conda#4eaef850715aff114e2126a2f1a7b1f0 +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py39h3d6467e_1.conda#39d2473881976eeb57c09c106d2d9fc3 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.4-pyhd8ed1ab_0.conda#18badd8fa3648d1beb1fcc7f2e0f756e -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.5-h98fc4e7_1.conda#483fe58e14ba244110cd1be2b771b70f +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda#98db5f8813f45e2b29766aff0e4a499c -https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.0.1-pyhd8ed1ab_0.conda#54661981fd331e20847d8a49543dd9af +https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.0-pyhd8ed1ab_0.conda#6a62c2cc25376a0d050b3d1d221c3ee9 https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py39h6183b62_0.conda#a50279322335a176d74ed167f9ce468b +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py39h474f0d3_0.conda#62f1d2e05327bf62728afa448f2a9261 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.0-py39h5ed0f51_1.conda#9c455b3b3b55f13b2094932740cd3efb -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_4.conda#b83a218fa97e9963c858d0db651a7506 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py39hce394fd_1.conda#b5188eeb7df815911a7c8db0fc16b89b +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_5.conda#93aff412f3e49fdb43361c0215cbd72d https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 @@ -232,11 +232,11 @@ https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py39h7633fee_0.conda#b673f03c191683996e66c881f90aff2b https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.5-h8e1006c_1.conda#98206c865fccdea9723f0c6f9241a24f +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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.0-py39hddac248_0.conda#0a3624f600f51df010a274176e356ac5 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py39hddac248_0.conda#e335750b7e47bb4d12db170e1a6e2608 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h474f0d3_1.conda#f62409d868e23c1f97ae2b0db5658385 @@ -249,7 +249,7 @@ https://conda.anaconda.org/conda-forge/linux-64/esmf-8.4.2-nompi_h9e768e6_3.cond https://conda.anaconda.org/conda-forge/linux-64/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py39he9076e7_0.conda#a529a20267af9f085c7f991cae79fef2 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py39he9076e7_1.conda#3337ebf55443f31a1148f3ca6f1d9673 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4282601_102.conda#05390bd5ad0ddc2f719392d087673344 https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e @@ -258,9 +258,9 @@ https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.co https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_4.conda#e12391692d70732bf1df08b7ecf40095 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py39hf3d152e_0.conda#e348333b50ff1f978f3d6af24512de0b -https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.0-pyhd8ed1ab_0.conda#16cff214435f2a8163fbe67db9eafb96 +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda#e1f148e57d071b09187719df86f513c1 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py39hf3d152e_1.conda#3b6499658e281eb7204161f336926071 +https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.14.0-pyhd8ed1ab_0.conda#b3788794f88c9512393032e448428261 @@ -270,4 +270,3 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b https://conda.anaconda.org/conda-forge/noarch/sphinx-5.3.0-pyhd8ed1ab_0.tar.bz2#f9e1fcfe235d655900bfeb6aee426472 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 - From c3412f73547def28fb50a6105b23e669fc475e36 Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Mon, 2 Oct 2023 13:52:54 +0100 Subject: [PATCH 56/82] Ensure removal of release candidate from What's New title. (#5526) --- docs/src/whatsnew/3.7.rst | 10 +++++----- tools/release_do_nothing.py | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/src/whatsnew/3.7.rst b/docs/src/whatsnew/3.7.rst index d5ea21f3d7..f1c7fb5f2c 100644 --- a/docs/src/whatsnew/3.7.rst +++ b/docs/src/whatsnew/3.7.rst @@ -1,7 +1,7 @@ .. include:: ../common_links.inc -v3.7 (16 Aug 2023) [release candidate] -************************************** +v3.7 (16 Aug 2023) +****************** This document explains the changes made to Iris for this release (:doc:`View all changes `.) @@ -46,7 +46,7 @@ This document explains the changes made to Iris for this release #. `@rcomer`_ rewrote :func:`~iris.util.broadcast_to_shape` so it now handles lazy data. (:pull:`5307`) - + .. _concat_warnings: #. `@acchamber`_ added error and warning messages about coordinate overlaps to @@ -69,11 +69,11 @@ This document explains the changes made to Iris for this release ============= #. `@acchamber`_ fixed a bug with :func:`~iris.util.unify_time_units` so it does not block - concatenation through different data types in rare instances. (:pull:`5372`) + concatenation through different data types in rare instances. (:pull:`5372`) #. `@acchamber`_ removed some obsolete code that prevented extraction of time points from cubes with bounded times (:pull:`5175`) - + .. _cftime_warnings: #. `@rcomer`_ modified pp-loading to avoid a ``cftime`` warning for non-standard diff --git a/tools/release_do_nothing.py b/tools/release_do_nothing.py index 5d7dd2abf2..afe12a662d 100755 --- a/tools/release_do_nothing.py +++ b/tools/release_do_nothing.py @@ -279,6 +279,11 @@ def finalise_whats_new( whatsnew_title += " [release candidate]" # TODO: automate message = f"In {rsts.release.name}: set the page title to:\n{whatsnew_title}\n" + if not is_release_candidate: + message += ( + "\nBe sure to remove any existing mentions of release " + "candidate from the title.\n" + ) _wait_for_done(message) message = ( From 47ec7f3ecf043534f8b9183c5a552d259960d60b Mon Sep 17 00:00:00 2001 From: Henry Wright <84939917+HGWright@users.noreply.github.com> Date: Mon, 2 Oct 2023 16:11:49 +0100 Subject: [PATCH 57/82] updating docs and stale comment (#5522) --- .github/workflows/stale.yml | 2 +- .../developers_guide/contributing_documentation_easy.rst | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 67b0515e8b..f363410347 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -46,7 +46,7 @@ jobs: If you still care about this issue, then please either: * Re-open this issue, if you have sufficient permissions, or - * Add a comment pinging `@SciTools/iris-devs` who will re-open on your behalf. + * Add a comment stating that this is still relevant and someone will re-open it on your behalf. # Comment on the staled prs while closed. close-pr-message: | diff --git a/docs/src/developers_guide/contributing_documentation_easy.rst b/docs/src/developers_guide/contributing_documentation_easy.rst index f54de628bf..51554f9e19 100755 --- a/docs/src/developers_guide/contributing_documentation_easy.rst +++ b/docs/src/developers_guide/contributing_documentation_easy.rst @@ -81,9 +81,9 @@ Describing what you've changed and why will help the person who reviews your cha .. tip:: If you're not sure that you're making your pull request right, or have a - question, then make it anyway! You can then comment on it tagging - ``@SciTools/iris-devs`` to ask your question (then edit your pull request if - you need to). + question, then make it anyway! You can then comment on it to ask your + question, then someone from the dev team will be happy to help you out (then + edit your pull request if you need to). What Happens Next? ^^^^^^^^^^^^^^^^^^ From 58220d1eef65363522226a4545942aeee317ce2b Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Tue, 3 Oct 2023 11:54:17 +0100 Subject: [PATCH 58/82] Set some memory benchmarks to on-demand to reduce noise. (#5481) --- .../benchmarks/experimental/ugrid/regions_combine.py | 8 +++++++- benchmarks/benchmarks/save.py | 4 +++- docs/src/whatsnew/latest.rst | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py index 16044c663a..5ecc90930b 100644 --- a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py +++ b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py @@ -23,7 +23,7 @@ from iris.experimental.ugrid import PARSE_UGRID_ON_LOAD from iris.experimental.ugrid.utils import recombine_submeshes -from ... import TrackAddedMemoryAllocation +from ... import TrackAddedMemoryAllocation, on_demand_benchmark from ...generate_data.ugrid import make_cube_like_2d_cubesphere @@ -200,6 +200,8 @@ class CombineRegionsComputeRealData(MixinCombineRegions): def time_compute_data(self, n_cubesphere): _ = self.recombined_cube.data + # Vulnerable to noise, so disabled by default. + @on_demand_benchmark @TrackAddedMemoryAllocation.decorator def track_addedmem_compute_data(self, n_cubesphere): _ = self.recombined_cube.data @@ -217,6 +219,8 @@ def time_save(self, n_cubesphere): # Save to disk, which must compute data + stream it to file. save(self.recombined_cube, "tmp.nc") + # Vulnerable to noise, so disabled by default. + @on_demand_benchmark @TrackAddedMemoryAllocation.decorator def track_addedmem_save(self, n_cubesphere): save(self.recombined_cube, "tmp.nc") @@ -245,6 +249,8 @@ def time_stream_file2file(self, n_cubesphere): # Save to disk, which must compute data + stream it to file. save(self.recombined_cube, "tmp.nc") + # Vulnerable to noise, so disabled by default. + @on_demand_benchmark @TrackAddedMemoryAllocation.decorator def track_addedmem_stream_file2file(self, n_cubesphere): save(self.recombined_cube, "tmp.nc") diff --git a/benchmarks/benchmarks/save.py b/benchmarks/benchmarks/save.py index d00c66a0ca..e9a7918dcc 100644 --- a/benchmarks/benchmarks/save.py +++ b/benchmarks/benchmarks/save.py @@ -16,7 +16,7 @@ from iris import save from iris.experimental.ugrid import save_mesh -from . import TrackAddedMemoryAllocation +from . import TrackAddedMemoryAllocation, on_demand_benchmark from .generate_data.ugrid import make_cube_like_2d_cubesphere @@ -47,6 +47,8 @@ def time_netcdf_save_mesh(self, n_cubesphere, is_unstructured): if is_unstructured: self._save_mesh(self.cube) + # Vulnerable to noise, so disabled by default. + @on_demand_benchmark @TrackAddedMemoryAllocation.decorator def track_addedmem_netcdf_save(self, n_cubesphere, is_unstructured): # Don't need to copy the cube here since track_ benchmarks don't diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index b4396ad0d5..333cce6db9 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -85,6 +85,9 @@ This document explains the changes made to Iris for this release working properly. (Main pull request: :pull:`5437`, more detail: :pull:`5430`, :pull:`5431`, :pull:`5432`, :pull:`5434`, :pull:`5436`) +#. `@trexfeathers`_ set a number of memory benchmarks to be on-demand, as they + were vulnerable to false positives in CI runs. (:pull:`5481`) + #. `@acchamber`_ and `@ESadek-MO`_ resolved several deprecation to reduce number of warnings raised during tests. (:pull:`5493`, :pull:`5511`) @@ -96,8 +99,6 @@ This document explains the changes made to Iris for this release longer using the ``--strict`` argument. (:pull:`5496`) - - .. comment Whatsnew author names (@github name) in alphabetical order. Note that, core dev names are automatically included by the common_links.inc: From ee6b225e14ad7e9cf2ad177307ae7a0baef65b61 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Tue, 10 Oct 2023 12:31:06 +0100 Subject: [PATCH 59/82] Updated environment lockfiles (#5524) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 93 +++++++++++++------------- requirements/locks/py311-linux-64.lock | 93 +++++++++++++------------- requirements/locks/py39-linux-64.lock | 91 ++++++++++++------------- 3 files changed, 140 insertions(+), 137 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index ac9c50ade5..2c863feb77 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -30,8 +30,8 @@ https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda#aec6c91c7371c26392a06708a73c70e5 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -40,7 +40,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_2.c 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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 @@ -48,11 +48,11 @@ https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 -https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.3-h59595ed_0.conda#bdadff838d5437aea83607ced8b37f75 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a @@ -68,8 +68,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed +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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -80,6 +80,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.con https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 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/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf @@ -87,25 +88,25 @@ https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#a https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 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/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/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 +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 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 -https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda#6bb8deb138f87c9d48320ac21b87e7a1 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -115,16 +116,16 @@ https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/antlr-python-runtime-4.7.2-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_0.conda#fb6201eb1daa3a3a2f91a4833bdf27c7 +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py310hc6cd4ac_1.conda#1f95722c94f00b69af69a066c7433714 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py310hc6cd4ac_2.conda#51af196e0a8d2f253b695f9a63d53f4b +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.3-py310hc6cd4ac_0.conda#90bccd216944c486966c3846b339b42f https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py310hff52083_1.tar.bz2#21b8fa2179290505e607f5ccd65b01b0 @@ -146,15 +147,15 @@ https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openbla https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py310h2372a71_1.conda#b74e07a054c479e45a83a83fc5be713c -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py310hd41b1e2_1.conda#39cac2febd98523afe9ed8e33c22f67d +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py310hd41b1e2_0.conda#03255e1437f31f25ad95bb45c8b398bb https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py310h2372a71_1.conda#cb25177acf28cc35cfa6c1ac1c679e22 @@ -164,7 +165,7 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py310h2372a71_1.conda#708d39474e54ba0f1832afb551633338 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py310h2372a71_0.conda#b631b889b0b4bc2fca7b8b977ca484b2 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-py310h2372a71_1.conda#bb010e368de4940771368bc3dc4c63e7 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 @@ -179,7 +180,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py310h2372a71_1.conda#b23e0147fa5f7a9380e06334c7266ad5 https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py310h2372a71_1.conda#cd944e0f7a4d1529c6707bd65423bd64 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 @@ -191,10 +192,10 @@ https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py310h2fee648_5.conda#fef75d6c60d8a1cc7e6d1707f470a4e2 -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py310h2372a71_1.conda#d0d56bc5723b41cc1af97e2b78c54b9b -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_0.conda#4efe3a76fe724778a7235a2046b53233 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py310h2372a71_0.conda#1f18231ffab82f236ce074b2aaa07e54 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py310h2372a71_0.conda#33c03cd5711885c920ddff676fb84f98 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_1.conda#a79a93c3912e9e9b0afd3bf58f2c01d7 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.43.1-py310h2372a71_0.conda#c7d552c32b87beb736c9658441bf93a9 https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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 @@ -205,7 +206,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3a 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 +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.1-py310h29da1c1_1.conda#8e93b1c69cddf89fd412178d3d418bae https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 @@ -214,45 +215,45 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda#6d https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py310hc6cd4ac_1.conda#c7936ec7db24bb913671a1bc5eb2b79d https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_2.conda#1c95f7c612f9121353c4ef764678113e 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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py310hb13e2d6_0.conda#ac3b67e928cc71548efad9b522d42fef https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py310h32c33b7_1.conda#453939b9853937e80c94e9eb3da75981 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py310h32c33b7_2.conda#bfb5c8fe5b2cce3ca6140cbd61ecef3b https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py310hc6cd4ac_5.conda#ef5333594a958b25912002886b82b253 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 -https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hbf28c38_3.tar.bz2#703ff1ac7d1b27fb5944b8052b5d1edb -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310hde88566_1.tar.bz2#94ce7a76b0c912279f6958e0b6b21d2b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py310hd41b1e2_0.conda#e00d52a8657a79b0a7c8c10559784759 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-8.0.4-pyhd8ed1ab_0.conda#3b8ef3a2d80f3d89d0ae7e3c975e6c57 +https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py310hd41b1e2_4.conda#35e87277fba9944b8a975113538bb5df +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py310h1f7b6fc_2.conda#7925aaa4330045bc32d334b20f446902 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py310hd41b1e2_1.conda#6a38f65d330b74495ad6990280486049 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.3-pyhd8ed1ab_0.conda#a7155483171dbc27a7385d1c26e779de +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_2.conda#3d8e98279bad55287f2ef9047996f33c +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.30-pyhd8ed1ab_0.conda#b7a2e3bb89bda8c69839485c20aabadf https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py310hde88566_1008.tar.bz2#f9dd8a7a2fcc23eb2cd95cd817c949e7 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-py310hcc13569_0.conda#ae976997aad218dc467d206ded2c8d8e +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py310hcc13569_1.conda#a64a2b4907b96d4bf3c9dab59563ab50 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 -https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h0a54255_0.conda#b9e952fe3f7528ab603d2776175ba8d2 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py310hb13e2d6_1.conda#4f522fc9cb8ecfa25e39f5c2ea65b16b -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_2.conda#a46061c83ed37bfa05d1ee96ec2fbb08 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py310hb13e2d6_1.conda#4260b359d8fbeab4f789a8b0f968079f +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_3.conda#c81a793e9680e0a07b6ab77c29cba6d7 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py310h62c0568_1.conda#d6fe03e8d9e80b6e20b7ae60bf4f88b0 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_102.conda#6025039727a049ab4c0f2aab842c01cb -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a -https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h278f3c1_0.conda#65d42fe14f56d55df8e93d67fa14c92d +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_103.conda#0850d2a119d51601b20c406a4909af4d +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_2.conda#09cd3006f61e7a7054405f81362e0a5f +https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py310h1f7b6fc_1.conda#857b828a13cdddf568958f7575b25b22 https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 2d41a7dd3f..34781eb756 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -30,8 +30,8 @@ https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda#aec6c91c7371c26392a06708a73c70e5 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -40,7 +40,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_2.c 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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 @@ -48,11 +48,11 @@ https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 -https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.3-h59595ed_0.conda#bdadff838d5437aea83607ced8b37f75 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a @@ -68,8 +68,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed +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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -80,6 +80,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.con https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 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/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf @@ -87,25 +88,25 @@ https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#a https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 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/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/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 +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 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 -https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.5-hab00c5b_0_cpython.conda#f0288cb82594b1cbc71111d1cd3c5422 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 +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.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda#6bb8deb138f87c9d48320ac21b87e7a1 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -115,16 +116,16 @@ https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.cond 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/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_0.conda#b8128d083dbf6abd472b1a3e98b0b83d +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda#cce9e7c3f1c307f2a5fb08a2922d6164 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py311hb755f60_2.conda#35878142ccd98f076942b40ffb3cfbab +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.3-py311hb755f60_0.conda#c54d71e8031a10d08f2e87ff81821588 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py311h38be061_1.tar.bz2#599159b0740e9b82e7eef0e8471be3c2 @@ -146,15 +147,15 @@ https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openbla https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py311h9547e67_1.conda#079d914d7d7341663e30823c10083c0f +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py311h9547e67_0.conda#e826b71bf3dc8c91ee097663e2bcface https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py311h459d7ec_1.conda#490d7fa8675afd1aa6f1b2332d156a45 @@ -164,7 +165,7 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py311h459d7ec_1.conda#7e2181758f84a9c7e776af10fbb2f1a0 +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py311h459d7ec_0.conda#60b5332b3989fda37884b92c7afd6a91 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py311h459d7ec_1.conda#52719a74ad130de8fb5d047dc91f247a https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 @@ -190,10 +191,10 @@ https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py311hb3a22ac_5.conda#75d52ef1d318d18e554aadd13ce91b9d -https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.1-py311h459d7ec_1.conda#bb0e424cb11a7e86700d0bf69e24faec -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_0.conda#5c416db47b7816e437eaf0d46e5c3a3d -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py311h459d7ec_0.conda#fc327c0ea015db3b6484eabb37d44e60 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py311hb3a22ac_0.conda#b3469563ac5e808b0cd92810d0697043 +https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py311h459d7ec_0.conda#7b3145fed7adc7c63a0e08f6f29f5480 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda#afe341dbe834ae76d2c23157ff00e633 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.43.1-py311h459d7ec_0.conda#ac995b680de3bdce2531c553b27dfe7e https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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 @@ -204,7 +205,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3a 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 +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.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/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 @@ -213,45 +214,45 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda#6d https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py311hb755f60_1.conda#e09eb6aad3607fb6f2c071a2c6a26e1d https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_2.conda#1c95f7c612f9121353c4ef764678113e 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/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py311h64a7726_0.conda#bf16a9f625126e378302f08e7ed67517 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_1.conda#2e48207ebbd3e25ad14881a27e51fa1e +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py311h1facc83_2.conda#8298afb85a731b02dac82e02b6e13ae0 https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py311hb755f60_5.conda#e4d262cc3600e70b505a6761d29f6207 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 -https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h4dd048b_3.tar.bz2#dbfea4376856bf7bd2121e719cf816e5 -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py311h4c7f6c3_1.tar.bz2#c7e54004ffd03f8db0a58ab949f2a00b -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py311h9547e67_0.conda#db5b3b0093d0d4565e5c89578108402e -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-8.0.4-pyhd8ed1ab_0.conda#3b8ef3a2d80f3d89d0ae7e3c975e6c57 +https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py311h9547e67_4.conda#586da7df03b68640de14dc3e8bcbf76f +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/linux-64/gst-plugins-base-1.22.6-h8e1006c_2.conda#3d8e98279bad55287f2ef9047996f33c +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.30-pyhd8ed1ab_0.conda#b7a2e3bb89bda8c69839485c20aabadf https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py311h4c7f6c3_1008.tar.bz2#5998dff78c3b82a07ad77f2ae1ec1c44 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_0.conda#1692362ba82f0556099f0143f7842de3 +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/linux-64/pywavelets-1.4.1-py311hcb2cf0a_0.conda#272ca0c28df344037ba2c4982d4e4791 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py311h64a7726_1.conda#58af16843fc4469770bdbaf45d3a19de -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py311he06c224_2.conda#10a1953d2f74d292b5de093ceea104b2 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311h1f0f07a_1.conda#86b71ff85f3e4c8a98b5bace6d9c4565 +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/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a 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.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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/netcdf4-1.6.4-nompi_py311he8ad708_102.conda#b48083ba918347f30efa94f7dc694919 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a -https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py311h1f0f07a_0.conda#3a00b1b08d8c01b1a3bfa686b9152df2 +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py311he8ad708_103.conda#97b45ba4ff4e46a07dd6c60040256538 +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_2.conda#09cd3006f61e7a7054405f81362e0a5f +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/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index fac192e99b..068b62c558 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -30,8 +30,8 @@ https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1 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/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 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/libaec-1.0.6-hcb278e6_1.conda#0f683578378cddb223e7fd24f785ab2a -https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_0.conda#e805cbec4c29feb22e019245f7e47b6c +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.2-h59595ed_1.conda#127b0be54c1c90760d7fe02ea7a56426 +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda#aec6c91c7371c26392a06708a73c70e5 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd @@ -40,7 +40,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_2.c 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/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d -https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 +https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f https://conda.anaconda.org/conda-forge/linux-64/libtool-2.4.7-h27087fc_0.conda#f204c8ba400ec475452737094fb81d52 @@ -48,11 +48,11 @@ https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 -https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 +https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.32.3-h59595ed_0.conda#bdadff838d5437aea83607ced8b37f75 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 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.3-hd590300_0.conda#7bb88ce04c8deb9f7d763ae04a1da72f -https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a @@ -68,8 +68,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h501b40f_6.conda#c3e9338e15d90106f467377017352b97 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_0.conda#43017394a280a42b48d11d2a6e169901 -https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_0.conda#8e3e1cb77c4b355a3776bdfb74095bed +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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 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 @@ -80,6 +80,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.con https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 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/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf @@ -87,25 +88,25 @@ https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#a https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_1.conda#85552d64cb49f12781668779efc738ec +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 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/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/blosc-1.21.5-h0f2a231_0.conda#009521b7ed97cca25f8f997f9e745976 -https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_0.conda#aeafb07a327e3f14a796bf081ea07472 +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 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda#e618003da3547216310088478e475945 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hbc2eb40_0.conda#38f84d395629e48b7c7b48a8ca740341 +https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 -https://conda.anaconda.org/conda-forge/linux-64/nss-3.92-h1d7d5a4_0.conda#22c89a3d87828fe925b310b9cdf0f574 +https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda#6bb8deb138f87c9d48320ac21b87e7a1 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -115,16 +116,16 @@ https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.cond https://conda.anaconda.org/conda-forge/linux-64/antlr-python-runtime-4.7.2-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_0.conda#3db48055eab680e43a122e2c7494e7ae -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_0.conda#8a1b6b1f5e230aaf6408d6b0aef3492f +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda#c48418c8b35f1d59ae9ae1174812b40a https://conda.anaconda.org/conda-forge/noarch/certifi-2023.7.22-pyhd8ed1ab_0.conda#7f3dbc9179b4dde7da98dfb151d0ad22 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.2.0-pyhd8ed1ab_0.conda#313516e9a4b08b12dfb1e1cd390a96e3 +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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2#a50559fad0affdbb33729a68669ca1cb -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.2-py39h3d6467e_2.conda#3e27ec02c612b1580e94fe8468c28040 +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.3-py39h3d6467e_0.conda#13febcb5470ba004eeb3e7883fa66e79 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f @@ -146,15 +147,15 @@ https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-18_linux64_openbla https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_0.conda#b9ce311e7aba8b5fc3122254f0a6e97e +https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-hdffd6e0_0.conda#a8661c87c873d8c8f90479318ebf0a17 https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.5-py39h7633fee_1.conda#45d24492a2acf7d8ad8c4de6491a4fe2 +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py39h7633fee_0.conda#e39816a8abd539079a9d0b3c9045b2cb https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 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.1-pyhd8ed1ab_0.conda#91cda59e66e1e4afe9476f8ef98f5c30 +https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda#c2e412b0f11e5983bcfc35d9beb91ecb @@ -164,7 +165,7 @@ https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda 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-tzdata-2023.3-pyhd8ed1ab_0.conda#2590495f608a63625e165915fb4e2e34 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.3.0-py39hd1e30aa_1.conda#6295f6164ced8634e3d95cd5d08ad95d +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.4.1-py39hd1e30aa_0.conda#756cb152772a225587a05ca0ec68fc08 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-py39hd1e30aa_1.conda#37218233bcdc310e4fde6453bc1b40d8 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 @@ -179,7 +180,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874 https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.0.0-py39hd1e30aa_1.conda#7c7ab84210a972d9efe49655802e904c +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda#1da984bbb6e765743e13388ba7b7b2c8 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 @@ -191,9 +192,9 @@ https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.4-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-h0c91306_1017.conda#3db543896d34fc6804ddfb9239dcb125 -https://conda.anaconda.org/conda-forge/linux-64/cffi-1.15.1-py39h7a31438_5.conda#a2271dc58a5291d18b42fa4d45d42218 -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_0.conda#434246edfc30e20c0847d4c2caff0a53 -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.42.1-py39hd1e30aa_0.conda#de06dc7edaddbd3b60c050f3a95d6fe6 +https://conda.anaconda.org/conda-forge/linux-64/cffi-1.16.0-py39h7a31438_0.conda#ac992767d7f8ed2cb27e71e78f0fb2d7 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_1.conda#e5b62f0c1f96413116f16d33973f1a44 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.43.1-py39hd1e30aa_0.conda#74b032179f7782051800908cb2250132 https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.0-hfc55251_0.conda#2f55a36b549f51a7e0c2b1e3c3f0ccd4 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 @@ -205,7 +206,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3a 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b 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.0-pyhd8ed1ab_1.conda#6ceb4e000cbe0b56b290180aea8520e8 +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.1-py39h444a776_1.conda#52ad49ce520bec37ff0423b16c8bb052 https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 @@ -214,45 +215,45 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.2-pyhd8ed1ab_0.conda#6d https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.11-py39h3d6467e_1.conda#39d2473881976eeb57c09c106d2d9fc3 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.8.0-hd8ed1ab_0.conda#384462e63262a527bda564fa2d9126c0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.5-pyhd8ed1ab_0.conda#3bda70bbeb2920f44db5375af2e5fe38 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_0.conda#882a66517c52cae2719ac25308f61316 +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.6-pyhd8ed1ab_0.conda#d5f8944ff9ab24a292511c83dce33dea +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.6-h98fc4e7_2.conda#1c95f7c612f9121353c4ef764678113e https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.2.1-h3d44ed6_0.conda#98db5f8813f45e2b29766aff0e4a499c https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.0-pyhd8ed1ab_0.conda#6a62c2cc25376a0d050b3d1d221c3ee9 https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-6.8.0-hd8ed1ab_0.conda#b279b07ce18058034e5b3606ba103a8b https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h80fb2b6_112.conda#a19fa6cacf80c8a366572853d5890eb4 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.0-py39h474f0d3_0.conda#62f1d2e05327bf62728afa448f2a9261 https://conda.anaconda.org/conda-forge/noarch/pbr-5.11.1-pyhd8ed1ab_0.conda#5bde4ebca51438054099b9527c904ecb -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.10.0-pyhd8ed1ab_0.conda#0809187ef9b89a3d94a5c24d13936236 -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py39hce394fd_1.conda#b5188eeb7df815911a7c8db0fc16b89b +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.11.0-pyhd8ed1ab_0.conda#8f567c0a74aa44cf732f15773b4083b0 +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.6.1-py39hce394fd_2.conda#cb5ecd8db6d8ca8b9f281658a8512433 https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_5.conda#93aff412f3e49fdb43361c0215cbd72d https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.3.1-pyhd8ed1ab_0.conda#816073bb54ef59f33f0f26c14f88311b https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-7.1.0-pyhd8ed1ab_0.conda#6613dbb3b25cc648a107f33ca9f80fc1 -https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39hf939315_3.tar.bz2#0f11bcdf9669a5ae0f39efd8c830209a -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h2ae25f5_1.tar.bz2#c943fb9a2818ecc5be1e0ecc8b7738f1 -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py39h7633fee_0.conda#b673f03c191683996e66c881f90aff2b -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.2-pyhd8ed1ab_0.conda#cce7eeb7eda0124af186a5e9ce9b0fca -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_0.conda#cd758f0e1d30ada1c320be50767dd55e -https://conda.anaconda.org/conda-forge/noarch/identify-2.5.29-pyhd8ed1ab_0.conda#5bdbb1cb692649720b60f261b41760cd +https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-8.0.4-pyhd8ed1ab_0.conda#3b8ef3a2d80f3d89d0ae7e3c975e6c57 +https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py39h7633fee_4.conda#b66595fbda99771266f042f42c7457be +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py39h44dd56e_2.conda#bb788b462770a49433d7412e7881d917 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py39h7633fee_1.conda#33afb3357cd0d120ecb26778d37579e4 +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.9.3-pyhd8ed1ab_0.conda#a7155483171dbc27a7385d1c26e779de +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.6-h8e1006c_2.conda#3d8e98279bad55287f2ef9047996f33c +https://conda.anaconda.org/conda-forge/noarch/identify-2.5.30-pyhd8ed1ab_0.conda#b7a2e3bb89bda8c69839485c20aabadf https://conda.anaconda.org/conda-forge/linux-64/mo_pack-0.2.0-py39h2ae25f5_1008.tar.bz2#d90acb3804f16c63eb6726652e4e25b3 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-py39hddac248_0.conda#e335750b7e47bb4d12db170e1a6e2608 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py39hddac248_1.conda#f32809db710b8aac48fbc14c13058530 https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 -https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h389d5f1_0.conda#9eeb2b2549f836ca196c6cbd22344122 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.2-py39h474f0d3_1.conda#f62409d868e23c1f97ae2b0db5658385 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_2.conda#d79ed0ee1738151284ebd97092a6a210 +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h44dd56e_1.conda#d037c20e3da2e85f03ebd20ad480c359 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py39h474f0d3_1.conda#55441724fedb3042d38ffa5220f00804 +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_3.conda#bd2f1acb1bb15e30191370eaae54082e https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb -https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.2-pyhd8ed1ab_0.conda#ddb4fd6105b4005b312625cef210ba67 +https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py39he9076e7_1.conda#3337ebf55443f31a1148f3ca6f1d9673 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4282601_102.conda#05390bd5ad0ddc2f719392d087673344 -https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_1.conda#3fb5ba328a77c9fd71197a46e7f2469a -https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h0f8d45d_0.conda#74b1d479057aa11a70779c83262df85e +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4282601_103.conda#c61de71bd3099973376aa370e3a0b39e +https://conda.anaconda.org/conda-forge/noarch/pre-commit-3.4.0-pyha770c72_2.conda#09cd3006f61e7a7054405f81362e0a5f +https://conda.anaconda.org/conda-forge/linux-64/python-stratify-0.3.0-py39h44dd56e_1.conda#90c5165691fdcb5a9f43907e32ea48b4 https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 From 0b569cdfad5e67f4aec3562bb26460020c7c7354 Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Tue, 10 Oct 2023 16:44:52 +0100 Subject: [PATCH 60/82] Gallery: show colour bar stealing space from multiple axes (#5537) * Gallery: show colour bar stealing from multiple axes * use Iris' automatic axes replacement * update test data version * Link gallery page from whatsnew Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --------- Co-authored-by: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> --- .github/workflows/benchmarks_run.yml | 2 +- .github/workflows/ci-tests.yml | 2 +- .../gallery_code/meteorology/plot_COP_maps.py | 22 +++++-------------- docs/src/whatsnew/latest.rst | 4 ++++ lib/iris/tests/results/imagerepo.json | 2 +- 5 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.github/workflows/benchmarks_run.yml b/.github/workflows/benchmarks_run.yml index a39c531a77..02b913c6f0 100644 --- a/.github/workflows/benchmarks_run.yml +++ b/.github/workflows/benchmarks_run.yml @@ -29,7 +29,7 @@ jobs: env: IRIS_TEST_DATA_LOC_PATH: benchmarks IRIS_TEST_DATA_PATH: benchmarks/iris-test-data - IRIS_TEST_DATA_VERSION: "2.19" + IRIS_TEST_DATA_VERSION: "2.21" # Lets us manually bump the cache to rebuild ENV_CACHE_BUILD: "0" TEST_DATA_CACHE_BUILD: "2" diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 5c48966ce8..8d84d4e137 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -50,7 +50,7 @@ jobs: session: "tests" env: - IRIS_TEST_DATA_VERSION: "2.19" + IRIS_TEST_DATA_VERSION: "2.21" ENV_NAME: "ci-tests" steps: diff --git a/docs/gallery_code/meteorology/plot_COP_maps.py b/docs/gallery_code/meteorology/plot_COP_maps.py index 5e158346a9..529018ec8c 100644 --- a/docs/gallery_code/meteorology/plot_COP_maps.py +++ b/docs/gallery_code/meteorology/plot_COP_maps.py @@ -171,23 +171,13 @@ def main(): ) plt.gca().coastlines() - # Now add a colourbar who's leftmost point is the same as the leftmost - # point of the left hand plot and rightmost point is the rightmost - # point of the right hand plot. - - # Get the positions of the 2nd plot and the left position of the 1st plot. - left, bottom, width, height = ax_array[1].get_position().bounds - first_plot_left = ax_array[0].get_position().bounds[0] - - # The width of the colorbar should now be simple. - width = left - first_plot_left + width - - # Add axes to the figure, to place the colour bar. - colorbar_axes = fig.add_axes([first_plot_left, 0.18, width, 0.03]) - - # Add the colour bar. + # Now add a colour bar which spans the two plots. Here we pass Figure.axes + # which is a list of all (two) axes currently on the figure. Note that + # these are different to the contents of ax_array, because those were + # standard Matplotlib Axes that Iris automatically replaced with Cartopy + # GeoAxes. cbar = plt.colorbar( - contour_result, colorbar_axes, orientation="horizontal" + contour_result, ax=fig.axes, aspect=60, orientation="horizontal" ) # Label the colour bar and add ticks. diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 333cce6db9..c5cd961679 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -75,6 +75,10 @@ This document explains the changes made to Iris for this release #. `@trexfeathers`_ documented the intended use of warnings filtering with Iris. See :ref:`filtering-warnings`. (:pull:`5509`) +#. `@rcomer`_ updated the + :ref:`sphx_glr_generated_gallery_meteorology_plot_COP_maps.py` to show how + a colourbar may steal space from multiple axes. (:pull:`5537`) + 💼 Internal =========== diff --git a/lib/iris/tests/results/imagerepo.json b/lib/iris/tests/results/imagerepo.json index 2313c25270..2a6e2c4dbc 100644 --- a/lib/iris/tests/results/imagerepo.json +++ b/lib/iris/tests/results/imagerepo.json @@ -1,6 +1,6 @@ { "gallery_tests.test_plot_COP_1d.0": "aefec91c3601249cc9b3336dc4c8cdb31a64c6d997b3c0eccb5932d285e42f33", - "gallery_tests.test_plot_COP_maps.0": "ea9130db95668524913e6ac168991f0d956e917ec76396b96a853dcf94696935", + "gallery_tests.test_plot_COP_maps.0": "ea91789995668566913e43474adb6a917e8d947c4b46957ec6716a91958e6f81", "gallery_tests.test_plot_SOI_filtering.0": "fa56f295c5e0694a3c17a58d95e8da536233da99984c5af4c6739b4a9a444eb4", "gallery_tests.test_plot_TEC.0": "e5a761b69a589a4bc46f9e48c65c6631ce61d1ce3982c13739b33193c0ee3f8c", "gallery_tests.test_plot_anomaly_log_colouring.0": "ec4464e384a39b13931a9b1c85696da968d5e6e63e26847bdbd399938d3c5a4c", From 447a892139f513d21506a0d1212b435f0ac0c485 Mon Sep 17 00:00:00 2001 From: Ataf Fazledin Ahamed Date: Tue, 17 Oct 2023 19:06:12 +0600 Subject: [PATCH 61/82] Replaced `NotImplementedError` with `NotImplemented` (#5544) * Replaced `NotImplementedError` with `NotImplemented` * Added contribution to `latest.rst` * Added github handle in the link section --- docs/src/whatsnew/latest.rst | 4 ++++ lib/iris/coords.py | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index c5cd961679..9564863d1b 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -102,6 +102,9 @@ This document explains the changes made to Iris for this release #. `@trexfeathers`_ adapted benchmarking to work with ASV ``>=v0.6`` by no longer using the ``--strict`` argument. (:pull:`5496`) +#. `@fazledyn-or`_ replaced ``NotImplementedError`` with ``NotImplemented`` as + a proper method call. (:pull:`5544`) + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, @@ -109,6 +112,7 @@ This document explains the changes made to Iris for this release .. _@scottrobinson02: https://github.com/scottrobinson02 .. _@acchamber: https://github.com/acchamber +.. _@fazledyn-or: https://github.com/fazledyn-or .. comment diff --git a/lib/iris/coords.py b/lib/iris/coords.py index 3ff9bc8e5e..d5ee2667d8 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -3119,7 +3119,7 @@ def __str__(self): def __add__(self, other): # Disable the default tuple behaviour of tuple concatenation - raise NotImplementedError() + return NotImplemented def xml_element(self, doc): """ From e9c77c05843c0c01947ca3e0927b1c7df0aad472 Mon Sep 17 00:00:00 2001 From: "scitools-ci[bot]" <107775138+scitools-ci[bot]@users.noreply.github.com> Date: Tue, 17 Oct 2023 14:54:57 +0100 Subject: [PATCH 62/82] Updated environment lockfiles (#5545) Co-authored-by: Lockfile bot --- requirements/locks/py310-linux-64.lock | 56 +++++++++++++------------- requirements/locks/py311-linux-64.lock | 56 +++++++++++++------------- requirements/locks/py39-linux-64.lock | 56 +++++++++++++------------- 3 files changed, 84 insertions(+), 84 deletions(-) diff --git a/requirements/locks/py310-linux-64.lock b/requirements/locks/py310-linux-64.lock index 2c863feb77..2655960622 100644 --- a/requirements/locks/py310-linux-64.lock +++ b/requirements/locks/py310-linux-64.lock @@ -20,7 +20,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.cond https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.20.1-hd590300_0.conda#6642e4faa4804be3a0e7edfefbd16595 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 @@ -38,7 +38,7 @@ 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/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -67,7 +67,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f0 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 @@ -78,14 +78,14 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 +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 https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda#4bdace082e911a3e1f1f0b721bed5b56 https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_5.conda#1e8ef4090ca4f0d66404a7441e1dbf3c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 @@ -101,19 +101,19 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_5.conda#b72f016c910ff9295b1377d3e17da3f2 https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 https://conda.anaconda.org/conda-forge/linux-64/python-3.10.12-hd12c33a_0_cpython.conda#eb6f1df105f37daedd6dca78523baa75 -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +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/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -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-py310hff52083_1003.tar.bz2#8324f8fff866055d4b32eb25e091fe31 +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/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1a 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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +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-py310hc6cd4ac_0.conda#90bccd216944c486966c3846b339b42f https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 @@ -134,7 +134,7 @@ https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#6 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d 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/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed @@ -142,14 +142,14 @@ 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/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py310hd41b1e2_1.conda#b8d67603d43b23ce7e988a5d81a7ab79 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-h7f713cb_2.conda#9ab79924a3760f85a799f21bc99bd655 +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-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda#1158ac1d2613b28685644931f11ee807 +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.0-hfc447b1_1.conda#e4a9a5ba40123477db33e02a78dffb01 https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -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/markupsafe-2.1.3-py310h2372a71_1.conda#b74e07a054c479e45a83a83fc5be713c https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py310hd41b1e2_0.conda#03255e1437f31f25ad95bb45c8b398bb @@ -183,15 +183,15 @@ https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py310h2372a71_0.conda#72637c58d36d9475fda24700c9796f19 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde +https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -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/linux-64/cffi-1.16.0-py310h2fee648_0.conda#45846a970e71ac98fd327da5d40a0a2c https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py310h2372a71_0.conda#33c03cd5711885c920ddff676fb84f98 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py310h2372a71_1.conda#a79a93c3912e9e9b0afd3bf58f2c01d7 @@ -202,12 +202,12 @@ https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c7 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h119a65a_9.conda#cfebc557e54905dadc355c0e9f003004 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 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/linux-64/pillow-10.0.1-py310h29da1c1_1.conda#8e93b1c69cddf89fd412178d3d418bae +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py310h01dd4db_2.conda#9ef290f84bf1f3932e9b42117d9364ff https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 @@ -241,26 +241,26 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py310hcc13569_1.con https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py310h1f7b6fc_1.conda#be6f0382440ccbf9fb01bb19ab1f1fc0 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py310hb13e2d6_1.conda#4260b359d8fbeab4f789a8b0f968079f -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py310h7dcad9a_3.conda#c81a793e9680e0a07b6ab77c29cba6d7 +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py310h7dcad9a_0.conda#0d7c35fe5cc1f436e368ddd500deb979 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h278f3c1_0.conda#f2d3f2542a2467f479e809ac7b901ac2 +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py310h1f7b6fc_3.conda#ce30848c8731fe993893a872218dd37a https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py310h62c0568_1.conda#d6fe03e8d9e80b6e20b7ae60bf4f88b0 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py310h62c0568_2.conda#5c0d101ef8fc542778aa80795a759d08 https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py310hba70d50_103.conda#0850d2a119d51601b20c406a4909af4d -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/linux-64/python-stratify-0.3.0-py310h1f7b6fc_1.conda#857b828a13cdddf568958f7575b25b22 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py310h7cbd5c2_0.conda#7bfbace0788f477da1c26e10a358692d https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py310h04931ad_5.conda#f4fe7a6e3d7c78c9de048ea9dda21690 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py310hff52083_1.conda#8cc0628c9703cf5c8404465e838cc5ae +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py310hff52083_2.conda#cda26b4d722d7319ce66df50332ff09b https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 diff --git a/requirements/locks/py311-linux-64.lock b/requirements/locks/py311-linux-64.lock index 34781eb756..0bbb6bfdcd 100644 --- a/requirements/locks/py311-linux-64.lock +++ b/requirements/locks/py311-linux-64.lock @@ -20,7 +20,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.cond https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.20.1-hd590300_0.conda#6642e4faa4804be3a0e7edfefbd16595 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 @@ -38,7 +38,7 @@ 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/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -67,7 +67,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f0 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 @@ -78,14 +78,14 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 +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 https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda#4bdace082e911a3e1f1f0b721bed5b56 https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_5.conda#1e8ef4090ca4f0d66404a7441e1dbf3c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 @@ -101,19 +101,19 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_5.conda#b72f016c910ff9295b1377d3e17da3f2 https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 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.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +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/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -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/noarch/antlr-python-runtime-4.11.1-pyhd8ed1ab_0.tar.bz2#15109c4977d39ad7aa3423f57243e286 https://conda.anaconda.org/conda-forge/noarch/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1a 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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +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/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 @@ -134,7 +134,7 @@ https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#6 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d 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/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed @@ -142,14 +142,14 @@ 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/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 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/lcms2-2.15-hb7c19ff_3.conda#e96637dd92c5f340215c753a5c9a22d7 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/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda#1158ac1d2613b28685644931f11ee807 +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.0-hfc447b1_1.conda#e4a9a5ba40123477db33e02a78dffb01 https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -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/markupsafe-2.1.3-py311h459d7ec_1.conda#71120b5155a0c500826cf81536721a15 https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py311h9547e67_0.conda#e826b71bf3dc8c91ee097663e2bcface @@ -182,15 +182,15 @@ https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.co https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde +https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -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/linux-64/cffi-1.16.0-py311hb3a22ac_0.conda#b3469563ac5e808b0cd92810d0697043 https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py311h459d7ec_0.conda#7b3145fed7adc7c63a0e08f6f29f5480 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py311h459d7ec_1.conda#afe341dbe834ae76d2c23157ff00e633 @@ -201,12 +201,12 @@ https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.8.0-pyha770c7 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h119a65a_9.conda#cfebc557e54905dadc355c0e9f003004 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 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/linux-64/pillow-10.0.1-py311h8aef010_1.conda#4d66ee2081a7cd444ff6f30d95873eef +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py311ha6c5da5_2.conda#d6de249502f16ac151fcef9f743937b9 https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 @@ -240,26 +240,26 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py311h320fe9a_1.con https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py311h1f0f07a_1.conda#86b71ff85f3e4c8a98b5bace6d9c4565 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/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_0.conda#43a71a823583d75308eaf3a06c8f150b +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py311h1f0f07a_3.conda#4ac4de995f18d232af077e7743568b97 https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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/linux-64/netcdf4-1.6.4-nompi_py311he8ad708_103.conda#97b45ba4ff4e46a07dd6c60040256538 -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/linux-64/python-stratify-0.3.0-py311h1f0f07a_1.conda#cd36a89a048ad2bcc6d8b43f648fb1d0 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py311h320fe9a_0.conda#1271b2375735e2aaa6d6770dbe2ad087 https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_5.conda#ec7e45bc76d9d0b69a74a2075932b8e8 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py311h38be061_1.conda#6a2cd22264c8a61c8a571bb6e524775f +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py311h38be061_2.conda#0289918d4a09bbd0b85fd23ddf1c3ac1 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 diff --git a/requirements/locks/py39-linux-64.lock b/requirements/locks/py39-linux-64.lock index 068b62c558..167fc29e4c 100644 --- a/requirements/locks/py39-linux-64.lock +++ b/requirements/locks/py39-linux-64.lock @@ -20,7 +20,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_2.cond https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.20.1-hd590300_0.conda#6642e4faa4804be3a0e7edfefbd16595 https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2#ac7bc6a654f8f41b352b38f4051135f8 https://conda.anaconda.org/conda-forge/linux-64/geos-3.12.0-h59595ed_0.conda#3fdf79ef322c8379ae83be491d805369 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 @@ -38,7 +38,7 @@ 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/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libmo_unpack-3.1.2-hf484d3e_1001.tar.bz2#95f32a6a5a666d33886ca5627239f03d https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-hd590300_1.conda#854e3e1623b39777140f199c5f9ab952 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -67,7 +67,7 @@ https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda#f0 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/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -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/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 @@ -78,14 +78,14 @@ https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_2 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a 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/libsqlite-3.43.0-h2797004_0.conda#903fa782a9067d5934210df6d79220f6 +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 https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda#4bdace082e911a3e1f1f0b721bed5b56 https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.5-h232c23b_1.conda#f3858448893839820d4bcfb14ad3ecdf https://conda.anaconda.org/conda-forge/linux-64/libzip-1.10.1-h2629f0a_3.conda#ac79812548e7e8cf61f7b0abdef01d3b -https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_4.conda#f6f0ac5665849afc0716213a6cff224d +https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_5.conda#1e8ef4090ca4f0d66404a7441e1dbf3c https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-h2797004_0.conda#513336054f884f95d9fd925748f41ef3 @@ -101,19 +101,19 @@ https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.0-hebfc3b9_0.conda# https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e 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/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h29866fb_1.conda#4e9afd30f4ccb2f98645e51005f82236 -https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_4.conda#db7f2c877209ac620fcd1c3ce7407cf0 +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 +https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_5.conda#b72f016c910ff9295b1377d3e17da3f2 https://conda.anaconda.org/conda-forge/linux-64/nss-3.94-h1d7d5a4_0.conda#7caef74bbfa730e014b20f0852068509 https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.43.0-h2c6b66d_0.conda#713f9eac95d051abe14c3774376854fe +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/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 -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-py39hf3d152e_1003.tar.bz2#5e8330e806e50bd6137ebd125f4bc1bb +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/asv_runner-0.1.0-pyhd8ed1ab_0.conda#0e8715bef534217eae333c53f645c9ed 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/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f @@ -124,7 +124,7 @@ https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.0-pyhd8ed1a 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/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.0-pyhd8ed1ab_0.conda#3ed9a3229f177c298b3405de13acfcd8 +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-py39h3d6467e_0.conda#13febcb5470ba004eeb3e7883fa66e79 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d https://conda.anaconda.org/conda-forge/noarch/distlib-0.3.7-pyhd8ed1ab_0.conda#12d8aae6994f342618443a8f05c652a0 @@ -134,7 +134,7 @@ https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#6 https://conda.anaconda.org/conda-forge/noarch/filelock-3.12.4-pyhd8ed1ab_0.conda#5173d4b8267a0699a43d73231e0b6596 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d 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/linux-64/glib-tools-2.78.0-hfc55251_0.conda#e10134de3558dd95abda6987b5548f4f https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/noarch/idna-3.4-pyhd8ed1ab_0.tar.bz2#34272b248891bddccc64479f9a7fffed @@ -142,14 +142,14 @@ 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/iris-sample-data-2.4.0-pyhd8ed1ab_0.tar.bz2#18ee9c07cf945a33f92caf1ee3d23ad9 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda#c9f74d717e5a2847a9f8b779c54130f2 -https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-h7f713cb_2.conda#9ab79924a3760f85a799f21bc99bd655 +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-18_linux64_openblas.conda#bcddbb497582ece559465b9cd11042e7 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_3.conda#1720df000b48e31842500323cb7be18c https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.3.0-hca28451_0.conda#4ab41bee09a2d2e08de5f09d6f1eef62 -https://conda.anaconda.org/conda-forge/linux-64/libpq-15.4-hfc447b1_2.conda#4a180ab68881a86be49858c9baf4581d +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda#1158ac1d2613b28685644931f11ee807 +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.0-hfc447b1_1.conda#e4a9a5ba40123477db33e02a78dffb01 https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -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/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.0.6-py39h7633fee_0.conda#e39816a8abd539079a9d0b3c9045b2cb @@ -183,15 +183,15 @@ https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda#1da984bbb6e765743e13388ba7b7b2c8 https://conda.anaconda.org/conda-forge/noarch/wheel-0.41.2-pyhd8ed1ab_0.conda#1ccd092478b3e0ee10d7a891adbf8a4f https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 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/zict-3.0.0-pyhd8ed1ab_0.conda#cf30c2c15b82aacb07f9c09e28ff2275 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/babel-2.12.1-pyhd8ed1ab_1.conda#ac432e732804a81ddcf29c92ead57cde +https://conda.anaconda.org/conda-forge/noarch/babel-2.13.0-pyhd8ed1ab_0.conda#22541af7a9eb59fc6afcadb7ecdf9219 https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.2-pyha770c72_0.conda#a362ff7d976217f8fa78c0f1c4f59717 -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/linux-64/cffi-1.16.0-py39h7a31438_0.conda#ac992767d7f8ed2cb27e71e78f0fb2d7 https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_1.conda#e5b62f0c1f96413116f16d33973f1a44 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.43.1-py39hd1e30aa_0.conda#74b032179f7782051800908cb2250132 @@ -202,12 +202,12 @@ https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.0-pyhd8ed1 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 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/libclang-15.0.7-default_h7634d5b_3.conda#0922208521c0463e690bbaebba7eb551 -https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-he9388d3_8.conda#f3abc6e6ab60fa404c23094f5a03ec9b +https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h119a65a_9.conda#cfebc557e54905dadc355c0e9f003004 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/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 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/linux-64/pillow-10.0.1-py39h444a776_1.conda#52ad49ce520bec37ff0423b16c8bb052 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.0.1-py39had0adad_2.conda#4d5990bb620ed36b10a528324d9b75e3 https://conda.anaconda.org/conda-forge/noarch/pip-23.2.1-pyhd8ed1ab_0.conda#e2783aa3f9235225eec92f9081c5b801 https://conda.anaconda.org/conda-forge/linux-64/proj-9.3.0-h1d62c97_1.conda#900fd11ac61d4415d515583fcb570207 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 @@ -241,26 +241,26 @@ https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.1-py39hddac248_1.cond https://conda.anaconda.org/conda-forge/linux-64/pango-1.50.14-ha41ecd1_2.conda#1a66c10f6a0da3dbd2f3a68127e7f6a0 https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.4.1-py39h44dd56e_1.conda#d037c20e3da2e85f03ebd20ad480c359 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.3-py39h474f0d3_1.conda#55441724fedb3042d38ffa5220f00804 -https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.1-py39h1bc45ef_3.conda#bd2f1acb1bb15e30191370eaae54082e +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.2-py39h1bc45ef_0.conda#ca067895d22f8a0d38f225a95184858e https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-apidoc-0.3.0-py_1.tar.bz2#855b087883443abb10f5faf6eef40860 https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.24.4-pyhd8ed1ab_0.conda#c3feaf947264a59a125e8c26e98c3c5a -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h0f8d45d_0.conda#180d4312005bc93f257e2997a8ee41cb +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.2.0-py39h44dd56e_3.conda#cbc2fe7741df3546448a534827238c32 https://conda.anaconda.org/conda-forge/noarch/distributed-2023.9.3-pyhd8ed1ab_0.conda#543fafdd7b325bf16199235ee5f20622 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/gtk2-2.24.33-h90689f9_2.tar.bz2#957a0255ab58aaf394a91725d73ab422 https://conda.anaconda.org/conda-forge/noarch/imagehash-4.3.1-pyhd8ed1ab_0.tar.bz2#132ad832787a2156be1f1b309835001a 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-py39he9076e7_1.conda#3337ebf55443f31a1148f3ca6f1d9673 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.0-py39he9076e7_2.conda#404144d0628ebbbbd56d161c677cc71b https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.6.4-nompi_py39h4282601_103.conda#c61de71bd3099973376aa370e3a0b39e -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/linux-64/python-stratify-0.3.0-py39h44dd56e_1.conda#90c5165691fdcb5a9f43907e32ea48b4 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-hc47bfe8_16.conda#a8dd2dfcd570e3965c73be6c5e03e74f +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.22.0-py39h40cae4c_0.conda#24b4bf92e26a46217e37e5928927116b https://conda.anaconda.org/conda-forge/noarch/esmpy-8.4.2-pyhc1e730c_4.conda#ddcf387719b2e44df0cc4dd467643951 https://conda.anaconda.org/conda-forge/linux-64/graphviz-8.1.0-h28d9a01_0.conda#33628e0e3de7afd2c8172f76439894cb https://conda.anaconda.org/conda-forge/noarch/nc-time-axis-1.4.1-pyhd8ed1ab_0.tar.bz2#281b58948bf60a2582de9e548bcc5369 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda#e1f148e57d071b09187719df86f513c1 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py39hf3d152e_1.conda#3b6499658e281eb7204161f336926071 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.0-py39hf3d152e_2.conda#ffe5ae58957da676064e2ce5d039d259 https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.14.1-pyhd8ed1ab_0.conda#78153addf629c51fab775ef360012ca3 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.5.0-pyhd8ed1ab_0.conda#264b3c697fa9cdade87eb0abe4440d54 From f459f152c65d158d5a13f65b9b1e84a01afbdfc0 Mon Sep 17 00:00:00 2001 From: Bill Little Date: Wed, 18 Oct 2023 13:19:27 +0100 Subject: [PATCH 63/82] nep29 drop table schedule numpy>1.21 (#5525) * nep29 drop table schedule numpy>1.12 * add whatsnew entry --- docs/src/whatsnew/latest.rst | 6 +++++- requirements/py310.yml | 2 +- requirements/py311.yml | 2 +- requirements/py39.yml | 2 +- requirements/pypi-core.txt | 4 ++-- 5 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 9564863d1b..58d94bf5fa 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -66,7 +66,8 @@ This document explains the changes made to Iris for this release 🔗 Dependencies =============== -#. N/A +#. `@bjlittle`_ enforced the minimum pin of ``numpy>1.21`` in accordance with the `NEP29 Drop Schedule`_. + (:pull:`5525`) 📚 Documentation @@ -117,3 +118,6 @@ This document explains the changes made to Iris for this release .. comment Whatsnew resources in alphabetical order: + +.. _NEP29 Drop Schedule: https://numpy.org/neps/nep-0029-deprecation_policy.html#drop-schedule + diff --git a/requirements/py310.yml b/requirements/py310.yml index fd549a9cf7..b01586aac9 100644 --- a/requirements/py310.yml +++ b/requirements/py310.yml @@ -18,7 +18,7 @@ dependencies: - libnetcdf !=4.9.1 - matplotlib >=3.5 - netcdf4 - - numpy >=1.21, !=1.24.3 + - numpy >1.21, !=1.24.3 - python-xxhash - pyproj - scipy diff --git a/requirements/py311.yml b/requirements/py311.yml index a883e5d87a..286fe74a33 100644 --- a/requirements/py311.yml +++ b/requirements/py311.yml @@ -18,7 +18,7 @@ dependencies: - libnetcdf !=4.9.1 - matplotlib >=3.5 - netcdf4 - - numpy >=1.21, !=1.24.3 + - numpy >1.21, !=1.24.3 - python-xxhash - pyproj - scipy diff --git a/requirements/py39.yml b/requirements/py39.yml index 5b3c17510e..f534aef4f3 100644 --- a/requirements/py39.yml +++ b/requirements/py39.yml @@ -18,7 +18,7 @@ dependencies: - libnetcdf !=4.9.1 - matplotlib >=3.5 - netcdf4 - - numpy >=1.21, !=1.24.3 + - numpy >1.21, !=1.24.3 - python-xxhash - pyproj - scipy diff --git a/requirements/pypi-core.txt b/requirements/pypi-core.txt index 7937f73b4f..e286bb97bc 100644 --- a/requirements/pypi-core.txt +++ b/requirements/pypi-core.txt @@ -5,8 +5,8 @@ dask[array]>=2022.9.0 # libnetcdf!=4.9.1 (not available on PyPI) matplotlib>=3.5 netcdf4 -numpy>=1.21,!=1.24.3 +numpy>1.21,!=1.24.3 pyproj scipy shapely!=1.8.3 -xxhash \ No newline at end of file +xxhash From 69bbe98653ca371247eaa11e803144884db783c6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:19:50 +0000 Subject: [PATCH 64/82] Bump scitools/workflows from 2023.09.1 to 2023.10.0 (#5540) --- .github/workflows/ci-manifest.yml | 2 +- .github/workflows/refresh-lockfiles.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci-manifest.yml b/.github/workflows/ci-manifest.yml index 391f944310..65716338de 100644 --- a/.github/workflows/ci-manifest.yml +++ b/.github/workflows/ci-manifest.yml @@ -23,4 +23,4 @@ concurrency: jobs: manifest: name: "check-manifest" - uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.09.1 + uses: scitools/workflows/.github/workflows/ci-manifest.yml@2023.10.0 diff --git a/.github/workflows/refresh-lockfiles.yml b/.github/workflows/refresh-lockfiles.yml index a3f0c7f05f..d92b653f26 100644 --- a/.github/workflows/refresh-lockfiles.yml +++ b/.github/workflows/refresh-lockfiles.yml @@ -14,5 +14,5 @@ on: jobs: refresh_lockfiles: - uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.09.1 + uses: scitools/workflows/.github/workflows/refresh-lockfiles.yml@2023.10.0 secrets: inherit From 97ee9acb9894ebccf3412db713432cd45bbc293c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 18 Oct 2023 16:30:19 +0100 Subject: [PATCH 65/82] [pre-commit.ci] pre-commit autoupdate (#5527) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.4.0...v4.5.0) - [github.com/codespell-project/codespell: v2.2.5 → v2.2.6](https://github.com/codespell-project/codespell/compare/v2.2.5...v2.2.6) * codespell fixes (#5546) * codespell fixes * add whatsnew entry --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Bill Little --- .pre-commit-config.yaml | 4 ++-- benchmarks/benchmarks/cperf/__init__.py | 2 +- benchmarks/benchmarks/generate_data/stock.py | 2 +- benchmarks/benchmarks/load/__init__.py | 2 +- benchmarks/bm_runner.py | 2 +- docs/gallery_code/meteorology/plot_COP_1d.py | 2 +- docs/src/whatsnew/latest.rst | 4 ++++ lib/iris/_deprecation.py | 2 +- lib/iris/analysis/trajectory.py | 4 ++-- lib/iris/fileformats/netcdf/saver.py | 2 +- lib/iris/pandas.py | 2 +- lib/iris/tests/unit/analysis/test_PERCENTILE.py | 2 +- lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py | 4 ++-- lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py | 2 +- .../unit/plot/test__check_geostationary_coords_and_convert.py | 2 +- 15 files changed, 21 insertions(+), 17 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 32c51d35f9..a3e042e614 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -13,7 +13,7 @@ minimum_pre_commit_version: 1.21.0 repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: # Prevent giant files from being committed. - id: check-added-large-files @@ -29,7 +29,7 @@ repos: - id: no-commit-to-branch - repo: https://github.com/codespell-project/codespell - rev: "v2.2.5" + rev: "v2.2.6" hooks: - id: codespell types_or: [asciidoc, python, markdown, rst] diff --git a/benchmarks/benchmarks/cperf/__init__.py b/benchmarks/benchmarks/cperf/__init__.py index fb311c44dc..814d29338f 100644 --- a/benchmarks/benchmarks/cperf/__init__.py +++ b/benchmarks/benchmarks/cperf/__init__.py @@ -53,7 +53,7 @@ def setup(self, file_type, three_d, three_times): if three_d: create_kwargs["n_levels"] = 71 - # Will re-use a file if already present. + # Will reuse a file if already present. file_path = make_cubesphere_testfile(**create_kwargs) else: diff --git a/benchmarks/benchmarks/generate_data/stock.py b/benchmarks/benchmarks/generate_data/stock.py index eaf46bb405..954e791f43 100644 --- a/benchmarks/benchmarks/generate_data/stock.py +++ b/benchmarks/benchmarks/generate_data/stock.py @@ -39,7 +39,7 @@ def _external(func_name_, temp_file_dir, **kwargs_): ) if not REUSE_DATA or not save_path.is_file(): # The xios functions take control of save location so need to move to - # a more specific name that allows re-use. + # a more specific name that allows reuse. actual_path = run_function_elsewhere( _external, func_name_=func_name, diff --git a/benchmarks/benchmarks/load/__init__.py b/benchmarks/benchmarks/load/__init__.py index 3b2a83b1b1..3d15629f9e 100644 --- a/benchmarks/benchmarks/load/__init__.py +++ b/benchmarks/benchmarks/load/__init__.py @@ -69,7 +69,7 @@ def time_realise(self, _, __, ___, ____) -> None: class STASHConstraint: - # xyz sizes mimic LoadAndRealise to maximise file re-use. + # xyz sizes mimic LoadAndRealise to maximise file reuse. params = [[(2, 2, 2), (1280, 960, 5), (2, 2, 1000)], ["FF", "PP"]] param_names = ["xyz", "file_format"] diff --git a/benchmarks/bm_runner.py b/benchmarks/bm_runner.py index b0f98c04ac..4b8f6e1f18 100644 --- a/benchmarks/bm_runner.py +++ b/benchmarks/bm_runner.py @@ -82,7 +82,7 @@ def _prep_data_gen_env() -> None: else: echo("Setting up the data generation environment ...") # Get Nox to build an environment for the `tests` session, but don't - # run the session. Will re-use a cached environment if appropriate. + # run the session. Will reuse a cached environment if appropriate. _subprocess_runner( [ "nox", diff --git a/docs/gallery_code/meteorology/plot_COP_1d.py b/docs/gallery_code/meteorology/plot_COP_1d.py index bebbad4224..2181b89b8c 100644 --- a/docs/gallery_code/meteorology/plot_COP_1d.py +++ b/docs/gallery_code/meteorology/plot_COP_1d.py @@ -54,7 +54,7 @@ def main(): ) # Generate area-weights array. As e1 and a1b are on the same grid we can - # do this just once and re-use. This method requires bounds on lat/lon + # do this just once and reuse. This method requires bounds on lat/lon # coords, so let's add some in sensible locations using the "guess_bounds" # method. e1.coord("latitude").guess_bounds() diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 58d94bf5fa..bcc411c773 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -106,6 +106,9 @@ This document explains the changes made to Iris for this release #. `@fazledyn-or`_ replaced ``NotImplementedError`` with ``NotImplemented`` as a proper method call. (:pull:`5544`) +#. `@bjlittle`_ corrected various comment spelling mistakes detected by + `codespell`_. (:pull:`5546`) + .. comment Whatsnew author names (@github name) in alphabetical order. Note that, @@ -120,4 +123,5 @@ This document explains the changes made to Iris for this release Whatsnew resources in alphabetical order: .. _NEP29 Drop Schedule: https://numpy.org/neps/nep-0029-deprecation_policy.html#drop-schedule +.. _codespell: https://github.com/codespell-project/codespell diff --git a/lib/iris/_deprecation.py b/lib/iris/_deprecation.py index 8ad762a558..027e11f2dc 100644 --- a/lib/iris/_deprecation.py +++ b/lib/iris/_deprecation.py @@ -16,7 +16,7 @@ class IrisDeprecation(UserWarning): An Iris deprecation warning. Note this subclasses UserWarning for backwards compatibility with Iris' - original deprection warnings. Should subclass DeprecationWarning at the + original deprecation warnings. Should subclass DeprecationWarning at the next major release. """ diff --git a/lib/iris/analysis/trajectory.py b/lib/iris/analysis/trajectory.py index 84ce89ab6f..2495ff12fc 100644 --- a/lib/iris/analysis/trajectory.py +++ b/lib/iris/analysis/trajectory.py @@ -734,7 +734,7 @@ class UnstructuredNearestNeigbourRegridder: """ - # TODO: cache the necessary bits of the operation so re-use can actually + # TODO: cache the necessary bits of the operation so reuse can actually # be more efficient. def __init__(self, src_cube, target_grid_cube): """ @@ -873,7 +873,7 @@ def __init__(self, src_cube, target_grid_cube): def __call__(self, src_cube): # Check the source cube X and Y coords match the original. # Note: for now, this is sufficient to ensure a valid trajectory - # interpolation, but if in future we save + re-use the cache context + # interpolation, but if in future we save and reuse the cache context # for the 'interpolate' call, we may need more checks here. # Check the given cube against the original. diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index 1ff69df1f7..cfca507226 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -1009,7 +1009,7 @@ def _add_inner_related_vars( for element in sorted( coordlike_elements, key=lambda element: element.name() ): - # Re-use, or create, the associated CF-netCDF variable. + # Reuse, or create, the associated CF-netCDF variable. cf_name = self._name_coord_map.name(element) if cf_name is None: # Not already present : create it diff --git a/lib/iris/pandas.py b/lib/iris/pandas.py index cb26b638e4..0d0e65d648 100644 --- a/lib/iris/pandas.py +++ b/lib/iris/pandas.py @@ -83,7 +83,7 @@ def _add_iris_coord(cube, name, points, dim, calendar=None): Add a Coord or other dimensional metadata to a Cube from a Pandas index or columns array. """ # Most functionality has been abstracted to _get_dimensional_metadata, - # allowing re-use in as_cube() and as_cubes(). + # allowing reuse in as_cube() and as_cubes(). coord = _get_dimensional_metadata(name, points, calendar) if coord.__class__ == DimCoord: diff --git a/lib/iris/tests/unit/analysis/test_PERCENTILE.py b/lib/iris/tests/unit/analysis/test_PERCENTILE.py index bfd3234d26..a29516c604 100644 --- a/lib/iris/tests/unit/analysis/test_PERCENTILE.py +++ b/lib/iris/tests/unit/analysis/test_PERCENTILE.py @@ -94,7 +94,7 @@ class ScipyAggregateMixin: Tests for calculations specific to the default (scipy) function. Includes tests on masked data and tests to verify that the function is called with the expected keywords. Needs to be used with AggregateMixin, as some of - these tests re-use its method. + these tests reuse its method. """ diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py index f39f3706ee..64d106f97d 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py @@ -72,7 +72,7 @@ def setUpClass(cls): class TestProperties1D(TestMeshCommon): - # Tests that can re-use a single instance for greater efficiency. + # Tests that can reuse a single instance for greater efficiency. @classmethod def setUpClass(cls): super().setUpClass() @@ -737,7 +737,7 @@ def test___str__units_stdname(self): class TestOperations1D(TestMeshCommon): - # Tests that cannot re-use an existing Mesh instance, instead need a new + # Tests that cannot reuse an existing Mesh instance, instead need a new # one each time. def setUp(self): self.mesh = mesh.Mesh( diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py index ba7306bded..b95c5f09bb 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py @@ -578,7 +578,7 @@ def _make_test_meshcoord( edge_xs = self.EDGECOORDS_BASENUM + np.arange(n_edges) face_xs = self.FACECOORDS_BASENUM + np.arange(n_faces) - # Record all these for re-use in tests + # Record all these for reuse in tests self.n_faces = n_faces self.n_nodes = n_nodes self.face_xs = face_xs diff --git a/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py b/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py index 633dea85c4..a06a437396 100644 --- a/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py +++ b/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py @@ -37,7 +37,7 @@ def setUp(self): ) def _test(self, geostationary=True): - # Re-usable test for when Geostationary is present OR absent. + # Reusable test for when Geostationary is present OR absent. if geostationary: # A Geostationary projection WILL be processed. projection_spec = Geostationary From 0b50a2cda31a38b7eb759776355f2853bc5fb453 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 24 Oct 2023 09:04:07 +0100 Subject: [PATCH 66/82] [pre-commit.ci] pre-commit autoupdate (#5549) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.9.1 → 23.10.0](https://github.com/psf/black/compare/23.9.1...23.10.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a3e042e614..db6237d944 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,7 +36,7 @@ repos: additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.9.1 + rev: 23.10.0 hooks: - id: black pass_filenames: false From f30db0d476633d0aa12813d904411e14ccad6e5e Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Tue, 24 Oct 2023 15:44:27 +0100 Subject: [PATCH 67/82] Oblique and Rotated Mercator (#5548) * Introduce new coord system classes. * Add loading code for oblique mercator. * Fix for azimuth check. * Add saving code for oblique mercator. * Fix to rotated repr. * Scale factor wording fix. * Tests first pass. * Temp test disable. * Temp RotatedMercator test disable. * Deprecate RotatedMercator. * Revert "Temp RotatedMercator test disable." This reverts commit 27c486f3122a6056618b865c0534e7b871da9288. * First attempted fix for RM test inheritance. * Revert "Temp test disable." This reverts commit a81507c59f4a873ca32e8aa683f91e3215e09ff9. * Fix warnings doctests. * Add deprecation test for RotatedMercator. * Oblique Mercator loading tests. * Oblique Mercator loading deprecation test. * Saving test for Oblique Mercator. * Fix isinstance() check. * What's New entry. * Temp test disable. * More temp test disabling. * WIP testing. * WIP testing. * Revert "More temp test disabling." This reverts commit ff251b75f87e733fe349fce7777a66fa8b637ca4. * Revert "Temp test disable." This reverts commit 77eba551ded2d88839566ec67d6195fcd6df8aae. * Use RotatedMercator inheritance for isinstance() check. * Check grid_mapping_name instead of using isinstance(). * Better type hinting. * Use return over yield in a fixture. * Duck typing comment. * Better grid_mapping_name checking. * Better structure for test parameterisation. --- .../src/further_topics/filtering_warnings.rst | 12 +- docs/src/whatsnew/latest.rst | 4 + lib/iris/coord_systems.py | 196 ++++++++++++++++++ .../fileformats/_nc_load_rules/actions.py | 8 + .../fileformats/_nc_load_rules/helpers.py | 56 +++++ lib/iris/fileformats/netcdf/saver.py | 31 +++ .../coord_systems/test_ObliqueMercator.py | 165 +++++++++++++++ .../coord_systems/test_RotatedMercator.py | 39 ++++ ...uild_oblique_mercator_coordinate_system.py | 183 ++++++++++++++++ .../fileformats/netcdf/saver/test_Saver.py | 46 ++++ 10 files changed, 734 insertions(+), 6 deletions(-) create mode 100644 lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py create mode 100644 lib/iris/tests/unit/coord_systems/test_RotatedMercator.py create mode 100644 lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py diff --git a/docs/src/further_topics/filtering_warnings.rst b/docs/src/further_topics/filtering_warnings.rst index 689ea69a52..2cbad525d3 100644 --- a/docs/src/further_topics/filtering_warnings.rst +++ b/docs/src/further_topics/filtering_warnings.rst @@ -47,9 +47,9 @@ Warnings: >>> my_operation() ... - iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) - iris/coord_systems.py:821: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:823: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( Warnings can be suppressed using the Python warnings filter with the ``ignore`` @@ -110,7 +110,7 @@ You can target specific Warning messages, e.g. ... warnings.filterwarnings("ignore", message="Discarding false_easting") ... my_operation() ... - iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) :: @@ -125,10 +125,10 @@ Or you can target Warnings raised by specific lines of specific modules, e.g. .. doctest:: filtering_warnings >>> with warnings.catch_warnings(): - ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=454) + ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=456) ... my_operation() ... - iris/coord_systems.py:821: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:823: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( :: @@ -188,7 +188,7 @@ module during execution: ... ) ... my_operation() ... - iris/coord_systems.py:454: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) ---- diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index bcc411c773..49698ca501 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -34,6 +34,10 @@ This document explains the changes made to Iris for this release :class:`UserWarning`\s for richer filtering. The full index of sub-categories can be seen here: :mod:`iris.exceptions` . (:pull:`5498`) +#. `@trexfeathers`_ added the :class:`~iris.coord_systems.ObliqueMercator` + and :class:`~iris.coord_systems.RotatedMercator` coordinate systems, + complete with NetCDF loading and saving. (:pull:`5548`) + 🐛 Bugs Fixed ============= diff --git a/lib/iris/coord_systems.py b/lib/iris/coord_systems.py index e2003d1286..3d986fefce 100644 --- a/lib/iris/coord_systems.py +++ b/lib/iris/coord_systems.py @@ -10,11 +10,13 @@ from abc import ABCMeta, abstractmethod from functools import cached_property +import re import warnings import cartopy.crs as ccrs import numpy as np +from iris._deprecation import warn_deprecated import iris.exceptions @@ -1634,3 +1636,197 @@ def as_cartopy_crs(self): def as_cartopy_projection(self): return self.as_cartopy_crs() + + +class ObliqueMercator(CoordSystem): + """ + A cylindrical map projection, with XY coordinates measured in metres. + + Designed for regions not well suited to :class:`Mercator` or + :class:`TransverseMercator`, as the positioning of the cylinder is more + customisable. + + See Also + -------- + :class:`RotatedMercator` + + """ + + grid_mapping_name = "oblique_mercator" + + def __init__( + self, + azimuth_of_central_line, + latitude_of_projection_origin, + longitude_of_projection_origin, + false_easting=None, + false_northing=None, + scale_factor_at_projection_origin=None, + ellipsoid=None, + ): + """ + Constructs an ObliqueMercator object. + + Parameters + ---------- + azimuth_of_central_line : float + Azimuth of centerline clockwise from north at the center point of + the centre line. + latitude_of_projection_origin : float + The true longitude of the central meridian in degrees. + longitude_of_projection_origin: float + The true latitude of the planar origin in degrees. + false_easting: float, optional + X offset from the planar origin in metres. + Defaults to 0.0 . + false_northing: float, optional + Y offset from the planar origin in metres. + Defaults to 0.0 . + scale_factor_at_projection_origin: float, optional + Scale factor at the central meridian. + Defaults to 1.0 . + ellipsoid: :class:`GeogCS`, optional + If given, defines the ellipsoid. + + Examples + -------- + >>> from iris.coord_systems import GeogCS, ObliqueMercator + >>> my_ellipsoid = GeogCS(6371229.0, None, 0.0) + >>> ObliqueMercator(90.0, -22.0, -59.0, -25000.0, -25000.0, 1., my_ellipsoid) + ObliqueMercator(azimuth_of_central_line=90.0, latitude_of_projection_origin=-22.0, longitude_of_projection_origin=-59.0, false_easting=-25000.0, false_northing=-25000.0, scale_factor_at_projection_origin=1.0, ellipsoid=GeogCS(6371229.0)) + + """ + #: Azimuth of centerline clockwise from north. + self.azimuth_of_central_line = float(azimuth_of_central_line) + + #: True latitude of planar origin in degrees. + self.latitude_of_projection_origin = float( + latitude_of_projection_origin + ) + + #: True longitude of planar origin in degrees. + self.longitude_of_projection_origin = float( + longitude_of_projection_origin + ) + + #: X offset from planar origin in metres. + self.false_easting = _arg_default(false_easting, 0) + + #: Y offset from planar origin in metres. + self.false_northing = _arg_default(false_northing, 0) + + #: Scale factor at the central meridian. + self.scale_factor_at_projection_origin = _arg_default( + scale_factor_at_projection_origin, 1.0 + ) + + #: Ellipsoid definition (:class:`GeogCS` or None). + self.ellipsoid = ellipsoid + + def __repr__(self): + return ( + "{!s}(azimuth_of_central_line={!r}, " + "latitude_of_projection_origin={!r}, " + "longitude_of_projection_origin={!r}, false_easting={!r}, " + "false_northing={!r}, scale_factor_at_projection_origin={!r}, " + "ellipsoid={!r})".format( + self.__class__.__name__, + self.azimuth_of_central_line, + self.latitude_of_projection_origin, + self.longitude_of_projection_origin, + self.false_easting, + self.false_northing, + self.scale_factor_at_projection_origin, + self.ellipsoid, + ) + ) + + def as_cartopy_crs(self): + globe = self._ellipsoid_to_globe(self.ellipsoid, None) + + return ccrs.ObliqueMercator( + central_longitude=self.longitude_of_projection_origin, + central_latitude=self.latitude_of_projection_origin, + false_easting=self.false_easting, + false_northing=self.false_northing, + scale_factor=self.scale_factor_at_projection_origin, + azimuth=self.azimuth_of_central_line, + globe=globe, + ) + + def as_cartopy_projection(self): + return self.as_cartopy_crs() + + +class RotatedMercator(ObliqueMercator): + """ + :class:`ObliqueMercator` with ``azimuth_of_central_line=90``. + + As noted in CF versions 1.10 and earlier: + + The Rotated Mercator projection is an Oblique Mercator projection + with azimuth = +90. + + .. deprecated:: 3.8.0 + This coordinate system was introduced as already scheduled for removal + in a future release, since CF version 1.11 onwards now requires use of + :class:`ObliqueMercator` with ``azimuth_of_central_line=90.`` . + Any :class:`RotatedMercator` instances will always be saved to NetCDF + as the ``oblique_mercator`` grid mapping. + + """ + + def __init__( + self, + latitude_of_projection_origin, + longitude_of_projection_origin, + false_easting=None, + false_northing=None, + scale_factor_at_projection_origin=None, + ellipsoid=None, + ): + """ + Constructs a RotatedMercator object. + + Parameters + ---------- + latitude_of_projection_origin : float + The true longitude of the central meridian in degrees. + longitude_of_projection_origin: float + The true latitude of the planar origin in degrees. + false_easting: float, optional + X offset from the planar origin in metres. + Defaults to 0.0 . + false_northing: float, optional + Y offset from the planar origin in metres. + Defaults to 0.0 . + scale_factor_at_projection_origin: float, optional + Scale factor at the central meridian. + Defaults to 1.0 . + ellipsoid: :class:`GeogCS`, optional + If given, defines the ellipsoid. + + """ + message = ( + "iris.coord_systems.RotatedMercator is deprecated, and will be " + "removed in a future release. Instead please use " + "iris.coord_systems.ObliqueMercator with " + "azimuth_of_central_line=90 ." + ) + warn_deprecated(message) + + super().__init__( + 90.0, + latitude_of_projection_origin, + longitude_of_projection_origin, + false_easting, + false_northing, + scale_factor_at_projection_origin, + ellipsoid, + ) + + def __repr__(self): + # Remove the azimuth argument from the parent repr. + result = super().__repr__() + result = re.sub(r"azimuth_of_central_line=\d*\.?\d*, ", "", result) + return result diff --git a/lib/iris/fileformats/_nc_load_rules/actions.py b/lib/iris/fileformats/_nc_load_rules/actions.py index be84b65132..44ef7ac549 100644 --- a/lib/iris/fileformats/_nc_load_rules/actions.py +++ b/lib/iris/fileformats/_nc_load_rules/actions.py @@ -156,6 +156,14 @@ def action_default(engine): None, hh.build_geostationary_coordinate_system, ), + hh.CF_GRID_MAPPING_OBLIQUE: ( + None, + hh.build_oblique_mercator_coordinate_system, + ), + hh.CF_GRID_MAPPING_ROTATED_MERCATOR: ( + None, + hh.build_oblique_mercator_coordinate_system, + ), } diff --git a/lib/iris/fileformats/_nc_load_rules/helpers.py b/lib/iris/fileformats/_nc_load_rules/helpers.py index 19a9cd18ca..9c75c0e866 100644 --- a/lib/iris/fileformats/_nc_load_rules/helpers.py +++ b/lib/iris/fileformats/_nc_load_rules/helpers.py @@ -23,6 +23,7 @@ import pyproj import iris +from iris._deprecation import warn_deprecated import iris.aux_factory from iris.common.mixin import _get_valid_standard_name import iris.coord_systems @@ -124,6 +125,8 @@ CF_GRID_MAPPING_TRANSVERSE = "transverse_mercator" CF_GRID_MAPPING_VERTICAL = "vertical_perspective" CF_GRID_MAPPING_GEOSTATIONARY = "geostationary" +CF_GRID_MAPPING_OBLIQUE = "oblique_mercator" +CF_GRID_MAPPING_ROTATED_MERCATOR = "rotated_mercator" # # CF Attribute Names. @@ -154,6 +157,7 @@ CF_ATTR_GRID_STANDARD_PARALLEL = "standard_parallel" CF_ATTR_GRID_PERSPECTIVE_HEIGHT = "perspective_point_height" CF_ATTR_GRID_SWEEP_ANGLE_AXIS = "sweep_angle_axis" +CF_ATTR_GRID_AZIMUTH_CENT_LINE = "azimuth_of_central_line" CF_ATTR_POSITIVE = "positive" CF_ATTR_STD_NAME = "standard_name" CF_ATTR_LONG_NAME = "long_name" @@ -893,6 +897,58 @@ def build_geostationary_coordinate_system(engine, cf_grid_var): return cs +################################################################################ +def build_oblique_mercator_coordinate_system(engine, cf_grid_var): + """ + Create an oblique mercator coordinate system from the CF-netCDF + grid mapping variable. + + """ + ellipsoid = _get_ellipsoid(cf_grid_var) + + azimuth_of_central_line = getattr( + cf_grid_var, CF_ATTR_GRID_AZIMUTH_CENT_LINE, None + ) + latitude_of_projection_origin = getattr( + cf_grid_var, CF_ATTR_GRID_LAT_OF_PROJ_ORIGIN, None + ) + longitude_of_projection_origin = getattr( + cf_grid_var, CF_ATTR_GRID_LON_OF_PROJ_ORIGIN, None + ) + scale_factor_at_projection_origin = getattr( + cf_grid_var, CF_ATTR_GRID_SCALE_FACTOR_AT_PROJ_ORIGIN, None + ) + false_easting = getattr(cf_grid_var, CF_ATTR_GRID_FALSE_EASTING, None) + false_northing = getattr(cf_grid_var, CF_ATTR_GRID_FALSE_NORTHING, None) + kwargs = dict( + azimuth_of_central_line=azimuth_of_central_line, + latitude_of_projection_origin=latitude_of_projection_origin, + longitude_of_projection_origin=longitude_of_projection_origin, + scale_factor_at_projection_origin=scale_factor_at_projection_origin, + false_easting=false_easting, + false_northing=false_northing, + ellipsoid=ellipsoid, + ) + + # Handle the alternative form noted in CF: rotated mercator. + grid_mapping_name = getattr(cf_grid_var, CF_ATTR_GRID_MAPPING_NAME) + candidate_systems = dict( + oblique_mercator=iris.coord_systems.ObliqueMercator, + rotated_mercator=iris.coord_systems.RotatedMercator, + ) + if grid_mapping_name == "rotated_mercator": + message = ( + "Iris will stop loading the rotated_mercator grid mapping name in " + "a future release, in accordance with CF version 1.11 . Instead " + "please use oblique_mercator with azimuth_of_central_line = 90 ." + ) + warn_deprecated(message) + del kwargs[CF_ATTR_GRID_AZIMUTH_CENT_LINE] + + cs = candidate_systems[grid_mapping_name](**kwargs) + return cs + + ################################################################################ def get_attr_units(cf_var, attributes): attr_units = getattr(cf_var, CF_ATTR_UNITS, UNKNOWN_UNIT_STRING) diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index cfca507226..011f74892d 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -102,6 +102,9 @@ # UKMO specific attributes that should not be global. _UKMO_DATA_ATTRS = ["STASH", "um_stash_source", "ukmo__process_flags"] +# TODO: whenever we advance to CF-1.11 we should then discuss a completion date +# for the deprecation of Rotated Mercator in coord_systems.py and +# _nc_load_rules/helpers.py . CF_CONVENTIONS_VERSION = "CF-1.7" _FactoryDefn = collections.namedtuple( @@ -2210,6 +2213,34 @@ def add_ellipsoid(ellipsoid): ) cf_var_grid.sweep_angle_axis = cs.sweep_angle_axis + # oblique mercator (and rotated variant) + # Use duck-typing over isinstance() - subclasses (i.e. + # RotatedMercator) upset mock tests. + elif ( + getattr(cs, "grid_mapping_name", None) + == "oblique_mercator" + ): + # RotatedMercator subclasses ObliqueMercator, and RM + # instances are implicitly saved as OM due to inherited + # properties. This is correct because CF 1.11 is removing + # all mention of RM. + if cs.ellipsoid: + add_ellipsoid(cs.ellipsoid) + cf_var_grid.azimuth_of_central_line = ( + cs.azimuth_of_central_line + ) + cf_var_grid.latitude_of_projection_origin = ( + cs.latitude_of_projection_origin + ) + cf_var_grid.longitude_of_projection_origin = ( + cs.longitude_of_projection_origin + ) + cf_var_grid.false_easting = cs.false_easting + cf_var_grid.false_northing = cs.false_northing + cf_var_grid.scale_factor_at_projection_origin = ( + cs.scale_factor_at_projection_origin + ) + # other else: warnings.warn( diff --git a/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py b/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py new file mode 100644 index 0000000000..0799fb881e --- /dev/null +++ b/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py @@ -0,0 +1,165 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +"""Unit tests for the :class:`iris.coord_systems.ObliqueMercator` class.""" + +from typing import List, NamedTuple +from unittest.mock import Mock + +from cartopy import crs as ccrs +import pytest + +from iris.coord_systems import GeogCS, ObliqueMercator + +#### +# ALL TESTS MUST BE CONTAINED IN CLASSES, TO ENABLE INHERITANCE BY +# test_RotatedMercator.py . +#### + + +class GlobeWithEq(ccrs.Globe): + def __eq__(self, other): + """Need eq to enable comparison with expected arguments.""" + result = NotImplemented + if isinstance(other, ccrs.Globe): + result = other.__dict__ == self.__dict__ + return result + + +class ParamTuple(NamedTuple): + """Used for easy coupling of test parameters.""" + + id: str + class_kwargs: dict + cartopy_kwargs: dict + + +kwarg_permutations: List[ParamTuple] = [ + ParamTuple( + "default", + dict(), + dict(), + ), + ParamTuple( + "azimuth", + dict(azimuth_of_central_line=90), + dict(azimuth=90), + ), + ParamTuple( + "central_longitude", + dict(longitude_of_projection_origin=90), + dict(central_longitude=90), + ), + ParamTuple( + "central_latitude", + dict(latitude_of_projection_origin=45), + dict(central_latitude=45), + ), + ParamTuple( + "false_easting_northing", + dict(false_easting=1000000, false_northing=-2000000), + dict(false_easting=1000000, false_northing=-2000000), + ), + ParamTuple( + "scale_factor", + # Number inherited from Cartopy's test_mercator.py . + dict(scale_factor_at_projection_origin=0.939692620786), + dict(scale_factor=0.939692620786), + ), + ParamTuple( + "globe", + dict(ellipsoid=GeogCS(1)), + dict( + globe=GlobeWithEq(semimajor_axis=1, semiminor_axis=1, ellipse=None) + ), + ), + ParamTuple( + "combo", + dict( + azimuth_of_central_line=90, + longitude_of_projection_origin=90, + latitude_of_projection_origin=45, + false_easting=1000000, + false_northing=-2000000, + scale_factor_at_projection_origin=0.939692620786, + ellipsoid=GeogCS(1), + ), + dict( + azimuth=90.0, + central_longitude=90.0, + central_latitude=45.0, + false_easting=1000000, + false_northing=-2000000, + scale_factor=0.939692620786, + globe=GlobeWithEq( + semimajor_axis=1, semiminor_axis=1, ellipse=None + ), + ), + ), +] +permutation_ids: List[str] = [p.id for p in kwarg_permutations] + + +class TestArgs: + GeogCS = GeogCS + class_kwargs_default = dict( + azimuth_of_central_line=0.0, + latitude_of_projection_origin=0.0, + longitude_of_projection_origin=0.0, + ) + cartopy_kwargs_default = dict( + central_longitude=0.0, + central_latitude=0.0, + false_easting=0.0, + false_northing=0.0, + scale_factor=1.0, + azimuth=0.0, + globe=None, + ) + + @pytest.fixture( + autouse=True, params=kwarg_permutations, ids=permutation_ids + ) + def make_variant_inputs(self, request) -> None: + """Parse a ParamTuple into usable test information.""" + inputs: ParamTuple = request.param + self.class_kwargs = dict( + self.class_kwargs_default, **inputs.class_kwargs + ) + self.cartopy_kwargs_expected = dict( + self.cartopy_kwargs_default, **inputs.cartopy_kwargs + ) + + def make_instance(self) -> ObliqueMercator: + return ObliqueMercator(**self.class_kwargs) + + @pytest.fixture() + def instance(self): + return self.make_instance() + + def test_instantiate(self): + _ = self.make_instance() + + def test_cartopy_crs(self, instance): + ccrs.ObliqueMercator = Mock() + instance.as_cartopy_crs() + ccrs.ObliqueMercator.assert_called_with(**self.cartopy_kwargs_expected) + + def test_cartopy_projection(self, instance): + ccrs.ObliqueMercator = Mock() + instance.as_cartopy_projection() + ccrs.ObliqueMercator.assert_called_with(**self.cartopy_kwargs_expected) + + @pytest.fixture() + def label_class(self, instance): + """Make the tested coordinate system available, even for subclasses.""" + from iris import coord_systems + + instance_class = "{!s}".format(instance.__class__.__name__) + globals()[instance_class] = getattr(coord_systems, instance_class) + + def test_repr(self, instance, label_class): + """Test that the repr can be used to regenerate an identical object.""" + assert eval(repr(instance)) == instance diff --git a/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py b/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py new file mode 100644 index 0000000000..97921efec6 --- /dev/null +++ b/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py @@ -0,0 +1,39 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +"""Unit tests for the :class:`iris.coord_systems.RotatedMercator` class.""" + +import pytest + +from iris._deprecation import IrisDeprecation +from iris.coord_systems import RotatedMercator + +from . import test_ObliqueMercator + + +class TestArgs(test_ObliqueMercator.TestArgs): + class_kwargs_default = dict( + latitude_of_projection_origin=0.0, + longitude_of_projection_origin=0.0, + ) + cartopy_kwargs_default = dict( + central_longitude=0.0, + central_latitude=0.0, + false_easting=0.0, + false_northing=0.0, + scale_factor=1.0, + azimuth=90.0, + globe=None, + ) + + def make_instance(self) -> RotatedMercator: + kwargs = self.class_kwargs + kwargs.pop("azimuth_of_central_line", None) + return RotatedMercator(**kwargs) + + +def test_deprecated(): + with pytest.warns(IrisDeprecation, match="azimuth_of_central_line=90"): + _ = RotatedMercator(0, 0) diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py new file mode 100644 index 0000000000..b11d8d3cca --- /dev/null +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py @@ -0,0 +1,183 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +""" +Test function :func:`iris.fileformats._nc_load_rules.helpers.build_oblique_mercator_coordinate_system`. + +""" +from typing import List, NamedTuple, Type +from unittest import mock + +import pytest + +from iris import coord_systems +from iris._deprecation import IrisDeprecation +from iris.coord_systems import ( + CoordSystem, + GeogCS, + ObliqueMercator, + RotatedMercator, +) +from iris.fileformats._nc_load_rules.helpers import ( + build_oblique_mercator_coordinate_system, +) + + +class ParamTuple(NamedTuple): + """Used for easy coupling of test parameters.""" + + id: str + nc_attributes: dict + expected_class: Type[CoordSystem] + coord_system_kwargs: dict + + +kwarg_permutations: List[ParamTuple] = [ + ParamTuple( + "default", + dict(), + ObliqueMercator, + dict(), + ), + ParamTuple( + "azimuth", + dict(azimuth_of_central_line=90), + ObliqueMercator, + dict(azimuth_of_central_line=90), + ), + ParamTuple( + "central_longitude", + dict(longitude_of_projection_origin=90), + ObliqueMercator, + dict(longitude_of_projection_origin=90), + ), + ParamTuple( + "central_latitude", + dict(latitude_of_projection_origin=45), + ObliqueMercator, + dict(latitude_of_projection_origin=45), + ), + ParamTuple( + "false_easting_northing", + dict(false_easting=1000000, false_northing=-2000000), + ObliqueMercator, + dict(false_easting=1000000, false_northing=-2000000), + ), + ParamTuple( + "scale_factor", + # Number inherited from Cartopy's test_mercator.py . + dict(scale_factor_at_projection_origin=0.939692620786), + ObliqueMercator, + dict(scale_factor_at_projection_origin=0.939692620786), + ), + ParamTuple( + "globe", + dict(semi_major_axis=1), + ObliqueMercator, + dict(ellipsoid=GeogCS(semi_major_axis=1, semi_minor_axis=1)), + ), + ParamTuple( + "combo", + dict( + azimuth_of_central_line=90, + longitude_of_projection_origin=90, + latitude_of_projection_origin=45, + false_easting=1000000, + false_northing=-2000000, + scale_factor_at_projection_origin=0.939692620786, + semi_major_axis=1, + ), + ObliqueMercator, + dict( + azimuth_of_central_line=90.0, + longitude_of_projection_origin=90.0, + latitude_of_projection_origin=45.0, + false_easting=1000000, + false_northing=-2000000, + scale_factor_at_projection_origin=0.939692620786, + ellipsoid=GeogCS(semi_major_axis=1, semi_minor_axis=1), + ), + ), + ParamTuple( + "rotated", + dict(grid_mapping_name="rotated_mercator"), + RotatedMercator, + dict(), + ), + ParamTuple( + "rotated_azimuth_ignored", + dict( + grid_mapping_name="rotated_mercator", + azimuth_of_central_line=45, + ), + RotatedMercator, + dict(), + ), +] +permutation_ids: List[str] = [p.id for p in kwarg_permutations] + + +class TestAttributes: + """Test that NetCDF attributes are correctly converted to class arguments.""" + + nc_attributes_default = dict( + grid_mapping_name="oblique_mercator", + azimuth_of_central_line=0.0, + latitude_of_projection_origin=0.0, + longitude_of_projection_origin=0.0, + scale_factor_at_projection_origin=1.0, + # Optional attributes not included. + ) + coord_system_kwargs_default = dict( + azimuth_of_central_line=0.0, + latitude_of_projection_origin=0.0, + longitude_of_projection_origin=0.0, + false_easting=None, + false_northing=None, + scale_factor_at_projection_origin=1.0, + ellipsoid=None, + ) + + @pytest.fixture( + autouse=True, params=kwarg_permutations, ids=permutation_ids + ) + def make_variant_inputs(self, request) -> None: + """Parse a ParamTuple into usable test information.""" + inputs: ParamTuple = request.param + + self.nc_attributes = dict( + self.nc_attributes_default, **inputs.nc_attributes + ) + self.expected_class = inputs.expected_class + coord_system_kwargs_expected = dict( + self.coord_system_kwargs_default, **inputs.coord_system_kwargs + ) + + if self.expected_class is RotatedMercator: + del coord_system_kwargs_expected["azimuth_of_central_line"] + + self.coord_system_args_expected = list( + coord_system_kwargs_expected.values() + ) + + def test_attributes(self): + cf_var_mock = mock.Mock(spec=[], **self.nc_attributes) + coord_system_mock = mock.Mock(spec=self.expected_class) + setattr(coord_systems, self.expected_class.__name__, coord_system_mock) + + _ = build_oblique_mercator_coordinate_system(None, cf_var_mock) + coord_system_mock.assert_called_with(*self.coord_system_args_expected) + + +def test_deprecation(): + nc_attributes = dict( + grid_mapping_name="rotated_mercator", + latitude_of_projection_origin=0.0, + longitude_of_projection_origin=0.0, + scale_factor_at_projection_origin=1.0, + ) + cf_var_mock = mock.Mock(spec=[], **nc_attributes) + with pytest.warns(IrisDeprecation, match="azimuth_of_central_line = 90"): + _ = build_oblique_mercator_coordinate_system(None, cf_var_mock) diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py index af0d7bcd30..8253e59368 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py @@ -24,7 +24,9 @@ LambertAzimuthalEqualArea, LambertConformal, Mercator, + ObliqueMercator, RotatedGeogCS, + RotatedMercator, Stereographic, TransverseMercator, VerticalPerspective, @@ -1065,6 +1067,50 @@ def test_geo_cs(self): } self._test(coord_system, expected) + def test_oblique_cs(self): + # Some none-default settings to confirm all parameters are being + # handled. + + kwargs_rotated = dict( + latitude_of_projection_origin=90.0, + longitude_of_projection_origin=45.0, + false_easting=1000000.0, + false_northing=-2000000.0, + scale_factor_at_projection_origin=0.939692620786, + ellipsoid=GeogCS(1), + ) + + # Same as rotated, but with azimuth too. + oblique_azimuth = dict(azimuth_of_central_line=45.0) + kwargs_oblique = dict(kwargs_rotated, **oblique_azimuth) + + expected_rotated = dict( + # Automatically converted to oblique_mercator in line with CF 1.11 . + grid_mapping_name=b"oblique_mercator", + # Azimuth should be automatically populated. + azimuth_of_central_line=90.0, + **kwargs_rotated, + ) + # Convert the ellipsoid + expected_rotated.update( + dict( + earth_radius=expected_rotated.pop("ellipsoid").semi_major_axis, + longitude_of_prime_meridian=0.0, + ) + ) + + # Same as rotated, but different azimuth. + expected_oblique = dict(expected_rotated, **oblique_azimuth) + + oblique = ObliqueMercator(**kwargs_oblique) + rotated = RotatedMercator(**kwargs_rotated) + + for coord_system, expected in [ + (oblique, expected_oblique), + (rotated, expected_rotated), + ]: + self._test(coord_system, expected) + if __name__ == "__main__": tests.main() From a65f3912d532ceefa5545516aacd475c3ad51bc4 Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Thu, 26 Oct 2023 12:11:19 +0100 Subject: [PATCH 68/82] updated layout of top navbar (#5505) --- docs/src/conf.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/conf.py b/docs/src/conf.py index 7f7322c1f8..72f2ebf4ff 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -294,7 +294,9 @@ def _dotv(version): "collapse_navigation": True, "navigation_depth": 3, "show_prev_next": True, - "navbar_align": "left", + "navbar_align": "content", + # removes the search box from the top bar + "navbar_persistent": [], # TODO: review if 6 links is too crowded. "header_links_before_dropdown": 6, "github_url": "https://github.com/SciTools/iris", From cc52dca02fdfc5c7fe1f48dc1c378daf6905197f Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Thu, 26 Oct 2023 12:13:15 +0100 Subject: [PATCH 69/82] moved latest warning banner logic to conf.py (#5508) --- docs/src/_templates/layout.html | 20 -------------------- docs/src/conf.py | 10 ++++++++++ 2 files changed, 10 insertions(+), 20 deletions(-) delete mode 100644 docs/src/_templates/layout.html diff --git a/docs/src/_templates/layout.html b/docs/src/_templates/layout.html deleted file mode 100644 index 974bd12753..0000000000 --- a/docs/src/_templates/layout.html +++ /dev/null @@ -1,20 +0,0 @@ -{% extends "pydata_sphinx_theme/layout.html" %} - -{# This uses blocks. See: - https://www.sphinx-doc.org/en/master/templating.html -#} - - - {%- block docs_body %} - - {% if on_rtd and rtd_version == 'latest' %} -
- You are viewing the latest unreleased documentation - v{{ version }}. You can switch to a stable version - via the flyout menu in the bottom corner of the screen. -
-

- {%- endif %} - - {{ super() }} -{%- endblock %} diff --git a/docs/src/conf.py b/docs/src/conf.py index 72f2ebf4ff..17a0d621cb 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -331,6 +331,16 @@ def _dotv(version): }, } +# if we are building via Read The Docs and it is the latest (not stable) +if on_rtd and rtd_version == "latest": + html_theme_options[ + "announcement" + ] = f""" + You are viewing the latest unreleased documentation + {version}. You can switch to a +
stable + version.""" + rev_parse = run(["git", "rev-parse", "--short", "HEAD"], capture_output=True) commit_sha = rev_parse.stdout.decode().strip() From 7e7d40aaa3e87d1a5d63da5ce44a925eb4f8e34e Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Thu, 26 Oct 2023 13:19:03 +0100 Subject: [PATCH 70/82] Added whatsnew. (#5552) --- docs/src/whatsnew/latest.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 49698ca501..a17fb1ac2d 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -84,6 +84,10 @@ This document explains the changes made to Iris for this release :ref:`sphx_glr_generated_gallery_meteorology_plot_COP_maps.py` to show how a colourbar may steal space from multiple axes. (:pull:`5537`) +#. `@tkknight`_ improved the top navgation bar alignment and amount of + links shown. Also improved how the warning banner is implemented. + (:pull:`5505` and :pull:`5508`) + 💼 Internal =========== From c07cad7837f26084700372dcfb6ab9f47507708f Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Mon, 30 Oct 2023 11:36:44 +0000 Subject: [PATCH 71/82] updated link (#5556) --- docs/src/whatsnew/1.4.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/whatsnew/1.4.rst b/docs/src/whatsnew/1.4.rst index 989198296c..912a1e3bad 100644 --- a/docs/src/whatsnew/1.4.rst +++ b/docs/src/whatsnew/1.4.rst @@ -58,7 +58,7 @@ Features * Use the latest release of Cartopy, v0.8.0. -.. _OPeNDAP: http://www.opendap.org/about +.. _OPeNDAP: http://www.opendap.org .. _exp-regrid: Experimental Regridding Enhancements From 8811ef7be35ca547a399f798664e5340adf6450c Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Tue, 31 Oct 2023 09:08:38 +0000 Subject: [PATCH 72/82] Exempt major release label from stalebot (#5559) --- .github/workflows/stale.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index f363410347..8e18b36491 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -64,11 +64,11 @@ jobs: # Labels on issues exempted from stale. exempt-issue-labels: - "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎" + "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎, Release: Major" # Labels on prs exempted from stale. exempt-pr-labels: - "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎" + "Status: Blocked,Status: Decision Required,Peloton 🚴‍♂️,Good First Issue, Dragon 🐉, Dragon Sub-Task 🦎, Release: Major" # Max number of operations per run. operations-per-run: 300 From cb4669c9541e8fcd1169c0d91cf4920c28abd394 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:37:45 +0000 Subject: [PATCH 73/82] [pre-commit.ci] pre-commit autoupdate (#5558) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.10.0 → 23.10.1](https://github.com/psf/black/compare/23.10.0...23.10.1) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index db6237d944..5aefc1da76 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,7 +36,7 @@ repos: additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.10.0 + rev: 23.10.1 hooks: - id: black pass_filenames: false From cec0e092af5d106a1e81a04d5e6fb21c46b259d2 Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Tue, 31 Oct 2023 10:57:18 +0000 Subject: [PATCH 74/82] removed now incorrect statement. (#5555) --- docs/src/voted_issues.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/src/voted_issues.rst b/docs/src/voted_issues.rst index 0c99638bbd..33d1982a7b 100644 --- a/docs/src/voted_issues.rst +++ b/docs/src/voted_issues.rst @@ -53,5 +53,3 @@ the below table. .. note:: The data in this table is updated every 30 minutes and is sourced from `voted-issues.json`_. For the latest data please see the `issues on GitHub`_. - Note that the list on Github does not show the number of votes 👍 - only the total number of comments for the whole issue. \ No newline at end of file From e0850ebc73824c929f48d51067f88c3c2067b7fb Mon Sep 17 00:00:00 2001 From: Ruth Comer <10599679+rcomer@users.noreply.github.com> Date: Fri, 3 Nov 2023 10:42:04 +0000 Subject: [PATCH 75/82] More sensible time axis and tick labels for 2D plots (#5561) * Don't used mpl date2num * removed units for time coords due to not matching autoticks * update imagerepo.json * Revert change from #616, as this is now handled within _title * whatsnew * update test data version --------- Co-authored-by: alex chamberlain-clay --- .github/workflows/benchmarks_run.yml | 2 +- .github/workflows/ci-tests.yml | 2 +- docs/src/whatsnew/latest.rst | 3 +++ lib/iris/plot.py | 9 -------- lib/iris/quickplot.py | 17 +++----------- lib/iris/tests/results/imagerepo.json | 32 +++++++++++++-------------- 6 files changed, 24 insertions(+), 41 deletions(-) diff --git a/.github/workflows/benchmarks_run.yml b/.github/workflows/benchmarks_run.yml index 02b913c6f0..31b6499ecd 100644 --- a/.github/workflows/benchmarks_run.yml +++ b/.github/workflows/benchmarks_run.yml @@ -29,7 +29,7 @@ jobs: env: IRIS_TEST_DATA_LOC_PATH: benchmarks IRIS_TEST_DATA_PATH: benchmarks/iris-test-data - IRIS_TEST_DATA_VERSION: "2.21" + IRIS_TEST_DATA_VERSION: "2.22" # Lets us manually bump the cache to rebuild ENV_CACHE_BUILD: "0" TEST_DATA_CACHE_BUILD: "2" diff --git a/.github/workflows/ci-tests.yml b/.github/workflows/ci-tests.yml index 8d84d4e137..7fe06ced30 100644 --- a/.github/workflows/ci-tests.yml +++ b/.github/workflows/ci-tests.yml @@ -50,7 +50,7 @@ jobs: session: "tests" env: - IRIS_TEST_DATA_VERSION: "2.21" + IRIS_TEST_DATA_VERSION: "2.22" ENV_NAME: "ci-tests" steps: diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index a17fb1ac2d..a45f40d5cf 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -48,6 +48,9 @@ This document explains the changes made to Iris for this release #. `@ESadek-MO`_ has updated :mod:`iris.tests.graphics.idiff` to stop duplicated file names preventing acceptance. (:issue:`5098`, :pull:`5482`) +#. `@acchamber`_ and `@rcomer`_ modified 2D plots so that time axes and their + ticks have more sensible default labels. (:issue:`5426`, :pull:`5561`) + 💣 Incompatible Changes ======================= diff --git a/lib/iris/plot.py b/lib/iris/plot.py index 28b458f715..b32b45195a 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -22,7 +22,6 @@ import matplotlib.animation as animation import matplotlib.axes import matplotlib.collections as mpl_collections -import matplotlib.dates as mpl_dates from matplotlib.offsetbox import AnchoredText import matplotlib.pyplot as plt import matplotlib.ticker as mpl_ticker @@ -454,10 +453,6 @@ def _draw_2d_from_bounds(draw_method_name, cube, *args, **kwargs): else: values = coord.contiguous_bounds() values = _fixup_dates(coord, values) - if values.dtype == np.dtype(object) and isinstance( - values[0], datetime.datetime - ): - values = mpl_dates.date2num(values) plot_arrays.append(values) @@ -557,10 +552,6 @@ def _draw_2d_from_points(draw_method_name, arg_func, cube, *args, **kwargs): ) plot_arrays.append(np.arange(values.size)) string_axes[axis_name] = values - elif values.dtype == np.dtype(object) and isinstance( - values[0], datetime.datetime - ): - plot_arrays.append(mpl_dates.date2num(values)) else: plot_arrays.append(values) diff --git a/lib/iris/quickplot.py b/lib/iris/quickplot.py index 9209d4b3b7..12b5e80697 100644 --- a/lib/iris/quickplot.py +++ b/lib/iris/quickplot.py @@ -14,9 +14,7 @@ """ import cf_units -from matplotlib import __version__ as _mpl_version import matplotlib.pyplot as plt -from packaging import version import iris.config import iris.coords @@ -44,18 +42,11 @@ def _title(cube_or_coord, with_units): units.is_unknown() or units.is_no_unit() or units == cf_units.Unit("1") + or units.is_time_reference() ): if _use_symbol(units): units = units.symbol - elif units.is_time_reference(): - # iris.plot uses matplotlib.dates.date2num, which is fixed to the below unit. - if version.parse(_mpl_version) >= version.parse("3.3"): - days_since = "1970-01-01" - else: - days_since = "0001-01-01" - units = "days since {}".format(days_since) title += " / {}".format(units) - return title @@ -117,10 +108,8 @@ def _label_with_points(cube, result=None, ndims=2, coords=None, axes=None): def _get_titles(u_object, v_object): if u_object is None: u_object = iplt._u_object_from_v_object(v_object) - xunits = u_object is not None and not u_object.units.is_time_reference() - yunits = not v_object.units.is_time_reference() - xlabel = _title(u_object, with_units=xunits) - ylabel = _title(v_object, with_units=yunits) + xlabel = _title(u_object, with_units=True) + ylabel = _title(v_object, with_units=True) title = "" if u_object is None: title = _title(v_object, with_units=False) diff --git a/lib/iris/tests/results/imagerepo.json b/lib/iris/tests/results/imagerepo.json index 2a6e2c4dbc..69beacb848 100644 --- a/lib/iris/tests/results/imagerepo.json +++ b/lib/iris/tests/results/imagerepo.json @@ -129,8 +129,8 @@ "iris.tests.test_plot.TestHybridHeight.test_points.3": "fe857b91917a847ec4bd3f01c47c6ca43b11915a3ea4db3b1b4a84c4c03f3fc1", "iris.tests.test_plot.TestHybridHeight.test_points.4": "b878387e978ec2f0c0f09f83878f3f81c070c0fe78d0c1763fa13856d03e3f0f", "iris.tests.test_plot.TestMissingCS.test_missing_cs.0": "fa816ac1857e853cc17e957ac15f3e8494c6c8f43e81c13b3f813e91c07e3f46", - "iris.tests.test_plot.TestMissingCoord.test_no_u.0": "ea856a95955a954ac17f954a807e3f48951ac07e3f81c0ff7ea16a81c0bf3f81", - "iris.tests.test_plot.TestMissingCoord.test_no_u.1": "ea956ab5954a954ac17e9542817f2f60950ac07f3e80c0ff7a856aa5c2ff3f80", + "iris.tests.test_plot.TestMissingCoord.test_no_u.0": "ea856a95955a956ac17f954a817e3f8c953ac07e3e81c07f7ea16a81c07e3e81", + "iris.tests.test_plot.TestMissingCoord.test_no_u.1": "ea956ab5954a954ac17e954a857f3f80954ac07f7e80c07f7a856a84c07f3f81", "iris.tests.test_plot.TestMissingCoord.test_no_v.0": "fa816a85957a857ac17e954ac17e1fa2950bc07e3e81c07f3e807a85c17f3f81", "iris.tests.test_plot.TestMissingCoord.test_no_v.1": "fa856a85957a857ac17e954ac17e9d02954ac07e3e81c07f3e857a85c2fd3f80", "iris.tests.test_plot.TestMissingCoord.test_none.0": "fa816a85957a857ac17e954ac17e3fa2950ac07e3e80c07f3e807a85c1ff3f81", @@ -168,12 +168,12 @@ "iris.tests.test_plot.TestPlotCitation.test_axes.0": "abf895467a1d9506f811783485437abd85427ab995067ab9f00687f96afe87c8", "iris.tests.test_plot.TestPlotCitation.test_figure.0": "abf895467a1d9506f811783485437abd85427ab995067ab9f00687f96afe87c8", "iris.tests.test_plot.TestPlotCoordinatesGiven.test_non_cube_coordinate.0": "fa81857e857e3e85857e7a81857e7a81857e7a817e81780b7a81c56a7a81857e", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.0": "ea853f10956ac1e1957a854e957a207e955e6aa76ae17aa16a856aaf6ab19e12", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.1": "ea853a85857a857a957a857a957ed05a857b3e946a606b917a816f247a853af4", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.2": "eafdcec9f4219530b696a56694c3852a95656b7b85986acdc06516adad186e9a", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.3": "aff24ab7fd05952dbd0f950f910fed48c47868f2e1b9329094266e345a850f6c", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.4": "eaa9b5699556854e9456854ed05625f9d0a92bfdc0a90afd81f97e00855e7ab6", - "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.5": "eaf73e0d9503852c950395ac9528c1fad06cc0f2d1ec6af2c0fc6a536a1797f3", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.0": "ea853e11956ac1e3957a844e957a607e955e6ae36ae17aa16a856be86ab13c32", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.1": "ea857a85857ac57a957a857a957ad05e850b3ed46e206b917a816f247a953ae4", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.2": "ebfdcac9bd209434b696856795cb012e95676b7b81186acdc06536ad89182fda", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.3": "aaff7ab2fd04902cfd0c950f9d010f4bd64069f3e1993a9894262e345ae56f6c", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.4": "eaa9d5129556c55695568556955623f9c0292bf9c0a90bfdc0fd7e0085562ff9", + "iris.tests.test_plot.TestPlotCoordinatesGiven.test_tx.5": "eaf77a0d9553c52c950095ac952885ea952c87f3952c6bf3d42c6a536a57bf80", "iris.tests.test_plot.TestPlotCoordinatesGiven.test_x.0": "afea950ddb13c03e34359ad8a4c86f24913f2693806e3ff1f4087b4285fd2af2", "iris.tests.test_plot.TestPlotCoordinatesGiven.test_y.0": "afee9632de05c9d9f180d168c454a53e931b3e84954a3b8c85f94ce703ff7284", "iris.tests.test_plot.TestPlotCoordinatesGiven.test_yx.0": "ea853f00957ac07c957ac0bf951a69f3c47c7a5f3a4127816b953e646b813761", @@ -202,8 +202,8 @@ "iris.tests.test_plot.TestQuickplotPlot.test_x.0": "82ff950b7f81c0d6620199bcfc5e986695734da1816e1b2c85be2b65d96276d1", "iris.tests.test_plot.TestQuickplotPlot.test_y.0": "a2fbb46e7f10c99f2013d863e46498dcd06c0d2798421fa5dd221e7789ff6f10", "iris.tests.test_plot.TestQuickplotPlot.test_z.0": "a3ffc1de7e009c7030019786f438cde3810fd93c9b734a778ce47c9799b02731", - "iris.tests.test_plot.TestSimple.test_bounds.0": "ea856a85954a957ac17e954ac17a9d3a956ac07e3e80c07f3e857aa5c27d3f80", - "iris.tests.test_plot.TestSimple.test_points.0": "ea856a85957a957ac17e954ac17e1ea2950bc07e3e80c07f3e807a85c1ff3f81", + "iris.tests.test_plot.TestSimple.test_bounds.0": "ea856a85955a957ac17e954ac17a9d22956ac07e3e81c07f3e857aa5c27d3f80", + "iris.tests.test_plot.TestSimple.test_points.0": "ea856a85957a957ac17e954ac17e1fa2950ac07e3e80c07d3e847a85c1ff3f81", "iris.tests.test_plot.TestSymbols.test_cloud_cover.0": "eb5291e494ad6e136b5291ec94ad6e136b5291ec94ad6e136b5291ec94ad6e13", "iris.tests.test_quickplot.TestLabels.test_alignment.0": "be813fe0954ac07fc0ff3e81c03fc97a6d0094af3f80c17f36a53240d97f2d82", "iris.tests.test_quickplot.TestLabels.test_contour.0": "a7fd955a7a016d1a3217c962e4819a56c96f3c859b624d2584de3a6999b662db", @@ -220,12 +220,12 @@ "iris.tests.test_quickplot.TestPlotHist.test_horizontal.0": "b59cc3dadb433c24c4f166039438793591a7dbdcbcdc9ccc68c697a91b139131", "iris.tests.test_quickplot.TestPlotHist.test_vertical.0": "bf80c7c6c07d7959647e343a33364b699589c6c64ec0312b9e227ad681ffcc68", "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_non_cube_coordinate.0": "fe816a85857a957ac07f957ac07f3e80956ac07f3e80c07f3e813e85c07e3f80", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.0": "ea856a95955a956ac17f950a807e3f4e951ac07e3f81c0ff3ea16aa1c0bd3e81", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.1": "ea856a85957a957ac17e954ac17e1ea2950bc07e3e80c07f3e807a85c1ff3f81", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.2": "eaf9eec9f729943032168d66d4db896e9567497b81304aedc96514ad8d18669a", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.3": "a6fb4b967f00950eb00f9d0f900fcd62dc7868f2c1bb3a909c266e34daa52f6c", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.4": "eaa9b549f756854ea0168d6ed556896fd8a909ed88290afdd9e97e008d6e2296", - "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.5": "aad73e0df78085ac840195ac9528d9fad56cd8f2906c48f2d0ec7a536a1737f3", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.0": "ea856a95955a956ac17f950a817e3fcc951ac07e3e81c07f7ea16a85c07e3e81", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.1": "ea856a85957a957ac17e954ac17e1fa2950ac07e3e80c07d3e847a85c1ff3f81", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.2": "eaf9e2c9ff60b43036168d6795c2892e95674b7b80304aedc8651ead99192eda", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.3": "a2ff7892771d912cb4089d0ffd4b8d429c4049f3d1bb1a909c266e34dae56f68", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.4": "eaa9f598b756a41e8056855e955689f9d9610be988290bfdd9fdfe0089562a61", + "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_tx.5": "ead7780cf7d3c5acb40095acd56999e2952899f2d5ec0bf3902c6a536a57b700", "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_x.0": "a6fb958dff50c03e203598dca4c9cd26933f9cf3886e1de1dc047b4289ec2672", "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_y.0": "a2ffb6127f0dc9992085d960c6748d3edb121ca49d6a1b048df34ce789ff7205", "iris.tests.test_quickplot.TestQuickplotCoordinatesGiven.test_yx.0": "ea856a95957a957ac07e954ac17e3e86950bc17f3ea4c27d3e833ac1c1e03f80", From 9907bce254b6ee92c419d0c9ef6843fd97f717c8 Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Wed, 8 Nov 2023 14:30:59 +0000 Subject: [PATCH 76/82] DOCS: Removed broken git links. (#5569) * removed broken git links. * added whatsnew --- docs/src/conf.py | 1 - .../gitwash/development_workflow.rst | 11 +++++------ docs/src/developers_guide/gitwash/git_links.inc | 14 -------------- docs/src/whatsnew/latest.rst | 2 ++ 4 files changed, 7 insertions(+), 21 deletions(-) diff --git a/docs/src/conf.py b/docs/src/conf.py index 17a0d621cb..8be34c1989 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -390,7 +390,6 @@ def _dotv(version): "https://docs.github.com", "https://github.com", "http://www.personal.psu.edu/cab38/ColorBrewer/ColorBrewer_updates.html", - "http://schacon.github.com/git", "http://scitools.github.com/cartopy", "http://www.wmo.int/pages/prog/www/DPFS/documents/485_Vol_I_en_colour.pdf", "https://software.ac.uk/how-cite-software", diff --git a/docs/src/developers_guide/gitwash/development_workflow.rst b/docs/src/developers_guide/gitwash/development_workflow.rst index b38ddd6e90..8545a04308 100644 --- a/docs/src/developers_guide/gitwash/development_workflow.rst +++ b/docs/src/developers_guide/gitwash/development_workflow.rst @@ -74,7 +74,7 @@ what the changes in the branch are for. For example ``add-ability-to-fly``, or git checkout my-new-feature Generally, you will want to keep your feature branches on your public github_ -fork of `iris`_. To do this, you `git push`_ this new branch up to your +fork of `iris`_. To do this, you ``git push`` this new branch up to your github repo. Generally (if you followed the instructions in these pages, and by default), git will have a link to your github repo, called ``origin``. You push up to your own repo on github with:: @@ -108,7 +108,7 @@ In More Detail -------------- #. Make some changes -#. See which files have changed with ``git status`` (see `git status`_). +#. See which files have changed with ``git status``. You'll see a listing like this one:: # On branch ny-new-feature @@ -124,16 +124,15 @@ In More Detail # INSTALL no changes added to commit (use "git add" and/or "git commit -a") -#. Check what the actual changes are with ``git diff`` (`git diff`_). -#. Add any new files to version control ``git add new_file_name`` (see - `git add`_). +#. Check what the actual changes are with ``git diff``. +#. Add any new files to version control ``git add new_file_name``. #. To commit all modified files into the local copy of your repo, do ``git commit -am 'A commit message'``. Note the ``-am`` options to ``commit``. The ``m`` flag just signals that you're going to type a message on the command line. The ``a`` flag will automatically stage all files that have been modified and deleted. #. To push the changes up to your forked repo on github, do a ``git - push`` (see `git push`_). + push``. Testing Your Changes diff --git a/docs/src/developers_guide/gitwash/git_links.inc b/docs/src/developers_guide/gitwash/git_links.inc index 42bd556c3d..bf20d13e5f 100644 --- a/docs/src/developers_guide/gitwash/git_links.inc +++ b/docs/src/developers_guide/gitwash/git_links.inc @@ -13,20 +13,6 @@ .. _github help: https://help.github.com .. _git documentation: https://git-scm.com/docs -.. _git clone: http://schacon.github.com/git/git-clone.html -.. _git checkout: http://schacon.github.com/git/git-checkout.html -.. _git commit: http://schacon.github.com/git/git-commit.html -.. _git push: http://schacon.github.com/git/git-push.html -.. _git pull: http://schacon.github.com/git/git-pull.html -.. _git add: http://schacon.github.com/git/git-add.html -.. _git status: http://schacon.github.com/git/git-status.html -.. _git diff: http://schacon.github.com/git/git-diff.html -.. _git log: http://schacon.github.com/git/git-log.html -.. _git branch: http://schacon.github.com/git/git-branch.html -.. _git remote: http://schacon.github.com/git/git-remote.html -.. _git rebase: http://schacon.github.com/git/git-rebase.html -.. _git config: http://schacon.github.com/git/git-config.html - .. _linux git workflow: http://www.mail-archive.com/dri-devel@lists.sourceforge.net/msg39091.html .. |emdash| unicode:: U+02014 diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index a45f40d5cf..5aa87f6473 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -91,6 +91,8 @@ This document explains the changes made to Iris for this release links shown. Also improved how the warning banner is implemented. (:pull:`5505` and :pull:`5508`) +#. `@tkknight`_ removed broken git links. (:pull:`5569`) + 💼 Internal =========== From 0dc2dd9c0c4a58aafcb11408db806e869fe3d6af Mon Sep 17 00:00:00 2001 From: tkknight <2108488+tkknight@users.noreply.github.com> Date: Thu, 9 Nov 2023 12:04:40 +0000 Subject: [PATCH 77/82] fixed spacing (#5572) --- .../dask_best_practices/index.rst | 10 ++--- docs/src/further_topics/ugrid/data_model.rst | 28 ++++++------- docs/src/techpapers/um_files_loading.rst | 42 +++++++++---------- docs/src/userguide/navigating_a_cube.rst | 8 ++-- docs/src/userguide/real_and_lazy_data.rst | 23 +++++----- 5 files changed, 55 insertions(+), 56 deletions(-) diff --git a/docs/src/further_topics/dask_best_practices/index.rst b/docs/src/further_topics/dask_best_practices/index.rst index eb3321345b..f126427d3f 100644 --- a/docs/src/further_topics/dask_best_practices/index.rst +++ b/docs/src/further_topics/dask_best_practices/index.rst @@ -144,8 +144,8 @@ Iris provides a basic chunking shape to Dask, attempting to set the shape for best performance. The chunking that is used can depend on the file format that is being loaded. See below for how chunking is performed for: - * :ref:`chunking_netcdf` - * :ref:`chunking_pp_ff` +* :ref:`chunking_netcdf` +* :ref:`chunking_pp_ff` It can in some cases be beneficial to re-chunk the arrays in Iris cubes. For information on how to do this, see :ref:`dask_rechunking`. @@ -208,9 +208,9 @@ If you feel you have an example of a Dask best practice that you think may be he please share them with us by raising a new `discussion on the Iris repository `_. - * :doc:`dask_pp_to_netcdf` - * :doc:`dask_parallel_loop` - * :doc:`dask_bags_and_greed` +* :doc:`dask_pp_to_netcdf` +* :doc:`dask_parallel_loop` +* :doc:`dask_bags_and_greed` .. toctree:: :hidden: diff --git a/docs/src/further_topics/ugrid/data_model.rst b/docs/src/further_topics/ugrid/data_model.rst index cc3cc7b793..208254ada6 100644 --- a/docs/src/further_topics/ugrid/data_model.rst +++ b/docs/src/further_topics/ugrid/data_model.rst @@ -484,20 +484,20 @@ How UGRID information is stored | Described in detail in `MeshCoords`_. | Stores the following information: - * | :attr:`~iris.experimental.ugrid.MeshCoord.mesh` - | The :class:`~iris.experimental.ugrid.Mesh` associated with this - :class:`~iris.experimental.ugrid.MeshCoord`. This determines the - :attr:`~iris.cube.Cube.mesh` attribute of any :class:`~iris.cube.Cube` - this :class:`~iris.experimental.ugrid.MeshCoord` is attached to (see - `The Basics`_) - - * | :attr:`~iris.experimental.ugrid.MeshCoord.location` - | ``node``/``edge``/``face`` - the element detailed by this - :class:`~iris.experimental.ugrid.MeshCoord`. This determines the - :attr:`~iris.cube.Cube.location` attribute of any - :class:`~iris.cube.Cube` this - :class:`~iris.experimental.ugrid.MeshCoord` is attached to (see - `The Basics`_). + * | :attr:`~iris.experimental.ugrid.MeshCoord.mesh` + | The :class:`~iris.experimental.ugrid.Mesh` associated with this + :class:`~iris.experimental.ugrid.MeshCoord`. This determines the + :attr:`~iris.cube.Cube.mesh` attribute of any :class:`~iris.cube.Cube` + this :class:`~iris.experimental.ugrid.MeshCoord` is attached to (see + `The Basics`_) + + * | :attr:`~iris.experimental.ugrid.MeshCoord.location` + | ``node``/``edge``/``face`` - the element detailed by this + :class:`~iris.experimental.ugrid.MeshCoord`. This determines the + :attr:`~iris.cube.Cube.location` attribute of any + :class:`~iris.cube.Cube` this + :class:`~iris.experimental.ugrid.MeshCoord` is attached to (see + `The Basics`_). .. _ugrid MeshCoords: diff --git a/docs/src/techpapers/um_files_loading.rst b/docs/src/techpapers/um_files_loading.rst index f8c94cab08..f94898b3aa 100644 --- a/docs/src/techpapers/um_files_loading.rst +++ b/docs/src/techpapers/um_files_loading.rst @@ -125,21 +125,21 @@ with latitude and longitude axes are also supported). For an ordinary latitude-longitude grid, the cubes have coordinates called 'longitude' and 'latitude': - * These are mapped to the appropriate data dimensions. - * They have units of 'degrees'. - * They have a coordinate system of type :class:`iris.coord_systems.GeogCS`. - * The coordinate points are normally set to the regular sequence - ``ZDX/Y + BDX/Y * (1 .. LBNPT/LBROW)`` (*except*, if BDX/BDY is zero, the - values are taken from the extra data vector X/Y, if present). - * If X/Y_LOWER_BOUNDS extra data is available, this appears as bounds values - of the horizontal coordinates. +* These are mapped to the appropriate data dimensions. +* They have units of 'degrees'. +* They have a coordinate system of type :class:`iris.coord_systems.GeogCS`. +* The coordinate points are normally set to the regular sequence + ``ZDX/Y + BDX/Y * (1 .. LBNPT/LBROW)`` (*except*, if BDX/BDY is zero, the + values are taken from the extra data vector X/Y, if present). +* If X/Y_LOWER_BOUNDS extra data is available, this appears as bounds values + of the horizontal coordinates. For **rotated** latitude-longitude coordinates (as for LBCODE=101), the horizontal coordinates differ only slightly -- - * The names are 'grid_latitude' and 'grid_longitude'. - * The coord_system is a :class:`iris.coord_systems.RotatedGeogCS`, created - with a pole defined by BPLAT, BPLON. +* The names are 'grid_latitude' and 'grid_longitude'. +* The coord_system is a :class:`iris.coord_systems.RotatedGeogCS`, created + with a pole defined by BPLAT, BPLON. For example: >>> # Load a PP field. @@ -304,10 +304,9 @@ For hybrid height levels (LBVC=65): multidimensional or non-monotonic. See an example printout of a hybrid height cube, -:ref:`here `: - - Notice that this contains all of the above coordinates -- - 'model_level_number', 'sigma', 'level_height' and the derived 'altitude'. +:ref:`here `. Notice that this contains all of the +above coordinates -- ``model_level_number``, ``sigma``, ``level_height`` and +the derived ``altitude``. .. note:: @@ -364,7 +363,7 @@ Data at a single measurement timepoint (LBTIM.IB=0): defined according to LBTIM.IC. Values forecast from T2, valid at T1 (LBTIM.IB=1): - Coordinates ``time` and ``forecast_reference_time`` are created from the T1 + Coordinates ``time`` and ``forecast_reference_time`` are created from the T1 and T2 values, respectively. These have no bounds, and units of 'hours since 1970-01-01 00:00:00', with the appropriate calendar. A ``forecast_period`` coordinate is also created, with values T1-T2, no @@ -383,12 +382,11 @@ these may become dimensions of the resulting data cube. This will depend on the values actually present in the source fields for each of the elements. See an example printout of a forecast data cube, -:ref:`here ` : - - Notice that this example contains all of the above coordinates -- 'time', - 'forecast_period' and 'forecast_reference_time'. In this case the data are - forecasts, so 'time' is a dimension, 'forecast_period' varies with time and - 'forecast_reference_time' is a constant. +:ref:`here `. Notice that this example +contains all of the above coordinates -- ``time``, ``forecast_period`` and +``forecast_reference_time``. In this case the data are forecasts, so ``time`` +is a dimension, ``forecast_period``` varies with time and +``forecast_reference_time`` is a constant. Statistical Measures diff --git a/docs/src/userguide/navigating_a_cube.rst b/docs/src/userguide/navigating_a_cube.rst index b4c16b094b..ec3cd8e0dc 100644 --- a/docs/src/userguide/navigating_a_cube.rst +++ b/docs/src/userguide/navigating_a_cube.rst @@ -191,10 +191,10 @@ Adding and Removing Metadata to the Cube at Load Time Sometimes when loading a cube problems occur when the amount of metadata is more or less than expected. This is often caused by one of the following: - * The file does not contain enough metadata, and therefore the cube cannot know everything about the file. - * Some of the metadata of the file is contained in the filename, but is not part of the actual file. - * There is not enough metadata loaded from the original file as Iris has not handled the format fully. *(in which case, - please let us know about it)* +* The file does not contain enough metadata, and therefore the cube cannot know everything about the file. +* Some of the metadata of the file is contained in the filename, but is not part of the actual file. +* There is not enough metadata loaded from the original file as Iris has not handled the format fully. *(in which case, + please let us know about it)* To solve this, all of :func:`iris.load`, :func:`iris.load_cube`, and :func:`iris.load_cubes` support a callback keyword. diff --git a/docs/src/userguide/real_and_lazy_data.rst b/docs/src/userguide/real_and_lazy_data.rst index ef4de0c429..e4c041886c 100644 --- a/docs/src/userguide/real_and_lazy_data.rst +++ b/docs/src/userguide/real_and_lazy_data.rst @@ -247,20 +247,21 @@ output file, to be performed by `Dask `_ lat thus enabling parallel save operations. This works in the following way : - 1. an :func:`iris.save` call is made, with a NetCDF file output and the additional - keyword ``compute=False``. - This is currently *only* available when saving to NetCDF, so it is documented in - the Iris NetCDF file format API. See: :func:`iris.fileformats.netcdf.save`. - 2. the call creates the output file, but does not fill in variables' data, where - the data is a lazy array in the Iris object. Instead, these variables are - initially created "empty". +1. an :func:`iris.save` call is made, with a NetCDF file output and the additional + keyword ``compute=False``. + This is currently *only* available when saving to NetCDF, so it is documented in + the Iris NetCDF file format API. See: :func:`iris.fileformats.netcdf.save`. - 3. the :meth:`~iris.save` call returns a ``result`` which is a - :class:`~dask.delayed.Delayed` object. +2. the call creates the output file, but does not fill in variables' data, where + the data is a lazy array in the Iris object. Instead, these variables are + initially created "empty". - 4. the save can be completed later by calling ``result.compute()``, or by passing it - to the :func:`dask.compute` call. +3. the :meth:`~iris.save` call returns a ``result`` which is a + :class:`~dask.delayed.Delayed` object. + +4. the save can be completed later by calling ``result.compute()``, or by passing it + to the :func:`dask.compute` call. The benefit of this, is that costly data transfer operations can be performed in parallel with writes to other data files. Also, where array contents are calculated From ce813ffcce63458ffc14f594847418871184e35c Mon Sep 17 00:00:00 2001 From: Elias <110238618+ESadek-MO@users.noreply.github.com> Date: Thu, 9 Nov 2023 14:29:27 +0000 Subject: [PATCH 78/82] Added xarray phrasebook doc page (#5564) --- docs/src/community/index.rst | 2 + docs/src/community/iris_xarray.rst | 1 + docs/src/community/phrasebook.rst | 66 ++++++++++++++++++++++++++++++ docs/src/whatsnew/latest.rst | 3 ++ 4 files changed, 72 insertions(+) create mode 100644 docs/src/community/phrasebook.rst diff --git a/docs/src/community/index.rst b/docs/src/community/index.rst index 114cb96fe9..ee227513b3 100644 --- a/docs/src/community/index.rst +++ b/docs/src/community/index.rst @@ -40,12 +40,14 @@ smoother interoperability: * The :mod:`iris.pandas` module * :doc:`iris_xarray` +* :doc:`phrasebook` .. toctree:: :maxdepth: 1 :hidden: iris_xarray + phrasebook Plugins ------- diff --git a/docs/src/community/iris_xarray.rst b/docs/src/community/iris_xarray.rst index 2250e3c0a3..9d795fcd9e 100644 --- a/docs/src/community/iris_xarray.rst +++ b/docs/src/community/iris_xarray.rst @@ -7,6 +7,7 @@ Iris ❤️ :term:`Xarray` There is a lot of overlap between Iris and :term:`Xarray`, but some important differences too. Below is a summary of the most important differences, so that you can be prepared, and to help you choose the best package for your use case. +See :doc:`phrasebook` for a broad comparison of terminology. Overall Experience ------------------ diff --git a/docs/src/community/phrasebook.rst b/docs/src/community/phrasebook.rst new file mode 100644 index 0000000000..bcd91cca83 --- /dev/null +++ b/docs/src/community/phrasebook.rst @@ -0,0 +1,66 @@ +.. include:: ../common_links.inc + +.. _phrasebook: + +Package Phrasebook +=================== + +There are a number of similar packages to Iris, and a lot of these have their own +terminology for similar things. Whether you're coming or going, we hope this might +be a helpful guide to these differences! +Definitions for each can be found in :ref:`glossary`. See also +`Xarray terminology `_. + +.. list-table:: Phrasebook + :widths: 25 25 25 50 + :header-rows: 1 + + * - Iris + - Xarray + - Example + - Notes + * - Non-Lazy + - Eager + - + - Used to relate to functions, rather than the data. + * - Cube + - DataArray + - + - + * - CubeList + - Dataset + - + - Though similar, a CubeList is a simpler object, and is + not a perfect comparison to a Dataset + * - Merge/ Concatenate + - Concatenate + - `Xarray concatenate `_ + - Xarray's concatenate has the capability to largely do what both + Iris merge and Iris concatenate do. However, this is not a perfect comparison, + please see the link for more information. + * - + - Merge + - `Xarray merge `_ + - Xarray's Merge function doesn't map neatly map to any Iris feature. + Please see the link for more information. + * - Scalar Coordinate + - + - + - Iris makes a distinction between scalar coordinates and non-scalar coordinates, + whereas xarray documentation makes a distinction between scalar and non-scalar *data*. + It is possible to make coordinates with scalar data in both Iris and xarray + but only Iris will label such coordinates. + * - AuxCoord + - Non-Dimensional Coordinate + - + - Coordinates in Iris and xarray are categorised using different rules, + and so are not a one-to-one match. + * - DimCoord + - Dimension Coordinate + - + - Coordinates in Iris and xarray are categorised using different rules, + and so are not a one-to-one match. + +---- + +`To top `_ \ No newline at end of file diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 5aa87f6473..c4be2ab7d2 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -93,6 +93,9 @@ This document explains the changes made to Iris for this release #. `@tkknight`_ removed broken git links. (:pull:`5569`) +#. `@ESadek-MO`_ added a phrasebook for synonymous terms used in similar + packages. (:pull:`5564`) + 💼 Internal =========== From 017cec701caa359d02ea39f96c746416bbc6e6ba Mon Sep 17 00:00:00 2001 From: Martin Yeo <40734014+trexfeathers@users.noreply.github.com> Date: Thu, 9 Nov 2023 16:48:54 +0000 Subject: [PATCH 79/82] Allow `add_season_year()` to optionally send spans backwards (#5573) * New preceding year functionality for add_season_year(). * Modernise test_coord_categorisation. * New test for backwards behaviour. * What's New entry. * Rename to use_year_at_season_start. * Use np.zeros. --- docs/src/whatsnew/latest.rst | 7 + lib/iris/coord_categorisation.py | 77 ++++-- lib/iris/tests/test_coord_categorisation.py | 197 -------------- .../test_coord_categorisation.py | 252 ++++++++++++++++++ 4 files changed, 307 insertions(+), 226 deletions(-) delete mode 100644 lib/iris/tests/test_coord_categorisation.py create mode 100644 lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index c4be2ab7d2..33a4a211d9 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -38,6 +38,13 @@ This document explains the changes made to Iris for this release and :class:`~iris.coord_systems.RotatedMercator` coordinate systems, complete with NetCDF loading and saving. (:pull:`5548`) +#. `@trexfeathers`_ added the ``use_year_at_season_start`` parameter to + :func:`iris.coord_categorisation.add_season_year`. When + ``use_year_at_season_start==True``: seasons spanning the year boundary (e.g. + Winter - December to February) will be assigned to the preceding year (e.g. + the year of December) instead of the following year (the default behaviour). + (:pull:`5573`) + 🐛 Bugs Fixed ============= diff --git a/lib/iris/coord_categorisation.py b/lib/iris/coord_categorisation.py index 698b4828f1..b6cc79f253 100644 --- a/lib/iris/coord_categorisation.py +++ b/lib/iris/coord_categorisation.py @@ -271,20 +271,33 @@ def _validate_seasons(seasons): return -def _month_year_adjusts(seasons): - """Compute the year adjustments required for each month. +def _month_year_adjusts(seasons, use_year_at_season_start=False): + """ + Compute the year adjustments required for each month. - These determine whether the month belongs to a season in the same - year or is in the start of a season that counts towards the next - year. + These adjustments ensure that no season spans two years by assigning months + to the **next** year (use_year_at_season_start is False) or the + **previous** year (use_year_at_season_start is True). E.g. Winter - djf: + either assign Dec to the next year, or Jan and Feb to the previous year. """ - month_year_adjusts = [None, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] + # 1 'slot' for each month, with an extra leading 'slot' because months + # are 1-indexed - January is 1, therefore corresponding to the 2nd + # array index. + month_year_adjusts = np.zeros(13, dtype=int) + for season in seasons: - months = _months_in_season(season) - for month in months: - if month > months[-1]: - month_year_adjusts[month] = 1 + months = np.array(_months_in_season(season)) + if use_year_at_season_start: + months_to_shift = months < months[0] + year_shift = -1 + else: + # Sending forwards. + months_to_shift = months > months[-1] + year_shift = 1 + indices_to_shift = months[np.flatnonzero(months_to_shift)] + month_year_adjusts[indices_to_shift] = year_shift + return month_year_adjusts @@ -383,34 +396,40 @@ def _season_number(coord, value): def add_season_year( - cube, coord, name="season_year", seasons=("djf", "mam", "jja", "son") + cube, + coord, + name="season_year", + seasons=("djf", "mam", "jja", "son"), + use_year_at_season_start=False, ): """ - Add a categorical year-of-season coordinate, with user specified - seasons. - - Args: - - * cube (:class:`iris.cube.Cube`): - The cube containing 'coord'. The new coord will be added into - it. - * coord (:class:`iris.coords.Coord` or string): - Coordinate in 'cube', or its name, representing time. - - Kwargs: - - * name (string): - Name of the created coordinate. Defaults to "season_year". - * seasons (:class:`list` of strings): + Add a categorical year-of-season coordinate, with user specified seasons. + + Parameters + ---------- + cube : :class:`iris.cube.Cube` + The cube containing `coord`. The new coord will be added into it. + coord : :class:`iris.coords.Coord` or str + Coordinate in `cube`, or its name, representing time. + name : str, default="season_year" + Name of the created coordinate. + seasons : tuple of str, default=("djf", "mam", "jja", "son") List of seasons defined by month abbreviations. Each month must appear once and only once. Defaults to standard meteorological - seasons ('djf', 'mam', 'jja', 'son'). + seasons (``djf``, ``mam``, ``jja``, ``son``). + use_year_at_season_start: bool, default=False + Seasons spanning the year boundary (e.g. Winter ``djf``) will belong + fully to the following year by default (e.g. the year of Jan and Feb). + Set to ``True`` for spanning seasons to belong to the preceding + year (e.g. the year of Dec) instead. """ # Check that the seasons are valid. _validate_seasons(seasons) # Define the adjustments to be made to the year. - month_year_adjusts = _month_year_adjusts(seasons) + month_year_adjusts = _month_year_adjusts( + seasons, use_year_at_season_start=use_year_at_season_start + ) # Define a categorisation function. def _season_year(coord, value): diff --git a/lib/iris/tests/test_coord_categorisation.py b/lib/iris/tests/test_coord_categorisation.py deleted file mode 100644 index 0206ba66a5..0000000000 --- a/lib/iris/tests/test_coord_categorisation.py +++ /dev/null @@ -1,197 +0,0 @@ -# Copyright Iris contributors -# -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. -""" -Test the coordinate categorisation functions. -""" - -# import iris tests first so that some things can be initialised before importing anything else -import iris.tests as tests # isort:skip - -import warnings - -import cf_units -import numpy as np - -import iris -import iris.coord_categorisation as ccat - -CATEGORISATION_FUNCS = ( - ccat.add_day_of_month, - ccat.add_day_of_year, - ccat.add_weekday, - ccat.add_weekday_fullname, - ccat.add_weekday_number, - ccat.add_month, - ccat.add_month_fullname, - ccat.add_month_number, - ccat.add_year, - ccat.add_season, - ccat.add_season_number, - ccat.add_season_year, - ccat.add_season_membership, -) - - -class TestCategorisations(tests.IrisTest): - def setUp(self): - # make a series of 'day numbers' for the time, that slide across month - # boundaries - day_numbers = np.arange(0, 600, 27, dtype=np.int32) - - cube = iris.cube.Cube( - day_numbers, long_name="test cube", units="metres" - ) - - # use day numbers as data values also (don't actually use this for - # anything) - cube.data = day_numbers - - time_coord = iris.coords.DimCoord( - day_numbers, - standard_name="time", - units=cf_units.Unit("days since epoch", "standard"), - ) - cube.add_dim_coord(time_coord, 0) - - self.cube = cube - self.time_coord = time_coord - - def test_bad_coord(self): - for func in CATEGORISATION_FUNCS: - kwargs = {"name": "my_category"} - if func is ccat.add_season_membership: - kwargs["season"] = "djf" - with self.assertRaises(iris.exceptions.CoordinateNotFoundError): - func(self.cube, "DOES NOT EXIST", **kwargs) - - def test_explicit_result_names(self): - result_name = "my_category" - fmt = "Missing/incorrectly named result for {0!r}" - for func in CATEGORISATION_FUNCS: - # Specify source coordinate by name - cube = self.cube.copy() - kwargs = {"name": result_name} - if func is ccat.add_season_membership: - kwargs["season"] = "djf" - with warnings.catch_warnings(record=True): - func(cube, "time", **kwargs) - result_coords = cube.coords(result_name) - self.assertEqual(len(result_coords), 1, fmt.format(func.__name__)) - # Specify source coordinate by coordinate reference - cube = self.cube.copy() - time = cube.coord("time") - with warnings.catch_warnings(record=True): - func(cube, time, **kwargs) - result_coords = cube.coords(result_name) - self.assertEqual(len(result_coords), 1, fmt.format(func.__name__)) - - def test_basic(self): - cube = self.cube - time_coord = self.time_coord - - ccat.add_year(cube, time_coord, "my_year") - ccat.add_day_of_month(cube, time_coord, "my_day_of_month") - ccat.add_day_of_year(cube, time_coord, "my_day_of_year") - - ccat.add_month(cube, time_coord, "my_month") - ccat.add_month_fullname(cube, time_coord, "my_month_fullname") - ccat.add_month_number(cube, time_coord, "my_month_number") - - ccat.add_weekday(cube, time_coord, "my_weekday") - ccat.add_weekday_number(cube, time_coord, "my_weekday_number") - ccat.add_weekday_fullname(cube, time_coord, "my_weekday_fullname") - - ccat.add_season(cube, time_coord, "my_season") - ccat.add_season_number(cube, time_coord, "my_season_number") - ccat.add_season_year(cube, time_coord, "my_season_year") - - # also test 'generic' categorisation interface - def _month_in_quarter(coord, pt_value): - date = coord.units.num2date(pt_value) - return (date.month - 1) % 3 - - ccat.add_categorised_coord( - cube, "my_month_in_quarter", time_coord, _month_in_quarter - ) - - # To ensure consistent results between 32-bit and 64-bit - # platforms, ensure all the numeric categorisation coordinates - # are always stored as int64. - for coord in cube.coords(): - if coord.long_name is not None and coord.points.dtype.kind == "i": - coord.points = coord.points.astype(np.int64) - - # check values - self.assertCML(cube, ("categorisation", "quickcheck.cml")) - - def test_add_season_nonstandard(self): - # season categorisations work for non-standard seasons? - cube = self.cube - time_coord = self.time_coord - seasons = ["djfm", "amjj", "ason"] - ccat.add_season(cube, time_coord, name="seasons", seasons=seasons) - ccat.add_season_number( - cube, time_coord, name="season_numbers", seasons=seasons - ) - ccat.add_season_year( - cube, time_coord, name="season_years", seasons=seasons - ) - self.assertCML(cube, ("categorisation", "customcheck.cml")) - - def test_add_season_membership(self): - # season membership identifies correct seasons? - season = "djf" - ccat.add_season_membership(self.cube, "time", season, name="in_season") - ccat.add_season(self.cube, "time") - coord_season = self.cube.coord("season") - coord_membership = self.cube.coord("in_season") - season_locations = np.where(coord_season.points == season)[0] - membership_locations = np.where(coord_membership.points)[0] - self.assertArrayEqual(membership_locations, season_locations) - - def test_add_season_invalid_spec(self): - # custom seasons with an invalid season raises an error? - seasons = ("djf", "maj", "jja", "son") # MAJ not a season! - for func in ( - ccat.add_season, - ccat.add_season_year, - ccat.add_season_number, - ): - with self.assertRaises(ValueError): - func(self.cube, "time", name="my_category", seasons=seasons) - - def test_add_season_repeated_months(self): - # custom seasons with repeated months raises an error? - seasons = ("djfm", "mam", "jja", "son") - for func in ( - ccat.add_season, - ccat.add_season_year, - ccat.add_season_number, - ): - with self.assertRaises(ValueError): - func(self.cube, "time", name="my_category", seasons=seasons) - - def test_add_season_missing_months(self): - # custom seasons with missing months raises an error? - seasons = ("djfm", "amjj") - for func in ( - ccat.add_season, - ccat.add_season_year, - ccat.add_season_number, - ): - with self.assertRaises(ValueError): - func(self.cube, "time", name="my_category", seasons=seasons) - - def test_add_season_membership_invalid_spec(self): - season = "maj" # not a season! - with self.assertRaises(ValueError): - ccat.add_season_membership( - self.cube, "time", season, name="maj_season" - ) - - -if __name__ == "__main__": - tests.main() diff --git a/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py b/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py new file mode 100644 index 0000000000..fbc3514147 --- /dev/null +++ b/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py @@ -0,0 +1,252 @@ +# Copyright Iris contributors +# +# This file is part of Iris and is released under the LGPL license. +# See COPYING and COPYING.LESSER in the root of the repository for full +# licensing details. +""" +Test the coordinate categorisation functions. +""" + +import warnings + +import cf_units +import numpy as np +import pytest + +import iris +import iris.coord_categorisation as ccat +import iris.coords +import iris.cube +import iris.exceptions +from iris.tests import IrisTest + + +@pytest.fixture( + scope="module", + params=( + ccat.add_day_of_month, + ccat.add_day_of_year, + ccat.add_weekday, + ccat.add_weekday_fullname, + ccat.add_weekday_number, + ccat.add_month, + ccat.add_month_fullname, + ccat.add_month_number, + ccat.add_year, + ccat.add_season, + ccat.add_season_number, + ccat.add_season_year, + ccat.add_season_membership, + ), +) +def categorisation_func(request): + return request.param + + +@pytest.fixture( + scope="module", + params=( + ccat.add_season, + ccat.add_season_number, + ccat.add_season_year, + ), +) +def season_cat_func(request): + return request.param + + +@pytest.fixture(scope="module") +def day_numbers(): + # make a series of 'day numbers' for the time, that slide across month + # boundaries + return np.arange(0, 600, 27, dtype=np.int32) + + +@pytest.fixture +def time_coord(day_numbers): + return iris.coords.DimCoord( + day_numbers, + standard_name="time", + units=cf_units.Unit("days since epoch", "standard"), + ) + + +@pytest.fixture +def cube(day_numbers, time_coord): + _cube = iris.cube.Cube(day_numbers, long_name="test cube", units="metres") + # use day numbers as data values also (don't actually use this for + # anything) + _cube.data = day_numbers + _cube.add_dim_coord(time_coord, 0) + return _cube + + +def test_bad_coord(cube, categorisation_func): + kwargs = {"name": "my_category"} + if categorisation_func is ccat.add_season_membership: + kwargs["season"] = "djf" + with pytest.raises(iris.exceptions.CoordinateNotFoundError): + categorisation_func(cube, "DOES NOT EXIST", **kwargs) + + +def test_explicit_result_names(cube, categorisation_func): + result_name = "my_category" + fmt = "Missing/incorrectly named result for {0!r}" + # Specify source coordinate by name + new_cube = cube.copy() + kwargs = {"name": result_name} + if categorisation_func is ccat.add_season_membership: + kwargs["season"] = "djf" + with warnings.catch_warnings(record=True): + categorisation_func(new_cube, "time", **kwargs) + result_coords = new_cube.coords(result_name) + assert len(result_coords) == 1, fmt.format(categorisation_func.__name__) + # Specify source coordinate by coordinate reference + new_cube = cube.copy() + time = new_cube.coord("time") + with warnings.catch_warnings(record=True): + categorisation_func(new_cube, time, **kwargs) + result_coords = new_cube.coords(result_name) + assert len(result_coords) == 1, fmt.format(categorisation_func.__name__) + + +def test_basic(cube, time_coord): + ccat.add_year(cube, time_coord, "my_year") + ccat.add_day_of_month(cube, time_coord, "my_day_of_month") + ccat.add_day_of_year(cube, time_coord, "my_day_of_year") + + ccat.add_month(cube, time_coord, "my_month") + ccat.add_month_fullname(cube, time_coord, "my_month_fullname") + ccat.add_month_number(cube, time_coord, "my_month_number") + + ccat.add_weekday(cube, time_coord, "my_weekday") + ccat.add_weekday_number(cube, time_coord, "my_weekday_number") + ccat.add_weekday_fullname(cube, time_coord, "my_weekday_fullname") + + ccat.add_season(cube, time_coord, "my_season") + ccat.add_season_number(cube, time_coord, "my_season_number") + ccat.add_season_year(cube, time_coord, "my_season_year") + + # also test 'generic' categorisation interface + def _month_in_quarter(coord, pt_value): + date = coord.units.num2date(pt_value) + return (date.month - 1) % 3 + + ccat.add_categorised_coord( + cube, "my_month_in_quarter", time_coord, _month_in_quarter + ) + + # To ensure consistent results between 32-bit and 64-bit + # platforms, ensure all the numeric categorisation coordinates + # are always stored as int64. + for coord in cube.coords(): + if coord.long_name is not None and coord.points.dtype.kind == "i": + coord.points = coord.points.astype(np.int64) + + # check values + IrisTest.assertCML(IrisTest(), cube, ("categorisation", "quickcheck.cml")) + + +def test_add_season_nonstandard(cube, time_coord): + # season categorisations work for non-standard seasons? + seasons = ["djfm", "amjj", "ason"] + ccat.add_season(cube, time_coord, name="seasons", seasons=seasons) + ccat.add_season_number( + cube, time_coord, name="season_numbers", seasons=seasons + ) + ccat.add_season_year( + cube, time_coord, name="season_years", seasons=seasons + ) + IrisTest.assertCML(IrisTest(), cube, ("categorisation", "customcheck.cml")) + + +@pytest.mark.parametrize("backwards", [None, False, True]) +@pytest.mark.parametrize( + "nonstandard", + [False, True], + ids=["standard_seasons", "nonstandard_seasons"], +) +def test_add_season_year(cube, time_coord, backwards, nonstandard): + """Specific test to account for the extra use_year_at_season_start argument.""" + + kwargs = dict( + cube=cube, + coord=time_coord, + name="season_years", + use_year_at_season_start=backwards, + ) + if nonstandard: + kwargs["seasons"] = ["ndjfm", "amjj", "aso"] + + # Based on the actual years of each date. + expected_years = np.array(([1970] * 14) + ([1971] * 9)) + # Subset to just the 'season' of interest. + season_slice = np.s_[12:17] + expected_years = expected_years[season_slice] + + # Single indices to examine to test the handling of specific months. + nov = 0 + dec = 1 + jan = 2 + feb = 3 + mar = 4 + + # Set the expected deviations from the actual date years. + if backwards is True: + expected_years[jan] = 1970 + expected_years[feb] = 1970 + if nonstandard: + expected_years[mar] = 1970 + else: + # Either False or None - False being the default behaviour. + expected_years[dec] = 1971 + if nonstandard: + expected_years[nov] = 1971 + + ccat.add_season_year(**kwargs) + actual_years = cube.coord(kwargs["name"]).points + # Subset to just the 'season' of interest. + actual_years = actual_years[season_slice] + + np.testing.assert_array_almost_equal(actual_years, expected_years) + + +def test_add_season_membership(cube): + # season membership identifies correct seasons? + season = "djf" + ccat.add_season_membership(cube, "time", season, name="in_season") + ccat.add_season(cube, "time") + coord_season = cube.coord("season") + coord_membership = cube.coord("in_season") + season_locations = np.where(coord_season.points == season)[0] + membership_locations = np.where(coord_membership.points)[0] + np.testing.assert_array_almost_equal( + membership_locations, season_locations + ) + + +def test_add_season_invalid_spec(cube, season_cat_func): + # custom seasons with an invalid season raises an error? + seasons = ("djf", "maj", "jja", "son") # MAJ not a season! + with pytest.raises(ValueError): + season_cat_func(cube, "time", name="my_category", seasons=seasons) + + +def test_add_season_repeated_months(cube, season_cat_func): + # custom seasons with repeated months raises an error? + seasons = ("djfm", "mam", "jja", "son") + with pytest.raises(ValueError): + season_cat_func(cube, "time", name="my_category", seasons=seasons) + + +def test_add_season_missing_months(cube, season_cat_func): + # custom seasons with missing months raises an error? + seasons = ("djfm", "amjj") + with pytest.raises(ValueError): + season_cat_func(cube, "time", name="my_category", seasons=seasons) + + +def test_add_season_membership_invalid_spec(cube): + season = "maj" # not a season! + with pytest.raises(ValueError): + ccat.add_season_membership(cube, "time", season, name="maj_season") From c82ec9caafacf7a04999218fabbdf90fa6fa0949 Mon Sep 17 00:00:00 2001 From: lbdreyer Date: Mon, 13 Nov 2023 17:24:26 +0000 Subject: [PATCH 80/82] Relicense to from LGPL-3 to BSD-3 (#5577) * Relicense to BSD-3 * Fix docs test line numbers * Add whats new * Update docs/src/whatsnew/latest.rst --------- Co-authored-by: Bill Little --- COPYING | 674 ------------------ COPYING.LESSER | 165 ----- LICENSE | 29 + MANIFEST.in | 3 +- README.md | 2 +- benchmarks/asv_delegated_conda.py | 5 +- benchmarks/benchmarks/__init__.py | 5 +- benchmarks/benchmarks/aux_factory.py | 5 +- benchmarks/benchmarks/coords.py | 5 +- benchmarks/benchmarks/cperf/__init__.py | 5 +- benchmarks/benchmarks/cperf/equality.py | 5 +- benchmarks/benchmarks/cperf/load.py | 5 +- benchmarks/benchmarks/cperf/save.py | 5 +- benchmarks/benchmarks/cube.py | 5 +- .../benchmarks/experimental/__init__.py | 5 +- .../benchmarks/experimental/ugrid/__init__.py | 5 +- .../experimental/ugrid/regions_combine.py | 5 +- .../benchmarks/generate_data/__init__.py | 5 +- benchmarks/benchmarks/generate_data/stock.py | 5 +- benchmarks/benchmarks/generate_data/ugrid.py | 5 +- .../benchmarks/generate_data/um_files.py | 5 +- benchmarks/benchmarks/import_iris.py | 5 +- benchmarks/benchmarks/iterate.py | 5 +- benchmarks/benchmarks/load/__init__.py | 5 +- benchmarks/benchmarks/load/ugrid.py | 5 +- .../benchmarks/metadata_manager_factory.py | 5 +- benchmarks/benchmarks/mixin.py | 5 +- benchmarks/benchmarks/plot.py | 5 +- benchmarks/benchmarks/regridding.py | 5 +- benchmarks/benchmarks/save.py | 5 +- benchmarks/benchmarks/sperf/__init__.py | 5 +- .../benchmarks/sperf/combine_regions.py | 5 +- benchmarks/benchmarks/sperf/equality.py | 5 +- benchmarks/benchmarks/sperf/load.py | 5 +- benchmarks/benchmarks/sperf/save.py | 5 +- benchmarks/benchmarks/trajectory.py | 5 +- benchmarks/bm_runner.py | 5 +- docs/gallery_tests/__init__.py | 5 +- docs/gallery_tests/conftest.py | 5 +- docs/gallery_tests/test_gallery_examples.py | 5 +- docs/src/conf.py | 5 +- docs/src/copyright.rst | 9 +- .../src/further_topics/filtering_warnings.rst | 16 +- docs/src/sphinxext/api_rst_formatting.py | 5 +- docs/src/whatsnew/latest.rst | 2 +- lib/iris/__init__.py | 5 +- lib/iris/_concatenate.py | 5 +- lib/iris/_constraints.py | 5 +- lib/iris/_data_manager.py | 5 +- lib/iris/_deprecation.py | 5 +- lib/iris/_lazy_data.py | 5 +- lib/iris/_merge.py | 5 +- lib/iris/_representation/__init__.py | 5 +- lib/iris/_representation/cube_printout.py | 5 +- lib/iris/_representation/cube_summary.py | 5 +- lib/iris/analysis/__init__.py | 5 +- lib/iris/analysis/_area_weighted.py | 5 +- lib/iris/analysis/_grid_angles.py | 5 +- lib/iris/analysis/_interpolation.py | 5 +- lib/iris/analysis/_regrid.py | 5 +- lib/iris/analysis/calculus.py | 5 +- lib/iris/analysis/cartography.py | 5 +- lib/iris/analysis/geometry.py | 5 +- lib/iris/analysis/maths.py | 5 +- lib/iris/analysis/stats.py | 5 +- lib/iris/analysis/trajectory.py | 5 +- lib/iris/aux_factory.py | 5 +- lib/iris/common/__init__.py | 5 +- lib/iris/common/lenient.py | 5 +- lib/iris/common/metadata.py | 5 +- lib/iris/common/mixin.py | 5 +- lib/iris/common/resolve.py | 5 +- lib/iris/config.py | 5 +- lib/iris/coord_categorisation.py | 5 +- lib/iris/coord_systems.py | 5 +- lib/iris/coords.py | 5 +- lib/iris/cube.py | 5 +- lib/iris/exceptions.py | 5 +- lib/iris/experimental/__init__.py | 5 +- lib/iris/experimental/animate.py | 5 +- lib/iris/experimental/raster.py | 5 +- lib/iris/experimental/regrid.py | 5 +- lib/iris/experimental/regrid_conservative.py | 5 +- lib/iris/experimental/representation.py | 5 +- lib/iris/experimental/stratify.py | 5 +- lib/iris/experimental/ugrid/__init__.py | 5 +- lib/iris/experimental/ugrid/cf.py | 5 +- lib/iris/experimental/ugrid/load.py | 5 +- lib/iris/experimental/ugrid/mesh.py | 5 +- lib/iris/experimental/ugrid/metadata.py | 5 +- lib/iris/experimental/ugrid/save.py | 5 +- lib/iris/experimental/ugrid/utils.py | 5 +- lib/iris/fileformats/__init__.py | 5 +- lib/iris/fileformats/_ff.py | 5 +- lib/iris/fileformats/_ff_cross_references.py | 5 +- .../fileformats/_nc_load_rules/__init__.py | 5 +- .../fileformats/_nc_load_rules/actions.py | 5 +- lib/iris/fileformats/_nc_load_rules/engine.py | 5 +- .../fileformats/_nc_load_rules/helpers.py | 5 +- lib/iris/fileformats/_pp_lbproc_pairs.py | 5 +- .../_structured_array_identification.py | 5 +- lib/iris/fileformats/abf.py | 5 +- lib/iris/fileformats/cf.py | 5 +- lib/iris/fileformats/dot.py | 5 +- lib/iris/fileformats/name.py | 5 +- lib/iris/fileformats/name_loaders.py | 5 +- lib/iris/fileformats/netcdf/__init__.py | 5 +- lib/iris/fileformats/netcdf/_dask_locks.py | 5 +- .../fileformats/netcdf/_thread_safe_nc.py | 5 +- lib/iris/fileformats/netcdf/loader.py | 5 +- lib/iris/fileformats/netcdf/saver.py | 5 +- lib/iris/fileformats/nimrod.py | 5 +- lib/iris/fileformats/nimrod_load_rules.py | 5 +- lib/iris/fileformats/pp.py | 5 +- lib/iris/fileformats/pp_load_rules.py | 5 +- lib/iris/fileformats/pp_save_rules.py | 5 +- lib/iris/fileformats/rules.py | 5 +- lib/iris/fileformats/um/__init__.py | 5 +- lib/iris/fileformats/um/_fast_load.py | 5 +- .../um/_fast_load_structured_fields.py | 5 +- lib/iris/fileformats/um/_ff_replacement.py | 5 +- .../um/_optimal_array_structuring.py | 5 +- lib/iris/fileformats/um_cf_map.py | 5 +- lib/iris/io/__init__.py | 5 +- lib/iris/io/format_picker.py | 5 +- lib/iris/iterate.py | 5 +- lib/iris/palette.py | 5 +- lib/iris/pandas.py | 5 +- lib/iris/plot.py | 5 +- lib/iris/quickplot.py | 5 +- lib/iris/symbols.py | 5 +- lib/iris/tests/__init__.py | 5 +- lib/iris/tests/experimental/__init__.py | 5 +- .../tests/experimental/regrid/__init__.py | 5 +- ..._area_weighted_rectilinear_src_and_grid.py | 5 +- .../test_regrid_conservative_via_esmpy.py | 5 +- lib/iris/tests/experimental/test_raster.py | 5 +- lib/iris/tests/graphics/__init__.py | 5 +- lib/iris/tests/graphics/idiff.py | 5 +- lib/iris/tests/graphics/recreate_imagerepo.py | 5 +- lib/iris/tests/integration/__init__.py | 5 +- .../tests/integration/analysis/__init__.py | 5 +- .../analysis/test_area_weighted.py | 5 +- .../tests/integration/aux_factory/__init__.py | 5 +- .../aux_factory/test_OceanSigmaZFactory.py | 5 +- .../tests/integration/concatenate/__init__.py | 5 +- .../concatenate/test_concatenate.py | 5 +- .../integration/experimental/__init__.py | 5 +- .../experimental/test_CubeRepresentation.py | 5 +- .../test_regrid_ProjectedUnstructured.py | 5 +- .../experimental/test_ugrid_load.py | 5 +- .../experimental/test_ugrid_save.py | 5 +- .../tests/integration/fast_load/__init__.py | 5 +- .../integration/fast_load/test_fast_load.py | 5 +- lib/iris/tests/integration/merge/__init__.py | 5 +- .../tests/integration/merge/test_merge.py | 5 +- lib/iris/tests/integration/netcdf/__init__.py | 5 +- .../integration/netcdf/test__dask_locks.py | 5 +- .../integration/netcdf/test_attributes.py | 5 +- .../integration/netcdf/test_aux_factories.py | 5 +- .../integration/netcdf/test_coord_systems.py | 5 +- .../integration/netcdf/test_delayed_save.py | 5 +- .../tests/integration/netcdf/test_general.py | 5 +- .../netcdf/test_self_referencing.py | 5 +- .../integration/netcdf/test_thread_safety.py | 5 +- lib/iris/tests/integration/plot/__init__.py | 5 +- .../tests/integration/plot/test_animate.py | 5 +- .../tests/integration/plot/test_colorbar.py | 5 +- .../tests/integration/plot/test_netcdftime.py | 5 +- .../tests/integration/plot/test_nzdateline.py | 5 +- .../integration/plot/test_plot_2d_coords.py | 5 +- .../integration/plot/test_vector_plots.py | 5 +- lib/iris/tests/integration/test_Datums.py | 5 +- .../tests/integration/test_PartialDateTime.py | 5 +- .../tests/integration/test_climatology.py | 5 +- lib/iris/tests/integration/test_cube.py | 5 +- lib/iris/tests/integration/test_ff.py | 5 +- lib/iris/tests/integration/test_new_axis.py | 5 +- lib/iris/tests/integration/test_pickle.py | 5 +- lib/iris/tests/integration/test_pp.py | 5 +- .../test_pp_constrained_load_cubes.py | 5 +- .../integration/test_regrid_equivalence.py | 5 +- lib/iris/tests/integration/test_regridding.py | 5 +- lib/iris/tests/integration/test_subset.py | 5 +- lib/iris/tests/integration/test_trajectory.py | 5 +- lib/iris/tests/integration/um/__init__.py | 5 +- .../tests/integration/um/test_fieldsfile.py | 5 +- lib/iris/tests/pp.py | 5 +- lib/iris/tests/stock/__init__.py | 5 +- lib/iris/tests/stock/_stock_2d_latlons.py | 5 +- lib/iris/tests/stock/mesh.py | 5 +- lib/iris/tests/stock/netcdf.py | 5 +- lib/iris/tests/system_test.py | 5 +- lib/iris/tests/test_abf.py | 5 +- lib/iris/tests/test_aggregate_by.py | 5 +- lib/iris/tests/test_analysis.py | 5 +- lib/iris/tests/test_analysis_calculus.py | 5 +- lib/iris/tests/test_basic_maths.py | 5 +- lib/iris/tests/test_cartography.py | 5 +- lib/iris/tests/test_cdm.py | 5 +- lib/iris/tests/test_cell.py | 5 +- lib/iris/tests/test_cf.py | 5 +- lib/iris/tests/test_coding_standards.py | 10 +- lib/iris/tests/test_concatenate.py | 5 +- lib/iris/tests/test_constraints.py | 5 +- lib/iris/tests/test_coord_api.py | 5 +- lib/iris/tests/test_coordsystem.py | 5 +- lib/iris/tests/test_cube.py | 5 +- lib/iris/tests/test_cube_to_pp.py | 5 +- lib/iris/tests/test_ff.py | 5 +- lib/iris/tests/test_file_load.py | 5 +- lib/iris/tests/test_file_save.py | 5 +- lib/iris/tests/test_hybrid.py | 5 +- lib/iris/tests/test_image_json.py | 5 +- lib/iris/tests/test_imports.py | 5 +- lib/iris/tests/test_intersect.py | 5 +- lib/iris/tests/test_io_init.py | 5 +- lib/iris/tests/test_iterate.py | 5 +- lib/iris/tests/test_lazy_aggregate_by.py | 5 +- lib/iris/tests/test_load.py | 5 +- lib/iris/tests/test_mapping.py | 5 +- lib/iris/tests/test_merge.py | 5 +- lib/iris/tests/test_name.py | 5 +- lib/iris/tests/test_netcdf.py | 5 +- lib/iris/tests/test_nimrod.py | 5 +- lib/iris/tests/test_peak.py | 5 +- lib/iris/tests/test_pickling.py | 5 +- lib/iris/tests/test_plot.py | 5 +- lib/iris/tests/test_pp_cf.py | 5 +- lib/iris/tests/test_pp_module.py | 5 +- lib/iris/tests/test_pp_stash.py | 5 +- lib/iris/tests/test_pp_to_cube.py | 5 +- lib/iris/tests/test_quickplot.py | 5 +- lib/iris/tests/test_std_names.py | 5 +- lib/iris/tests/test_uri_callback.py | 5 +- lib/iris/tests/test_util.py | 5 +- lib/iris/tests/unit/__init__.py | 5 +- lib/iris/tests/unit/analysis/__init__.py | 5 +- .../unit/analysis/area_weighted/__init__.py | 5 +- .../test_AreaWeightedRegridder.py | 5 +- .../unit/analysis/cartography/__init__.py | 5 +- .../cartography/test__get_lon_lat_coords.py | 5 +- .../cartography/test__quadrant_area.py | 5 +- .../analysis/cartography/test__xy_range.py | 5 +- .../analysis/cartography/test_area_weights.py | 5 +- .../cartography/test_gridcell_angles.py | 5 +- .../unit/analysis/cartography/test_project.py | 5 +- .../cartography/test_rotate_grid_vectors.py | 5 +- .../analysis/cartography/test_rotate_winds.py | 5 +- .../tests/unit/analysis/geometry/__init__.py | 5 +- .../test__extract_relevant_cube_slice.py | 5 +- .../geometry/test_geometry_area_weights.py | 5 +- .../unit/analysis/interpolation/__init__.py | 5 +- .../test_RectilinearInterpolator.py | 5 +- .../interpolation/test_get_xy_dim_coords.py | 5 +- .../tests/unit/analysis/maths/__init__.py | 5 +- .../analysis/maths/test__arith__dask_array.py | 5 +- .../maths/test__arith__derived_coords.py | 5 +- .../analysis/maths/test__arith__meshcoords.py | 5 +- .../unit/analysis/maths/test__get_dtype.py | 5 +- .../maths/test__inplace_common_checks.py | 5 +- .../unit/analysis/maths/test__output_dtype.py | 5 +- .../tests/unit/analysis/maths/test_add.py | 5 +- .../tests/unit/analysis/maths/test_divide.py | 5 +- .../unit/analysis/maths/test_multiply.py | 5 +- .../unit/analysis/maths/test_subtract.py | 5 +- .../tests/unit/analysis/regrid/__init__.py | 5 +- .../regrid/test_RectilinearRegridder.py | 5 +- .../regrid/test__CurvilinearRegridder.py | 5 +- .../analysis/scipy_interpolate/__init__.py | 5 +- .../test__RegularGridInterpolator.py | 5 +- .../tests/unit/analysis/stats/__init__.py | 5 +- .../unit/analysis/stats/test_pearsonr.py | 5 +- .../tests/unit/analysis/test_Aggregator.py | 5 +- .../tests/unit/analysis/test_AreaWeighted.py | 5 +- lib/iris/tests/unit/analysis/test_COUNT.py | 5 +- lib/iris/tests/unit/analysis/test_Linear.py | 5 +- lib/iris/tests/unit/analysis/test_MAX.py | 5 +- lib/iris/tests/unit/analysis/test_MAX_RUN.py | 5 +- lib/iris/tests/unit/analysis/test_MEAN.py | 5 +- lib/iris/tests/unit/analysis/test_MIN.py | 5 +- lib/iris/tests/unit/analysis/test_Nearest.py | 5 +- .../tests/unit/analysis/test_PERCENTILE.py | 5 +- .../tests/unit/analysis/test_PROPORTION.py | 5 +- .../analysis/test_PercentileAggregator.py | 5 +- .../tests/unit/analysis/test_PointInCell.py | 5 +- lib/iris/tests/unit/analysis/test_RMS.py | 5 +- lib/iris/tests/unit/analysis/test_STD_DEV.py | 5 +- lib/iris/tests/unit/analysis/test_SUM.py | 5 +- lib/iris/tests/unit/analysis/test_VARIANCE.py | 5 +- .../tests/unit/analysis/test_WPERCENTILE.py | 5 +- .../test_WeightedPercentileAggregator.py | 5 +- .../analysis/test__axis_to_single_trailing.py | 5 +- .../unit/analysis/trajectory/__init__.py | 5 +- .../analysis/trajectory/test_Trajectory.py | 5 +- ...t_UnstructuredNearestNeighbourRegridder.py | 5 +- ...est__nearest_neighbour_indices_ndcoords.py | 5 +- .../analysis/trajectory/test_interpolate.py | 5 +- lib/iris/tests/unit/aux_factory/__init__.py | 5 +- .../test_AtmosphereSigmaFactory.py | 5 +- .../unit/aux_factory/test_AuxCoordFactory.py | 5 +- .../aux_factory/test_HybridPressureFactory.py | 5 +- .../unit/aux_factory/test_OceanSFactory.py | 5 +- .../unit/aux_factory/test_OceanSg1Factory.py | 5 +- .../unit/aux_factory/test_OceanSg2Factory.py | 5 +- .../aux_factory/test_OceanSigmaFactory.py | 5 +- .../aux_factory/test_OceanSigmaZFactory.py | 5 +- lib/iris/tests/unit/common/__init__.py | 5 +- .../tests/unit/common/lenient/__init__.py | 5 +- .../tests/unit/common/lenient/test_Lenient.py | 5 +- .../unit/common/lenient/test__Lenient.py | 5 +- .../common/lenient/test__lenient_client.py | 5 +- .../common/lenient/test__lenient_service.py | 5 +- .../unit/common/lenient/test__qualname.py | 5 +- .../tests/unit/common/metadata/__init__.py | 5 +- .../test_AncillaryVariableMetadata.py | 5 +- .../unit/common/metadata/test_BaseMetadata.py | 5 +- .../metadata/test_CellMeasureMetadata.py | 5 +- .../common/metadata/test_CoordMetadata.py | 5 +- .../unit/common/metadata/test_CubeMetadata.py | 5 +- .../common/metadata/test__NamedTupleMeta.py | 5 +- .../unit/common/metadata/test_hexdigest.py | 5 +- .../common/metadata/test_metadata_filter.py | 5 +- .../metadata/test_metadata_manager_factory.py | 5 +- lib/iris/tests/unit/common/mixin/__init__.py | 5 +- .../unit/common/mixin/test_CFVariableMixin.py | 5 +- .../common/mixin/test_LimitedAttributeDict.py | 5 +- .../mixin/test__get_valid_standard_name.py | 5 +- .../tests/unit/common/resolve/__init__.py | 5 +- .../tests/unit/common/resolve/test_Resolve.py | 5 +- lib/iris/tests/unit/concatenate/__init__.py | 5 +- .../unit/concatenate/test__CoordMetaData.py | 5 +- .../unit/concatenate/test__CoordSignature.py | 5 +- .../unit/concatenate/test__CubeSignature.py | 5 +- .../unit/concatenate/test_concatenate.py | 5 +- lib/iris/tests/unit/config/__init__.py | 5 +- lib/iris/tests/unit/config/test_NetCDF.py | 5 +- lib/iris/tests/unit/constraints/__init__.py | 5 +- .../constraints/test_Constraint_equality.py | 5 +- .../unit/constraints/test_NameConstraint.py | 5 +- .../unit/coord_categorisation/__init__.py | 5 +- .../test_add_categorised_coord.py | 5 +- .../coord_categorisation/test_add_hour.py | 5 +- .../test_coord_categorisation.py | 5 +- lib/iris/tests/unit/coord_systems/__init__.py | 5 +- .../coord_systems/test_AlbersEqualArea.py | 5 +- .../tests/unit/coord_systems/test_GeogCS.py | 5 +- .../unit/coord_systems/test_Geostationary.py | 5 +- .../test_LambertAzimuthalEqualArea.py | 5 +- .../coord_systems/test_LambertConformal.py | 5 +- .../tests/unit/coord_systems/test_Mercator.py | 5 +- .../coord_systems/test_ObliqueMercator.py | 5 +- .../unit/coord_systems/test_Orthographic.py | 5 +- .../coord_systems/test_PolarStereographic.py | 5 +- .../coord_systems/test_RotatedMercator.py | 5 +- .../unit/coord_systems/test_RotatedPole.py | 5 +- .../unit/coord_systems/test_Stereographic.py | 5 +- .../coord_systems/test_TransverseMercator.py | 5 +- .../coord_systems/test_VerticalPerspective.py | 5 +- lib/iris/tests/unit/coords/__init__.py | 5 +- .../unit/coords/test_AncillaryVariable.py | 5 +- lib/iris/tests/unit/coords/test_AuxCoord.py | 5 +- lib/iris/tests/unit/coords/test_Cell.py | 5 +- .../tests/unit/coords/test_CellMeasure.py | 5 +- lib/iris/tests/unit/coords/test_CellMethod.py | 5 +- lib/iris/tests/unit/coords/test_Coord.py | 5 +- lib/iris/tests/unit/coords/test_DimCoord.py | 5 +- .../unit/coords/test__DimensionalMetadata.py | 5 +- lib/iris/tests/unit/cube/__init__.py | 5 +- lib/iris/tests/unit/cube/test_Cube.py | 5 +- lib/iris/tests/unit/cube/test_CubeList.py | 5 +- .../unit/cube/test_Cube__aggregated_by.py | 5 +- .../tests/unit/cube/test_Cube__operators.py | 5 +- lib/iris/tests/unit/data_manager/__init__.py | 5 +- .../unit/data_manager/test_DataManager.py | 5 +- lib/iris/tests/unit/experimental/__init__.py | 5 +- .../unit/experimental/raster/__init__.py | 5 +- .../raster/test_export_geotiff.py | 5 +- .../unit/experimental/regrid/__init__.py | 5 +- ..._area_weighted_rectilinear_src_and_grid.py | 5 +- ...rid_weighted_curvilinear_to_rectilinear.py | 5 +- .../experimental/representation/__init__.py | 5 +- .../test_CubeListRepresentation.py | 5 +- .../representation/test_CubeRepresentation.py | 5 +- .../unit/experimental/stratify/__init__.py | 5 +- .../experimental/stratify/test_relevel.py | 5 +- .../tests/unit/experimental/ugrid/__init__.py | 5 +- .../unit/experimental/ugrid/cf/__init__.py | 5 +- ...test_CFUGridAuxiliaryCoordinateVariable.py | 5 +- .../cf/test_CFUGridConnectivityVariable.py | 5 +- .../ugrid/cf/test_CFUGridGroup.py | 5 +- .../ugrid/cf/test_CFUGridMeshVariable.py | 5 +- .../ugrid/cf/test_CFUGridReader.py | 5 +- .../unit/experimental/ugrid/load/__init__.py | 5 +- .../ugrid/load/test_ParseUgridOnLoad.py | 5 +- .../experimental/ugrid/load/test_load_mesh.py | 5 +- .../ugrid/load/test_load_meshes.py | 5 +- .../unit/experimental/ugrid/mesh/__init__.py | 5 +- .../ugrid/mesh/test_Connectivity.py | 5 +- .../unit/experimental/ugrid/mesh/test_Mesh.py | 5 +- .../experimental/ugrid/mesh/test_MeshCoord.py | 5 +- .../ugrid/mesh/test_Mesh__from_coords.py | 5 +- .../experimental/ugrid/metadata/__init__.py | 5 +- .../metadata/test_ConnectivityMetadata.py | 5 +- .../ugrid/metadata/test_MeshCoordMetadata.py | 5 +- .../ugrid/metadata/test_MeshMetadata.py | 5 +- .../unit/experimental/ugrid/utils/__init__.py | 5 +- .../ugrid/utils/test_recombine_submeshes.py | 5 +- lib/iris/tests/unit/fileformats/__init__.py | 5 +- .../tests/unit/fileformats/abf/__init__.py | 5 +- .../unit/fileformats/abf/test_ABFField.py | 5 +- .../tests/unit/fileformats/cf/__init__.py | 5 +- .../tests/unit/fileformats/cf/test_CFGroup.py | 5 +- .../unit/fileformats/cf/test_CFReader.py | 5 +- .../tests/unit/fileformats/dot/__init__.py | 5 +- .../unit/fileformats/dot/test__dot_path.py | 5 +- .../tests/unit/fileformats/ff/__init__.py | 5 +- .../unit/fileformats/ff/test_ArakawaC.py | 5 +- .../tests/unit/fileformats/ff/test_ENDGame.py | 5 +- .../tests/unit/fileformats/ff/test_FF2PP.py | 5 +- .../unit/fileformats/ff/test_FFHeader.py | 5 +- .../tests/unit/fileformats/ff/test_Grid.py | 5 +- .../unit/fileformats/ff/test_NewDynamics.py | 5 +- .../unit/fileformats/name_loaders/__init__.py | 5 +- .../name_loaders/test__build_cell_methods.py | 5 +- ...test__build_lat_lon_for_NAME_timeseries.py | 5 +- .../test__calc_integration_period.py | 5 +- .../name_loaders/test__cf_height_from_name.py | 5 +- .../name_loaders/test__generate_cubes.py | 5 +- .../fileformats/nc_load_rules/__init__.py | 5 +- .../nc_load_rules/actions/__init__.py | 5 +- .../actions/test__grid_mappings.py | 5 +- .../actions/test__hybrid_formulae.py | 5 +- .../actions/test__latlon_dimcoords.py | 5 +- .../actions/test__miscellaneous.py | 5 +- .../actions/test__time_coords.py | 5 +- .../nc_load_rules/engine/__init__.py | 5 +- .../nc_load_rules/engine/test_engine.py | 5 +- .../nc_load_rules/helpers/__init__.py | 5 +- ...ild_albers_equal_area_coordinate_system.py | 5 +- .../helpers/test_build_ancil_var.py | 5 +- .../test_build_auxiliary_coordinate.py | 5 +- .../helpers/test_build_cell_measure.py | 5 +- .../helpers/test_build_cube_metadata.py | 5 +- .../test_build_dimension_coordinate.py | 5 +- ...t_build_geostationary_coordinate_system.py | 5 +- ..._azimuthal_equal_area_coordinate_system.py | 5 +- ...ild_lambert_conformal_coordinate_system.py | 5 +- .../test_build_mercator_coordinate_system.py | 5 +- ...uild_oblique_mercator_coordinate_system.py | 5 +- ...d_polar_stereographic_coordinate_system.py | 5 +- ...t_build_stereographic_coordinate_system.py | 5 +- ...d_transverse_mercator_coordinate_system.py | 5 +- .../test_build_verticalp_coordinate_system.py | 5 +- .../helpers/test_get_attr_units.py | 5 +- .../helpers/test_get_cf_bounds_var.py | 5 +- .../nc_load_rules/helpers/test_get_names.py | 5 +- .../test_has_supported_mercator_parameters.py | 5 +- ...upported_polar_stereographic_parameters.py | 5 +- .../helpers/test_parse_cell_methods.py | 5 +- .../helpers/test_reorder_bounds_data.py | 5 +- .../tests/unit/fileformats/netcdf/__init__.py | 5 +- .../fileformats/netcdf/loader/__init__.py | 5 +- .../netcdf/loader/test__get_cf_var_data.py | 5 +- .../netcdf/loader/test__load_aux_factory.py | 5 +- .../netcdf/loader/test__load_cube.py | 5 +- ...__translate_constraints_to_var_callback.py | 5 +- .../netcdf/loader/test_load_cubes.py | 5 +- .../unit/fileformats/netcdf/saver/__init__.py | 5 +- .../fileformats/netcdf/saver/test_Saver.py | 5 +- .../netcdf/saver/test_Saver__lazy.py | 5 +- .../saver/test_Saver__lazy_stream_data.py | 5 +- .../netcdf/saver/test_Saver__ugrid.py | 5 +- .../saver/test__data_fillvalue_check.py | 5 +- .../netcdf/saver/test__fillvalue_report.py | 5 +- .../fileformats/netcdf/saver/test_save.py | 5 +- .../fileformats/nimrod_load_rules/__init__.py | 5 +- .../nimrod_load_rules/test_units.py | 5 +- .../nimrod_load_rules/test_vertical_coord.py | 5 +- .../tests/unit/fileformats/pp/__init__.py | 5 +- .../unit/fileformats/pp/test_PPDataProxy.py | 5 +- .../tests/unit/fileformats/pp/test_PPField.py | 5 +- .../pp/test__convert_constraints.py | 5 +- .../fileformats/pp/test__create_field_data.py | 5 +- .../pp/test__data_bytes_to_shaped_array.py | 5 +- .../unit/fileformats/pp/test__field_gen.py | 5 +- .../fileformats/pp/test__interpret_field.py | 5 +- .../unit/fileformats/pp/test_as_fields.py | 5 +- .../tests/unit/fileformats/pp/test_load.py | 5 +- .../tests/unit/fileformats/pp/test_save.py | 5 +- .../unit/fileformats/pp/test_save_fields.py | 5 +- .../pp/test_save_pairs_from_cube.py | 5 +- .../fileformats/pp_load_rules/__init__.py | 5 +- .../pp_load_rules/test__all_other_rules.py | 5 +- ...__collapse_degenerate_points_and_bounds.py | 5 +- ...est__convert_scalar_pseudo_level_coords.py | 5 +- ...test__convert_scalar_realization_coords.py | 5 +- .../test__convert_time_coords.py | 5 +- .../test__convert_vertical_coords.py | 5 +- .../pp_load_rules/test__dim_or_aux.py | 5 +- .../pp_load_rules/test__epoch_date_hours.py | 5 +- .../pp_load_rules/test__model_level_number.py | 5 +- .../test__reduced_points_and_bounds.py | 5 +- .../test__reshape_vector_args.py | 5 +- .../fileformats/pp_load_rules/test_convert.py | 5 +- .../tests/unit/fileformats/rules/__init__.py | 5 +- .../unit/fileformats/rules/test_Loader.py | 5 +- .../unit/fileformats/rules/test__make_cube.py | 5 +- .../__init__.py | 5 +- .../test_ArrayStructure.py | 5 +- .../test_GroupStructure.py | 5 +- lib/iris/tests/unit/fileformats/test_rules.py | 5 +- .../tests/unit/fileformats/um/__init__.py | 5 +- .../unit/fileformats/um/fast_load/__init__.py | 5 +- .../um/fast_load/test_FieldCollation.py | 5 +- .../um/fast_load/test__convert_collation.py | 5 +- .../fast_load_structured_fields/__init__.py | 5 +- .../test_BasicFieldCollation.py | 5 +- .../test_group_structured_fields.py | 5 +- .../um/optimal_array_structuring/__init__.py | 5 +- .../test_optimal_array_structure.py | 5 +- .../unit/fileformats/um/test_um_to_pp.py | 5 +- lib/iris/tests/unit/io/__init__.py | 5 +- .../tests/unit/io/test__generate_cubes.py | 5 +- .../tests/unit/io/test_expand_filespecs.py | 5 +- lib/iris/tests/unit/io/test_run_callback.py | 5 +- lib/iris/tests/unit/io/test_save.py | 5 +- lib/iris/tests/unit/lazy_data/__init__.py | 5 +- .../unit/lazy_data/test_as_concrete_data.py | 5 +- .../tests/unit/lazy_data/test_as_lazy_data.py | 5 +- .../unit/lazy_data/test_co_realise_cubes.py | 5 +- .../tests/unit/lazy_data/test_is_lazy_data.py | 5 +- .../lazy_data/test_is_lazy_masked_data.py | 5 +- .../unit/lazy_data/test_lazy_elementwise.py | 5 +- .../lazy_data/test_map_complete_blocks.py | 5 +- .../lazy_data/test_multidim_lazy_stack.py | 5 +- .../tests/unit/lazy_data/test_non_lazy.py | 5 +- lib/iris/tests/unit/merge/__init__.py | 5 +- lib/iris/tests/unit/merge/test_ProtoCube.py | 5 +- lib/iris/tests/unit/pandas/__init__.py | 5 +- lib/iris/tests/unit/pandas/test_pandas.py | 5 +- lib/iris/tests/unit/plot/__init__.py | 5 +- lib/iris/tests/unit/plot/_blockplot_common.py | 5 +- .../test__check_bounds_contiguity_and_mask.py | 5 +- ..._check_geostationary_coords_and_convert.py | 5 +- lib/iris/tests/unit/plot/test__fixup_dates.py | 5 +- .../tests/unit/plot/test__get_plot_defn.py | 5 +- ...est__get_plot_defn_custom_coords_picked.py | 5 +- .../tests/unit/plot/test__get_plot_objects.py | 5 +- .../test__replace_axes_with_cartopy_axes.py | 5 +- lib/iris/tests/unit/plot/test_contour.py | 5 +- lib/iris/tests/unit/plot/test_contourf.py | 5 +- lib/iris/tests/unit/plot/test_hist.py | 5 +- lib/iris/tests/unit/plot/test_outline.py | 5 +- lib/iris/tests/unit/plot/test_pcolor.py | 5 +- lib/iris/tests/unit/plot/test_pcolormesh.py | 5 +- lib/iris/tests/unit/plot/test_plot.py | 5 +- lib/iris/tests/unit/plot/test_points.py | 5 +- lib/iris/tests/unit/plot/test_scatter.py | 5 +- lib/iris/tests/unit/quickplot/__init__.py | 5 +- lib/iris/tests/unit/quickplot/test_contour.py | 5 +- .../tests/unit/quickplot/test_contourf.py | 5 +- lib/iris/tests/unit/quickplot/test_outline.py | 5 +- lib/iris/tests/unit/quickplot/test_pcolor.py | 5 +- .../tests/unit/quickplot/test_pcolormesh.py | 5 +- lib/iris/tests/unit/quickplot/test_plot.py | 5 +- lib/iris/tests/unit/quickplot/test_points.py | 5 +- lib/iris/tests/unit/quickplot/test_scatter.py | 5 +- .../tests/unit/representation/__init__.py | 5 +- .../representation/cube_printout/__init__.py | 5 +- .../cube_printout/test_CubePrintout.py | 5 +- .../cube_printout/test_Table.py | 5 +- .../representation/cube_summary/__init__.py | 5 +- .../cube_summary/test_CubeSummary.py | 5 +- lib/iris/tests/unit/test_Future.py | 5 +- lib/iris/tests/unit/test_sample_data_path.py | 5 +- lib/iris/tests/unit/tests/__init__.py | 5 +- lib/iris/tests/unit/tests/stock/__init__.py | 5 +- .../tests/unit/tests/stock/test_netcdf.py | 5 +- lib/iris/tests/unit/tests/test_IrisTest.py | 5 +- lib/iris/tests/unit/time/__init__.py | 5 +- .../tests/unit/time/test_PartialDateTime.py | 5 +- lib/iris/tests/unit/util/__init__.py | 5 +- .../tests/unit/util/test__coord_regular.py | 5 +- lib/iris/tests/unit/util/test__is_circular.py | 5 +- lib/iris/tests/unit/util/test__mask_array.py | 5 +- .../unit/util/test__slice_data_with_keys.py | 5 +- lib/iris/tests/unit/util/test_array_equal.py | 5 +- .../unit/util/test_broadcast_to_shape.py | 5 +- .../unit/util/test_column_slices_generator.py | 5 +- .../test_demote_dim_coord_to_aux_coord.py | 5 +- .../tests/unit/util/test_describe_diff.py | 5 +- .../unit/util/test_equalise_attributes.py | 5 +- .../unit/util/test_file_is_newer_than.py | 5 +- .../unit/util/test_find_discontiguities.py | 5 +- lib/iris/tests/unit/util/test_mask_cube.py | 5 +- lib/iris/tests/unit/util/test_new_axis.py | 5 +- .../test_promote_aux_coord_to_dim_coord.py | 5 +- lib/iris/tests/unit/util/test_reverse.py | 5 +- .../tests/unit/util/test_rolling_window.py | 5 +- lib/iris/tests/unit/util/test_squeeze.py | 5 +- .../tests/unit/util/test_unify_time_units.py | 5 +- lib/iris/time.py | 5 +- lib/iris/util.py | 5 +- pyproject.toml | 6 +- tools/generate_std_names.py | 10 +- tools/release_do_nothing.py | 5 +- tools/update_lockfiles.py | 5 +- 608 files changed, 1248 insertions(+), 2663 deletions(-) delete mode 100644 COPYING delete mode 100644 COPYING.LESSER create mode 100644 LICENSE diff --git a/COPYING b/COPYING deleted file mode 100644 index 94a9ed024d..0000000000 --- a/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/COPYING.LESSER b/COPYING.LESSER deleted file mode 100644 index 65c5ca88a6..0000000000 --- a/COPYING.LESSER +++ /dev/null @@ -1,165 +0,0 @@ - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..2d1d23e16c --- /dev/null +++ b/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2010, Met Office. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/MANIFEST.in b/MANIFEST.in index 329cf79c5d..354b92d735 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -17,8 +17,7 @@ exclude .readthedocs.yml exclude CHANGES exclude CODE_OF_CONDUCT.md exclude codecov.yml -include COPYING -include COPYING.LESSER +include LICENSE exclude Makefile exclude noxfile.py diff --git a/README.md b/README.md index 53d24b0162..f857608718 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ | 💬 Community | [![Contributor Covenant](https://img.shields.io/badge/contributor%20covenant-2.1-4baaaa.svg)](https://www.contributor-covenant.org/version/2/1/code_of_conduct/) [![GH Discussions](https://img.shields.io/badge/github-discussions%20%F0%9F%92%AC-yellow?logo=github&logoColor=lightgrey)](https://github.com/SciTools/iris/discussions) [![twitter](https://img.shields.io/twitter/follow/scitools_iris?color=yellow&label=twitter%7Cscitools_iris&logo=twitter&style=plastic)](https://twitter.com/scitools_iris) | | 📖 Documentation | [![rtd](https://readthedocs.org/projects/scitools-iris/badge/?version=latest)](https://scitools-iris.readthedocs.io/en/latest/?badge=latest) | | 📈 Health | [![codecov](https://codecov.io/gh/SciTools/iris/branch/main/graph/badge.svg?token=0GeICSIF3g)](https://codecov.io/gh/SciTools/iris) | -| ✨ Meta | [![code style - black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![NEP29](https://raster.shields.io/badge/follows-NEP29-orange.png)](https://numpy.org/neps/nep-0029-deprecation_policy.html) [![license - bds-3-clause](https://img.shields.io/github/license/SciTools/iris)](https://github.com/SciTools/iris/blob/main/COPYING.LESSER) [![conda platform](https://img.shields.io/conda/pn/conda-forge/iris.svg)](https://anaconda.org/conda-forge/iris) | +| ✨ Meta | [![code style - black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![NEP29](https://raster.shields.io/badge/follows-NEP29-orange.png)](https://numpy.org/neps/nep-0029-deprecation_policy.html) [![license - bds-3-clause](https://img.shields.io/github/license/SciTools/iris)](https://github.com/SciTools/iris/blob/main/LICENSE) [![conda platform](https://img.shields.io/conda/pn/conda-forge/iris.svg)](https://anaconda.org/conda-forge/iris) | | 📦 Package | [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.595182.svg)](https://doi.org/10.5281/zenodo.595182) [![conda-forge](https://img.shields.io/conda/vn/conda-forge/iris?color=orange&label=conda-forge&logo=conda-forge&logoColor=white)](https://anaconda.org/conda-forge/iris) [![pypi](https://img.shields.io/pypi/v/scitools-iris?color=orange&label=pypi&logo=python&logoColor=white)](https://pypi.org/project/scitools-iris/) [![pypi - python version](https://img.shields.io/pypi/pyversions/scitools-iris.svg?color=orange&logo=python&label=python&logoColor=white)](https://pypi.org/project/scitools-iris/) | | 🧰 Repo | [![commits-since](https://img.shields.io/github/commits-since/SciTools/iris/latest.svg)](https://github.com/SciTools/iris/commits/main) [![contributors](https://img.shields.io/github/contributors/SciTools/iris)](https://github.com/SciTools/iris/graphs/contributors) [![release](https://img.shields.io/github/v/release/scitools/iris)](https://github.com/SciTools/iris/releases) | | | diff --git a/benchmarks/asv_delegated_conda.py b/benchmarks/asv_delegated_conda.py index 22a3110075..a60cb7f2b7 100644 --- a/benchmarks/asv_delegated_conda.py +++ b/benchmarks/asv_delegated_conda.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ ASV plug-in providing an alternative :class:`asv.plugins.conda.Conda` subclass that manages the Conda environment via custom user scripts. diff --git a/benchmarks/benchmarks/__init__.py b/benchmarks/benchmarks/__init__.py index c86682ca4a..61983a969f 100644 --- a/benchmarks/benchmarks/__init__.py +++ b/benchmarks/benchmarks/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Common code for benchmarks.""" from os import environ import resource diff --git a/benchmarks/benchmarks/aux_factory.py b/benchmarks/benchmarks/aux_factory.py index 4cc4f6c70a..7d1e266c78 100644 --- a/benchmarks/benchmarks/aux_factory.py +++ b/benchmarks/benchmarks/aux_factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ AuxFactory benchmark tests. diff --git a/benchmarks/benchmarks/coords.py b/benchmarks/benchmarks/coords.py index 3107dcf077..b6f56b997f 100644 --- a/benchmarks/benchmarks/coords.py +++ b/benchmarks/benchmarks/coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Coord benchmark tests. diff --git a/benchmarks/benchmarks/cperf/__init__.py b/benchmarks/benchmarks/cperf/__init__.py index 814d29338f..7adba01b60 100644 --- a/benchmarks/benchmarks/cperf/__init__.py +++ b/benchmarks/benchmarks/cperf/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Benchmarks for the CPerf scheme of the UK Met Office's NG-VAT project. diff --git a/benchmarks/benchmarks/cperf/equality.py b/benchmarks/benchmarks/cperf/equality.py index 47eb255513..f27558a5ed 100644 --- a/benchmarks/benchmarks/cperf/equality.py +++ b/benchmarks/benchmarks/cperf/equality.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Equality benchmarks for the CPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/cperf/load.py b/benchmarks/benchmarks/cperf/load.py index 04bb7e1a61..efbd497e2e 100644 --- a/benchmarks/benchmarks/cperf/load.py +++ b/benchmarks/benchmarks/cperf/load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File loading benchmarks for the CPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/cperf/save.py b/benchmarks/benchmarks/cperf/save.py index 2eb60e2ab5..957b28e3fd 100644 --- a/benchmarks/benchmarks/cperf/save.py +++ b/benchmarks/benchmarks/cperf/save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File saving benchmarks for the CPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/cube.py b/benchmarks/benchmarks/cube.py index 5889ce872b..ceacb4e86c 100644 --- a/benchmarks/benchmarks/cube.py +++ b/benchmarks/benchmarks/cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Cube benchmark tests. diff --git a/benchmarks/benchmarks/experimental/__init__.py b/benchmarks/benchmarks/experimental/__init__.py index f16e400bce..81fb222916 100644 --- a/benchmarks/benchmarks/experimental/__init__.py +++ b/benchmarks/benchmarks/experimental/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Benchmark tests for the experimental module. diff --git a/benchmarks/benchmarks/experimental/ugrid/__init__.py b/benchmarks/benchmarks/experimental/ugrid/__init__.py index 2e40c525a6..1fa8b82d67 100644 --- a/benchmarks/benchmarks/experimental/ugrid/__init__.py +++ b/benchmarks/benchmarks/experimental/ugrid/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Benchmark tests for the experimental.ugrid module. diff --git a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py index 5ecc90930b..6d62cf9cd5 100644 --- a/benchmarks/benchmarks/experimental/ugrid/regions_combine.py +++ b/benchmarks/benchmarks/experimental/ugrid/regions_combine.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Benchmarks stages of operation of the function :func:`iris.experimental.ugrid.utils.recombine_submeshes`. diff --git a/benchmarks/benchmarks/generate_data/__init__.py b/benchmarks/benchmarks/generate_data/__init__.py index 52a5aceca8..8837e7cca9 100644 --- a/benchmarks/benchmarks/generate_data/__init__.py +++ b/benchmarks/benchmarks/generate_data/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Scripts for generating supporting data for benchmarking. diff --git a/benchmarks/benchmarks/generate_data/stock.py b/benchmarks/benchmarks/generate_data/stock.py index 954e791f43..b6702ad883 100644 --- a/benchmarks/benchmarks/generate_data/stock.py +++ b/benchmarks/benchmarks/generate_data/stock.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Wrappers for using :mod:`iris.tests.stock` methods for benchmarking. diff --git a/benchmarks/benchmarks/generate_data/ugrid.py b/benchmarks/benchmarks/generate_data/ugrid.py index 527b49a6bb..3be5c20a48 100644 --- a/benchmarks/benchmarks/generate_data/ugrid.py +++ b/benchmarks/benchmarks/generate_data/ugrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Scripts for generating supporting data for UGRID-related benchmarking. """ diff --git a/benchmarks/benchmarks/generate_data/um_files.py b/benchmarks/benchmarks/generate_data/um_files.py index 39773bbb4b..23d3770aa1 100644 --- a/benchmarks/benchmarks/generate_data/um_files.py +++ b/benchmarks/benchmarks/generate_data/um_files.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Generate FF, PP and NetCDF files based on a minimal synthetic FF file. diff --git a/benchmarks/benchmarks/import_iris.py b/benchmarks/benchmarks/import_iris.py index fc32ac289b..5f902fd2e0 100644 --- a/benchmarks/benchmarks/import_iris.py +++ b/benchmarks/benchmarks/import_iris.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. from importlib import import_module, reload ################ diff --git a/benchmarks/benchmarks/iterate.py b/benchmarks/benchmarks/iterate.py index 0a5415ac2b..6cc935498c 100644 --- a/benchmarks/benchmarks/iterate.py +++ b/benchmarks/benchmarks/iterate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Iterate benchmark tests. diff --git a/benchmarks/benchmarks/load/__init__.py b/benchmarks/benchmarks/load/__init__.py index 3d15629f9e..a926e6b7e2 100644 --- a/benchmarks/benchmarks/load/__init__.py +++ b/benchmarks/benchmarks/load/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File loading benchmark tests. diff --git a/benchmarks/benchmarks/load/ugrid.py b/benchmarks/benchmarks/load/ugrid.py index 35c8754171..ef01ae03be 100644 --- a/benchmarks/benchmarks/load/ugrid.py +++ b/benchmarks/benchmarks/load/ugrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Mesh data loading benchmark tests. diff --git a/benchmarks/benchmarks/metadata_manager_factory.py b/benchmarks/benchmarks/metadata_manager_factory.py index 7e7fc98008..531af58b66 100644 --- a/benchmarks/benchmarks/metadata_manager_factory.py +++ b/benchmarks/benchmarks/metadata_manager_factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ metadata_manager_factory benchmark tests. diff --git a/benchmarks/benchmarks/mixin.py b/benchmarks/benchmarks/mixin.py index bec5518eee..335bee1a0f 100644 --- a/benchmarks/benchmarks/mixin.py +++ b/benchmarks/benchmarks/mixin.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Mixin benchmark tests. diff --git a/benchmarks/benchmarks/plot.py b/benchmarks/benchmarks/plot.py index 75195c86e9..73a2a51990 100644 --- a/benchmarks/benchmarks/plot.py +++ b/benchmarks/benchmarks/plot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Plot benchmark tests. diff --git a/benchmarks/benchmarks/regridding.py b/benchmarks/benchmarks/regridding.py index 44bd1b6c95..9cd77527af 100644 --- a/benchmarks/benchmarks/regridding.py +++ b/benchmarks/benchmarks/regridding.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Regridding benchmark test diff --git a/benchmarks/benchmarks/save.py b/benchmarks/benchmarks/save.py index e9a7918dcc..6feb446c70 100644 --- a/benchmarks/benchmarks/save.py +++ b/benchmarks/benchmarks/save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File saving benchmarks. diff --git a/benchmarks/benchmarks/sperf/__init__.py b/benchmarks/benchmarks/sperf/__init__.py index eccad56f6f..111cd4b841 100644 --- a/benchmarks/benchmarks/sperf/__init__.py +++ b/benchmarks/benchmarks/sperf/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Benchmarks for the SPerf scheme of the UK Met Office's NG-VAT project. diff --git a/benchmarks/benchmarks/sperf/combine_regions.py b/benchmarks/benchmarks/sperf/combine_regions.py index e27b3b1996..da0cffde50 100644 --- a/benchmarks/benchmarks/sperf/combine_regions.py +++ b/benchmarks/benchmarks/sperf/combine_regions.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Region combine benchmarks for the SPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/sperf/equality.py b/benchmarks/benchmarks/sperf/equality.py index 85c73ab92b..bb3b707a75 100644 --- a/benchmarks/benchmarks/sperf/equality.py +++ b/benchmarks/benchmarks/sperf/equality.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Equality benchmarks for the SPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/sperf/load.py b/benchmarks/benchmarks/sperf/load.py index 6a60355976..ab1273e288 100644 --- a/benchmarks/benchmarks/sperf/load.py +++ b/benchmarks/benchmarks/sperf/load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File loading benchmarks for the SPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/sperf/save.py b/benchmarks/benchmarks/sperf/save.py index dd33924c6c..9892f0d239 100644 --- a/benchmarks/benchmarks/sperf/save.py +++ b/benchmarks/benchmarks/sperf/save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ File saving benchmarks for the SPerf scheme of the UK Met Office's NG-VAT project. """ diff --git a/benchmarks/benchmarks/trajectory.py b/benchmarks/benchmarks/trajectory.py index 5c1d10d218..e4c3297614 100644 --- a/benchmarks/benchmarks/trajectory.py +++ b/benchmarks/benchmarks/trajectory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Trajectory benchmark test diff --git a/benchmarks/bm_runner.py b/benchmarks/bm_runner.py index 4b8f6e1f18..1efe8d3acb 100644 --- a/benchmarks/bm_runner.py +++ b/benchmarks/bm_runner.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Argparse conveniences for executing common types of benchmark runs. """ diff --git a/docs/gallery_tests/__init__.py b/docs/gallery_tests/__init__.py index ac5753e58b..091e997248 100644 --- a/docs/gallery_tests/__init__.py +++ b/docs/gallery_tests/__init__.py @@ -1,5 +1,4 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. diff --git a/docs/gallery_tests/conftest.py b/docs/gallery_tests/conftest.py index a218b305a2..d3ca8309f8 100644 --- a/docs/gallery_tests/conftest.py +++ b/docs/gallery_tests/conftest.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Pytest fixtures for the gallery tests.""" diff --git a/docs/gallery_tests/test_gallery_examples.py b/docs/gallery_tests/test_gallery_examples.py index 0d0793a7da..93f361a62a 100644 --- a/docs/gallery_tests/test_gallery_examples.py +++ b/docs/gallery_tests/test_gallery_examples.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import importlib diff --git a/docs/src/conf.py b/docs/src/conf.py index 8be34c1989..e349000862 100644 --- a/docs/src/conf.py +++ b/docs/src/conf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # -*- coding: utf-8 -*- # diff --git a/docs/src/copyright.rst b/docs/src/copyright.rst index 2829374f47..d5996fd999 100644 --- a/docs/src/copyright.rst +++ b/docs/src/copyright.rst @@ -6,18 +6,15 @@ Iris Code --------- All Iris source code, unless explicitly stated, is ``Copyright Iris -contributors`` and is licensed under the **GNU Lesser General Public -License** as published by the Free Software Foundation, either version 3 of -the License, or (at your option) any later version. +contributors`` and is licensed under the **BSD-3 License**. You should find all source files with the following header: .. admonition:: Code License Copyright Iris contributors - This file is part of Iris and is released under the LGPL license. - See COPYING and COPYING.LESSER in the root of the repository for full - licensing details. + This file is part of Iris and is released under the BSD license. + See LICENSE in the root of the repository for full licensing details. Iris Documentation and Examples diff --git a/docs/src/further_topics/filtering_warnings.rst b/docs/src/further_topics/filtering_warnings.rst index 2cbad525d3..a69247008a 100644 --- a/docs/src/further_topics/filtering_warnings.rst +++ b/docs/src/further_topics/filtering_warnings.rst @@ -47,9 +47,9 @@ Warnings: >>> my_operation() ... - iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:455: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) - iris/coord_systems.py:823: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:822: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( Warnings can be suppressed using the Python warnings filter with the ``ignore`` @@ -110,7 +110,7 @@ You can target specific Warning messages, e.g. ... warnings.filterwarnings("ignore", message="Discarding false_easting") ... my_operation() ... - iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:455: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) :: @@ -125,16 +125,16 @@ Or you can target Warnings raised by specific lines of specific modules, e.g. .. doctest:: filtering_warnings >>> with warnings.catch_warnings(): - ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=456) + ... warnings.filterwarnings("ignore", module="iris.coord_systems", lineno=455) ... my_operation() ... - iris/coord_systems.py:823: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. + iris/coord_systems.py:822: IrisDefaultingWarning: Discarding false_easting and false_northing that are not used by Cartopy. warnings.warn( :: - python -W ignore:::iris.coord_systems:454 - export PYTHONWARNINGS=ignore:::iris.coord_systems:454 + python -W ignore:::iris.coord_systems:453 + export PYTHONWARNINGS=ignore:::iris.coord_systems:453 Warnings from a Common Source ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -188,7 +188,7 @@ module during execution: ... ) ... my_operation() ... - iris/coord_systems.py:456: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. + iris/coord_systems.py:455: IrisUserWarning: Setting inverse_flattening does not affect other properties of the GeogCS object. To change other properties set them explicitly or create a new GeogCS instance. warnings.warn(wmsg, category=iris.exceptions.IrisUserWarning) ---- diff --git a/docs/src/sphinxext/api_rst_formatting.py b/docs/src/sphinxext/api_rst_formatting.py index 8f1aa3c5f3..6dd82de91e 100644 --- a/docs/src/sphinxext/api_rst_formatting.py +++ b/docs/src/sphinxext/api_rst_formatting.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # This script will process all .rst files that have been created by # sphinxcontrib.apidoc extension and perform minor changes, specifically: diff --git a/docs/src/whatsnew/latest.rst b/docs/src/whatsnew/latest.rst index 33a4a211d9..6e7087c687 100644 --- a/docs/src/whatsnew/latest.rst +++ b/docs/src/whatsnew/latest.rst @@ -24,7 +24,7 @@ This document explains the changes made to Iris for this release 📢 Announcements ================ -#. N/A +#. `@lbdreyer`_ relicensed Iris from LGPL-3 to BSD-3. (:pull: `5577`) ✨ Features diff --git a/lib/iris/__init__.py b/lib/iris/__init__.py index 2a3bd8a753..c29998cd6d 100644 --- a/lib/iris/__init__.py +++ b/lib/iris/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A package for handling multi-dimensional data and associated metadata. diff --git a/lib/iris/_concatenate.py b/lib/iris/_concatenate.py index 837afd73f3..554f14d914 100644 --- a/lib/iris/_concatenate.py +++ b/lib/iris/_concatenate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Automatic concatenation of multiple cubes over one or more existing dimensions. diff --git a/lib/iris/_constraints.py b/lib/iris/_constraints.py index 1884cbcbd9..82225ec516 100644 --- a/lib/iris/_constraints.py +++ b/lib/iris/_constraints.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides objects for building up expressions useful for pattern matching. diff --git a/lib/iris/_data_manager.py b/lib/iris/_data_manager.py index 486a58de45..9ea4481307 100644 --- a/lib/iris/_data_manager.py +++ b/lib/iris/_data_manager.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Management of common state and behaviour for cube and coordinate data. diff --git a/lib/iris/_deprecation.py b/lib/iris/_deprecation.py index 027e11f2dc..ad4dc5a560 100644 --- a/lib/iris/_deprecation.py +++ b/lib/iris/_deprecation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Utilities for producing runtime deprecation messages. diff --git a/lib/iris/_lazy_data.py b/lib/iris/_lazy_data.py index 4c294a7d2f..fb29f411d3 100644 --- a/lib/iris/_lazy_data.py +++ b/lib/iris/_lazy_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Routines for lazy data handling. diff --git a/lib/iris/_merge.py b/lib/iris/_merge.py index 0f748d6d34..bf22f57887 100644 --- a/lib/iris/_merge.py +++ b/lib/iris/_merge.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Automatic collation of cubes into higher-dimensional cubes. diff --git a/lib/iris/_representation/__init__.py b/lib/iris/_representation/__init__.py index f6c7fdf9b4..aec46ec927 100644 --- a/lib/iris/_representation/__init__.py +++ b/lib/iris/_representation/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Code to make printouts and other representations (e.g. html) of Iris objects. diff --git a/lib/iris/_representation/cube_printout.py b/lib/iris/_representation/cube_printout.py index ea32fc5126..9239c96949 100644 --- a/lib/iris/_representation/cube_printout.py +++ b/lib/iris/_representation/cube_printout.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides text printouts of Iris cubes. diff --git a/lib/iris/_representation/cube_summary.py b/lib/iris/_representation/cube_summary.py index 4e0fcfb1ea..1094588fa6 100644 --- a/lib/iris/_representation/cube_summary.py +++ b/lib/iris/_representation/cube_summary.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides objects describing cube summaries. """ diff --git a/lib/iris/analysis/__init__.py b/lib/iris/analysis/__init__.py index f00c3dd850..76dd52de6e 100644 --- a/lib/iris/analysis/__init__.py +++ b/lib/iris/analysis/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A package providing :class:`iris.cube.Cube` analysis support. diff --git a/lib/iris/analysis/_area_weighted.py b/lib/iris/analysis/_area_weighted.py index edead3948a..ffec82fd4e 100644 --- a/lib/iris/analysis/_area_weighted.py +++ b/lib/iris/analysis/_area_weighted.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import functools import cf_units diff --git a/lib/iris/analysis/_grid_angles.py b/lib/iris/analysis/_grid_angles.py index 4cb449ae51..86a0c38086 100644 --- a/lib/iris/analysis/_grid_angles.py +++ b/lib/iris/analysis/_grid_angles.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Code to implement vector rotation by angles, and inferring gridcell angles from coordinate points and bounds. diff --git a/lib/iris/analysis/_interpolation.py b/lib/iris/analysis/_interpolation.py index 34dcae3026..091d29d7e2 100644 --- a/lib/iris/analysis/_interpolation.py +++ b/lib/iris/analysis/_interpolation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """A collection of helpers for interpolation.""" from collections import namedtuple diff --git a/lib/iris/analysis/_regrid.py b/lib/iris/analysis/_regrid.py index 65679cd968..113c21e6e3 100644 --- a/lib/iris/analysis/_regrid.py +++ b/lib/iris/analysis/_regrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import copy import functools diff --git a/lib/iris/analysis/calculus.py b/lib/iris/analysis/calculus.py index 44b1adc580..f312aa02a0 100644 --- a/lib/iris/analysis/calculus.py +++ b/lib/iris/analysis/calculus.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Calculus operations on :class:`iris.cube.Cube` instances. diff --git a/lib/iris/analysis/cartography.py b/lib/iris/analysis/cartography.py index 0fae5bc499..a760f5ab50 100644 --- a/lib/iris/analysis/cartography.py +++ b/lib/iris/analysis/cartography.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Various utilities and numeric transformations relevant to cartography. diff --git a/lib/iris/analysis/geometry.py b/lib/iris/analysis/geometry.py index 9898f4e974..d7ed7f8840 100644 --- a/lib/iris/analysis/geometry.py +++ b/lib/iris/analysis/geometry.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Various utilities related to geometric operations. diff --git a/lib/iris/analysis/maths.py b/lib/iris/analysis/maths.py index 5e180c6ee2..a24203ba2a 100644 --- a/lib/iris/analysis/maths.py +++ b/lib/iris/analysis/maths.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Basic mathematical and statistical operations. diff --git a/lib/iris/analysis/stats.py b/lib/iris/analysis/stats.py index 711e3c5bfb..121d862adb 100644 --- a/lib/iris/analysis/stats.py +++ b/lib/iris/analysis/stats.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Statistical operations between cubes. diff --git a/lib/iris/analysis/trajectory.py b/lib/iris/analysis/trajectory.py index 2495ff12fc..99c8add123 100644 --- a/lib/iris/analysis/trajectory.py +++ b/lib/iris/analysis/trajectory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Defines a Trajectory class, and a routine to extract a sub-cube along a trajectory. diff --git a/lib/iris/aux_factory.py b/lib/iris/aux_factory.py index 323c89e3fb..61855f1188 100644 --- a/lib/iris/aux_factory.py +++ b/lib/iris/aux_factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Definitions of derived coordinates. diff --git a/lib/iris/common/__init__.py b/lib/iris/common/__init__.py index d8e8ba80ef..8526c549c3 100644 --- a/lib/iris/common/__init__.py +++ b/lib/iris/common/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A package for provisioning common Iris infrastructure. diff --git a/lib/iris/common/lenient.py b/lib/iris/common/lenient.py index 7c530087af..43dc09d5db 100644 --- a/lib/iris/common/lenient.py +++ b/lib/iris/common/lenient.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides the infrastructure to support lenient client/service behaviour. diff --git a/lib/iris/common/metadata.py b/lib/iris/common/metadata.py index 7def79f51e..8d60171331 100644 --- a/lib/iris/common/metadata.py +++ b/lib/iris/common/metadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides the infrastructure to support the common metadata API. diff --git a/lib/iris/common/mixin.py b/lib/iris/common/mixin.py index 4c19dd756b..f3b42fc02d 100644 --- a/lib/iris/common/mixin.py +++ b/lib/iris/common/mixin.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides common metadata mixin behaviour. diff --git a/lib/iris/common/resolve.py b/lib/iris/common/resolve.py index 8d5d57d4a4..83ca630353 100644 --- a/lib/iris/common/resolve.py +++ b/lib/iris/common/resolve.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides the infrastructure to support the analysis, identification and combination of metadata common between two :class:`~iris.cube.Cube` diff --git a/lib/iris/config.py b/lib/iris/config.py index 03d3d363a6..c1d1de5793 100644 --- a/lib/iris/config.py +++ b/lib/iris/config.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides access to Iris-specific configuration values. diff --git a/lib/iris/coord_categorisation.py b/lib/iris/coord_categorisation.py index b6cc79f253..87103bf6f1 100644 --- a/lib/iris/coord_categorisation.py +++ b/lib/iris/coord_categorisation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Cube functions for coordinate categorisation. diff --git a/lib/iris/coord_systems.py b/lib/iris/coord_systems.py index 3d986fefce..e62f3fbf0e 100644 --- a/lib/iris/coord_systems.py +++ b/lib/iris/coord_systems.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Definitions of coordinate systems. diff --git a/lib/iris/coords.py b/lib/iris/coords.py index d5ee2667d8..30de08d496 100644 --- a/lib/iris/coords.py +++ b/lib/iris/coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Definitions of coordinates and other dimensional metadata. diff --git a/lib/iris/cube.py b/lib/iris/cube.py index 60fdbc9c94..3a36a035c0 100644 --- a/lib/iris/cube.py +++ b/lib/iris/cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Classes for representing multi-dimensional data with metadata. diff --git a/lib/iris/exceptions.py b/lib/iris/exceptions.py index 919917a01d..c3e6b6193f 100644 --- a/lib/iris/exceptions.py +++ b/lib/iris/exceptions.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Exceptions specific to the Iris package. diff --git a/lib/iris/experimental/__init__.py b/lib/iris/experimental/__init__.py index 40ba7fdb66..4c7c62b4f5 100644 --- a/lib/iris/experimental/__init__.py +++ b/lib/iris/experimental/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Experimental code can be introduced to Iris through this package. diff --git a/lib/iris/experimental/animate.py b/lib/iris/experimental/animate.py index 1b6c2d46be..ba4e9e6050 100644 --- a/lib/iris/experimental/animate.py +++ b/lib/iris/experimental/animate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Wrapper for animating iris cubes using iris or matplotlib plotting functions diff --git a/lib/iris/experimental/raster.py b/lib/iris/experimental/raster.py index 7c95293469..6fe12ea82a 100644 --- a/lib/iris/experimental/raster.py +++ b/lib/iris/experimental/raster.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Experimental module for importing/exporting raster data from Iris cubes using the GDAL library. diff --git a/lib/iris/experimental/regrid.py b/lib/iris/experimental/regrid.py index d5fa7c6f72..f35a483b01 100644 --- a/lib/iris/experimental/regrid.py +++ b/lib/iris/experimental/regrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Regridding functions. diff --git a/lib/iris/experimental/regrid_conservative.py b/lib/iris/experimental/regrid_conservative.py index fdc23c7bc4..83e65f89af 100644 --- a/lib/iris/experimental/regrid_conservative.py +++ b/lib/iris/experimental/regrid_conservative.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Support for conservative regridding via ESMPy. diff --git a/lib/iris/experimental/representation.py b/lib/iris/experimental/representation.py index 116b340592..785bf43e63 100644 --- a/lib/iris/experimental/representation.py +++ b/lib/iris/experimental/representation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Definitions of how Iris objects should be represented. diff --git a/lib/iris/experimental/stratify.py b/lib/iris/experimental/stratify.py index a7cfbf6876..604fda38a3 100644 --- a/lib/iris/experimental/stratify.py +++ b/lib/iris/experimental/stratify.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Routines for putting data on new strata (aka. isosurfaces), often in the Z direction. diff --git a/lib/iris/experimental/ugrid/__init__.py b/lib/iris/experimental/ugrid/__init__.py index a3603a5355..30a934dfba 100644 --- a/lib/iris/experimental/ugrid/__init__.py +++ b/lib/iris/experimental/ugrid/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Infra-structure for unstructured mesh support, based on diff --git a/lib/iris/experimental/ugrid/cf.py b/lib/iris/experimental/ugrid/cf.py index 42c1cfd0a3..ba365aeb1f 100644 --- a/lib/iris/experimental/ugrid/cf.py +++ b/lib/iris/experimental/ugrid/cf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Extensions to Iris' CF variable representation to represent CF UGrid variables. diff --git a/lib/iris/experimental/ugrid/load.py b/lib/iris/experimental/ugrid/load.py index 67d1491930..c2a4b0c563 100644 --- a/lib/iris/experimental/ugrid/load.py +++ b/lib/iris/experimental/ugrid/load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Extensions to Iris' NetCDF loading to allow the construction of diff --git a/lib/iris/experimental/ugrid/mesh.py b/lib/iris/experimental/ugrid/mesh.py index af557c345c..68d208d867 100644 --- a/lib/iris/experimental/ugrid/mesh.py +++ b/lib/iris/experimental/ugrid/mesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Iris' data model representation of CF UGrid's Mesh and its constituent parts. diff --git a/lib/iris/experimental/ugrid/metadata.py b/lib/iris/experimental/ugrid/metadata.py index 44bbe04fe9..bfdcc7e114 100644 --- a/lib/iris/experimental/ugrid/metadata.py +++ b/lib/iris/experimental/ugrid/metadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ The common metadata API classes for :mod:`iris.experimental.ugrid.mesh`. diff --git a/lib/iris/experimental/ugrid/save.py b/lib/iris/experimental/ugrid/save.py index 3c42137905..f09740d98c 100644 --- a/lib/iris/experimental/ugrid/save.py +++ b/lib/iris/experimental/ugrid/save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Extensions to Iris' NetCDF saving to allow diff --git a/lib/iris/experimental/ugrid/utils.py b/lib/iris/experimental/ugrid/utils.py index a13a43d3fd..05e60c3ce7 100644 --- a/lib/iris/experimental/ugrid/utils.py +++ b/lib/iris/experimental/ugrid/utils.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Utility operations specific to unstructured data. diff --git a/lib/iris/fileformats/__init__.py b/lib/iris/fileformats/__init__.py index 86b304b82c..b74b420802 100644 --- a/lib/iris/fileformats/__init__.py +++ b/lib/iris/fileformats/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A package for converting cubes to and from specific file formats. diff --git a/lib/iris/fileformats/_ff.py b/lib/iris/fileformats/_ff.py index 5121b47976..76df5d5718 100644 --- a/lib/iris/fileformats/_ff.py +++ b/lib/iris/fileformats/_ff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides UK Met Office Fields File (FF) format specific capabilities. diff --git a/lib/iris/fileformats/_ff_cross_references.py b/lib/iris/fileformats/_ff_cross_references.py index ca41f5257f..b060ed42e9 100644 --- a/lib/iris/fileformats/_ff_cross_references.py +++ b/lib/iris/fileformats/_ff_cross_references.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Table providing UM grid-code, field-code and pseudolevel-type for (some) stash codes. Used in UM file i/o. diff --git a/lib/iris/fileformats/_nc_load_rules/__init__.py b/lib/iris/fileformats/_nc_load_rules/__init__.py index b102a082df..ca2f341249 100644 --- a/lib/iris/fileformats/_nc_load_rules/__init__.py +++ b/lib/iris/fileformats/_nc_load_rules/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Support for cube-specific CF-to-Iris translation operations. diff --git a/lib/iris/fileformats/_nc_load_rules/actions.py b/lib/iris/fileformats/_nc_load_rules/actions.py index 44ef7ac549..7db15d21ac 100644 --- a/lib/iris/fileformats/_nc_load_rules/actions.py +++ b/lib/iris/fileformats/_nc_load_rules/actions.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Replacement code for the Pyke rules. diff --git a/lib/iris/fileformats/_nc_load_rules/engine.py b/lib/iris/fileformats/_nc_load_rules/engine.py index 497c2a12c9..ec7a28777b 100644 --- a/lib/iris/fileformats/_nc_load_rules/engine.py +++ b/lib/iris/fileformats/_nc_load_rules/engine.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A simple mimic of the Pyke 'knowledge_engine', for interfacing to the routines in 'iris.fileformats.netcdf' with minimal changes to that code. diff --git a/lib/iris/fileformats/_nc_load_rules/helpers.py b/lib/iris/fileformats/_nc_load_rules/helpers.py index 9c75c0e866..71e59feda0 100644 --- a/lib/iris/fileformats/_nc_load_rules/helpers.py +++ b/lib/iris/fileformats/_nc_load_rules/helpers.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ All the pure-Python 'helper' functions which were previously included in the Pyke rules database 'fc_rules_cf.krb'. diff --git a/lib/iris/fileformats/_pp_lbproc_pairs.py b/lib/iris/fileformats/_pp_lbproc_pairs.py index 7ad6f21848..86a5f9381d 100644 --- a/lib/iris/fileformats/_pp_lbproc_pairs.py +++ b/lib/iris/fileformats/_pp_lbproc_pairs.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import itertools diff --git a/lib/iris/fileformats/_structured_array_identification.py b/lib/iris/fileformats/_structured_array_identification.py index 11c62983e3..031a5e7483 100644 --- a/lib/iris/fileformats/_structured_array_identification.py +++ b/lib/iris/fileformats/_structured_array_identification.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. r""" The purpose of this module is to provide utilities for the identification of multi-dimensional structure in a flat sequence of homogeneous objects. diff --git a/lib/iris/fileformats/abf.py b/lib/iris/fileformats/abf.py index 4dcd5ce6aa..26a1f307b2 100644 --- a/lib/iris/fileformats/abf.py +++ b/lib/iris/fileformats/abf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides ABF (and ABL) file format capabilities. diff --git a/lib/iris/fileformats/cf.py b/lib/iris/fileformats/cf.py index f412955adb..86960003db 100644 --- a/lib/iris/fileformats/cf.py +++ b/lib/iris/fileformats/cf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides the capability to load netCDF files and interpret them according to the 'NetCDF Climate and Forecast (CF) Metadata Conventions'. diff --git a/lib/iris/fileformats/dot.py b/lib/iris/fileformats/dot.py index 50c02e4d04..e3a4493fe8 100644 --- a/lib/iris/fileformats/dot.py +++ b/lib/iris/fileformats/dot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides Creation and saving of DOT graphs for a :class:`iris.cube.Cube`. diff --git a/lib/iris/fileformats/name.py b/lib/iris/fileformats/name.py index 9a779cc92d..16f71a940f 100644 --- a/lib/iris/fileformats/name.py +++ b/lib/iris/fileformats/name.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Provides NAME file format loading capabilities.""" diff --git a/lib/iris/fileformats/name_loaders.py b/lib/iris/fileformats/name_loaders.py index cb8867b6ea..7cc7c61d81 100644 --- a/lib/iris/fileformats/name_loaders.py +++ b/lib/iris/fileformats/name_loaders.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """NAME file format loading functions.""" import collections diff --git a/lib/iris/fileformats/netcdf/__init__.py b/lib/iris/fileformats/netcdf/__init__.py index b696b200ff..99817c5921 100644 --- a/lib/iris/fileformats/netcdf/__init__.py +++ b/lib/iris/fileformats/netcdf/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Module to support the loading and saving of NetCDF files, also using the CF conventions for metadata interpretation. diff --git a/lib/iris/fileformats/netcdf/_dask_locks.py b/lib/iris/fileformats/netcdf/_dask_locks.py index 15ac117a8b..b7727a1ab7 100644 --- a/lib/iris/fileformats/netcdf/_dask_locks.py +++ b/lib/iris/fileformats/netcdf/_dask_locks.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Module containing code to create locks enabling dask workers to co-operate. diff --git a/lib/iris/fileformats/netcdf/_thread_safe_nc.py b/lib/iris/fileformats/netcdf/_thread_safe_nc.py index 21c697acab..b5226b8e42 100644 --- a/lib/iris/fileformats/netcdf/_thread_safe_nc.py +++ b/lib/iris/fileformats/netcdf/_thread_safe_nc.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Module to ensure all calls to the netCDF4 library are thread-safe. diff --git a/lib/iris/fileformats/netcdf/loader.py b/lib/iris/fileformats/netcdf/loader.py index 29202af89e..030427a2b9 100644 --- a/lib/iris/fileformats/netcdf/loader.py +++ b/lib/iris/fileformats/netcdf/loader.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Module to support the loading of Iris cubes from NetCDF files, also using the CF conventions for metadata interpretation. diff --git a/lib/iris/fileformats/netcdf/saver.py b/lib/iris/fileformats/netcdf/saver.py index 011f74892d..6409d8c311 100644 --- a/lib/iris/fileformats/netcdf/saver.py +++ b/lib/iris/fileformats/netcdf/saver.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Module to support the saving of Iris cubes to a NetCDF file, also using the CF conventions for metadata interpretation. diff --git a/lib/iris/fileformats/nimrod.py b/lib/iris/fileformats/nimrod.py index 6f39ca87fa..d4e86502bd 100644 --- a/lib/iris/fileformats/nimrod.py +++ b/lib/iris/fileformats/nimrod.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Provides NIMROD file format capabilities.""" import glob diff --git a/lib/iris/fileformats/nimrod_load_rules.py b/lib/iris/fileformats/nimrod_load_rules.py index 17db0644ee..7347135422 100644 --- a/lib/iris/fileformats/nimrod_load_rules.py +++ b/lib/iris/fileformats/nimrod_load_rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Rules for converting NIMROD fields into cubes.""" import re diff --git a/lib/iris/fileformats/pp.py b/lib/iris/fileformats/pp.py index e19ba3adff..4b2b7eeae0 100644 --- a/lib/iris/fileformats/pp.py +++ b/lib/iris/fileformats/pp.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides UK Met Office Post Process (PP) format specific capabilities. diff --git a/lib/iris/fileformats/pp_load_rules.py b/lib/iris/fileformats/pp_load_rules.py index 11d03e978a..1aed25311d 100644 --- a/lib/iris/fileformats/pp_load_rules.py +++ b/lib/iris/fileformats/pp_load_rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # Historically this was auto-generated from diff --git a/lib/iris/fileformats/pp_save_rules.py b/lib/iris/fileformats/pp_save_rules.py index 998255ff2b..7db21d5f99 100644 --- a/lib/iris/fileformats/pp_save_rules.py +++ b/lib/iris/fileformats/pp_save_rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import warnings diff --git a/lib/iris/fileformats/rules.py b/lib/iris/fileformats/rules.py index d5a4b9c823..bcfd4f8323 100644 --- a/lib/iris/fileformats/rules.py +++ b/lib/iris/fileformats/rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Generalised mechanisms for metadata translation and cube construction. diff --git a/lib/iris/fileformats/um/__init__.py b/lib/iris/fileformats/um/__init__.py index c01e8301e2..ac38e45de5 100644 --- a/lib/iris/fileformats/um/__init__.py +++ b/lib/iris/fileformats/um/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides iris loading support for UM Fieldsfile-like file types, and PP. diff --git a/lib/iris/fileformats/um/_fast_load.py b/lib/iris/fileformats/um/_fast_load.py index e29025c169..ce9d183586 100644 --- a/lib/iris/fileformats/um/_fast_load.py +++ b/lib/iris/fileformats/um/_fast_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Support for "fast" loading of structured UM files in iris load functions, i.e. :meth:`iris.load` and its associates. diff --git a/lib/iris/fileformats/um/_fast_load_structured_fields.py b/lib/iris/fileformats/um/_fast_load_structured_fields.py index 64b7f8e891..2a41cf99ba 100644 --- a/lib/iris/fileformats/um/_fast_load_structured_fields.py +++ b/lib/iris/fileformats/um/_fast_load_structured_fields.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Code for fast loading of structured UM data. diff --git a/lib/iris/fileformats/um/_ff_replacement.py b/lib/iris/fileformats/um/_ff_replacement.py index 0a661081c7..33ab2fbb68 100644 --- a/lib/iris/fileformats/um/_ff_replacement.py +++ b/lib/iris/fileformats/um/_ff_replacement.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Support for UM "fieldsfile-like" files. diff --git a/lib/iris/fileformats/um/_optimal_array_structuring.py b/lib/iris/fileformats/um/_optimal_array_structuring.py index 2793d47187..3fd892808b 100644 --- a/lib/iris/fileformats/um/_optimal_array_structuring.py +++ b/lib/iris/fileformats/um/_optimal_array_structuring.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """A module to provide an optimal array structure calculation.""" diff --git a/lib/iris/fileformats/um_cf_map.py b/lib/iris/fileformats/um_cf_map.py index b93b192bbd..d2e51a3257 100644 --- a/lib/iris/fileformats/um_cf_map.py +++ b/lib/iris/fileformats/um_cf_map.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides UM/CF phenomenon translations. diff --git a/lib/iris/io/__init__.py b/lib/iris/io/__init__.py index 4e5004ff10..c8e02a40cf 100644 --- a/lib/iris/io/__init__.py +++ b/lib/iris/io/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides an interface to manage URI scheme support in iris. diff --git a/lib/iris/io/format_picker.py b/lib/iris/io/format_picker.py index 9def0ada98..d2d3b5fd41 100644 --- a/lib/iris/io/format_picker.py +++ b/lib/iris/io/format_picker.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A module to provide convenient file format identification through a combination of filename extension and file based *magic* numbers. diff --git a/lib/iris/iterate.py b/lib/iris/iterate.py index cc82433e85..cd950828be 100644 --- a/lib/iris/iterate.py +++ b/lib/iris/iterate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Cube functions for iteration in step. diff --git a/lib/iris/palette.py b/lib/iris/palette.py index 3ba17ffc97..f640cf5687 100644 --- a/lib/iris/palette.py +++ b/lib/iris/palette.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Load, configure and register color map palettes and initialise color map meta-data mappings. diff --git a/lib/iris/pandas.py b/lib/iris/pandas.py index 0d0e65d648..535bed3a64 100644 --- a/lib/iris/pandas.py +++ b/lib/iris/pandas.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provide conversion to and from Pandas data structures. diff --git a/lib/iris/plot.py b/lib/iris/plot.py index b32b45195a..977cbbcfc2 100644 --- a/lib/iris/plot.py +++ b/lib/iris/plot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Iris-specific extensions to matplotlib, mimicking the :mod:`matplotlib.pyplot` interface. diff --git a/lib/iris/quickplot.py b/lib/iris/quickplot.py index 12b5e80697..15f4cf11e2 100644 --- a/lib/iris/quickplot.py +++ b/lib/iris/quickplot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ High-level plotting extensions to :mod:`iris.plot`. diff --git a/lib/iris/symbols.py b/lib/iris/symbols.py index 3d00d3bb3b..7bbbca83a9 100644 --- a/lib/iris/symbols.py +++ b/lib/iris/symbols.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Contains symbol definitions for use with :func:`iris.plot.symbols`. diff --git a/lib/iris/tests/__init__.py b/lib/iris/tests/__init__.py index 5529b899c5..83fdb6af89 100644 --- a/lib/iris/tests/__init__.py +++ b/lib/iris/tests/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Provides testing capabilities and customisations specific to Iris. diff --git a/lib/iris/tests/experimental/__init__.py b/lib/iris/tests/experimental/__init__.py index fa2390c45b..d31931720c 100644 --- a/lib/iris/tests/experimental/__init__.py +++ b/lib/iris/tests/experimental/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Experimental code is tested in this package. diff --git a/lib/iris/tests/experimental/regrid/__init__.py b/lib/iris/tests/experimental/regrid/__init__.py index 653505e3d5..6837b12e91 100644 --- a/lib/iris/tests/experimental/regrid/__init__.py +++ b/lib/iris/tests/experimental/regrid/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Regridding code is tested in this package. diff --git a/lib/iris/tests/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py b/lib/iris/tests/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py index 07961a319a..93b1a6d3e6 100644 --- a/lib/iris/tests/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py +++ b/lib/iris/tests/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test area weighted regridding. diff --git a/lib/iris/tests/experimental/regrid/test_regrid_conservative_via_esmpy.py b/lib/iris/tests/experimental/regrid/test_regrid_conservative_via_esmpy.py index 467c040eb3..2c7bad59ff 100644 --- a/lib/iris/tests/experimental/regrid/test_regrid_conservative_via_esmpy.py +++ b/lib/iris/tests/experimental/regrid/test_regrid_conservative_via_esmpy.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Tests for :func:`iris.experimental.regrid.regrid_conservative_via_esmpy`. diff --git a/lib/iris/tests/experimental/test_raster.py b/lib/iris/tests/experimental/test_raster.py index ffd03e6f4d..736263f196 100644 --- a/lib/iris/tests/experimental/test_raster.py +++ b/lib/iris/tests/experimental/test_raster.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import iris.tests as tests # isort:skip import PIL.Image diff --git a/lib/iris/tests/graphics/__init__.py b/lib/iris/tests/graphics/__init__.py index 5ee555cb6e..3c440264f9 100755 --- a/lib/iris/tests/graphics/__init__.py +++ b/lib/iris/tests/graphics/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # !/usr/bin/env python """ Contains Iris graphic testing utilities diff --git a/lib/iris/tests/graphics/idiff.py b/lib/iris/tests/graphics/idiff.py index 4af7f4726d..1c29d4e551 100755 --- a/lib/iris/tests/graphics/idiff.py +++ b/lib/iris/tests/graphics/idiff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # !/usr/bin/env python """ Provides "diff-like" comparison of images. diff --git a/lib/iris/tests/graphics/recreate_imagerepo.py b/lib/iris/tests/graphics/recreate_imagerepo.py index 02ddaad2cb..cd4c83e9b1 100755 --- a/lib/iris/tests/graphics/recreate_imagerepo.py +++ b/lib/iris/tests/graphics/recreate_imagerepo.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # !/usr/bin/env python """ Updates imagerepo.json based on the baseline images diff --git a/lib/iris/tests/integration/__init__.py b/lib/iris/tests/integration/__init__.py index 71b911cbb0..29a99030dd 100644 --- a/lib/iris/tests/integration/__init__.py +++ b/lib/iris/tests/integration/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris` package.""" diff --git a/lib/iris/tests/integration/analysis/__init__.py b/lib/iris/tests/integration/analysis/__init__.py index 20b6250b70..4ec86f2d5a 100644 --- a/lib/iris/tests/integration/analysis/__init__.py +++ b/lib/iris/tests/integration/analysis/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris.analysis` package.""" diff --git a/lib/iris/tests/integration/analysis/test_area_weighted.py b/lib/iris/tests/integration/analysis/test_area_weighted.py index d01da79a56..49c80d7bba 100644 --- a/lib/iris/tests/integration/analysis/test_area_weighted.py +++ b/lib/iris/tests/integration/analysis/test_area_weighted.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for area weighted regridding.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/aux_factory/__init__.py b/lib/iris/tests/integration/aux_factory/__init__.py index 58ba6fb82b..3ee14d5add 100644 --- a/lib/iris/tests/integration/aux_factory/__init__.py +++ b/lib/iris/tests/integration/aux_factory/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris.aux_factory` package.""" diff --git a/lib/iris/tests/integration/aux_factory/test_OceanSigmaZFactory.py b/lib/iris/tests/integration/aux_factory/test_OceanSigmaZFactory.py index 4b2464b272..15f65d52ad 100644 --- a/lib/iris/tests/integration/aux_factory/test_OceanSigmaZFactory.py +++ b/lib/iris/tests/integration/aux_factory/test_OceanSigmaZFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integratation tests for the `iris.aux_factory.OceanSigmaZFactory` class. diff --git a/lib/iris/tests/integration/concatenate/__init__.py b/lib/iris/tests/integration/concatenate/__init__.py index fb136098ee..d15b201abe 100644 --- a/lib/iris/tests/integration/concatenate/__init__.py +++ b/lib/iris/tests/integration/concatenate/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris._concatenate` package.""" diff --git a/lib/iris/tests/integration/concatenate/test_concatenate.py b/lib/iris/tests/integration/concatenate/test_concatenate.py index 2543e2931b..9bd6bcb0c5 100644 --- a/lib/iris/tests/integration/concatenate/test_concatenate.py +++ b/lib/iris/tests/integration/concatenate/test_concatenate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for concatenating cubes with differing time coord epochs using :func:`iris.util.unify_time_units`. diff --git a/lib/iris/tests/integration/experimental/__init__.py b/lib/iris/tests/integration/experimental/__init__.py index 269cf3dd9a..79722df7a3 100644 --- a/lib/iris/tests/integration/experimental/__init__.py +++ b/lib/iris/tests/integration/experimental/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris.experimental` package.""" diff --git a/lib/iris/tests/integration/experimental/test_CubeRepresentation.py b/lib/iris/tests/integration/experimental/test_CubeRepresentation.py index 48a3e51b52..0c1386d59f 100644 --- a/lib/iris/tests/integration/experimental/test_CubeRepresentation.py +++ b/lib/iris/tests/integration/experimental/test_CubeRepresentation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for cube html representation.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/experimental/test_regrid_ProjectedUnstructured.py b/lib/iris/tests/integration/experimental/test_regrid_ProjectedUnstructured.py index 742adc8c15..4ae48fe6f9 100644 --- a/lib/iris/tests/integration/experimental/test_regrid_ProjectedUnstructured.py +++ b/lib/iris/tests/integration/experimental/test_regrid_ProjectedUnstructured.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for experimental regridding.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/experimental/test_ugrid_load.py b/lib/iris/tests/integration/experimental/test_ugrid_load.py index d94e85d2f5..1bd39695ec 100644 --- a/lib/iris/tests/integration/experimental/test_ugrid_load.py +++ b/lib/iris/tests/integration/experimental/test_ugrid_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for NetCDF-UGRID file loading. diff --git a/lib/iris/tests/integration/experimental/test_ugrid_save.py b/lib/iris/tests/integration/experimental/test_ugrid_save.py index 803ac71caa..710ed6941d 100644 --- a/lib/iris/tests/integration/experimental/test_ugrid_save.py +++ b/lib/iris/tests/integration/experimental/test_ugrid_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for NetCDF-UGRID file saving. diff --git a/lib/iris/tests/integration/fast_load/__init__.py b/lib/iris/tests/integration/fast_load/__init__.py index a94785ca58..40fc56f129 100644 --- a/lib/iris/tests/integration/fast_load/__init__.py +++ b/lib/iris/tests/integration/fast_load/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :mod:`iris.fileformats.um` fast load functions.""" diff --git a/lib/iris/tests/integration/fast_load/test_fast_load.py b/lib/iris/tests/integration/fast_load/test_fast_load.py index 318292615b..a37f1eef07 100644 --- a/lib/iris/tests/integration/fast_load/test_fast_load.py +++ b/lib/iris/tests/integration/fast_load/test_fast_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for fast-loading FF and PP files.""" # import iris tests first so that some things can be initialised diff --git a/lib/iris/tests/integration/merge/__init__.py b/lib/iris/tests/integration/merge/__init__.py index 9374976532..ae16d4fe45 100644 --- a/lib/iris/tests/integration/merge/__init__.py +++ b/lib/iris/tests/integration/merge/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris._merge` package.""" diff --git a/lib/iris/tests/integration/merge/test_merge.py b/lib/iris/tests/integration/merge/test_merge.py index f5f92a7a7d..87b52fd85d 100644 --- a/lib/iris/tests/integration/merge/test_merge.py +++ b/lib/iris/tests/integration/merge/test_merge.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for merging cubes. diff --git a/lib/iris/tests/integration/netcdf/__init__.py b/lib/iris/tests/integration/netcdf/__init__.py index f500b52520..bd62b4d988 100644 --- a/lib/iris/tests/integration/netcdf/__init__.py +++ b/lib/iris/tests/integration/netcdf/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for loading and saving netcdf files.""" diff --git a/lib/iris/tests/integration/netcdf/test__dask_locks.py b/lib/iris/tests/integration/netcdf/test__dask_locks.py index c41af1b356..70891bc40c 100644 --- a/lib/iris/tests/integration/netcdf/test__dask_locks.py +++ b/lib/iris/tests/integration/netcdf/test__dask_locks.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.fileformats.netcdf._dask_locks` package. diff --git a/lib/iris/tests/integration/netcdf/test_attributes.py b/lib/iris/tests/integration/netcdf/test_attributes.py index a73d6c7d49..aab91bcb31 100644 --- a/lib/iris/tests/integration/netcdf/test_attributes.py +++ b/lib/iris/tests/integration/netcdf/test_attributes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for attribute-related loading and saving netcdf files.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/netcdf/test_aux_factories.py b/lib/iris/tests/integration/netcdf/test_aux_factories.py index d89f275336..6b3dde6fd1 100644 --- a/lib/iris/tests/integration/netcdf/test_aux_factories.py +++ b/lib/iris/tests/integration/netcdf/test_aux_factories.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for aux-factory-related loading and saving netcdf files.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/netcdf/test_coord_systems.py b/lib/iris/tests/integration/netcdf/test_coord_systems.py index 3175664b4c..b7b21911e5 100644 --- a/lib/iris/tests/integration/netcdf/test_coord_systems.py +++ b/lib/iris/tests/integration/netcdf/test_coord_systems.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for coord-system-related loading and saving netcdf files.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/netcdf/test_delayed_save.py b/lib/iris/tests/integration/netcdf/test_delayed_save.py index 09f6235aab..d3f2ce22c4 100644 --- a/lib/iris/tests/integration/netcdf/test_delayed_save.py +++ b/lib/iris/tests/integration/netcdf/test_delayed_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for delayed saving. """ diff --git a/lib/iris/tests/integration/netcdf/test_general.py b/lib/iris/tests/integration/netcdf/test_general.py index 6214f09e7e..0fc619e4cb 100644 --- a/lib/iris/tests/integration/netcdf/test_general.py +++ b/lib/iris/tests/integration/netcdf/test_general.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for loading and saving netcdf files.""" # Import iris.tests first so that some things can be initialised before # importing anything else. diff --git a/lib/iris/tests/integration/netcdf/test_self_referencing.py b/lib/iris/tests/integration/netcdf/test_self_referencing.py index 554fabb4fc..4e5da18bbd 100644 --- a/lib/iris/tests/integration/netcdf/test_self_referencing.py +++ b/lib/iris/tests/integration/netcdf/test_self_referencing.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for iris#3367 - loading a self-referencing NetCDF file.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/netcdf/test_thread_safety.py b/lib/iris/tests/integration/netcdf/test_thread_safety.py index c5779250a2..916cbf67e1 100644 --- a/lib/iris/tests/integration/netcdf/test_thread_safety.py +++ b/lib/iris/tests/integration/netcdf/test_thread_safety.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests covering thread safety during loading/saving netcdf files. diff --git a/lib/iris/tests/integration/plot/__init__.py b/lib/iris/tests/integration/plot/__init__.py index aafa488e2d..c67303c0f3 100644 --- a/lib/iris/tests/integration/plot/__init__.py +++ b/lib/iris/tests/integration/plot/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for the :mod:`iris.plot` package.""" diff --git a/lib/iris/tests/integration/plot/test_animate.py b/lib/iris/tests/integration/plot/test_animate.py index ef19dbb108..1354ef4289 100644 --- a/lib/iris/tests/integration/plot/test_animate.py +++ b/lib/iris/tests/integration/plot/test_animate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Integration tests for :func:`iris.plot.animate`. diff --git a/lib/iris/tests/integration/plot/test_colorbar.py b/lib/iris/tests/integration/plot/test_colorbar.py index a306e6c82f..c742564c7d 100644 --- a/lib/iris/tests/integration/plot/test_colorbar.py +++ b/lib/iris/tests/integration/plot/test_colorbar.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test interaction between :mod:`iris.plot` and :func:`matplotlib.pyplot.colorbar` diff --git a/lib/iris/tests/integration/plot/test_netcdftime.py b/lib/iris/tests/integration/plot/test_netcdftime.py index d438c09bd5..2b3a59d093 100644 --- a/lib/iris/tests/integration/plot/test_netcdftime.py +++ b/lib/iris/tests/integration/plot/test_netcdftime.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test plot of time coord with non-standard calendar. diff --git a/lib/iris/tests/integration/plot/test_nzdateline.py b/lib/iris/tests/integration/plot/test_nzdateline.py index 0051549794..2c9360e9ea 100644 --- a/lib/iris/tests/integration/plot/test_nzdateline.py +++ b/lib/iris/tests/integration/plot/test_nzdateline.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test set up of limited area map extents which bridge the date line. diff --git a/lib/iris/tests/integration/plot/test_plot_2d_coords.py b/lib/iris/tests/integration/plot/test_plot_2d_coords.py index 1b95899803..673f8817d6 100644 --- a/lib/iris/tests/integration/plot/test_plot_2d_coords.py +++ b/lib/iris/tests/integration/plot/test_plot_2d_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test plots with two dimensional coordinates. diff --git a/lib/iris/tests/integration/plot/test_vector_plots.py b/lib/iris/tests/integration/plot/test_vector_plots.py index 37f506bd17..652a205fd8 100644 --- a/lib/iris/tests/integration/plot/test_vector_plots.py +++ b/lib/iris/tests/integration/plot/test_vector_plots.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test some key usages of :func:`iris.plot.quiver`. diff --git a/lib/iris/tests/integration/test_Datums.py b/lib/iris/tests/integration/test_Datums.py index 43287c7040..8325ad901a 100755 --- a/lib/iris/tests/integration/test_Datums.py +++ b/lib/iris/tests/integration/test_Datums.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :class:`iris.coord_systems` datum support.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_PartialDateTime.py b/lib/iris/tests/integration/test_PartialDateTime.py index 563af1035c..ed995beda7 100644 --- a/lib/iris/tests/integration/test_PartialDateTime.py +++ b/lib/iris/tests/integration/test_PartialDateTime.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :class:`iris.time.PartialDateTime`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_climatology.py b/lib/iris/tests/integration/test_climatology.py index 54d43858fb..f15428eb9d 100644 --- a/lib/iris/tests/integration/test_climatology.py +++ b/lib/iris/tests/integration/test_climatology.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for loading and saving netcdf files.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_cube.py b/lib/iris/tests/integration/test_cube.py index ad6666d28e..8f3ac5fb48 100644 --- a/lib/iris/tests/integration/test_cube.py +++ b/lib/iris/tests/integration/test_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :class:`iris.cube.Cube`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_ff.py b/lib/iris/tests/integration/test_ff.py index 0b0ccf4c5c..b613da385f 100644 --- a/lib/iris/tests/integration/test_ff.py +++ b/lib/iris/tests/integration/test_ff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for loading LBC fieldsfiles.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_new_axis.py b/lib/iris/tests/integration/test_new_axis.py index 876eccbb63..7c8da13ae5 100644 --- a/lib/iris/tests/integration/test_new_axis.py +++ b/lib/iris/tests/integration/test_new_axis.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :func:`iris.util.new_axis`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_pickle.py b/lib/iris/tests/integration/test_pickle.py index fa5ddbd73e..7317855512 100644 --- a/lib/iris/tests/integration/test_pickle.py +++ b/lib/iris/tests/integration/test_pickle.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for pickling things.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_pp.py b/lib/iris/tests/integration/test_pp.py index 026bdae58a..bab925bd7e 100644 --- a/lib/iris/tests/integration/test_pp.py +++ b/lib/iris/tests/integration/test_pp.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for loading and saving PP files.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_pp_constrained_load_cubes.py b/lib/iris/tests/integration/test_pp_constrained_load_cubes.py index 7ddf39b2ff..5ba8978ed1 100644 --- a/lib/iris/tests/integration/test_pp_constrained_load_cubes.py +++ b/lib/iris/tests/integration/test_pp_constrained_load_cubes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :func:`iris.fileformats.rules.load_cubes`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_regrid_equivalence.py b/lib/iris/tests/integration/test_regrid_equivalence.py index 09b47072e0..6bcb1ce403 100644 --- a/lib/iris/tests/integration/test_regrid_equivalence.py +++ b/lib/iris/tests/integration/test_regrid_equivalence.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Tests to check the validity of replacing "iris.analysis._interpolate.regrid`('nearest')" with diff --git a/lib/iris/tests/integration/test_regridding.py b/lib/iris/tests/integration/test_regridding.py index 3e87a8d0aa..44e9fef22e 100644 --- a/lib/iris/tests/integration/test_regridding.py +++ b/lib/iris/tests/integration/test_regridding.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for regridding.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_subset.py b/lib/iris/tests/integration/test_subset.py index bc2029afba..457616cee3 100644 --- a/lib/iris/tests/integration/test_subset.py +++ b/lib/iris/tests/integration/test_subset.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for subset.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/test_trajectory.py b/lib/iris/tests/integration/test_trajectory.py index a8e3acaa41..abe8fd0a2e 100644 --- a/lib/iris/tests/integration/test_trajectory.py +++ b/lib/iris/tests/integration/test_trajectory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :mod:`iris.analysis.trajectory`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/integration/um/__init__.py b/lib/iris/tests/integration/um/__init__.py index a94785ca58..40fc56f129 100644 --- a/lib/iris/tests/integration/um/__init__.py +++ b/lib/iris/tests/integration/um/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Integration tests for :mod:`iris.fileformats.um` fast load functions.""" diff --git a/lib/iris/tests/integration/um/test_fieldsfile.py b/lib/iris/tests/integration/um/test_fieldsfile.py index 56b88c2b6d..2aff7a2989 100644 --- a/lib/iris/tests/integration/um/test_fieldsfile.py +++ b/lib/iris/tests/integration/um/test_fieldsfile.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the fast loading of structured Fieldsfiles. diff --git a/lib/iris/tests/pp.py b/lib/iris/tests/pp.py index d8eb3256c4..3e07ccbd7f 100644 --- a/lib/iris/tests/pp.py +++ b/lib/iris/tests/pp.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import contextlib import os.path diff --git a/lib/iris/tests/stock/__init__.py b/lib/iris/tests/stock/__init__.py index 632dc95e20..c66c13bba5 100644 --- a/lib/iris/tests/stock/__init__.py +++ b/lib/iris/tests/stock/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A collection of routines which create standard Cubes/files for test purposes. diff --git a/lib/iris/tests/stock/_stock_2d_latlons.py b/lib/iris/tests/stock/_stock_2d_latlons.py index 4733a15305..889f8bce12 100644 --- a/lib/iris/tests/stock/_stock_2d_latlons.py +++ b/lib/iris/tests/stock/_stock_2d_latlons.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Extra stock routines for making and manipulating cubes with 2d coordinates, to mimic ocean grid data. diff --git a/lib/iris/tests/stock/mesh.py b/lib/iris/tests/stock/mesh.py index da226a3790..7726849252 100644 --- a/lib/iris/tests/stock/mesh.py +++ b/lib/iris/tests/stock/mesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Helper functions making objects for unstructured mesh testing.""" diff --git a/lib/iris/tests/stock/netcdf.py b/lib/iris/tests/stock/netcdf.py index bf93f01f6b..0f6a08b596 100644 --- a/lib/iris/tests/stock/netcdf.py +++ b/lib/iris/tests/stock/netcdf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Routines for generating synthetic NetCDF files from template headers.""" from pathlib import Path diff --git a/lib/iris/tests/system_test.py b/lib/iris/tests/system_test.py index 745163b485..440b544f94 100644 --- a/lib/iris/tests/system_test.py +++ b/lib/iris/tests/system_test.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ diff --git a/lib/iris/tests/test_abf.py b/lib/iris/tests/test_abf.py index 0b398879fc..92ed337710 100644 --- a/lib/iris/tests/test_abf.py +++ b/lib/iris/tests/test_abf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_aggregate_by.py b/lib/iris/tests/test_aggregate_by.py index e5614f6b63..e34d2ff1bd 100644 --- a/lib/iris/tests/test_aggregate_by.py +++ b/lib/iris/tests/test_aggregate_by.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_analysis.py b/lib/iris/tests/test_analysis.py index 0d88a23055..f611e25c4e 100644 --- a/lib/iris/tests/test_analysis.py +++ b/lib/iris/tests/test_analysis.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else diff --git a/lib/iris/tests/test_analysis_calculus.py b/lib/iris/tests/test_analysis_calculus.py index 86cc79092b..36e008f38e 100644 --- a/lib/iris/tests/test_analysis_calculus.py +++ b/lib/iris/tests/test_analysis_calculus.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_basic_maths.py b/lib/iris/tests/test_basic_maths.py index 4d92b9a92c..c0329b72d6 100644 --- a/lib/iris/tests/test_basic_maths.py +++ b/lib/iris/tests/test_basic_maths.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_cartography.py b/lib/iris/tests/test_cartography.py index c9647dc48e..58dccb78aa 100644 --- a/lib/iris/tests/test_cartography.py +++ b/lib/iris/tests/test_cartography.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Tests elements of the cartography module. diff --git a/lib/iris/tests/test_cdm.py b/lib/iris/tests/test_cdm.py index 0abb35c566..c748b9dfd4 100644 --- a/lib/iris/tests/test_cdm.py +++ b/lib/iris/tests/test_cdm.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test cube indexing, slicing, and extracting, and also the dot graphs. diff --git a/lib/iris/tests/test_cell.py b/lib/iris/tests/test_cell.py index 21d2603072..3925d9b0a7 100644 --- a/lib/iris/tests/test_cell.py +++ b/lib/iris/tests/test_cell.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_cf.py b/lib/iris/tests/test_cf.py index 3abd6b981b..70f24478d2 100644 --- a/lib/iris/tests/test_cf.py +++ b/lib/iris/tests/test_cf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the cf module. diff --git a/lib/iris/tests/test_coding_standards.py b/lib/iris/tests/test_coding_standards.py index 54309e3906..e3a1d2eaf3 100644 --- a/lib/iris/tests/test_coding_standards.py +++ b/lib/iris/tests/test_coding_standards.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris.tests first so that some things can be initialised before # importing anything else @@ -23,9 +22,8 @@ LICENSE_TEMPLATE = """# Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details.""" +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details.""" # Guess iris repo directory of Iris - realpath is used to mitigate against # Python finding the iris package via a symlink. diff --git a/lib/iris/tests/test_concatenate.py b/lib/iris/tests/test_concatenate.py index ec92838466..7d28d48c31 100644 --- a/lib/iris/tests/test_concatenate.py +++ b/lib/iris/tests/test_concatenate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the cube concatenate mechanism. diff --git a/lib/iris/tests/test_constraints.py b/lib/iris/tests/test_constraints.py index e568105f91..b034525ff2 100644 --- a/lib/iris/tests/test_constraints.py +++ b/lib/iris/tests/test_constraints.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the constrained cube loading mechanism. diff --git a/lib/iris/tests/test_coord_api.py b/lib/iris/tests/test_coord_api.py index ea99ae06df..5eb12ba1f3 100644 --- a/lib/iris/tests/test_coord_api.py +++ b/lib/iris/tests/test_coord_api.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/test_coordsystem.py b/lib/iris/tests/test_coordsystem.py index 2e5aef249c..e62a94f080 100644 --- a/lib/iris/tests/test_coordsystem.py +++ b/lib/iris/tests/test_coordsystem.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_cube.py b/lib/iris/tests/test_cube.py index c9b76539d2..d13db758a5 100644 --- a/lib/iris/tests/test_cube.py +++ b/lib/iris/tests/test_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_cube_to_pp.py b/lib/iris/tests/test_cube_to_pp.py index a6fc5e3149..1a6be27f9c 100644 --- a/lib/iris/tests/test_cube_to_pp.py +++ b/lib/iris/tests/test_cube_to_pp.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_ff.py b/lib/iris/tests/test_ff.py index 95f3b1493b..1abfafdac1 100644 --- a/lib/iris/tests/test_ff.py +++ b/lib/iris/tests/test_ff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the Fieldsfile file loading plugin and FFHeader. diff --git a/lib/iris/tests/test_file_load.py b/lib/iris/tests/test_file_load.py index 0fe69ff583..d0b9b2461a 100644 --- a/lib/iris/tests/test_file_load.py +++ b/lib/iris/tests/test_file_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the file loading mechanism. diff --git a/lib/iris/tests/test_file_save.py b/lib/iris/tests/test_file_save.py index 216637202a..dc901db715 100644 --- a/lib/iris/tests/test_file_save.py +++ b/lib/iris/tests/test_file_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the file saving mechanism. diff --git a/lib/iris/tests/test_hybrid.py b/lib/iris/tests/test_hybrid.py index b070f36a7a..e3e5076650 100644 --- a/lib/iris/tests/test_hybrid.py +++ b/lib/iris/tests/test_hybrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the hybrid vertical coordinate representations. diff --git a/lib/iris/tests/test_image_json.py b/lib/iris/tests/test_image_json.py index b5213156f8..75e40822dc 100644 --- a/lib/iris/tests/test_image_json.py +++ b/lib/iris/tests/test_image_json.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_imports.py b/lib/iris/tests/test_imports.py index ca0d262ec4..46c7cae723 100644 --- a/lib/iris/tests/test_imports.py +++ b/lib/iris/tests/test_imports.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_intersect.py b/lib/iris/tests/test_intersect.py index 01e9f79af5..29603f61a8 100644 --- a/lib/iris/tests/test_intersect.py +++ b/lib/iris/tests/test_intersect.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the intersection of Coords diff --git a/lib/iris/tests/test_io_init.py b/lib/iris/tests/test_io_init.py index 82da82cfa9..852944eee5 100644 --- a/lib/iris/tests/test_io_init.py +++ b/lib/iris/tests/test_io_init.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the io/__init__.py module. diff --git a/lib/iris/tests/test_iterate.py b/lib/iris/tests/test_iterate.py index 6317ef32b5..1bee6db74f 100644 --- a/lib/iris/tests/test_iterate.py +++ b/lib/iris/tests/test_iterate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the iteration of cubes in step. diff --git a/lib/iris/tests/test_lazy_aggregate_by.py b/lib/iris/tests/test_lazy_aggregate_by.py index 57b748e52f..690198c25a 100644 --- a/lib/iris/tests/test_lazy_aggregate_by.py +++ b/lib/iris/tests/test_lazy_aggregate_by.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. import unittest from iris._lazy_data import as_lazy_data diff --git a/lib/iris/tests/test_load.py b/lib/iris/tests/test_load.py index adb33924e5..1189f74b55 100644 --- a/lib/iris/tests/test_load.py +++ b/lib/iris/tests/test_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the main loading API. diff --git a/lib/iris/tests/test_mapping.py b/lib/iris/tests/test_mapping.py index 202c319b61..6ea4571630 100644 --- a/lib/iris/tests/test_mapping.py +++ b/lib/iris/tests/test_mapping.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Tests map creation. diff --git a/lib/iris/tests/test_merge.py b/lib/iris/tests/test_merge.py index e53bbfb5f3..054fd3a20b 100644 --- a/lib/iris/tests/test_merge.py +++ b/lib/iris/tests/test_merge.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the cube merging mechanism. diff --git a/lib/iris/tests/test_name.py b/lib/iris/tests/test_name.py index b4e91bafd7..51bc92c28c 100644 --- a/lib/iris/tests/test_name.py +++ b/lib/iris/tests/test_name.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Tests for NAME loading.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/test_netcdf.py b/lib/iris/tests/test_netcdf.py index 2e389942bf..793f8df876 100644 --- a/lib/iris/tests/test_netcdf.py +++ b/lib/iris/tests/test_netcdf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test CF-NetCDF file loading and saving. diff --git a/lib/iris/tests/test_nimrod.py b/lib/iris/tests/test_nimrod.py index 6d62623198..ed60a516c8 100644 --- a/lib/iris/tests/test_nimrod.py +++ b/lib/iris/tests/test_nimrod.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_peak.py b/lib/iris/tests/test_peak.py index a2b6894149..1d9dd68cc1 100644 --- a/lib/iris/tests/test_peak.py +++ b/lib/iris/tests/test_peak.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # Import iris.tests first so that some things can be initialised before # importing anything else. diff --git a/lib/iris/tests/test_pickling.py b/lib/iris/tests/test_pickling.py index 26247e795b..342b07cb03 100644 --- a/lib/iris/tests/test_pickling.py +++ b/lib/iris/tests/test_pickling.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test pickling of Iris objects. diff --git a/lib/iris/tests/test_plot.py b/lib/iris/tests/test_plot.py index 55c912f423..150d521e34 100644 --- a/lib/iris/tests/test_plot.py +++ b/lib/iris/tests/test_plot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before # importing anything else diff --git a/lib/iris/tests/test_pp_cf.py b/lib/iris/tests/test_pp_cf.py index 49bedaf1e2..44650919e1 100644 --- a/lib/iris/tests/test_pp_cf.py +++ b/lib/iris/tests/test_pp_cf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_pp_module.py b/lib/iris/tests/test_pp_module.py index ca7f1c50eb..b8606e3120 100644 --- a/lib/iris/tests/test_pp_module.py +++ b/lib/iris/tests/test_pp_module.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_pp_stash.py b/lib/iris/tests/test_pp_stash.py index 42390ab2b3..733d1697de 100644 --- a/lib/iris/tests/test_pp_stash.py +++ b/lib/iris/tests/test_pp_stash.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_pp_to_cube.py b/lib/iris/tests/test_pp_to_cube.py index eb006fb88e..d9c47c7841 100644 --- a/lib/iris/tests/test_pp_to_cube.py +++ b/lib/iris/tests/test_pp_to_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_quickplot.py b/lib/iris/tests/test_quickplot.py index df2db12de6..c42a8989fb 100644 --- a/lib/iris/tests/test_quickplot.py +++ b/lib/iris/tests/test_quickplot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Tests the high-level plotting interface. diff --git a/lib/iris/tests/test_std_names.py b/lib/iris/tests/test_std_names.py index 48d32acbee..bc50903ab6 100644 --- a/lib/iris/tests/test_std_names.py +++ b/lib/iris/tests/test_std_names.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_uri_callback.py b/lib/iris/tests/test_uri_callback.py index 67831945c5..62ae1b7fc8 100644 --- a/lib/iris/tests/test_uri_callback.py +++ b/lib/iris/tests/test_uri_callback.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. # import iris tests first so that some things can be initialised before importing anything else import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/test_util.py b/lib/iris/tests/test_util.py index d8d5d73e95..cf1dc44755 100644 --- a/lib/iris/tests/test_util.py +++ b/lib/iris/tests/test_util.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test iris.util diff --git a/lib/iris/tests/unit/__init__.py b/lib/iris/tests/unit/__init__.py index 50929c8020..c03d437279 100644 --- a/lib/iris/tests/unit/__init__.py +++ b/lib/iris/tests/unit/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris` package.""" diff --git a/lib/iris/tests/unit/analysis/__init__.py b/lib/iris/tests/unit/analysis/__init__.py index 974b4e3584..4f957bd501 100644 --- a/lib/iris/tests/unit/analysis/__init__.py +++ b/lib/iris/tests/unit/analysis/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis` package.""" diff --git a/lib/iris/tests/unit/analysis/area_weighted/__init__.py b/lib/iris/tests/unit/analysis/area_weighted/__init__.py index 464036a6dd..2cccaec14c 100644 --- a/lib/iris/tests/unit/analysis/area_weighted/__init__.py +++ b/lib/iris/tests/unit/analysis/area_weighted/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis._area_weighted` module.""" diff --git a/lib/iris/tests/unit/analysis/area_weighted/test_AreaWeightedRegridder.py b/lib/iris/tests/unit/analysis/area_weighted/test_AreaWeightedRegridder.py index ecaa028ab3..2d873ad011 100644 --- a/lib/iris/tests/unit/analysis/area_weighted/test_AreaWeightedRegridder.py +++ b/lib/iris/tests/unit/analysis/area_weighted/test_AreaWeightedRegridder.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :class:`iris.analysis._area_weighted.AreaWeightedRegridder`. diff --git a/lib/iris/tests/unit/analysis/cartography/__init__.py b/lib/iris/tests/unit/analysis/cartography/__init__.py index 625a6fa141..ff3db13198 100644 --- a/lib/iris/tests/unit/analysis/cartography/__init__.py +++ b/lib/iris/tests/unit/analysis/cartography/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.cartography` module.""" diff --git a/lib/iris/tests/unit/analysis/cartography/test__get_lon_lat_coords.py b/lib/iris/tests/unit/analysis/cartography/test__get_lon_lat_coords.py index 612e5d8ecf..23c7097902 100644 --- a/lib/iris/tests/unit/analysis/cartography/test__get_lon_lat_coords.py +++ b/lib/iris/tests/unit/analysis/cartography/test__get_lon_lat_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.analysis.cartography._get_lon_lat_coords""" import pytest diff --git a/lib/iris/tests/unit/analysis/cartography/test__quadrant_area.py b/lib/iris/tests/unit/analysis/cartography/test__quadrant_area.py index a44661292f..e5f6964e22 100644 --- a/lib/iris/tests/unit/analysis/cartography/test__quadrant_area.py +++ b/lib/iris/tests/unit/analysis/cartography/test__quadrant_area.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.analysis.cartography._quadrant_area` function""" diff --git a/lib/iris/tests/unit/analysis/cartography/test__xy_range.py b/lib/iris/tests/unit/analysis/cartography/test__xy_range.py index 009c97fc34..eeafc533e4 100644 --- a/lib/iris/tests/unit/analysis/cartography/test__xy_range.py +++ b/lib/iris/tests/unit/analysis/cartography/test__xy_range.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.analysis.cartography._xy_range`""" diff --git a/lib/iris/tests/unit/analysis/cartography/test_area_weights.py b/lib/iris/tests/unit/analysis/cartography/test_area_weights.py index 696841ddd6..29c906f0d1 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_area_weights.py +++ b/lib/iris/tests/unit/analysis/cartography/test_area_weights.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.analysis.cartography.area_weights` function""" diff --git a/lib/iris/tests/unit/analysis/cartography/test_gridcell_angles.py b/lib/iris/tests/unit/analysis/cartography/test_gridcell_angles.py index 810851362e..f3f8c81583 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_gridcell_angles.py +++ b/lib/iris/tests/unit/analysis/cartography/test_gridcell_angles.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.cartography.gridcell_angles`. diff --git a/lib/iris/tests/unit/analysis/cartography/test_project.py b/lib/iris/tests/unit/analysis/cartography/test_project.py index c00830aacc..7b52f4492e 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_project.py +++ b/lib/iris/tests/unit/analysis/cartography/test_project.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.analysis.cartography.project`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/cartography/test_rotate_grid_vectors.py b/lib/iris/tests/unit/analysis/cartography/test_rotate_grid_vectors.py index f5c882a983..389dfaeb3a 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_rotate_grid_vectors.py +++ b/lib/iris/tests/unit/analysis/cartography/test_rotate_grid_vectors.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.cartography.rotate_grid_vectors`. diff --git a/lib/iris/tests/unit/analysis/cartography/test_rotate_winds.py b/lib/iris/tests/unit/analysis/cartography/test_rotate_winds.py index 212a39bf2d..af1a2b8b42 100644 --- a/lib/iris/tests/unit/analysis/cartography/test_rotate_winds.py +++ b/lib/iris/tests/unit/analysis/cartography/test_rotate_winds.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.cartography.rotate_winds`. diff --git a/lib/iris/tests/unit/analysis/geometry/__init__.py b/lib/iris/tests/unit/analysis/geometry/__init__.py index c57f5e246a..25fa6af6cb 100644 --- a/lib/iris/tests/unit/analysis/geometry/__init__.py +++ b/lib/iris/tests/unit/analysis/geometry/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.geometry` module.""" diff --git a/lib/iris/tests/unit/analysis/geometry/test__extract_relevant_cube_slice.py b/lib/iris/tests/unit/analysis/geometry/test__extract_relevant_cube_slice.py index 2509ac1a92..bec45d8b17 100644 --- a/lib/iris/tests/unit/analysis/geometry/test__extract_relevant_cube_slice.py +++ b/lib/iris/tests/unit/analysis/geometry/test__extract_relevant_cube_slice.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.analysis.geometry._extract_relevant_cube_slice`. diff --git a/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py b/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py index 62ab1ae283..ae0e47292d 100644 --- a/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py +++ b/lib/iris/tests/unit/analysis/geometry/test_geometry_area_weights.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.analysis.geometry.geometry_area_weights` function. diff --git a/lib/iris/tests/unit/analysis/interpolation/__init__.py b/lib/iris/tests/unit/analysis/interpolation/__init__.py index 3825dacda3..01208c1aba 100644 --- a/lib/iris/tests/unit/analysis/interpolation/__init__.py +++ b/lib/iris/tests/unit/analysis/interpolation/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis._interpolation` package.""" diff --git a/lib/iris/tests/unit/analysis/interpolation/test_RectilinearInterpolator.py b/lib/iris/tests/unit/analysis/interpolation/test_RectilinearInterpolator.py index a91a08dcb8..574a25ee7d 100644 --- a/lib/iris/tests/unit/analysis/interpolation/test_RectilinearInterpolator.py +++ b/lib/iris/tests/unit/analysis/interpolation/test_RectilinearInterpolator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :class:`iris.analysis._interpolation.RectilinearInterpolator`. diff --git a/lib/iris/tests/unit/analysis/interpolation/test_get_xy_dim_coords.py b/lib/iris/tests/unit/analysis/interpolation/test_get_xy_dim_coords.py index 54e54bc304..26bc32c69f 100644 --- a/lib/iris/tests/unit/analysis/interpolation/test_get_xy_dim_coords.py +++ b/lib/iris/tests/unit/analysis/interpolation/test_get_xy_dim_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.analysis._interpolation.get_xy_dim_coords`. diff --git a/lib/iris/tests/unit/analysis/maths/__init__.py b/lib/iris/tests/unit/analysis/maths/__init__.py index c259bdeff6..c77f8ede37 100644 --- a/lib/iris/tests/unit/analysis/maths/__init__.py +++ b/lib/iris/tests/unit/analysis/maths/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.maths` module.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test__arith__dask_array.py b/lib/iris/tests/unit/analysis/maths/test__arith__dask_array.py index 11664af115..17c0aeac15 100644 --- a/lib/iris/tests/unit/analysis/maths/test__arith__dask_array.py +++ b/lib/iris/tests/unit/analysis/maths/test__arith__dask_array.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for cube arithmetic with dask arrays.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test__arith__derived_coords.py b/lib/iris/tests/unit/analysis/maths/test__arith__derived_coords.py index 57e012e1c9..85d1c363e6 100644 --- a/lib/iris/tests/unit/analysis/maths/test__arith__derived_coords.py +++ b/lib/iris/tests/unit/analysis/maths/test__arith__derived_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for cube arithmetic involving derived (i.e. factory) coords.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test__arith__meshcoords.py b/lib/iris/tests/unit/analysis/maths/test__arith__meshcoords.py index e1255ef9d8..c55d19f000 100644 --- a/lib/iris/tests/unit/analysis/maths/test__arith__meshcoords.py +++ b/lib/iris/tests/unit/analysis/maths/test__arith__meshcoords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for cube arithmetic involving MeshCoords.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test__get_dtype.py b/lib/iris/tests/unit/analysis/maths/test__get_dtype.py index 220b728b32..81cfdee3fb 100644 --- a/lib/iris/tests/unit/analysis/maths/test__get_dtype.py +++ b/lib/iris/tests/unit/analysis/maths/test__get_dtype.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.maths._get_dtype`. diff --git a/lib/iris/tests/unit/analysis/maths/test__inplace_common_checks.py b/lib/iris/tests/unit/analysis/maths/test__inplace_common_checks.py index bd81a96fbd..2c97737973 100644 --- a/lib/iris/tests/unit/analysis/maths/test__inplace_common_checks.py +++ b/lib/iris/tests/unit/analysis/maths/test__inplace_common_checks.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.maths._inplace_common_checks`. diff --git a/lib/iris/tests/unit/analysis/maths/test__output_dtype.py b/lib/iris/tests/unit/analysis/maths/test__output_dtype.py index c422e366be..3f69118e0f 100644 --- a/lib/iris/tests/unit/analysis/maths/test__output_dtype.py +++ b/lib/iris/tests/unit/analysis/maths/test__output_dtype.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.analysis.maths._output_dtype`. diff --git a/lib/iris/tests/unit/analysis/maths/test_add.py b/lib/iris/tests/unit/analysis/maths/test_add.py index 1ca7f7c244..69078b9a96 100644 --- a/lib/iris/tests/unit/analysis/maths/test_add.py +++ b/lib/iris/tests/unit/analysis/maths/test_add.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.analysis.maths.add` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test_divide.py b/lib/iris/tests/unit/analysis/maths/test_divide.py index 4bd202e037..17e5105126 100644 --- a/lib/iris/tests/unit/analysis/maths/test_divide.py +++ b/lib/iris/tests/unit/analysis/maths/test_divide.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.analysis.maths.divide` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test_multiply.py b/lib/iris/tests/unit/analysis/maths/test_multiply.py index 266342605a..945a86a4d1 100644 --- a/lib/iris/tests/unit/analysis/maths/test_multiply.py +++ b/lib/iris/tests/unit/analysis/maths/test_multiply.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.analysis.maths.multiply` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/maths/test_subtract.py b/lib/iris/tests/unit/analysis/maths/test_subtract.py index f7a9df34d0..6812176412 100644 --- a/lib/iris/tests/unit/analysis/maths/test_subtract.py +++ b/lib/iris/tests/unit/analysis/maths/test_subtract.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.analysis.maths.subtract` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/regrid/__init__.py b/lib/iris/tests/unit/analysis/regrid/__init__.py index a0a0fd0a6b..c4e5c119ea 100644 --- a/lib/iris/tests/unit/analysis/regrid/__init__.py +++ b/lib/iris/tests/unit/analysis/regrid/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis._regrid` module.""" diff --git a/lib/iris/tests/unit/analysis/regrid/test_RectilinearRegridder.py b/lib/iris/tests/unit/analysis/regrid/test_RectilinearRegridder.py index a018507fb3..4855b92332 100644 --- a/lib/iris/tests/unit/analysis/regrid/test_RectilinearRegridder.py +++ b/lib/iris/tests/unit/analysis/regrid/test_RectilinearRegridder.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis._regrid.RectilinearRegridder`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/regrid/test__CurvilinearRegridder.py b/lib/iris/tests/unit/analysis/regrid/test__CurvilinearRegridder.py index 9b0160aee4..16639c1649 100644 --- a/lib/iris/tests/unit/analysis/regrid/test__CurvilinearRegridder.py +++ b/lib/iris/tests/unit/analysis/regrid/test__CurvilinearRegridder.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis._regrid.CurvilinearRegridder`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/scipy_interpolate/__init__.py b/lib/iris/tests/unit/analysis/scipy_interpolate/__init__.py index 67218194c2..cd80f89470 100644 --- a/lib/iris/tests/unit/analysis/scipy_interpolate/__init__.py +++ b/lib/iris/tests/unit/analysis/scipy_interpolate/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.scipy_interpolate` module.""" diff --git a/lib/iris/tests/unit/analysis/scipy_interpolate/test__RegularGridInterpolator.py b/lib/iris/tests/unit/analysis/scipy_interpolate/test__RegularGridInterpolator.py index f0aa027baa..9bf9621fb4 100644 --- a/lib/iris/tests/unit/analysis/scipy_interpolate/test__RegularGridInterpolator.py +++ b/lib/iris/tests/unit/analysis/scipy_interpolate/test__RegularGridInterpolator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.analysis._scipy_interpolate._RegularGridInterpolator` class.""" diff --git a/lib/iris/tests/unit/analysis/stats/__init__.py b/lib/iris/tests/unit/analysis/stats/__init__.py index 0b896d648d..8787858158 100644 --- a/lib/iris/tests/unit/analysis/stats/__init__.py +++ b/lib/iris/tests/unit/analysis/stats/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.stats` module.""" diff --git a/lib/iris/tests/unit/analysis/stats/test_pearsonr.py b/lib/iris/tests/unit/analysis/stats/test_pearsonr.py index 63cf4e2abe..648aeb8a64 100644 --- a/lib/iris/tests/unit/analysis/stats/test_pearsonr.py +++ b/lib/iris/tests/unit/analysis/stats/test_pearsonr.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.analysis.stats.pearsonr` function.""" # Import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_Aggregator.py b/lib/iris/tests/unit/analysis/test_Aggregator.py index 45081ad07f..a7029d7d33 100644 --- a/lib/iris/tests/unit/analysis/test_Aggregator.py +++ b/lib/iris/tests/unit/analysis/test_Aggregator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.analysis.Aggregator` class instance.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_AreaWeighted.py b/lib/iris/tests/unit/analysis/test_AreaWeighted.py index 2454e0817c..1e16e4bcb2 100644 --- a/lib/iris/tests/unit/analysis/test_AreaWeighted.py +++ b/lib/iris/tests/unit/analysis/test_AreaWeighted.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis.AreaWeighted`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_COUNT.py b/lib/iris/tests/unit/analysis/test_COUNT.py index 96274f7cd0..fa51565474 100644 --- a/lib/iris/tests/unit/analysis/test_COUNT.py +++ b/lib/iris/tests/unit/analysis/test_COUNT.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.COUNT` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_Linear.py b/lib/iris/tests/unit/analysis/test_Linear.py index 27565f8c51..e98a6f585e 100644 --- a/lib/iris/tests/unit/analysis/test_Linear.py +++ b/lib/iris/tests/unit/analysis/test_Linear.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis.Linear`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_MAX.py b/lib/iris/tests/unit/analysis/test_MAX.py index 91d4daf1f0..8753c5e660 100644 --- a/lib/iris/tests/unit/analysis/test_MAX.py +++ b/lib/iris/tests/unit/analysis/test_MAX.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.MAX` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_MAX_RUN.py b/lib/iris/tests/unit/analysis/test_MAX_RUN.py index 00de383f7a..13a940f6fa 100755 --- a/lib/iris/tests/unit/analysis/test_MAX_RUN.py +++ b/lib/iris/tests/unit/analysis/test_MAX_RUN.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.MAX_RUN` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_MEAN.py b/lib/iris/tests/unit/analysis/test_MEAN.py index 18e2b4ca6c..9b8ccc1aa7 100644 --- a/lib/iris/tests/unit/analysis/test_MEAN.py +++ b/lib/iris/tests/unit/analysis/test_MEAN.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.MEAN` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_MIN.py b/lib/iris/tests/unit/analysis/test_MIN.py index f12790f0f1..06757517d3 100644 --- a/lib/iris/tests/unit/analysis/test_MIN.py +++ b/lib/iris/tests/unit/analysis/test_MIN.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.MIN` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_Nearest.py b/lib/iris/tests/unit/analysis/test_Nearest.py index f3736d2cf3..053fca1907 100644 --- a/lib/iris/tests/unit/analysis/test_Nearest.py +++ b/lib/iris/tests/unit/analysis/test_Nearest.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis.Nearest`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_PERCENTILE.py b/lib/iris/tests/unit/analysis/test_PERCENTILE.py index a29516c604..d841619ccc 100644 --- a/lib/iris/tests/unit/analysis/test_PERCENTILE.py +++ b/lib/iris/tests/unit/analysis/test_PERCENTILE.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.PERCENTILE` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_PROPORTION.py b/lib/iris/tests/unit/analysis/test_PROPORTION.py index b7118241af..dc890463ae 100644 --- a/lib/iris/tests/unit/analysis/test_PROPORTION.py +++ b/lib/iris/tests/unit/analysis/test_PROPORTION.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.PROPORTION` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_PercentileAggregator.py b/lib/iris/tests/unit/analysis/test_PercentileAggregator.py index f11cd7a8d3..0137a50019 100644 --- a/lib/iris/tests/unit/analysis/test_PercentileAggregator.py +++ b/lib/iris/tests/unit/analysis/test_PercentileAggregator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.analysis.PercentileAggregator` class instance. diff --git a/lib/iris/tests/unit/analysis/test_PointInCell.py b/lib/iris/tests/unit/analysis/test_PointInCell.py index 2570465245..83453c26d1 100644 --- a/lib/iris/tests/unit/analysis/test_PointInCell.py +++ b/lib/iris/tests/unit/analysis/test_PointInCell.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.analysis.PointInCell`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_RMS.py b/lib/iris/tests/unit/analysis/test_RMS.py index 74f309ce00..f5da089a9c 100644 --- a/lib/iris/tests/unit/analysis/test_RMS.py +++ b/lib/iris/tests/unit/analysis/test_RMS.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.RMS` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_STD_DEV.py b/lib/iris/tests/unit/analysis/test_STD_DEV.py index 978bdb4ddf..0abf4f9dc3 100644 --- a/lib/iris/tests/unit/analysis/test_STD_DEV.py +++ b/lib/iris/tests/unit/analysis/test_STD_DEV.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.STD_DEV` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_SUM.py b/lib/iris/tests/unit/analysis/test_SUM.py index 64699b442f..90be890797 100644 --- a/lib/iris/tests/unit/analysis/test_SUM.py +++ b/lib/iris/tests/unit/analysis/test_SUM.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.SUM` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_VARIANCE.py b/lib/iris/tests/unit/analysis/test_VARIANCE.py index 857bc7e1d2..e4dde970a9 100644 --- a/lib/iris/tests/unit/analysis/test_VARIANCE.py +++ b/lib/iris/tests/unit/analysis/test_VARIANCE.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.VARIANCE` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_WPERCENTILE.py b/lib/iris/tests/unit/analysis/test_WPERCENTILE.py index a59bf4ce9c..c8bcf5018e 100644 --- a/lib/iris/tests/unit/analysis/test_WPERCENTILE.py +++ b/lib/iris/tests/unit/analysis/test_WPERCENTILE.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis.PERCENTILE` aggregator.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/test_WeightedPercentileAggregator.py b/lib/iris/tests/unit/analysis/test_WeightedPercentileAggregator.py index 0cd808d1c7..a1306063b6 100644 --- a/lib/iris/tests/unit/analysis/test_WeightedPercentileAggregator.py +++ b/lib/iris/tests/unit/analysis/test_WeightedPercentileAggregator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.analysis.PercentileAggregator` class instance. diff --git a/lib/iris/tests/unit/analysis/test__axis_to_single_trailing.py b/lib/iris/tests/unit/analysis/test__axis_to_single_trailing.py index 505a00df78..f4cb94f466 100644 --- a/lib/iris/tests/unit/analysis/test__axis_to_single_trailing.py +++ b/lib/iris/tests/unit/analysis/test__axis_to_single_trailing.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :data:`iris.analysis._axis_to_single_trailing` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/analysis/trajectory/__init__.py b/lib/iris/tests/unit/analysis/trajectory/__init__.py index 55d3ebd8bc..8033fd8c30 100644 --- a/lib/iris/tests/unit/analysis/trajectory/__init__.py +++ b/lib/iris/tests/unit/analysis/trajectory/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.analysis.trajectory` module.""" diff --git a/lib/iris/tests/unit/analysis/trajectory/test_Trajectory.py b/lib/iris/tests/unit/analysis/trajectory/test_Trajectory.py index 32c41b78db..c8971a897e 100644 --- a/lib/iris/tests/unit/analysis/trajectory/test_Trajectory.py +++ b/lib/iris/tests/unit/analysis/trajectory/test_Trajectory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :class:`iris.analysis.trajectory.Trajectory`. diff --git a/lib/iris/tests/unit/analysis/trajectory/test_UnstructuredNearestNeighbourRegridder.py b/lib/iris/tests/unit/analysis/trajectory/test_UnstructuredNearestNeighbourRegridder.py index a652ceb72e..f70c3e7518 100644 --- a/lib/iris/tests/unit/analysis/trajectory/test_UnstructuredNearestNeighbourRegridder.py +++ b/lib/iris/tests/unit/analysis/trajectory/test_UnstructuredNearestNeighbourRegridder.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :class:`iris.analysis.trajectory.UnstructuredNearestNeigbourRegridder`. diff --git a/lib/iris/tests/unit/analysis/trajectory/test__nearest_neighbour_indices_ndcoords.py b/lib/iris/tests/unit/analysis/trajectory/test__nearest_neighbour_indices_ndcoords.py index 8b9e4cafa4..d30feecadd 100644 --- a/lib/iris/tests/unit/analysis/trajectory/test__nearest_neighbour_indices_ndcoords.py +++ b/lib/iris/tests/unit/analysis/trajectory/test__nearest_neighbour_indices_ndcoords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :meth:`iris.analysis.trajectory._nearest_neighbour_indices_ndcoords`. diff --git a/lib/iris/tests/unit/analysis/trajectory/test_interpolate.py b/lib/iris/tests/unit/analysis/trajectory/test_interpolate.py index f1b9711068..c156354f8f 100644 --- a/lib/iris/tests/unit/analysis/trajectory/test_interpolate.py +++ b/lib/iris/tests/unit/analysis/trajectory/test_interpolate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :meth:`iris.analysis.trajectory.interpolate`. diff --git a/lib/iris/tests/unit/aux_factory/__init__.py b/lib/iris/tests/unit/aux_factory/__init__.py index 00b9f1a3bd..621625e9da 100644 --- a/lib/iris/tests/unit/aux_factory/__init__.py +++ b/lib/iris/tests/unit/aux_factory/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.aux_factory` module.""" diff --git a/lib/iris/tests/unit/aux_factory/test_AtmosphereSigmaFactory.py b/lib/iris/tests/unit/aux_factory/test_AtmosphereSigmaFactory.py index 6e417a3b38..88da4ca463 100644 --- a/lib/iris/tests/unit/aux_factory/test_AtmosphereSigmaFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_AtmosphereSigmaFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.AtmosphereSigmaFactory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_AuxCoordFactory.py b/lib/iris/tests/unit/aux_factory/test_AuxCoordFactory.py index f8bd54093f..619a0482b6 100644 --- a/lib/iris/tests/unit/aux_factory/test_AuxCoordFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_AuxCoordFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for `iris.aux_factory.AuxCoordFactory`. diff --git a/lib/iris/tests/unit/aux_factory/test_HybridPressureFactory.py b/lib/iris/tests/unit/aux_factory/test_HybridPressureFactory.py index 48fead3aa5..31f791f10e 100644 --- a/lib/iris/tests/unit/aux_factory/test_HybridPressureFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_HybridPressureFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.HybridPressureFactory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_OceanSFactory.py b/lib/iris/tests/unit/aux_factory/test_OceanSFactory.py index f588c9f001..4bd85d1e3b 100644 --- a/lib/iris/tests/unit/aux_factory/test_OceanSFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_OceanSFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.OceanSFactory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_OceanSg1Factory.py b/lib/iris/tests/unit/aux_factory/test_OceanSg1Factory.py index 7a2f4c631c..349b4cfcb6 100644 --- a/lib/iris/tests/unit/aux_factory/test_OceanSg1Factory.py +++ b/lib/iris/tests/unit/aux_factory/test_OceanSg1Factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.OceanSg1Factory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_OceanSg2Factory.py b/lib/iris/tests/unit/aux_factory/test_OceanSg2Factory.py index 4d1f268a1e..3304cf121d 100644 --- a/lib/iris/tests/unit/aux_factory/test_OceanSg2Factory.py +++ b/lib/iris/tests/unit/aux_factory/test_OceanSg2Factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.OceanSg2Factory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_OceanSigmaFactory.py b/lib/iris/tests/unit/aux_factory/test_OceanSigmaFactory.py index 30d9647952..a03afa661d 100644 --- a/lib/iris/tests/unit/aux_factory/test_OceanSigmaFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_OceanSigmaFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.OceanSigmaFactory` class. diff --git a/lib/iris/tests/unit/aux_factory/test_OceanSigmaZFactory.py b/lib/iris/tests/unit/aux_factory/test_OceanSigmaZFactory.py index 736a883846..a191fac978 100644 --- a/lib/iris/tests/unit/aux_factory/test_OceanSigmaZFactory.py +++ b/lib/iris/tests/unit/aux_factory/test_OceanSigmaZFactory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.aux_factory.OceanSigmaZFactory` class. diff --git a/lib/iris/tests/unit/common/__init__.py b/lib/iris/tests/unit/common/__init__.py index 5380785042..60d8548652 100644 --- a/lib/iris/tests/unit/common/__init__.py +++ b/lib/iris/tests/unit/common/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.common` module.""" diff --git a/lib/iris/tests/unit/common/lenient/__init__.py b/lib/iris/tests/unit/common/lenient/__init__.py index 2a99e7a4c2..e927f5f3ac 100644 --- a/lib/iris/tests/unit/common/lenient/__init__.py +++ b/lib/iris/tests/unit/common/lenient/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.common.lenient` package.""" diff --git a/lib/iris/tests/unit/common/lenient/test_Lenient.py b/lib/iris/tests/unit/common/lenient/test_Lenient.py index 62e2b24891..6bcf366a25 100644 --- a/lib/iris/tests/unit/common/lenient/test_Lenient.py +++ b/lib/iris/tests/unit/common/lenient/test_Lenient.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.lenient.Lenient`. diff --git a/lib/iris/tests/unit/common/lenient/test__Lenient.py b/lib/iris/tests/unit/common/lenient/test__Lenient.py index 44f38d9c5a..9bff110942 100644 --- a/lib/iris/tests/unit/common/lenient/test__Lenient.py +++ b/lib/iris/tests/unit/common/lenient/test__Lenient.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.lenient._Lenient`. diff --git a/lib/iris/tests/unit/common/lenient/test__lenient_client.py b/lib/iris/tests/unit/common/lenient/test__lenient_client.py index 3a19563efc..b604e49608 100644 --- a/lib/iris/tests/unit/common/lenient/test__lenient_client.py +++ b/lib/iris/tests/unit/common/lenient/test__lenient_client.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.lenient._lenient_client`. diff --git a/lib/iris/tests/unit/common/lenient/test__lenient_service.py b/lib/iris/tests/unit/common/lenient/test__lenient_service.py index 9545b137ea..f6bafde5e7 100644 --- a/lib/iris/tests/unit/common/lenient/test__lenient_service.py +++ b/lib/iris/tests/unit/common/lenient/test__lenient_service.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.lenient._lenient_service`. diff --git a/lib/iris/tests/unit/common/lenient/test__qualname.py b/lib/iris/tests/unit/common/lenient/test__qualname.py index 3deefbf30d..6e2eb23bc6 100644 --- a/lib/iris/tests/unit/common/lenient/test__qualname.py +++ b/lib/iris/tests/unit/common/lenient/test__qualname.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.lenient._qualname`. diff --git a/lib/iris/tests/unit/common/metadata/__init__.py b/lib/iris/tests/unit/common/metadata/__init__.py index aba33c8312..973234fb21 100644 --- a/lib/iris/tests/unit/common/metadata/__init__.py +++ b/lib/iris/tests/unit/common/metadata/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.common.metadata` package.""" diff --git a/lib/iris/tests/unit/common/metadata/test_AncillaryVariableMetadata.py b/lib/iris/tests/unit/common/metadata/test_AncillaryVariableMetadata.py index 9efb43ec42..196ab48d20 100644 --- a/lib/iris/tests/unit/common/metadata/test_AncillaryVariableMetadata.py +++ b/lib/iris/tests/unit/common/metadata/test_AncillaryVariableMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata.AncillaryVariableMetadata`. diff --git a/lib/iris/tests/unit/common/metadata/test_BaseMetadata.py b/lib/iris/tests/unit/common/metadata/test_BaseMetadata.py index f4760b3051..e7434922cf 100644 --- a/lib/iris/tests/unit/common/metadata/test_BaseMetadata.py +++ b/lib/iris/tests/unit/common/metadata/test_BaseMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata.BaseMetadata`. diff --git a/lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py b/lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py index a434651206..25b287909d 100644 --- a/lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py +++ b/lib/iris/tests/unit/common/metadata/test_CellMeasureMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata.CellMeasureMetadata`. diff --git a/lib/iris/tests/unit/common/metadata/test_CoordMetadata.py b/lib/iris/tests/unit/common/metadata/test_CoordMetadata.py index e3b7486012..dac1f26f35 100644 --- a/lib/iris/tests/unit/common/metadata/test_CoordMetadata.py +++ b/lib/iris/tests/unit/common/metadata/test_CoordMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata.CoordMetadata`. diff --git a/lib/iris/tests/unit/common/metadata/test_CubeMetadata.py b/lib/iris/tests/unit/common/metadata/test_CubeMetadata.py index 848431565b..382607dca5 100644 --- a/lib/iris/tests/unit/common/metadata/test_CubeMetadata.py +++ b/lib/iris/tests/unit/common/metadata/test_CubeMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata.CubeMetadata`. diff --git a/lib/iris/tests/unit/common/metadata/test__NamedTupleMeta.py b/lib/iris/tests/unit/common/metadata/test__NamedTupleMeta.py index 155c4f99b8..1608b1c42e 100644 --- a/lib/iris/tests/unit/common/metadata/test__NamedTupleMeta.py +++ b/lib/iris/tests/unit/common/metadata/test__NamedTupleMeta.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.metadata._NamedTupleMeta`. diff --git a/lib/iris/tests/unit/common/metadata/test_hexdigest.py b/lib/iris/tests/unit/common/metadata/test_hexdigest.py index 949002af89..9a16d9252b 100644 --- a/lib/iris/tests/unit/common/metadata/test_hexdigest.py +++ b/lib/iris/tests/unit/common/metadata/test_hexdigest.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.metadata.hexdigest`. diff --git a/lib/iris/tests/unit/common/metadata/test_metadata_filter.py b/lib/iris/tests/unit/common/metadata/test_metadata_filter.py index 9c5987f235..340b6a5355 100644 --- a/lib/iris/tests/unit/common/metadata/test_metadata_filter.py +++ b/lib/iris/tests/unit/common/metadata/test_metadata_filter.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.metadata_filter`. diff --git a/lib/iris/tests/unit/common/metadata/test_metadata_manager_factory.py b/lib/iris/tests/unit/common/metadata/test_metadata_manager_factory.py index cbb29b7161..1bf342004d 100644 --- a/lib/iris/tests/unit/common/metadata/test_metadata_manager_factory.py +++ b/lib/iris/tests/unit/common/metadata/test_metadata_manager_factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.metadata.metadata_manager_factory`. diff --git a/lib/iris/tests/unit/common/mixin/__init__.py b/lib/iris/tests/unit/common/mixin/__init__.py index 493e140626..3c1f5bbc9d 100644 --- a/lib/iris/tests/unit/common/mixin/__init__.py +++ b/lib/iris/tests/unit/common/mixin/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.common.mixin` package.""" diff --git a/lib/iris/tests/unit/common/mixin/test_CFVariableMixin.py b/lib/iris/tests/unit/common/mixin/test_CFVariableMixin.py index 88a88be567..55d2ca5d79 100644 --- a/lib/iris/tests/unit/common/mixin/test_CFVariableMixin.py +++ b/lib/iris/tests/unit/common/mixin/test_CFVariableMixin.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.mixin.CFVariableMixin`. diff --git a/lib/iris/tests/unit/common/mixin/test_LimitedAttributeDict.py b/lib/iris/tests/unit/common/mixin/test_LimitedAttributeDict.py index 32c78b6697..7416bb9da5 100644 --- a/lib/iris/tests/unit/common/mixin/test_LimitedAttributeDict.py +++ b/lib/iris/tests/unit/common/mixin/test_LimitedAttributeDict.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.mixin.LimitedAttributeDict`. diff --git a/lib/iris/tests/unit/common/mixin/test__get_valid_standard_name.py b/lib/iris/tests/unit/common/mixin/test__get_valid_standard_name.py index 8fc21f2965..634eae4cf3 100644 --- a/lib/iris/tests/unit/common/mixin/test__get_valid_standard_name.py +++ b/lib/iris/tests/unit/common/mixin/test__get_valid_standard_name.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.common.mixin._get_valid_standard_name`. diff --git a/lib/iris/tests/unit/common/resolve/__init__.py b/lib/iris/tests/unit/common/resolve/__init__.py index d0b189e59d..8bfbe20970 100644 --- a/lib/iris/tests/unit/common/resolve/__init__.py +++ b/lib/iris/tests/unit/common/resolve/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.common.resolve` package.""" diff --git a/lib/iris/tests/unit/common/resolve/test_Resolve.py b/lib/iris/tests/unit/common/resolve/test_Resolve.py index db1759c5fc..182cbbd61c 100644 --- a/lib/iris/tests/unit/common/resolve/test_Resolve.py +++ b/lib/iris/tests/unit/common/resolve/test_Resolve.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.common.resolve.Resolve`. diff --git a/lib/iris/tests/unit/concatenate/__init__.py b/lib/iris/tests/unit/concatenate/__init__.py index 229476f3a6..6deaf26aa0 100644 --- a/lib/iris/tests/unit/concatenate/__init__.py +++ b/lib/iris/tests/unit/concatenate/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit-test infrastructure for the :mod:`iris._concatenate` package.""" from __future__ import annotations diff --git a/lib/iris/tests/unit/concatenate/test__CoordMetaData.py b/lib/iris/tests/unit/concatenate/test__CoordMetaData.py index 6f29e1f65f..35c3cfd17b 100644 --- a/lib/iris/tests/unit/concatenate/test__CoordMetaData.py +++ b/lib/iris/tests/unit/concatenate/test__CoordMetaData.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit-tests for :class:`iris._concatenate._CoordMetaData`.""" from __future__ import annotations diff --git a/lib/iris/tests/unit/concatenate/test__CoordSignature.py b/lib/iris/tests/unit/concatenate/test__CoordSignature.py index eb62c5ec64..c5e4850170 100644 --- a/lib/iris/tests/unit/concatenate/test__CoordSignature.py +++ b/lib/iris/tests/unit/concatenate/test__CoordSignature.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit-tests for :class:`iris._concatenate._CoordSignature`.""" from __future__ import annotations diff --git a/lib/iris/tests/unit/concatenate/test__CubeSignature.py b/lib/iris/tests/unit/concatenate/test__CubeSignature.py index cc20cdfa1f..64a25a2fad 100644 --- a/lib/iris/tests/unit/concatenate/test__CubeSignature.py +++ b/lib/iris/tests/unit/concatenate/test__CubeSignature.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test class :class:`iris._concatenate._CubeSignature`.""" # import iris tests first so that some things can be initialised diff --git a/lib/iris/tests/unit/concatenate/test_concatenate.py b/lib/iris/tests/unit/concatenate/test_concatenate.py index c2ca01f781..96932e11d4 100644 --- a/lib/iris/tests/unit/concatenate/test_concatenate.py +++ b/lib/iris/tests/unit/concatenate/test_concatenate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._concatenate.concatenate.py`.""" # import iris tests first so that some things can be initialised diff --git a/lib/iris/tests/unit/config/__init__.py b/lib/iris/tests/unit/config/__init__.py index 38806c7db8..07805d4bd7 100644 --- a/lib/iris/tests/unit/config/__init__.py +++ b/lib/iris/tests/unit/config/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.config` module.""" diff --git a/lib/iris/tests/unit/config/test_NetCDF.py b/lib/iris/tests/unit/config/test_NetCDF.py index c7f7564e4e..5b691a1dc3 100644 --- a/lib/iris/tests/unit/config/test_NetCDF.py +++ b/lib/iris/tests/unit/config/test_NetCDF.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.config.NetCDF` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/constraints/__init__.py b/lib/iris/tests/unit/constraints/__init__.py index 03a987b1a1..987e88c6e7 100644 --- a/lib/iris/tests/unit/constraints/__init__.py +++ b/lib/iris/tests/unit/constraints/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._constraints` module.""" diff --git a/lib/iris/tests/unit/constraints/test_Constraint_equality.py b/lib/iris/tests/unit/constraints/test_Constraint_equality.py index 01e61b70a7..6e0b37c3f4 100644 --- a/lib/iris/tests/unit/constraints/test_Constraint_equality.py +++ b/lib/iris/tests/unit/constraints/test_Constraint_equality.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for equality testing of different constraint types.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/constraints/test_NameConstraint.py b/lib/iris/tests/unit/constraints/test_NameConstraint.py index 46aea25331..b959b82434 100644 --- a/lib/iris/tests/unit/constraints/test_NameConstraint.py +++ b/lib/iris/tests/unit/constraints/test_NameConstraint.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris._constraints.NameConstraint` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_categorisation/__init__.py b/lib/iris/tests/unit/coord_categorisation/__init__.py index 18fe8f2482..9c60613915 100644 --- a/lib/iris/tests/unit/coord_categorisation/__init__.py +++ b/lib/iris/tests/unit/coord_categorisation/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.coord_categorisation` module.""" diff --git a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py index 0c20f16f5a..2291e677bc 100644 --- a/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py +++ b/lib/iris/tests/unit/coord_categorisation/test_add_categorised_coord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.coord_categorisation.add_categorised_coord`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_categorisation/test_add_hour.py b/lib/iris/tests/unit/coord_categorisation/test_add_hour.py index 418ac72557..caf52e9c84 100644 --- a/lib/iris/tests/unit/coord_categorisation/test_add_hour.py +++ b/lib/iris/tests/unit/coord_categorisation/test_add_hour.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test coordinate categorisation function add_hour. """ diff --git a/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py b/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py index fbc3514147..6560f65a32 100644 --- a/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py +++ b/lib/iris/tests/unit/coord_categorisation/test_coord_categorisation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test the coordinate categorisation functions. """ diff --git a/lib/iris/tests/unit/coord_systems/__init__.py b/lib/iris/tests/unit/coord_systems/__init__.py index 39d4d25f73..21f703eed0 100644 --- a/lib/iris/tests/unit/coord_systems/__init__.py +++ b/lib/iris/tests/unit/coord_systems/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.coord_systems` module.""" diff --git a/lib/iris/tests/unit/coord_systems/test_AlbersEqualArea.py b/lib/iris/tests/unit/coord_systems/test_AlbersEqualArea.py index 99a7c9f59b..26aa79ac47 100644 --- a/lib/iris/tests/unit/coord_systems/test_AlbersEqualArea.py +++ b/lib/iris/tests/unit/coord_systems/test_AlbersEqualArea.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.coord_systems.AlbersEqualArea` class. diff --git a/lib/iris/tests/unit/coord_systems/test_GeogCS.py b/lib/iris/tests/unit/coord_systems/test_GeogCS.py index f3f9531dbb..acb9029b1e 100644 --- a/lib/iris/tests/unit/coord_systems/test_GeogCS.py +++ b/lib/iris/tests/unit/coord_systems/test_GeogCS.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.GeogCS` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_Geostationary.py b/lib/iris/tests/unit/coord_systems/test_Geostationary.py index cc3c8384db..f144dca190 100644 --- a/lib/iris/tests/unit/coord_systems/test_Geostationary.py +++ b/lib/iris/tests/unit/coord_systems/test_Geostationary.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.Geostationary` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_LambertAzimuthalEqualArea.py b/lib/iris/tests/unit/coord_systems/test_LambertAzimuthalEqualArea.py index 971ee06293..b2d0c576bb 100644 --- a/lib/iris/tests/unit/coord_systems/test_LambertAzimuthalEqualArea.py +++ b/lib/iris/tests/unit/coord_systems/test_LambertAzimuthalEqualArea.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.coord_systems.LambertAzimuthalEqualArea` class. diff --git a/lib/iris/tests/unit/coord_systems/test_LambertConformal.py b/lib/iris/tests/unit/coord_systems/test_LambertConformal.py index 7ba89208b1..a9bf70ef94 100644 --- a/lib/iris/tests/unit/coord_systems/test_LambertConformal.py +++ b/lib/iris/tests/unit/coord_systems/test_LambertConformal.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.LambertConformal` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_Mercator.py b/lib/iris/tests/unit/coord_systems/test_Mercator.py index ba04c77d57..dd2f42bb2f 100644 --- a/lib/iris/tests/unit/coord_systems/test_Mercator.py +++ b/lib/iris/tests/unit/coord_systems/test_Mercator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.Mercator` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py b/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py index 0799fb881e..b17c1cc788 100644 --- a/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py +++ b/lib/iris/tests/unit/coord_systems/test_ObliqueMercator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.ObliqueMercator` class.""" from typing import List, NamedTuple diff --git a/lib/iris/tests/unit/coord_systems/test_Orthographic.py b/lib/iris/tests/unit/coord_systems/test_Orthographic.py index ffcbecf55c..a2b63ad5fe 100644 --- a/lib/iris/tests/unit/coord_systems/test_Orthographic.py +++ b/lib/iris/tests/unit/coord_systems/test_Orthographic.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.Orthographic` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_PolarStereographic.py b/lib/iris/tests/unit/coord_systems/test_PolarStereographic.py index 25f5d24800..16f3ef2e7d 100755 --- a/lib/iris/tests/unit/coord_systems/test_PolarStereographic.py +++ b/lib/iris/tests/unit/coord_systems/test_PolarStereographic.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.PolarStereographic` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py b/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py index 97921efec6..01a0640d3b 100644 --- a/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py +++ b/lib/iris/tests/unit/coord_systems/test_RotatedMercator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.RotatedMercator` class.""" import pytest diff --git a/lib/iris/tests/unit/coord_systems/test_RotatedPole.py b/lib/iris/tests/unit/coord_systems/test_RotatedPole.py index dbb7a05bca..69408a96bc 100644 --- a/lib/iris/tests/unit/coord_systems/test_RotatedPole.py +++ b/lib/iris/tests/unit/coord_systems/test_RotatedPole.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.RotatedPole` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_Stereographic.py b/lib/iris/tests/unit/coord_systems/test_Stereographic.py index acd77112c1..cdc2fee581 100644 --- a/lib/iris/tests/unit/coord_systems/test_Stereographic.py +++ b/lib/iris/tests/unit/coord_systems/test_Stereographic.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.Stereographic` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_TransverseMercator.py b/lib/iris/tests/unit/coord_systems/test_TransverseMercator.py index 95b80333c2..526985e20d 100644 --- a/lib/iris/tests/unit/coord_systems/test_TransverseMercator.py +++ b/lib/iris/tests/unit/coord_systems/test_TransverseMercator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.TransverseMercator` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coord_systems/test_VerticalPerspective.py b/lib/iris/tests/unit/coord_systems/test_VerticalPerspective.py index 56498e40fa..4cd5f215a9 100644 --- a/lib/iris/tests/unit/coord_systems/test_VerticalPerspective.py +++ b/lib/iris/tests/unit/coord_systems/test_VerticalPerspective.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coord_systems.VerticalPerspective` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coords/__init__.py b/lib/iris/tests/unit/coords/__init__.py index 10cee9db8b..a99795d4da 100644 --- a/lib/iris/tests/unit/coords/__init__.py +++ b/lib/iris/tests/unit/coords/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.coords` module. diff --git a/lib/iris/tests/unit/coords/test_AncillaryVariable.py b/lib/iris/tests/unit/coords/test_AncillaryVariable.py index e5fc8fd28a..0177bcafc4 100644 --- a/lib/iris/tests/unit/coords/test_AncillaryVariable.py +++ b/lib/iris/tests/unit/coords/test_AncillaryVariable.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coords.AncillaryVariable` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coords/test_AuxCoord.py b/lib/iris/tests/unit/coords/test_AuxCoord.py index e5147659fc..31bd54eb12 100644 --- a/lib/iris/tests/unit/coords/test_AuxCoord.py +++ b/lib/iris/tests/unit/coords/test_AuxCoord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.coords.AuxCoord` class. diff --git a/lib/iris/tests/unit/coords/test_Cell.py b/lib/iris/tests/unit/coords/test_Cell.py index 2408ec9f36..b34ffdfb91 100644 --- a/lib/iris/tests/unit/coords/test_Cell.py +++ b/lib/iris/tests/unit/coords/test_Cell.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coords.Cell` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coords/test_CellMeasure.py b/lib/iris/tests/unit/coords/test_CellMeasure.py index 0bd66c6e98..c667e012ef 100644 --- a/lib/iris/tests/unit/coords/test_CellMeasure.py +++ b/lib/iris/tests/unit/coords/test_CellMeasure.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coords.CellMeasure` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coords/test_CellMethod.py b/lib/iris/tests/unit/coords/test_CellMethod.py index 21b309a32b..274606510a 100644 --- a/lib/iris/tests/unit/coords/test_CellMethod.py +++ b/lib/iris/tests/unit/coords/test_CellMethod.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.coords.CellMethod`. """ diff --git a/lib/iris/tests/unit/coords/test_Coord.py b/lib/iris/tests/unit/coords/test_Coord.py index c548d017f2..1c9c3cce2d 100644 --- a/lib/iris/tests/unit/coords/test_Coord.py +++ b/lib/iris/tests/unit/coords/test_Coord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coords.Coord` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/coords/test_DimCoord.py b/lib/iris/tests/unit/coords/test_DimCoord.py index dd0ba48f3d..2c8ab3a7ba 100644 --- a/lib/iris/tests/unit/coords/test_DimCoord.py +++ b/lib/iris/tests/unit/coords/test_DimCoord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.coords.DimCoord` class. diff --git a/lib/iris/tests/unit/coords/test__DimensionalMetadata.py b/lib/iris/tests/unit/coords/test__DimensionalMetadata.py index 83fcbc4512..91a50a9a1c 100644 --- a/lib/iris/tests/unit/coords/test__DimensionalMetadata.py +++ b/lib/iris/tests/unit/coords/test__DimensionalMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.coords._DimensionalMetadata` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/cube/__init__.py b/lib/iris/tests/unit/cube/__init__.py index 7852593e21..8c72b2af8c 100644 --- a/lib/iris/tests/unit/cube/__init__.py +++ b/lib/iris/tests/unit/cube/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.cube` module.""" diff --git a/lib/iris/tests/unit/cube/test_Cube.py b/lib/iris/tests/unit/cube/test_Cube.py index 443c9db546..b1eed4743e 100644 --- a/lib/iris/tests/unit/cube/test_Cube.py +++ b/lib/iris/tests/unit/cube/test_Cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.Cube` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/cube/test_CubeList.py b/lib/iris/tests/unit/cube/test_CubeList.py index 86457d3888..386df39b66 100644 --- a/lib/iris/tests/unit/cube/test_CubeList.py +++ b/lib/iris/tests/unit/cube/test_CubeList.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.CubeList` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/cube/test_Cube__aggregated_by.py b/lib/iris/tests/unit/cube/test_Cube__aggregated_by.py index c591e45f63..854a0d431a 100644 --- a/lib/iris/tests/unit/cube/test_Cube__aggregated_by.py +++ b/lib/iris/tests/unit/cube/test_Cube__aggregated_by.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.Cube` class aggregated_by method.""" # import iris tests first so that some things can be initialised diff --git a/lib/iris/tests/unit/cube/test_Cube__operators.py b/lib/iris/tests/unit/cube/test_Cube__operators.py index e860c57636..0afd5a9d70 100644 --- a/lib/iris/tests/unit/cube/test_Cube__operators.py +++ b/lib/iris/tests/unit/cube/test_Cube__operators.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.Cube` class operators.""" # import iris tests first so that some things can be initialised diff --git a/lib/iris/tests/unit/data_manager/__init__.py b/lib/iris/tests/unit/data_manager/__init__.py index 41dcc0adf3..1a2ebdc944 100644 --- a/lib/iris/tests/unit/data_manager/__init__.py +++ b/lib/iris/tests/unit/data_manager/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._data_manager` module.""" diff --git a/lib/iris/tests/unit/data_manager/test_DataManager.py b/lib/iris/tests/unit/data_manager/test_DataManager.py index e73714730f..1b91e256f4 100644 --- a/lib/iris/tests/unit/data_manager/test_DataManager.py +++ b/lib/iris/tests/unit/data_manager/test_DataManager.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris._data_manager.DataManager`. diff --git a/lib/iris/tests/unit/experimental/__init__.py b/lib/iris/tests/unit/experimental/__init__.py index 438827bab2..38af9c7a97 100644 --- a/lib/iris/tests/unit/experimental/__init__.py +++ b/lib/iris/tests/unit/experimental/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental` package.""" diff --git a/lib/iris/tests/unit/experimental/raster/__init__.py b/lib/iris/tests/unit/experimental/raster/__init__.py index 5f85d810c9..408926e2d9 100644 --- a/lib/iris/tests/unit/experimental/raster/__init__.py +++ b/lib/iris/tests/unit/experimental/raster/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.raster` module.""" diff --git a/lib/iris/tests/unit/experimental/raster/test_export_geotiff.py b/lib/iris/tests/unit/experimental/raster/test_export_geotiff.py index a3b68ef761..af726c0fa9 100644 --- a/lib/iris/tests/unit/experimental/raster/test_export_geotiff.py +++ b/lib/iris/tests/unit/experimental/raster/test_export_geotiff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.experimental.raster.export_geotiff` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/experimental/regrid/__init__.py b/lib/iris/tests/unit/experimental/regrid/__init__.py index 578c15f11c..f001cccada 100644 --- a/lib/iris/tests/unit/experimental/regrid/__init__.py +++ b/lib/iris/tests/unit/experimental/regrid/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.regrid` package.""" diff --git a/lib/iris/tests/unit/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py b/lib/iris/tests/unit/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py index 5ec3c956b9..3cec1f8569 100644 --- a/lib/iris/tests/unit/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py +++ b/lib/iris/tests/unit/experimental/regrid/test_regrid_area_weighted_rectilinear_src_and_grid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.experimental.regrid.regrid_area_weighted_rectilinear_src_and_grid`. diff --git a/lib/iris/tests/unit/experimental/regrid/test_regrid_weighted_curvilinear_to_rectilinear.py b/lib/iris/tests/unit/experimental/regrid/test_regrid_weighted_curvilinear_to_rectilinear.py index b0908dd2e4..f9397da219 100644 --- a/lib/iris/tests/unit/experimental/regrid/test_regrid_weighted_curvilinear_to_rectilinear.py +++ b/lib/iris/tests/unit/experimental/regrid/test_regrid_weighted_curvilinear_to_rectilinear.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.experimental.regrid.regrid_weighted_curvilinear_to_rectilinear`. diff --git a/lib/iris/tests/unit/experimental/representation/__init__.py b/lib/iris/tests/unit/experimental/representation/__init__.py index c856263a5c..764b46ef58 100644 --- a/lib/iris/tests/unit/experimental/representation/__init__.py +++ b/lib/iris/tests/unit/experimental/representation/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.representation` package.""" diff --git a/lib/iris/tests/unit/experimental/representation/test_CubeListRepresentation.py b/lib/iris/tests/unit/experimental/representation/test_CubeListRepresentation.py index 8dc3cd7849..678eaa5fea 100644 --- a/lib/iris/tests/unit/experimental/representation/test_CubeListRepresentation.py +++ b/lib/iris/tests/unit/experimental/representation/test_CubeListRepresentation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.CubeRepresentation` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/experimental/representation/test_CubeRepresentation.py b/lib/iris/tests/unit/experimental/representation/test_CubeRepresentation.py index e6b1425110..aadb07c882 100644 --- a/lib/iris/tests/unit/experimental/representation/test_CubeRepresentation.py +++ b/lib/iris/tests/unit/experimental/representation/test_CubeRepresentation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.cube.CubeRepresentation` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/experimental/stratify/__init__.py b/lib/iris/tests/unit/experimental/stratify/__init__.py index 7218455e76..41663ee7a4 100644 --- a/lib/iris/tests/unit/experimental/stratify/__init__.py +++ b/lib/iris/tests/unit/experimental/stratify/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.stratify` package.""" diff --git a/lib/iris/tests/unit/experimental/stratify/test_relevel.py b/lib/iris/tests/unit/experimental/stratify/test_relevel.py index 6958fa9a2f..a0db398257 100644 --- a/lib/iris/tests/unit/experimental/stratify/test_relevel.py +++ b/lib/iris/tests/unit/experimental/stratify/test_relevel.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.experimental.stratify.relevel` function. diff --git a/lib/iris/tests/unit/experimental/ugrid/__init__.py b/lib/iris/tests/unit/experimental/ugrid/__init__.py index 7f55678f06..27d7921e5f 100644 --- a/lib/iris/tests/unit/experimental/ugrid/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/__init__.py b/lib/iris/tests/unit/experimental/ugrid/cf/__init__.py index 2e70f2cd5d..19507555c7 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid.cf` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py index 641b6b7b44..22914215b7 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridAuxiliaryCoordinateVariable.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.cf.CFUGridAuxiliaryCoordinateVariable` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py index 5a68a8c03f..5fae20e6fc 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridConnectivityVariable.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.cf.CFUGridConnectivityVariable` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridGroup.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridGroup.py index a3a0e665bb..1e707d9550 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridGroup.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridGroup.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.cf.CFUGridGroup` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py index 8302c30177..59d3a8aad9 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridMeshVariable.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.cf.CFUGridMeshVariable` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridReader.py b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridReader.py index d9de814b05..52eb569b43 100644 --- a/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridReader.py +++ b/lib/iris/tests/unit/experimental/ugrid/cf/test_CFUGridReader.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.cf.CFUGridGroup` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/load/__init__.py b/lib/iris/tests/unit/experimental/ugrid/load/__init__.py index 36c9108dc2..3248db6e41 100644 --- a/lib/iris/tests/unit/experimental/ugrid/load/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/load/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid.load` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/load/test_ParseUgridOnLoad.py b/lib/iris/tests/unit/experimental/ugrid/load/test_ParseUgridOnLoad.py index 1203633297..5c33b27d3e 100644 --- a/lib/iris/tests/unit/experimental/ugrid/load/test_ParseUgridOnLoad.py +++ b/lib/iris/tests/unit/experimental/ugrid/load/test_ParseUgridOnLoad.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.load.ParseUgridOnLoad` class. diff --git a/lib/iris/tests/unit/experimental/ugrid/load/test_load_mesh.py b/lib/iris/tests/unit/experimental/ugrid/load/test_load_mesh.py index 4de11d5610..8dab48ae9c 100644 --- a/lib/iris/tests/unit/experimental/ugrid/load/test_load_mesh.py +++ b/lib/iris/tests/unit/experimental/ugrid/load/test_load_mesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.experimental.ugrid.load.load_mesh` function. diff --git a/lib/iris/tests/unit/experimental/ugrid/load/test_load_meshes.py b/lib/iris/tests/unit/experimental/ugrid/load/test_load_meshes.py index 310e68248a..1ec3e65a97 100644 --- a/lib/iris/tests/unit/experimental/ugrid/load/test_load_meshes.py +++ b/lib/iris/tests/unit/experimental/ugrid/load/test_load_meshes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.experimental.ugrid.load.load_meshes` function. diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/__init__.py b/lib/iris/tests/unit/experimental/ugrid/mesh/__init__.py index 4ce979d845..d485782c11 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid.mesh` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py index 7e90555801..7251597006 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Connectivity.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.experimental.ugrid.mesh.Connectivity` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py index 64d106f97d..6784bb6e50 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`mesh` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py index b95c5f09bb..a023762d10 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_MeshCoord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.mesh.MeshCoord`. diff --git a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh__from_coords.py b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh__from_coords.py index edd34f94a1..2581bf106a 100644 --- a/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh__from_coords.py +++ b/lib/iris/tests/unit/experimental/ugrid/mesh/test_Mesh__from_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :meth:`iris.experimental.ugrid.mesh.Mesh.from_coords`. diff --git a/lib/iris/tests/unit/experimental/ugrid/metadata/__init__.py b/lib/iris/tests/unit/experimental/ugrid/metadata/__init__.py index 2d2d040c1d..a8ad2bc014 100644 --- a/lib/iris/tests/unit/experimental/ugrid/metadata/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/metadata/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid.metadata` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/metadata/test_ConnectivityMetadata.py b/lib/iris/tests/unit/experimental/ugrid/metadata/test_ConnectivityMetadata.py index af92e69b08..3b8e5ded9f 100644 --- a/lib/iris/tests/unit/experimental/ugrid/metadata/test_ConnectivityMetadata.py +++ b/lib/iris/tests/unit/experimental/ugrid/metadata/test_ConnectivityMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.metadata.ConnectivityMetadata`. diff --git a/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshCoordMetadata.py b/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshCoordMetadata.py index 5c96fb7856..0786c52934 100644 --- a/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshCoordMetadata.py +++ b/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshCoordMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.metadata.MeshCoordMetadata`. diff --git a/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshMetadata.py b/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshMetadata.py index a8b25dc2e7..ba7199b777 100644 --- a/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshMetadata.py +++ b/lib/iris/tests/unit/experimental/ugrid/metadata/test_MeshMetadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.experimental.ugrid.metadata.MeshMetadata`. diff --git a/lib/iris/tests/unit/experimental/ugrid/utils/__init__.py b/lib/iris/tests/unit/experimental/ugrid/utils/__init__.py index 135d7ee49c..ea8202f8fb 100644 --- a/lib/iris/tests/unit/experimental/ugrid/utils/__init__.py +++ b/lib/iris/tests/unit/experimental/ugrid/utils/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.experimental.ugrid.utils` package.""" diff --git a/lib/iris/tests/unit/experimental/ugrid/utils/test_recombine_submeshes.py b/lib/iris/tests/unit/experimental/ugrid/utils/test_recombine_submeshes.py index 4face700ad..a3cd91815f 100644 --- a/lib/iris/tests/unit/experimental/ugrid/utils/test_recombine_submeshes.py +++ b/lib/iris/tests/unit/experimental/ugrid/utils/test_recombine_submeshes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.experimental.ugrid.utils.recombine_submeshes`. diff --git a/lib/iris/tests/unit/fileformats/__init__.py b/lib/iris/tests/unit/fileformats/__init__.py index fa31283c87..4c0bca25c1 100644 --- a/lib/iris/tests/unit/fileformats/__init__.py +++ b/lib/iris/tests/unit/fileformats/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats` package.""" import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/unit/fileformats/abf/__init__.py b/lib/iris/tests/unit/fileformats/abf/__init__.py index aaddf427c5..5ddf017c42 100644 --- a/lib/iris/tests/unit/fileformats/abf/__init__.py +++ b/lib/iris/tests/unit/fileformats/abf/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.abf` module.""" diff --git a/lib/iris/tests/unit/fileformats/abf/test_ABFField.py b/lib/iris/tests/unit/fileformats/abf/test_ABFField.py index 98db52d3e9..b67e02ec06 100644 --- a/lib/iris/tests/unit/fileformats/abf/test_ABFField.py +++ b/lib/iris/tests/unit/fileformats/abf/test_ABFField.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.abf.ABFField` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/cf/__init__.py b/lib/iris/tests/unit/fileformats/cf/__init__.py index 1bff79368b..6bc562f922 100644 --- a/lib/iris/tests/unit/fileformats/cf/__init__.py +++ b/lib/iris/tests/unit/fileformats/cf/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.cf` module.""" diff --git a/lib/iris/tests/unit/fileformats/cf/test_CFGroup.py b/lib/iris/tests/unit/fileformats/cf/test_CFGroup.py index bfc2d586ef..48f383d7f7 100644 --- a/lib/iris/tests/unit/fileformats/cf/test_CFGroup.py +++ b/lib/iris/tests/unit/fileformats/cf/test_CFGroup.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.fileformats.cf.CFGroup` class.""" from unittest.mock import MagicMock diff --git a/lib/iris/tests/unit/fileformats/cf/test_CFReader.py b/lib/iris/tests/unit/fileformats/cf/test_CFReader.py index 9e5cf9b7a5..4829d03dbb 100644 --- a/lib/iris/tests/unit/fileformats/cf/test_CFReader.py +++ b/lib/iris/tests/unit/fileformats/cf/test_CFReader.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.fileformats.cf.CFReader` class. diff --git a/lib/iris/tests/unit/fileformats/dot/__init__.py b/lib/iris/tests/unit/fileformats/dot/__init__.py index 0dbc3ad4c6..afbfed17d8 100644 --- a/lib/iris/tests/unit/fileformats/dot/__init__.py +++ b/lib/iris/tests/unit/fileformats/dot/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :mod:`iris.fileformats.dot`.""" diff --git a/lib/iris/tests/unit/fileformats/dot/test__dot_path.py b/lib/iris/tests/unit/fileformats/dot/test__dot_path.py index 1111e8bc83..a29eb625d0 100644 --- a/lib/iris/tests/unit/fileformats/dot/test__dot_path.py +++ b/lib/iris/tests/unit/fileformats/dot/test__dot_path.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.fileformats.dot._dot_path`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/__init__.py b/lib/iris/tests/unit/fileformats/ff/__init__.py index 4d13a18520..945b4f46b5 100644 --- a/lib/iris/tests/unit/fileformats/ff/__init__.py +++ b/lib/iris/tests/unit/fileformats/ff/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.ff` module.""" diff --git a/lib/iris/tests/unit/fileformats/ff/test_ArakawaC.py b/lib/iris/tests/unit/fileformats/ff/test_ArakawaC.py index d37b854405..5e731632c6 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_ArakawaC.py +++ b/lib/iris/tests/unit/fileformats/ff/test_ArakawaC.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformat.ff.ArakawaC`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/test_ENDGame.py b/lib/iris/tests/unit/fileformats/ff/test_ENDGame.py index 696dacd672..98bc42ddf3 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_ENDGame.py +++ b/lib/iris/tests/unit/fileformats/ff/test_ENDGame.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformat.ff.ENDGame`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py b/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py index 16943c0c15..15bb61e230 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py +++ b/lib/iris/tests/unit/fileformats/ff/test_FF2PP.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.fileformat.ff.FF2PP` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py b/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py index 72d522ec85..cbbc81dd4b 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py +++ b/lib/iris/tests/unit/fileformats/ff/test_FFHeader.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformat.ff.FFHeader`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/test_Grid.py b/lib/iris/tests/unit/fileformats/ff/test_Grid.py index b20c85b9a8..1bb9688c1a 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_Grid.py +++ b/lib/iris/tests/unit/fileformats/ff/test_Grid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformat.ff.Grid`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/ff/test_NewDynamics.py b/lib/iris/tests/unit/fileformats/ff/test_NewDynamics.py index 5f0d64da71..f3cc41aa82 100644 --- a/lib/iris/tests/unit/fileformats/ff/test_NewDynamics.py +++ b/lib/iris/tests/unit/fileformats/ff/test_NewDynamics.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformat.ff.NewDynamics`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/name_loaders/__init__.py b/lib/iris/tests/unit/fileformats/name_loaders/__init__.py index 751801a176..e9af5168b8 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/__init__.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.name_loaders` package.""" diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py b/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py index 624837c19d..2ebde5782f 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__build_cell_methods.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.name_loaders._build_cell_methods`. diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__build_lat_lon_for_NAME_timeseries.py b/lib/iris/tests/unit/fileformats/name_loaders/test__build_lat_lon_for_NAME_timeseries.py index 5954823c54..e71a31f10f 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__build_lat_lon_for_NAME_timeseries.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__build_lat_lon_for_NAME_timeseries.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.analysis.name_loaders._build_lat_lon_for_NAME_timeseries`. diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__calc_integration_period.py b/lib/iris/tests/unit/fileformats/name_loaders/test__calc_integration_period.py index c4cbde8c14..20ef79cec3 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__calc_integration_period.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__calc_integration_period.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.name_loaders.__calc_integration_period`. diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__cf_height_from_name.py b/lib/iris/tests/unit/fileformats/name_loaders/test__cf_height_from_name.py index 078f65d572..ea09d40acb 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__cf_height_from_name.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__cf_height_from_name.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.analysis.name_loaders._cf_height_from_name` function. diff --git a/lib/iris/tests/unit/fileformats/name_loaders/test__generate_cubes.py b/lib/iris/tests/unit/fileformats/name_loaders/test__generate_cubes.py index d50a7fdad1..2eea25a26d 100644 --- a/lib/iris/tests/unit/fileformats/name_loaders/test__generate_cubes.py +++ b/lib/iris/tests/unit/fileformats/name_loaders/test__generate_cubes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.analysis.name_loaders._generate_cubes`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/__init__.py b/lib/iris/tests/unit/fileformats/nc_load_rules/__init__.py index 2ea22c420b..a29f504b7e 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/__init__.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.netcdf._nc_load_rules` . diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py index 38882810d2..efb5e55be8 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats._nc_load_rules.actions`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__grid_mappings.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__grid_mappings.py index 99a1b66ae4..906ba33f9c 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__grid_mappings.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__grid_mappings.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the engine.activate() call within the `iris.fileformats.netcdf._load_cube` function. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__hybrid_formulae.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__hybrid_formulae.py index d962fc2758..582ab7e200 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__hybrid_formulae.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__hybrid_formulae.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the engine.activate() call within the `iris.fileformats.netcdf._load_cube` function. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__latlon_dimcoords.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__latlon_dimcoords.py index dfa862c4d1..a8c7d2cc5f 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__latlon_dimcoords.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__latlon_dimcoords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the engine.activate() call within the `iris.fileformats.netcdf._load_cube` function. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__miscellaneous.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__miscellaneous.py index ffe00c8c19..a1a93056cb 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__miscellaneous.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__miscellaneous.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the engine.activate() call within the `iris.fileformats.netcdf._load_cube` function. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__time_coords.py b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__time_coords.py index 59ffa30684..c27d2445e9 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__time_coords.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/actions/test__time_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the engine.activate() call within the `iris.fileformats.netcdf._load_cube` function. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/engine/__init__.py b/lib/iris/tests/unit/fileformats/nc_load_rules/engine/__init__.py index e6508bea85..127ebbf68b 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/engine/__init__.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/engine/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.netcdf._nc_load_rules.engine` . diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/engine/test_engine.py b/lib/iris/tests/unit/fileformats/nc_load_rules/engine/test_engine.py index df5fbd4922..994d2958c2 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/engine/test_engine.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/engine/test_engine.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.fileformats._nc_load_rules.engine` module. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/__init__.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/__init__.py index 69a536b9ae..62bc3a6c9f 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/__init__.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.netcdf._nc_load_rules.helpers` . diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_albers_equal_area_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_albers_equal_area_coordinate_system.py index c040d43ca0..b6e9ba954c 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_albers_equal_area_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_albers_equal_area_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_albers_equal_area_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_ancil_var.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_ancil_var.py index 87070e00ba..2d1010166f 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_ancil_var.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_ancil_var.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.build_ancil_var`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_auxiliary_coordinate.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_auxiliary_coordinate.py index 369f92f238..fd500b4831 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_auxiliary_coordinate.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_auxiliary_coordinate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_auxilliary_coordinate`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cell_measure.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cell_measure.py index d0421186b4..ee66f8b267 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cell_measure.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cell_measure.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.build_cell_measure`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cube_metadata.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cube_metadata.py index a13fa6cca0..e2297be69e 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cube_metadata.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_cube_metadata.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers\ build_cube_metadata`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_dimension_coordinate.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_dimension_coordinate.py index bc13975441..4f19d44a2a 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_dimension_coordinate.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_dimension_coordinate.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_dimension_coordinate`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_geostationary_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_geostationary_coordinate_system.py index 28b3d8ab9a..a3efcb0dc4 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_geostationary_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_geostationary_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_geostationary_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_azimuthal_equal_area_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_azimuthal_equal_area_coordinate_system.py index 05185a4cf5..8d5b46c6bb 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_azimuthal_equal_area_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_azimuthal_equal_area_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_lambert_azimuthal_equal_area_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_conformal_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_conformal_coordinate_system.py index 22bb7149b1..9232e146cb 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_conformal_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_lambert_conformal_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_lambert_conformal_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_mercator_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_mercator_coordinate_system.py index ab61d3b1b2..4958eccbfd 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_mercator_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_mercator_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_mercator_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py index b11d8d3cca..c377cf7d1b 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_oblique_mercator_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.build_oblique_mercator_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_polar_stereographic_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_polar_stereographic_coordinate_system.py index 09cfde9d5b..a20443005c 100755 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_polar_stereographic_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_polar_stereographic_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_polar_stereographic_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_stereographic_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_stereographic_coordinate_system.py index 3796aeebab..a483390e36 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_stereographic_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_stereographic_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_sterographic_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_transverse_mercator_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_transverse_mercator_coordinate_system.py index 0096c5df4b..ae881259fe 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_transverse_mercator_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_transverse_mercator_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_transverse_mercator_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_verticalp_coordinate_system.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_verticalp_coordinate_system.py index f34992c2be..21906ba644 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_verticalp_coordinate_system.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_build_verticalp_coordinate_system.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ build_vertical_perspective_coordinate_system`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_attr_units.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_attr_units.py index a159ef81a8..d80b33f002 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_attr_units.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_attr_units.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ get_attr_units`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_cf_bounds_var.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_cf_bounds_var.py index ff9c51f40b..7d0dc4952c 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_cf_bounds_var.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_cf_bounds_var.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ get_cf_bounds_var`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_names.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_names.py index 3c7c496b54..b6a0f3d3c1 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_names.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_get_names.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ get_names`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_mercator_parameters.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_mercator_parameters.py index bb94adc72e..9dc31ba490 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_mercator_parameters.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_mercator_parameters.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ has_supported_mercator_parameters`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_polar_stereographic_parameters.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_polar_stereographic_parameters.py index 6e6d6e4e81..faffefd8f2 100755 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_polar_stereographic_parameters.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_has_supported_polar_stereographic_parameters.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ has_supported_polar_stereographic_parameters`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py index 9935a6e5ae..a58413d399 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_parse_cell_methods.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.netcdf.parse_cell_methods`. diff --git a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_reorder_bounds_data.py b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_reorder_bounds_data.py index 1ee0cfbf2e..1e9d13110e 100644 --- a/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_reorder_bounds_data.py +++ b/lib/iris/tests/unit/fileformats/nc_load_rules/helpers/test_reorder_bounds_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.fileformats._nc_load_rules.helpers.\ reorder_bounds_data`. diff --git a/lib/iris/tests/unit/fileformats/netcdf/__init__.py b/lib/iris/tests/unit/fileformats/netcdf/__init__.py index 732094f67a..961f7779a8 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/__init__.py +++ b/lib/iris/tests/unit/fileformats/netcdf/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.netcdf` module.""" diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/__init__.py b/lib/iris/tests/unit/fileformats/netcdf/loader/__init__.py index 7c2ae96158..67d3fe0fc6 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/__init__.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.netcdf.loader` module.""" diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test__get_cf_var_data.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test__get_cf_var_data.py index 6c487d74e7..3c3cbff7f4 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test__get_cf_var_data.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test__get_cf_var_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.netcdf._get_cf_var_data` function.""" # Import iris.tests first so that some things can be initialised before # importing anything else. diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py index c15c8737fd..01c6838241 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_aux_factory.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.netcdf._load_aux_factory` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_cube.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_cube.py index b67c546aa0..25beca8f59 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_cube.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test__load_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.netcdf._load_cube` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test__translate_constraints_to_var_callback.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test__translate_constraints_to_var_callback.py index 77bb0d3950..2522392c21 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test__translate_constraints_to_var_callback.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test__translate_constraints_to_var_callback.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.netcdf._translate_constraints_to_var_callback`. diff --git a/lib/iris/tests/unit/fileformats/netcdf/loader/test_load_cubes.py b/lib/iris/tests/unit/fileformats/netcdf/loader/test_load_cubes.py index 1a2ef1d29d..77c1da2d1c 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/loader/test_load_cubes.py +++ b/lib/iris/tests/unit/fileformats/netcdf/loader/test_load_cubes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.fileformats.netcdf.load_cubes` function. diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/__init__.py b/lib/iris/tests/unit/fileformats/netcdf/saver/__init__.py index a68d5fc5d0..53d42128f6 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/__init__.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.netcdf.saver` module.""" diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py index 8253e59368..e4d8488a76 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :class:`iris.fileformats.netcdf.Saver` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy.py index e1211dc276..2e7091c43b 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Mirror of :mod:`iris.tests.unit.fileformats.netcdf.test_Saver`, but with lazy arrays.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py index da5f2d88fa..10c5dbecf4 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__lazy_stream_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :meth:`iris.fileformats.netcdf.saver.Saver._lazy_stream_data`. diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py index 27d9709fe6..8177e0c299 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_Saver__ugrid.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :class:`iris.fileformats.netcdf.Saver` class. diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test__data_fillvalue_check.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test__data_fillvalue_check.py index 95a518e4e5..9068837b2c 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test__data_fillvalue_check.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test__data_fillvalue_check.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.netcdf.saver._data_fillvalue_check`. diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py index 317f75bb8c..42119094a7 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test__fillvalue_report.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.netcdf.saver._fillvalue_report`. """ diff --git a/lib/iris/tests/unit/fileformats/netcdf/saver/test_save.py b/lib/iris/tests/unit/fileformats/netcdf/saver/test_save.py index 68049b57fc..620bc64461 100644 --- a/lib/iris/tests/unit/fileformats/netcdf/saver/test_save.py +++ b/lib/iris/tests/unit/fileformats/netcdf/saver/test_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :func:`iris.fileformats.netcdf.save` function.""" # Import iris.tests first so that some things can be initialised before # importing anything else. diff --git a/lib/iris/tests/unit/fileformats/nimrod_load_rules/__init__.py b/lib/iris/tests/unit/fileformats/nimrod_load_rules/__init__.py index 429ee9ce1f..928c9d9361 100644 --- a/lib/iris/tests/unit/fileformats/nimrod_load_rules/__init__.py +++ b/lib/iris/tests/unit/fileformats/nimrod_load_rules/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.nimrod_load_rules` module.""" diff --git a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_units.py b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_units.py index a15337f849..c15a721ad3 100644 --- a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_units.py +++ b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_units.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.fileformats.nimrod_load_rules.units` function. diff --git a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py index 2279bcffc3..4f1b948839 100644 --- a/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py +++ b/lib/iris/tests/unit/fileformats/nimrod_load_rules/test_vertical_coord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.fileformats.nimrod_load_rules.vertical_coord` function. diff --git a/lib/iris/tests/unit/fileformats/pp/__init__.py b/lib/iris/tests/unit/fileformats/pp/__init__.py index f309b6848a..7eedc830d9 100644 --- a/lib/iris/tests/unit/fileformats/pp/__init__.py +++ b/lib/iris/tests/unit/fileformats/pp/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.pp` module.""" diff --git a/lib/iris/tests/unit/fileformats/pp/test_PPDataProxy.py b/lib/iris/tests/unit/fileformats/pp/test_PPDataProxy.py index d70e573296..4d963e7f08 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_PPDataProxy.py +++ b/lib/iris/tests/unit/fileformats/pp/test_PPDataProxy.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.PPDataProxy` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_PPField.py b/lib/iris/tests/unit/fileformats/pp/test_PPField.py index f2bbf97a80..1a49f57712 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_PPField.py +++ b/lib/iris/tests/unit/fileformats/pp/test_PPField.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.PPField` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test__convert_constraints.py b/lib/iris/tests/unit/fileformats/pp/test__convert_constraints.py index 514e326393..cca9bb4641 100644 --- a/lib/iris/tests/unit/fileformats/pp/test__convert_constraints.py +++ b/lib/iris/tests/unit/fileformats/pp/test__convert_constraints.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.load` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test__create_field_data.py b/lib/iris/tests/unit/fileformats/pp/test__create_field_data.py index 16d2b500a5..ab80332186 100644 --- a/lib/iris/tests/unit/fileformats/pp/test__create_field_data.py +++ b/lib/iris/tests/unit/fileformats/pp/test__create_field_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp._create_field_data` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test__data_bytes_to_shaped_array.py b/lib/iris/tests/unit/fileformats/pp/test__data_bytes_to_shaped_array.py index 73913c6219..45635af391 100644 --- a/lib/iris/tests/unit/fileformats/pp/test__data_bytes_to_shaped_array.py +++ b/lib/iris/tests/unit/fileformats/pp/test__data_bytes_to_shaped_array.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.fileformats.pp._data_bytes_to_shaped_array` function. diff --git a/lib/iris/tests/unit/fileformats/pp/test__field_gen.py b/lib/iris/tests/unit/fileformats/pp/test__field_gen.py index 31ac4f6b19..80b90fc8d2 100644 --- a/lib/iris/tests/unit/fileformats/pp/test__field_gen.py +++ b/lib/iris/tests/unit/fileformats/pp/test__field_gen.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp._field_gen` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test__interpret_field.py b/lib/iris/tests/unit/fileformats/pp/test__interpret_field.py index 0b83cade76..aa03c068ce 100644 --- a/lib/iris/tests/unit/fileformats/pp/test__interpret_field.py +++ b/lib/iris/tests/unit/fileformats/pp/test__interpret_field.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp._interpret_field` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_as_fields.py b/lib/iris/tests/unit/fileformats/pp/test_as_fields.py index 3ff228e106..213eb6c9c4 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_as_fields.py +++ b/lib/iris/tests/unit/fileformats/pp/test_as_fields.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.as_fields` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_load.py b/lib/iris/tests/unit/fileformats/pp/test_load.py index 77da1288c2..e802b36c0e 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_load.py +++ b/lib/iris/tests/unit/fileformats/pp/test_load.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.load` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_save.py b/lib/iris/tests/unit/fileformats/pp/test_save.py index 8200259cca..fc0535f428 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_save.py +++ b/lib/iris/tests/unit/fileformats/pp/test_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.save` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_save_fields.py b/lib/iris/tests/unit/fileformats/pp/test_save_fields.py index fdd470cb47..2eaebc0059 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_save_fields.py +++ b/lib/iris/tests/unit/fileformats/pp/test_save_fields.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.save_fields` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp/test_save_pairs_from_cube.py b/lib/iris/tests/unit/fileformats/pp/test_save_pairs_from_cube.py index cdd3c9cd49..5ab3f7c480 100644 --- a/lib/iris/tests/unit/fileformats/pp/test_save_pairs_from_cube.py +++ b/lib/iris/tests/unit/fileformats/pp/test_save_pairs_from_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.pp.save_pairs_from_cube` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/__init__.py b/lib/iris/tests/unit/fileformats/pp_load_rules/__init__.py index 70d28f7c09..c8361feae4 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/__init__.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.pp_load_rules` module.""" diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__all_other_rules.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__all_other_rules.py index e194e240c6..591bfda857 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__all_other_rules.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__all_other_rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the `iris.fileformats.pp_load_rules._all_other_rules` function. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__collapse_degenerate_points_and_bounds.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__collapse_degenerate_points_and_bounds.py index c9c4821e0a..c87e199956 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__collapse_degenerate_points_and_bounds.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__collapse_degenerate_points_and_bounds.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._collapse_degenerate_points_and_bounds`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_pseudo_level_coords.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_pseudo_level_coords.py index d3046ee63e..803e47227f 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_pseudo_level_coords.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_pseudo_level_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._convert_pseudo_level_coords`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_realization_coords.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_realization_coords.py index 759a399dad..6159a1dbd4 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_realization_coords.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_scalar_realization_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._convert_scalar_realization_coords`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_time_coords.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_time_coords.py index cf147e5928..5afaeee45d 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_time_coords.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_time_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._convert_time_coords`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_vertical_coords.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_vertical_coords.py index 47552a646a..a7ed6355f6 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_vertical_coords.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__convert_vertical_coords.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._convert_vertical_coords`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__dim_or_aux.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__dim_or_aux.py index 7769ca1de1..176d0a38a1 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__dim_or_aux.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__dim_or_aux.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.fileformats.pp_load_rules._dim_or_aux`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__epoch_date_hours.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__epoch_date_hours.py index 2c5d672e14..2724d45871 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__epoch_date_hours.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__epoch_date_hours.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._epoch_date_hours`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__model_level_number.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__model_level_number.py index fa381b91c1..c99de5bc34 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__model_level_number.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__model_level_number.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._model_level_number`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__reduced_points_and_bounds.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__reduced_points_and_bounds.py index fc30f66f7f..a33128f39b 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__reduced_points_and_bounds.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__reduced_points_and_bounds.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._reduce_points_and_bounds`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test__reshape_vector_args.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test__reshape_vector_args.py index 4e6d50fea7..d12a718e98 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test__reshape_vector_args.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test__reshape_vector_args.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for :func:`iris.fileformats.pp_load_rules._reshape_vector_args`. diff --git a/lib/iris/tests/unit/fileformats/pp_load_rules/test_convert.py b/lib/iris/tests/unit/fileformats/pp_load_rules/test_convert.py index 569d676183..0b46d11f9d 100644 --- a/lib/iris/tests/unit/fileformats/pp_load_rules/test_convert.py +++ b/lib/iris/tests/unit/fileformats/pp_load_rules/test_convert.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.fileformats.pp_load_rules.convert`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/rules/__init__.py b/lib/iris/tests/unit/fileformats/rules/__init__.py index 55c9c7779e..1b14a8b07b 100644 --- a/lib/iris/tests/unit/fileformats/rules/__init__.py +++ b/lib/iris/tests/unit/fileformats/rules/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.fileformats.rules` module.""" diff --git a/lib/iris/tests/unit/fileformats/rules/test_Loader.py b/lib/iris/tests/unit/fileformats/rules/test_Loader.py index be96f526d2..b99d1e6f40 100644 --- a/lib/iris/tests/unit/fileformats/rules/test_Loader.py +++ b/lib/iris/tests/unit/fileformats/rules/test_Loader.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris.fileformats.rules.Loader`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/rules/test__make_cube.py b/lib/iris/tests/unit/fileformats/rules/test__make_cube.py index b6c4528399..91862658e5 100644 --- a/lib/iris/tests/unit/fileformats/rules/test__make_cube.py +++ b/lib/iris/tests/unit/fileformats/rules/test__make_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.fileformats.rules._make_cube`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/structured_array_identification/__init__.py b/lib/iris/tests/unit/fileformats/structured_array_identification/__init__.py index c703284fc0..8a0a9a38d7 100644 --- a/lib/iris/tests/unit/fileformats/structured_array_identification/__init__.py +++ b/lib/iris/tests/unit/fileformats/structured_array_identification/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.fileformats._structured_array_identification` module. diff --git a/lib/iris/tests/unit/fileformats/structured_array_identification/test_ArrayStructure.py b/lib/iris/tests/unit/fileformats/structured_array_identification/test_ArrayStructure.py index 871aab4f1e..9f5466afaa 100644 --- a/lib/iris/tests/unit/fileformats/structured_array_identification/test_ArrayStructure.py +++ b/lib/iris/tests/unit/fileformats/structured_array_identification/test_ArrayStructure.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.fileformats._structured_array_identification.ArrayStructure` class. diff --git a/lib/iris/tests/unit/fileformats/structured_array_identification/test_GroupStructure.py b/lib/iris/tests/unit/fileformats/structured_array_identification/test_GroupStructure.py index a7818ad802..ec98664f51 100644 --- a/lib/iris/tests/unit/fileformats/structured_array_identification/test_GroupStructure.py +++ b/lib/iris/tests/unit/fileformats/structured_array_identification/test_GroupStructure.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :mod:`iris.fileformats._structured_array_identification.GroupStructure` class. diff --git a/lib/iris/tests/unit/fileformats/test_rules.py b/lib/iris/tests/unit/fileformats/test_rules.py index c243a374cb..b7e17b205e 100644 --- a/lib/iris/tests/unit/fileformats/test_rules.py +++ b/lib/iris/tests/unit/fileformats/test_rules.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test iris.fileformats.rules.py - metadata translation rules. diff --git a/lib/iris/tests/unit/fileformats/um/__init__.py b/lib/iris/tests/unit/fileformats/um/__init__.py index 6b4abc61bb..6652c6d543 100644 --- a/lib/iris/tests/unit/fileformats/um/__init__.py +++ b/lib/iris/tests/unit/fileformats/um/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.fileformats.um` package.""" diff --git a/lib/iris/tests/unit/fileformats/um/fast_load/__init__.py b/lib/iris/tests/unit/fileformats/um/fast_load/__init__.py index b5eb259e5b..f2c18b5f8a 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load/__init__.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.um._fast_load`. diff --git a/lib/iris/tests/unit/fileformats/um/fast_load/test_FieldCollation.py b/lib/iris/tests/unit/fileformats/um/fast_load/test_FieldCollation.py index 0c15e5e839..930050813f 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load/test_FieldCollation.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load/test_FieldCollation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the class :class:`iris.fileformats.um._fast_load.FieldCollation`. diff --git a/lib/iris/tests/unit/fileformats/um/fast_load/test__convert_collation.py b/lib/iris/tests/unit/fileformats/um/fast_load/test__convert_collation.py index 90c411b41d..f6e3fd5928 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load/test__convert_collation.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load/test__convert_collation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.fileformats.um._fast_load._convert_collation`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/__init__.py b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/__init__.py index f0932c3ac8..c26382aca9 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/__init__.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.um._fast_load_structured_fields`. diff --git a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_BasicFieldCollation.py b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_BasicFieldCollation.py index 57100c79af..19c64ec57a 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_BasicFieldCollation.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_BasicFieldCollation.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the class :class:`iris.fileformats.um._fast_load_structured_fields.BasicFieldCollation`. diff --git a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_group_structured_fields.py b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_group_structured_fields.py index b7ef9a62a3..75b54dfd4f 100644 --- a/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_group_structured_fields.py +++ b/lib/iris/tests/unit/fileformats/um/fast_load_structured_fields/test_group_structured_fields.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:\ `iris.fileformats.um._fast_load_structured_fields.group_structured_fields`. diff --git a/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/__init__.py b/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/__init__.py index 8070719de8..5a72973519 100644 --- a/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/__init__.py +++ b/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the module :mod:`iris.fileformats.um._optimal_array_structuring`. diff --git a/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/test_optimal_array_structure.py b/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/test_optimal_array_structure.py index 96566f3c80..92a8b19ec0 100644 --- a/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/test_optimal_array_structure.py +++ b/lib/iris/tests/unit/fileformats/um/optimal_array_structuring/test_optimal_array_structure.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.fileformats.um._optimal_array_structuring.optimal_array_structure`. diff --git a/lib/iris/tests/unit/fileformats/um/test_um_to_pp.py b/lib/iris/tests/unit/fileformats/um/test_um_to_pp.py index ef6369f638..40ac6826d3 100644 --- a/lib/iris/tests/unit/fileformats/um/test_um_to_pp.py +++ b/lib/iris/tests/unit/fileformats/um/test_um_to_pp.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the function :func:`iris.fileformats.um.um_to_pp`. diff --git a/lib/iris/tests/unit/io/__init__.py b/lib/iris/tests/unit/io/__init__.py index 5e347c9ebc..1a11fe5d30 100644 --- a/lib/iris/tests/unit/io/__init__.py +++ b/lib/iris/tests/unit/io/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.io` package.""" diff --git a/lib/iris/tests/unit/io/test__generate_cubes.py b/lib/iris/tests/unit/io/test__generate_cubes.py index 3a896a111c..96d790db2d 100755 --- a/lib/iris/tests/unit/io/test__generate_cubes.py +++ b/lib/iris/tests/unit/io/test__generate_cubes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.io._generate_cubes` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/io/test_expand_filespecs.py b/lib/iris/tests/unit/io/test_expand_filespecs.py index 8720478153..bd5e5933a3 100644 --- a/lib/iris/tests/unit/io/test_expand_filespecs.py +++ b/lib/iris/tests/unit/io/test_expand_filespecs.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.io.expand_filespecs` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/io/test_run_callback.py b/lib/iris/tests/unit/io/test_run_callback.py index 94ae7ac09d..cd55743b29 100644 --- a/lib/iris/tests/unit/io/test_run_callback.py +++ b/lib/iris/tests/unit/io/test_run_callback.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.io.run_callback` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/io/test_save.py b/lib/iris/tests/unit/io/test_save.py index 623cf417f2..cec125d0fe 100755 --- a/lib/iris/tests/unit/io/test_save.py +++ b/lib/iris/tests/unit/io/test_save.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.io.save` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/__init__.py b/lib/iris/tests/unit/lazy_data/__init__.py index b463897c50..55920077f3 100644 --- a/lib/iris/tests/unit/lazy_data/__init__.py +++ b/lib/iris/tests/unit/lazy_data/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._lazy_data` module.""" diff --git a/lib/iris/tests/unit/lazy_data/test_as_concrete_data.py b/lib/iris/tests/unit/lazy_data/test_as_concrete_data.py index 1a98c81fac..91b22a3c0e 100644 --- a/lib/iris/tests/unit/lazy_data/test_as_concrete_data.py +++ b/lib/iris/tests/unit/lazy_data/test_as_concrete_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.as_concrete_data`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_as_lazy_data.py b/lib/iris/tests/unit/lazy_data/test_as_lazy_data.py index 5f9dece153..0acb085830 100644 --- a/lib/iris/tests/unit/lazy_data/test_as_lazy_data.py +++ b/lib/iris/tests/unit/lazy_data/test_as_lazy_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test the function :func:`iris._lazy data.as_lazy_data`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_co_realise_cubes.py b/lib/iris/tests/unit/lazy_data/test_co_realise_cubes.py index 0c10d69c16..3b265d615d 100644 --- a/lib/iris/tests/unit/lazy_data/test_co_realise_cubes.py +++ b/lib/iris/tests/unit/lazy_data/test_co_realise_cubes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.co_realise_cubes`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_is_lazy_data.py b/lib/iris/tests/unit/lazy_data/test_is_lazy_data.py index 45b3194f32..a8018c67b1 100644 --- a/lib/iris/tests/unit/lazy_data/test_is_lazy_data.py +++ b/lib/iris/tests/unit/lazy_data/test_is_lazy_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.is_lazy_data`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py b/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py index 4d627a706b..6466ab0ea2 100644 --- a/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py +++ b/lib/iris/tests/unit/lazy_data/test_is_lazy_masked_data.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.is_lazy_masked_data`.""" import dask.array as da diff --git a/lib/iris/tests/unit/lazy_data/test_lazy_elementwise.py b/lib/iris/tests/unit/lazy_data/test_lazy_elementwise.py index 49fd6ad70b..651a774c4d 100644 --- a/lib/iris/tests/unit/lazy_data/test_lazy_elementwise.py +++ b/lib/iris/tests/unit/lazy_data/test_lazy_elementwise.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.lazy_elementwise`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_map_complete_blocks.py b/lib/iris/tests/unit/lazy_data/test_map_complete_blocks.py index 66c03d04c8..1c694d292b 100644 --- a/lib/iris/tests/unit/lazy_data/test_map_complete_blocks.py +++ b/lib/iris/tests/unit/lazy_data/test_map_complete_blocks.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.map_complete_blocks`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_multidim_lazy_stack.py b/lib/iris/tests/unit/lazy_data/test_multidim_lazy_stack.py index 9fe79a0d4c..993cb01178 100644 --- a/lib/iris/tests/unit/lazy_data/test_multidim_lazy_stack.py +++ b/lib/iris/tests/unit/lazy_data/test_multidim_lazy_stack.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.multidim_lazy_stack`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/lazy_data/test_non_lazy.py b/lib/iris/tests/unit/lazy_data/test_non_lazy.py index cc4ed33ea3..3c6bb99e0a 100644 --- a/lib/iris/tests/unit/lazy_data/test_non_lazy.py +++ b/lib/iris/tests/unit/lazy_data/test_non_lazy.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris._lazy data.non_lazy`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/merge/__init__.py b/lib/iris/tests/unit/merge/__init__.py index c3ead61576..14ef96573f 100644 --- a/lib/iris/tests/unit/merge/__init__.py +++ b/lib/iris/tests/unit/merge/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._merge` module.""" diff --git a/lib/iris/tests/unit/merge/test_ProtoCube.py b/lib/iris/tests/unit/merge/test_ProtoCube.py index 0fca726b28..80f135e108 100644 --- a/lib/iris/tests/unit/merge/test_ProtoCube.py +++ b/lib/iris/tests/unit/merge/test_ProtoCube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris._merge.ProtoCube` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/pandas/__init__.py b/lib/iris/tests/unit/pandas/__init__.py index 103a264839..2ee1fb1cfe 100644 --- a/lib/iris/tests/unit/pandas/__init__.py +++ b/lib/iris/tests/unit/pandas/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.pandas` module.""" diff --git a/lib/iris/tests/unit/pandas/test_pandas.py b/lib/iris/tests/unit/pandas/test_pandas.py index d74d7cad9c..6f617439db 100644 --- a/lib/iris/tests/unit/pandas/test_pandas.py +++ b/lib/iris/tests/unit/pandas/test_pandas.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """All unit tests for the :mod:`iris.pandas` module.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/__init__.py b/lib/iris/tests/unit/plot/__init__.py index f589a29e0d..7481cdafa3 100644 --- a/lib/iris/tests/unit/plot/__init__.py +++ b/lib/iris/tests/unit/plot/__init__.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.plot` module.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/_blockplot_common.py b/lib/iris/tests/unit/plot/_blockplot_common.py index 455b416164..e3e88304fa 100644 --- a/lib/iris/tests/unit/plot/_blockplot_common.py +++ b/lib/iris/tests/unit/plot/_blockplot_common.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Common test code for `iris.plot.pcolor` and `iris.plot.pcolormesh`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test__check_bounds_contiguity_and_mask.py b/lib/iris/tests/unit/plot/test__check_bounds_contiguity_and_mask.py index 4dfc6d7f68..3e25f0aadb 100644 --- a/lib/iris/tests/unit/plot/test__check_bounds_contiguity_and_mask.py +++ b/lib/iris/tests/unit/plot/test__check_bounds_contiguity_and_mask.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._check_bounds_contiguity_and_mask` function.""" diff --git a/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py b/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py index a06a437396..cfbb15cdef 100644 --- a/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py +++ b/lib/iris/tests/unit/plot/test__check_geostationary_coords_and_convert.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._check_geostationary_coords_and_convert function.""" diff --git a/lib/iris/tests/unit/plot/test__fixup_dates.py b/lib/iris/tests/unit/plot/test__fixup_dates.py index 0abef01e41..d155f30969 100644 --- a/lib/iris/tests/unit/plot/test__fixup_dates.py +++ b/lib/iris/tests/unit/plot/test__fixup_dates.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._fixup_dates` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test__get_plot_defn.py b/lib/iris/tests/unit/plot/test__get_plot_defn.py index c69173dc70..512dc7f0b2 100644 --- a/lib/iris/tests/unit/plot/test__get_plot_defn.py +++ b/lib/iris/tests/unit/plot/test__get_plot_defn.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._get_plot_defn` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test__get_plot_defn_custom_coords_picked.py b/lib/iris/tests/unit/plot/test__get_plot_defn_custom_coords_picked.py index 631f9bd24e..dcd8fac9e1 100644 --- a/lib/iris/tests/unit/plot/test__get_plot_defn_custom_coords_picked.py +++ b/lib/iris/tests/unit/plot/test__get_plot_defn_custom_coords_picked.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._get_plot_defn_custom_coords_picked` function.""" diff --git a/lib/iris/tests/unit/plot/test__get_plot_objects.py b/lib/iris/tests/unit/plot/test__get_plot_objects.py index 8586faa756..fbccbe94fb 100644 --- a/lib/iris/tests/unit/plot/test__get_plot_objects.py +++ b/lib/iris/tests/unit/plot/test__get_plot_objects.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot._get_plot_objects` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test__replace_axes_with_cartopy_axes.py b/lib/iris/tests/unit/plot/test__replace_axes_with_cartopy_axes.py index 8e2d4f226b..8d4054b35a 100644 --- a/lib/iris/tests/unit/plot/test__replace_axes_with_cartopy_axes.py +++ b/lib/iris/tests/unit/plot/test__replace_axes_with_cartopy_axes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.__replace_axes_with_cartopy_axes` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_contour.py b/lib/iris/tests/unit/plot/test_contour.py index 823b3270d0..43c0564ff4 100644 --- a/lib/iris/tests/unit/plot/test_contour.py +++ b/lib/iris/tests/unit/plot/test_contour.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.contour` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_contourf.py b/lib/iris/tests/unit/plot/test_contourf.py index de84e88a52..64ab87f879 100644 --- a/lib/iris/tests/unit/plot/test_contourf.py +++ b/lib/iris/tests/unit/plot/test_contourf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.contourf` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_hist.py b/lib/iris/tests/unit/plot/test_hist.py index 8a74ff8701..feef8f1062 100644 --- a/lib/iris/tests/unit/plot/test_hist.py +++ b/lib/iris/tests/unit/plot/test_hist.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.hist` function.""" # Import iris.tests first so that some things can be initialised before # importing anything else. diff --git a/lib/iris/tests/unit/plot/test_outline.py b/lib/iris/tests/unit/plot/test_outline.py index de59287362..dc1b27487b 100644 --- a/lib/iris/tests/unit/plot/test_outline.py +++ b/lib/iris/tests/unit/plot/test_outline.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.outline` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_pcolor.py b/lib/iris/tests/unit/plot/test_pcolor.py index 1cde9e8822..219df4d446 100644 --- a/lib/iris/tests/unit/plot/test_pcolor.py +++ b/lib/iris/tests/unit/plot/test_pcolor.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.pcolor` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_pcolormesh.py b/lib/iris/tests/unit/plot/test_pcolormesh.py index f4e84e5765..a5525770f2 100644 --- a/lib/iris/tests/unit/plot/test_pcolormesh.py +++ b/lib/iris/tests/unit/plot/test_pcolormesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.pcolormesh` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_plot.py b/lib/iris/tests/unit/plot/test_plot.py index 1ed2da1b13..db33862a7e 100644 --- a/lib/iris/tests/unit/plot/test_plot.py +++ b/lib/iris/tests/unit/plot/test_plot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.plot` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_points.py b/lib/iris/tests/unit/plot/test_points.py index e1a23eff83..0d713e3d84 100644 --- a/lib/iris/tests/unit/plot/test_points.py +++ b/lib/iris/tests/unit/plot/test_points.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.points` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/plot/test_scatter.py b/lib/iris/tests/unit/plot/test_scatter.py index c5cd9cb2f2..f3b2ec1592 100644 --- a/lib/iris/tests/unit/plot/test_scatter.py +++ b/lib/iris/tests/unit/plot/test_scatter.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.plot.scatter` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/__init__.py b/lib/iris/tests/unit/quickplot/__init__.py index 471ef0f6a5..1ce65d9647 100644 --- a/lib/iris/tests/unit/quickplot/__init__.py +++ b/lib/iris/tests/unit/quickplot/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.quickplot` module.""" diff --git a/lib/iris/tests/unit/quickplot/test_contour.py b/lib/iris/tests/unit/quickplot/test_contour.py index 8e3db7c3e0..2f3bb1a45d 100644 --- a/lib/iris/tests/unit/quickplot/test_contour.py +++ b/lib/iris/tests/unit/quickplot/test_contour.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.contour` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_contourf.py b/lib/iris/tests/unit/quickplot/test_contourf.py index e510e661ae..55c9940821 100644 --- a/lib/iris/tests/unit/quickplot/test_contourf.py +++ b/lib/iris/tests/unit/quickplot/test_contourf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.contourf` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_outline.py b/lib/iris/tests/unit/quickplot/test_outline.py index 70d96372fa..4dd924b749 100644 --- a/lib/iris/tests/unit/quickplot/test_outline.py +++ b/lib/iris/tests/unit/quickplot/test_outline.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.outline` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_pcolor.py b/lib/iris/tests/unit/quickplot/test_pcolor.py index 2e559d6308..79f6904e12 100644 --- a/lib/iris/tests/unit/quickplot/test_pcolor.py +++ b/lib/iris/tests/unit/quickplot/test_pcolor.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.pcolor` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_pcolormesh.py b/lib/iris/tests/unit/quickplot/test_pcolormesh.py index 32ae3ed716..826f0e7121 100644 --- a/lib/iris/tests/unit/quickplot/test_pcolormesh.py +++ b/lib/iris/tests/unit/quickplot/test_pcolormesh.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.pcolormesh` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_plot.py b/lib/iris/tests/unit/quickplot/test_plot.py index 0a36a3fa4e..35e1eae470 100644 --- a/lib/iris/tests/unit/quickplot/test_plot.py +++ b/lib/iris/tests/unit/quickplot/test_plot.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.plot` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_points.py b/lib/iris/tests/unit/quickplot/test_points.py index 3810cdd343..b28c37bf87 100644 --- a/lib/iris/tests/unit/quickplot/test_points.py +++ b/lib/iris/tests/unit/quickplot/test_points.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.points` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/quickplot/test_scatter.py b/lib/iris/tests/unit/quickplot/test_scatter.py index c1cf853970..db3e9948a0 100644 --- a/lib/iris/tests/unit/quickplot/test_scatter.py +++ b/lib/iris/tests/unit/quickplot/test_scatter.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.quickplot.scatter` function.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/representation/__init__.py b/lib/iris/tests/unit/representation/__init__.py index e943ad149b..19824735c1 100644 --- a/lib/iris/tests/unit/representation/__init__.py +++ b/lib/iris/tests/unit/representation/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._representation` module.""" diff --git a/lib/iris/tests/unit/representation/cube_printout/__init__.py b/lib/iris/tests/unit/representation/cube_printout/__init__.py index 50ab3f8e45..15e84606db 100644 --- a/lib/iris/tests/unit/representation/cube_printout/__init__.py +++ b/lib/iris/tests/unit/representation/cube_printout/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._representation.cube_printout` module.""" diff --git a/lib/iris/tests/unit/representation/cube_printout/test_CubePrintout.py b/lib/iris/tests/unit/representation/cube_printout/test_CubePrintout.py index 65fb115243..20d5c47e01 100644 --- a/lib/iris/tests/unit/representation/cube_printout/test_CubePrintout.py +++ b/lib/iris/tests/unit/representation/cube_printout/test_CubePrintout.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris._representation.cube_printout.CubePrintout`.""" import iris.tests as tests # isort:skip diff --git a/lib/iris/tests/unit/representation/cube_printout/test_Table.py b/lib/iris/tests/unit/representation/cube_printout/test_Table.py index e5dba52c61..ff9b6cf51b 100644 --- a/lib/iris/tests/unit/representation/cube_printout/test_Table.py +++ b/lib/iris/tests/unit/representation/cube_printout/test_Table.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris._representation.cube_printout.Table`.""" from iris._representation.cube_printout import Table import iris.tests as tests diff --git a/lib/iris/tests/unit/representation/cube_summary/__init__.py b/lib/iris/tests/unit/representation/cube_summary/__init__.py index c20a621ba2..684221e6d2 100644 --- a/lib/iris/tests/unit/representation/cube_summary/__init__.py +++ b/lib/iris/tests/unit/representation/cube_summary/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris._representation.cube_summary` module.""" diff --git a/lib/iris/tests/unit/representation/cube_summary/test_CubeSummary.py b/lib/iris/tests/unit/representation/cube_summary/test_CubeSummary.py index d81f680df5..1280c3b38f 100644 --- a/lib/iris/tests/unit/representation/cube_summary/test_CubeSummary.py +++ b/lib/iris/tests/unit/representation/cube_summary/test_CubeSummary.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :class:`iris._representation.cube_summary.CubeSummary`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/test_Future.py b/lib/iris/tests/unit/test_Future.py index f0c161b0c4..00f6b82519 100644 --- a/lib/iris/tests/unit/test_Future.py +++ b/lib/iris/tests/unit/test_Future.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.Future` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/test_sample_data_path.py b/lib/iris/tests/unit/test_sample_data_path.py index ebf3b8108c..aff2c1088f 100644 --- a/lib/iris/tests/unit/test_sample_data_path.py +++ b/lib/iris/tests/unit/test_sample_data_path.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for :func:`iris.sample_data_path` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/tests/__init__.py b/lib/iris/tests/unit/tests/__init__.py index b8d27d34d3..b0c801b816 100644 --- a/lib/iris/tests/unit/tests/__init__.py +++ b/lib/iris/tests/unit/tests/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.tests` package.""" diff --git a/lib/iris/tests/unit/tests/stock/__init__.py b/lib/iris/tests/unit/tests/stock/__init__.py index f91390c2b3..ad31134ad4 100644 --- a/lib/iris/tests/unit/tests/stock/__init__.py +++ b/lib/iris/tests/unit/tests/stock/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.tests.stock` module.""" diff --git a/lib/iris/tests/unit/tests/stock/test_netcdf.py b/lib/iris/tests/unit/tests/stock/test_netcdf.py index 54d7b895cc..eb1c289c37 100644 --- a/lib/iris/tests/unit/tests/stock/test_netcdf.py +++ b/lib/iris/tests/unit/tests/stock/test_netcdf.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.tests.stock.netcdf` module.""" import shutil diff --git a/lib/iris/tests/unit/tests/test_IrisTest.py b/lib/iris/tests/unit/tests/test_IrisTest.py index 10de2a7760..ef895e45b6 100644 --- a/lib/iris/tests/unit/tests/test_IrisTest.py +++ b/lib/iris/tests/unit/tests/test_IrisTest.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.tests.IrisTest` class.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/time/__init__.py b/lib/iris/tests/unit/time/__init__.py index 3483b92e62..fdbb082434 100644 --- a/lib/iris/tests/unit/time/__init__.py +++ b/lib/iris/tests/unit/time/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.time` module.""" diff --git a/lib/iris/tests/unit/time/test_PartialDateTime.py b/lib/iris/tests/unit/time/test_PartialDateTime.py index cfffafea2c..8223f4a518 100644 --- a/lib/iris/tests/unit/time/test_PartialDateTime.py +++ b/lib/iris/tests/unit/time/test_PartialDateTime.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the `iris.time.PartialDateTime` class.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/__init__.py b/lib/iris/tests/unit/util/__init__.py index 9aed566a19..ce94a18f4e 100644 --- a/lib/iris/tests/unit/util/__init__.py +++ b/lib/iris/tests/unit/util/__init__.py @@ -1,6 +1,5 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Unit tests for the :mod:`iris.util` module.""" diff --git a/lib/iris/tests/unit/util/test__coord_regular.py b/lib/iris/tests/unit/util/test__coord_regular.py index a5e9aca9ed..bd9f8f3430 100644 --- a/lib/iris/tests/unit/util/test__coord_regular.py +++ b/lib/iris/tests/unit/util/test__coord_regular.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test elements of :mod:`iris.util` that deal with checking coord regularity. Specifically, this module tests the following functions: diff --git a/lib/iris/tests/unit/util/test__is_circular.py b/lib/iris/tests/unit/util/test__is_circular.py index e67eb38294..67099f49d6 100644 --- a/lib/iris/tests/unit/util/test__is_circular.py +++ b/lib/iris/tests/unit/util/test__is_circular.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util._is_circular`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test__mask_array.py b/lib/iris/tests/unit/util/test__mask_array.py index 91a5aca1b4..2245576de9 100644 --- a/lib/iris/tests/unit/util/test__mask_array.py +++ b/lib/iris/tests/unit/util/test__mask_array.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util._mask_array""" import dask.array as da diff --git a/lib/iris/tests/unit/util/test__slice_data_with_keys.py b/lib/iris/tests/unit/util/test__slice_data_with_keys.py index 061a2f5b37..9c93041521 100644 --- a/lib/iris/tests/unit/util/test__slice_data_with_keys.py +++ b/lib/iris/tests/unit/util/test__slice_data_with_keys.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.util._slice_data_with_keys`. diff --git a/lib/iris/tests/unit/util/test_array_equal.py b/lib/iris/tests/unit/util/test_array_equal.py index 77631907a1..38b9652443 100644 --- a/lib/iris/tests/unit/util/test_array_equal.py +++ b/lib/iris/tests/unit/util/test_array_equal.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.array_equal`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_broadcast_to_shape.py b/lib/iris/tests/unit/util/test_broadcast_to_shape.py index 3df1634ba5..c060967edf 100644 --- a/lib/iris/tests/unit/util/test_broadcast_to_shape.py +++ b/lib/iris/tests/unit/util/test_broadcast_to_shape.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.broadcast_to_shape`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_column_slices_generator.py b/lib/iris/tests/unit/util/test_column_slices_generator.py index 899c6b98ba..fbb5a8f588 100644 --- a/lib/iris/tests/unit/util/test_column_slices_generator.py +++ b/lib/iris/tests/unit/util/test_column_slices_generator.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.column_slices_generator`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_demote_dim_coord_to_aux_coord.py b/lib/iris/tests/unit/util/test_demote_dim_coord_to_aux_coord.py index ec8f9904f1..65e3dec93b 100644 --- a/lib/iris/tests/unit/util/test_demote_dim_coord_to_aux_coord.py +++ b/lib/iris/tests/unit/util/test_demote_dim_coord_to_aux_coord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.demote_dim_coord_to_aux_coord`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_describe_diff.py b/lib/iris/tests/unit/util/test_describe_diff.py index 0bb13cab94..74bd71389e 100644 --- a/lib/iris/tests/unit/util/test_describe_diff.py +++ b/lib/iris/tests/unit/util/test_describe_diff.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.describe_diff`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_equalise_attributes.py b/lib/iris/tests/unit/util/test_equalise_attributes.py index 13aa1e2af4..a4198160a9 100644 --- a/lib/iris/tests/unit/util/test_equalise_attributes.py +++ b/lib/iris/tests/unit/util/test_equalise_attributes.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Unit tests for the :func:`iris.util.equalise_attributes` function. diff --git a/lib/iris/tests/unit/util/test_file_is_newer_than.py b/lib/iris/tests/unit/util/test_file_is_newer_than.py index cff878a294..c27f4f1dcb 100644 --- a/lib/iris/tests/unit/util/test_file_is_newer_than.py +++ b/lib/iris/tests/unit/util/test_file_is_newer_than.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Test function :func:`iris.util.test_file_is_newer`. diff --git a/lib/iris/tests/unit/util/test_find_discontiguities.py b/lib/iris/tests/unit/util/test_find_discontiguities.py index 9e043c71bd..6965541320 100644 --- a/lib/iris/tests/unit/util/test_find_discontiguities.py +++ b/lib/iris/tests/unit/util/test_find_discontiguities.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.find_discontiguities""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_mask_cube.py b/lib/iris/tests/unit/util/test_mask_cube.py index 0123d0cca5..7237f0491c 100644 --- a/lib/iris/tests/unit/util/test_mask_cube.py +++ b/lib/iris/tests/unit/util/test_mask_cube.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.mask_cube""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_new_axis.py b/lib/iris/tests/unit/util/test_new_axis.py index a6374f97ad..197c06e449 100644 --- a/lib/iris/tests/unit/util/test_new_axis.py +++ b/lib/iris/tests/unit/util/test_new_axis.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.new_axis`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_promote_aux_coord_to_dim_coord.py b/lib/iris/tests/unit/util/test_promote_aux_coord_to_dim_coord.py index 0e1e56fee5..8ad9cbf4c2 100644 --- a/lib/iris/tests/unit/util/test_promote_aux_coord_to_dim_coord.py +++ b/lib/iris/tests/unit/util/test_promote_aux_coord_to_dim_coord.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.promote_aux_coord_to_dim_coord`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_reverse.py b/lib/iris/tests/unit/util/test_reverse.py index 7d9a669a9d..b6da468e7f 100644 --- a/lib/iris/tests/unit/util/test_reverse.py +++ b/lib/iris/tests/unit/util/test_reverse.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.reverse`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_rolling_window.py b/lib/iris/tests/unit/util/test_rolling_window.py index 3644da9c9c..533e5d5633 100644 --- a/lib/iris/tests/unit/util/test_rolling_window.py +++ b/lib/iris/tests/unit/util/test_rolling_window.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.rolling_window`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_squeeze.py b/lib/iris/tests/unit/util/test_squeeze.py index b5f0a91b99..cb4b55c1e6 100644 --- a/lib/iris/tests/unit/util/test_squeeze.py +++ b/lib/iris/tests/unit/util/test_squeeze.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.squeeze`.""" # Import iris.tests first so that some things can be initialised before diff --git a/lib/iris/tests/unit/util/test_unify_time_units.py b/lib/iris/tests/unit/util/test_unify_time_units.py index 8bee046dad..2d7a3b6d64 100644 --- a/lib/iris/tests/unit/util/test_unify_time_units.py +++ b/lib/iris/tests/unit/util/test_unify_time_units.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """Test function :func:`iris.util.array_equal`.""" # import iris tests first so that some things can be initialised before diff --git a/lib/iris/time.py b/lib/iris/time.py index 51aac3d46d..ddedeedd91 100644 --- a/lib/iris/time.py +++ b/lib/iris/time.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Time handling. diff --git a/lib/iris/util.py b/lib/iris/util.py index c040b72b54..ee415d230e 100644 --- a/lib/iris/util.py +++ b/lib/iris/util.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ Miscellaneous utility functions. diff --git a/pyproject.toml b/pyproject.toml index 4f9ade1351..88b39f1601 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,7 +15,7 @@ authors = [ classifiers = [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Science/Research", - "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", + "License :: OSI Approved :: BSD License", "Operating System :: MacOS", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", @@ -48,7 +48,7 @@ keywords = [ "ugrid", "visualisation", ] -license = {text = "LGPL-3.0-or-later"} +license = {text = "BSD-3-Clause"} name = "scitools-iris" requires-python = ">=3.9" @@ -59,7 +59,7 @@ Documentation = "https://scitools-iris.readthedocs.io/en/stable/" Issues = "https://github.com/SciTools/iris/issues" [tool.setuptools] -license-files = ["COPYING", "COPYING.LESSER"] +license-files = ["LICENSE"] zip-safe = false [tool.setuptools.dynamic] diff --git a/tools/generate_std_names.py b/tools/generate_std_names.py index 51a31ef971..8e3b24aac6 100644 --- a/tools/generate_std_names.py +++ b/tools/generate_std_names.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A script to convert the standard names information from the provided XML file into a Python dictionary format. @@ -27,9 +26,8 @@ STD_VALUES_FILE_TEMPLATE = ''' # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ This file contains a dictionary of standard value names that are mapped to another dictionary of other standard name attributes. Currently only diff --git a/tools/release_do_nothing.py b/tools/release_do_nothing.py index afe12a662d..bd38f0f733 100755 --- a/tools/release_do_nothing.py +++ b/tools/release_do_nothing.py @@ -1,9 +1,8 @@ #!/usr/bin/env python3 # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A do-nothing script to hand-hold through the Iris release process. diff --git a/tools/update_lockfiles.py b/tools/update_lockfiles.py index 073f86cda6..a81ab8cafc 100755 --- a/tools/update_lockfiles.py +++ b/tools/update_lockfiles.py @@ -1,8 +1,7 @@ # Copyright Iris contributors # -# This file is part of Iris and is released under the LGPL license. -# See COPYING and COPYING.LESSER in the root of the repository for full -# licensing details. +# This file is part of Iris and is released under the BSD license. +# See LICENSE in the root of the repository for full licensing details. """ A command line utility for generating conda-lock files for the environments that nox uses for testing each different supported version of python. From 80c179251219eebdfd03e72b0df123c2cfca61fd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 13 Nov 2023 19:06:12 +0000 Subject: [PATCH 81/82] [pre-commit.ci] pre-commit autoupdate (#5579) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/psf/black: 23.10.1 → 23.11.0](https://github.com/psf/black/compare/23.10.1...23.11.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5aefc1da76..cbad42b83a 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -36,7 +36,7 @@ repos: additional_dependencies: [tomli] - repo: https://github.com/psf/black - rev: 23.10.1 + rev: 23.11.0 hooks: - id: black pass_filenames: false From cfbe34fe0a6319581fcb09fea6d8c17dd075ea6d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 17 Nov 2023 14:51:31 +0000 Subject: [PATCH 82/82] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- lib/iris/tests/unit/coords/test_Coord.py | 1 - lib/iris/tests/unit/util/test_guess_coord_axis.py | 1 - 2 files changed, 2 deletions(-) diff --git a/lib/iris/tests/unit/coords/test_Coord.py b/lib/iris/tests/unit/coords/test_Coord.py index 749565f185..14dcdf7ca0 100644 --- a/lib/iris/tests/unit/coords/test_Coord.py +++ b/lib/iris/tests/unit/coords/test_Coord.py @@ -1151,7 +1151,6 @@ def test_change_units(self): class TestIgnoreAxis: - def test_default(self, sample_coord): assert sample_coord.ignore_axis is False diff --git a/lib/iris/tests/unit/util/test_guess_coord_axis.py b/lib/iris/tests/unit/util/test_guess_coord_axis.py index 896ecd31a0..7b35b3c57e 100644 --- a/lib/iris/tests/unit/util/test_guess_coord_axis.py +++ b/lib/iris/tests/unit/util/test_guess_coord_axis.py @@ -11,7 +11,6 @@ class TestGuessCoord: - @pytest.mark.parametrize( "coordinate, axis", [