diff --git a/doc/release_notes.md b/doc/release_notes.md index 79c6bf77cc..c8ce075b7b 100644 --- a/doc/release_notes.md +++ b/doc/release_notes.md @@ -37,6 +37,8 @@ * Migrate the Sphinx/RST-based documentation to MkDocs/Markdown, as a follow-up to the [upstream migration](https://github.com/PyPSA/pypsa-eur/pull/2162) ([754](https://github.com/open-energy-transition/open-tyndp/pull/754)). +* Improve docstring formatting and add missing type hints (https://github.com/open-energy-transition/open-tyndp/pull/759). + **Developers Note** * Change GitHub issue templates to comply with ISO security checks ([#714](https://github.com/open-energy-transition/open-tyndp/pull/714), [#730](https://github.com/open-energy-transition/open-tyndp/pull/730)). diff --git a/envs/default_linux-64.pin.txt b/envs/default_linux-64.pin.txt index 2d6f3558b5..9058e487a2 100644 --- a/envs/default_linux-64.pin.txt +++ b/envs/default_linux-64.pin.txt @@ -14,7 +14,9 @@ https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539 https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda#a9965dd99f683c5f444428f896635716 https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.3-h35e630c_0.conda#79dd2074b5cd5c5c6b2930514a11e22d https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42.2-h5347b49_0.conda#01bb81d12c957de066ea7362007df642 -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda#062b0ac602fb0adf250e3dfa86f221c4 +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda#5794b3bdc38177caf969dabd3af08549 +https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda#c80d8a3b84358cb967fa81e7075fbc8a +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda#f283e98005089bf29ac5774c2e209fbf https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda#2c21e66f50753a083cbe6b80f38268fa https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.3-hb03c661_0.conda#b88d90cad08e6bc8ad540cb310a761fb https://conda.anaconda.org/conda-forge/linux-64/libffi-3.5.2-h3435931_0.conda#a360c33a5abe61c07959e449fa1453eb @@ -24,7 +26,6 @@ https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda#d2f https://conda.anaconda.org/conda-forge/linux-64/python-3.14.5-habeac84_100_cp314.conda#da92e59ff92f2d5ede4f612af20f583f https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda#e5ce43272193b38c2e9037446c1d9206 https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda#9d64911b31d57ca443e9f1e36b04385f -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda#5794b3bdc38177caf969dabd3af08549 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda#85072b0ad177c966294f129b7c04a2d5 https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_19.conda#42bf7eca1a951735fa06c0e3c0d5c8e6 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-8_hc00574d_netlib.conda#c7d3ff93656266175cf9d812e257d685 @@ -155,7 +156,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda#b53 https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda#ba3dcdc8584155c97c648ae9c044b7a3 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda#ffc17e785d64e12fc311af9184221839 https://conda.anaconda.org/conda-forge/noarch/mako-1.3.12-pyhcf101f3_0.conda#a73036dabdd6dfe9679ed893baa8b230 -https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda#c45fa7cf996b766cb63eadf3c3e6408a +https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda#5e2f9d485f398f312a6b0f17e11d9c6f https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda#f3549a4607ecf6f0bdbb4afe9b05f2d2 https://conda.anaconda.org/bioconda/noarch/snkmt-0.4.0-pyhdfd78af_0.conda#38ba1f1279491d848303cd050dfe56cc https://conda.anaconda.org/bioconda/noarch/snakemake-logger-plugin-snkmt-0.1.6-pyhdfd78af_0.conda#8fbd31325e6fbb325e15625471b44dfc @@ -167,7 +168,7 @@ https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py314h0f https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda#06ad944772941d5dae1e0d09848d8e49 https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda#145c6f2ac90174d9ad1a2a51b9d7c1dd https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda#38d9bf35a4cc83094a327811e548b660 +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda#7c683cb1ee6df789277df1dc0cc63111 https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda#aea31d2e5b1091feca96fcfe945c3cf9 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.4.1-hb03c661_0.conda#6178c6f2fb254558238ef4e6c56fb782 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda#6c77a605a7a689d17d4819c0f8ac9a00 @@ -184,7 +185,6 @@ https://conda.anaconda.org/conda-forge/linux-64/krb5-1.22.2-hbde042b_1.conda#541 https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.21.0-hcf29cc6_0.conda#dcd79cabd5d435f48d75db3d81cb5874 https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-he0df7b0_3.conda#031e33ae075b336c0ce92b14efa886c5 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda#d864d34357c3b65a4b731f78c0801dc4 -https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda#c80d8a3b84358cb967fa81e7075fbc8a https://conda.anaconda.org/conda-forge/linux-64/xerces-c-3.3.0-hd9031aa_1.conda#66a1db55ecdb7377d2b91f54cd56eafa https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda#7a3bff861a6583f1889021facefc08b1 https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda#ab3e3db511033340e75e7002e80ce8c0 @@ -257,7 +257,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.3-h73754d4_0.c https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.3-ha770c72_0.conda#e289f3d17880e44b633ba911d57a321b https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.19.1-h0c24ade_1.conda#8b3ce45e929cd8e8e5f4d18586b56d8b https://conda.anaconda.org/conda-forge/linux-64/pillow-12.2.0-py314h8ec4b1a_0.conda#76c4757c0ec9d11f969e8eb44899307b -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda#17d484ab9c8179c6a6e5b7dbb5065afc +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda#889febc66cd9e4190f80ef9718fa239b https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.15-hecca717_0.conda#cf09e9fc938518e91d0706572cadf17a https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda#861fb6ccbc677bb9a9fb2468430b9c6a https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda#96d57aba173e878a2089d5638016dc5e @@ -332,7 +332,7 @@ https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.c https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda#421a865222cd0c9d83ff08bc78bf3a61 https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda#8a9936643c4a9565459c4a8eb5d4e3ff https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda#fc49257102291bf3724c550e7ce4b188 -https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda#e8deca19695b2d6e31ada22746c164ec +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda#6854227473d4f98293c286e69931b8ac https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.28.0-pyhcf101f3_0.conda#83afc1048b879d3c2dd91f48ce78978f https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.75.0-pyhcf101f3_0.conda#d0f51913131d5b1ce26abaa7ff83a246 https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda#5fc3d86518a050fe18719eb49cd0e6ad @@ -501,7 +501,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libgd-2.3.3-h5fbf134_12.conda#88 https://conda.anaconda.org/conda-forge/linux-64/gts-0.7.6-h977cf35_4.conda#4d8df0b0db060d33c9a702ada998a8fe https://conda.anaconda.org/conda-forge/linux-64/xorg-libxinerama-1.1.6-hecca717_0.conda#93f5d4b5c17c8540479ad65f206fea51 https://conda.anaconda.org/conda-forge/linux-64/hicolor-icon-theme-0.17-ha770c72_3.conda#129e404c5b001f3ef5581316971e3ea0 -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda#e5a459d2bb98edb88de5a44bfad66b9d +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda#cfe66c21ae651b84a3d25a1dbb641a54 https://conda.anaconda.org/conda-forge/linux-64/epoxy-1.5.10-hb03c661_2.conda#057083b06ccf1c2778344b6dabace38b https://conda.anaconda.org/conda-forge/linux-64/atk-1.0-2.38.0-h04ea711_2.conda#f730d54ba9cd543666d7220c9f7ed563 https://conda.anaconda.org/conda-forge/linux-64/at-spi2-core-2.40.3-h0630a04_0.tar.bz2#8cb2fc4cd6cc63f1369cfa318f581cc3 @@ -512,7 +512,7 @@ https://conda.anaconda.org/conda-forge/linux-64/graphviz-14.1.2-h8b86629_0.conda https://conda.anaconda.org/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2#efc4b0c33bdf47312ad5a8a0587fa653 https://conda.anaconda.org/conda-forge/noarch/geojson-3.3.0-pyhd8ed1ab_0.conda#c3cee0e0843e38698c45dfec869e9888 https://conda.anaconda.org/conda-forge/noarch/descartes-1.1.0-pyhd8ed1ab_5.conda#4a25cae637029c5589135903aa15b3b6 -https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h9891dd4_0.conda#9b67bf9c63607097b6e010a7b555a388 +https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h97ea11e_1.conda#1c8698b2012012806ec17a062bb9f339 https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda#5498feb783ab29db6ca8845f68fa0f03 https://conda.anaconda.org/conda-forge/linux-64/numcodecs-0.16.5-py314ha0b5721_0.conda#780127fd34cd3b3c320c8e8d22ff4b0e https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda#c56a7fa5597ad78b62e1f5d21f7f8b8f @@ -529,7 +529,7 @@ https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.36-pyhd8ed1ab_0.conda#f740e8acb38ea16c22e60b6fc0ae7c9e https://conda.anaconda.org/conda-forge/noarch/arcosparse-0.5.1-pyhd8ed1ab_0.conda#3fab2110d93a828f88ace66e418d6ef8 https://conda.anaconda.org/conda-forge/noarch/copernicusmarine-2.4.1-pyhd8ed1ab_0.conda#690847cdb78772816f430fc91490f915 -https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda#0b9176cd15bf526d74fd6638df5194af +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda#1f739dc58e57c36a2a5452af6ff298f2 https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py314ha0b5721_1.conda#fe89c5fa422f215b0d75046ecd4667de https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 diff --git a/envs/default_osx-64.pin.txt b/envs/default_osx-64.pin.txt index 4eedf5f6a2..06757ad6a0 100644 --- a/envs/default_osx-64.pin.txt +++ b/envs/default_osx-64.pin.txt @@ -10,8 +10,7 @@ https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda#eefd https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda#a9965dd99f683c5f444428f896635716 https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.3-hc881268_0.conda#46be42ab403712fd349d007d763bf767 -https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda#627eca44e62e2b665eeec57a984a7f00 -https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda#4c019bd25570899d0f9755de01b89021 +https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda#7dd6b4bcbd437bba3358914e8598ecc0 https://conda.anaconda.org/conda-forge/osx-64/libmpdec-4.0.0-hf3981d6_1.conda#ec88ba8a245855935b871a7324373105 https://conda.anaconda.org/conda-forge/osx-64/liblzma-5.8.3-hbb4bfdb_0.conda#becdfbfe7049fa248e52aa37a9df09e2 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.5.2-hd1f9c09_0.conda#66a0dc7464927d0853b590b6f53ba3ea @@ -155,7 +154,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda#b53 https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda#ba3dcdc8584155c97c648ae9c044b7a3 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda#ffc17e785d64e12fc311af9184221839 https://conda.anaconda.org/conda-forge/noarch/mako-1.3.12-pyhcf101f3_0.conda#a73036dabdd6dfe9679ed893baa8b230 -https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda#c45fa7cf996b766cb63eadf3c3e6408a +https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda#5e2f9d485f398f312a6b0f17e11d9c6f https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda#f3549a4607ecf6f0bdbb4afe9b05f2d2 https://conda.anaconda.org/bioconda/noarch/snkmt-0.4.0-pyhdfd78af_0.conda#38ba1f1279491d848303cd050dfe56cc https://conda.anaconda.org/bioconda/noarch/snakemake-logger-plugin-snkmt-0.1.6-pyhdfd78af_0.conda#8fbd31325e6fbb325e15625471b44dfc @@ -167,7 +166,7 @@ https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.15-py314hd330 https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda#06ad944772941d5dae1e0d09848d8e49 https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda#145c6f2ac90174d9ad1a2a51b9d7c1dd https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c -https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda#b57460eab663465f43ab65a73f2e4c1c +https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda#4e0271ec4bdb2a378312dbcf86688f54 https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.6.0-hb807250_0.conda#7bb6608cf1f83578587297a158a6630b https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.1.4.1-ha1e9b39_0.conda#57cc1464d457d01ac78f5860b9ca1714 https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.25-h517ebb2_0.conda#31aa65919a729dc48180893f62c25221 @@ -181,6 +180,7 @@ https://conda.anaconda.org/conda-forge/osx-64/libedit-3.1.20250104-pl5321ha958cc https://conda.anaconda.org/conda-forge/osx-64/krb5-1.22.2-h3ddfcb2_1.conda#e070b249c4f9c6bddb7984a1a794e8df https://conda.anaconda.org/conda-forge/osx-64/libcurl-8.21.0-h8f0b9e4_0.conda#ee12fea9cd972edf0bd63f10a95f38d9 https://conda.anaconda.org/conda-forge/osx-64/proj-9.7.1-h4aacef1_3.conda#86a72148f2ace31569279a41c903f1be +https://conda.anaconda.org/conda-forge/osx-64/icu-78.3-h25d91c4_0.conda#627eca44e62e2b665eeec57a984a7f00 https://conda.anaconda.org/conda-forge/osx-64/xerces-c-3.3.0-ha8d0d41_1.conda#21338f14e1226ca108452b770e770455 https://conda.anaconda.org/conda-forge/osx-64/pcre2-10.47-h13923f0_0.conda#08f970fb2b75f5be27678e077ebedd46 https://conda.anaconda.org/conda-forge/osx-64/muparser-2.3.5-hb996559_0.conda#d3aa5571d7b5182dcfbf8beb92c434a1 @@ -252,7 +252,7 @@ https://conda.anaconda.org/conda-forge/osx-64/libfreetype-2.14.3-h694c41f_1.cond https://conda.anaconda.org/conda-forge/osx-64/lcms2-2.19.1-h5ea7634_1.conda#f8c168eefc1f75ada2e2cd8f2e6212f5 https://conda.anaconda.org/conda-forge/osx-64/pillow-12.2.0-py314hc904d5e_0.conda#fb32d458ddac23248e07a0830c6ffc7b https://conda.anaconda.org/conda-forge/osx-64/libintl-0.25.1-h3184127_1.conda#a8e54eefc65645193c46e8b180f62d22 -https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda#6cf119d472892f945d81187e790cc131 +https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda#6ed62b59574adb4c9629ed6932a51de7 https://conda.anaconda.org/conda-forge/osx-64/graphite2-1.3.15-hcc62823_0.conda#6a0525cf3166f16b9e156fb6b2cac5c0 https://conda.anaconda.org/conda-forge/osx-64/pixman-0.46.4-ha059160_1.conda#742a8552e51029585a32b6024e9f57b4 https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 @@ -319,7 +319,7 @@ https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.c https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda#421a865222cd0c9d83ff08bc78bf3a61 https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda#8a9936643c4a9565459c4a8eb5d4e3ff https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda#fc49257102291bf3724c550e7ce4b188 -https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda#e8deca19695b2d6e31ada22746c164ec +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda#6854227473d4f98293c286e69931b8ac https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.28.0-pyhcf101f3_0.conda#83afc1048b879d3c2dd91f48ce78978f https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.75.0-pyhcf101f3_0.conda#d0f51913131d5b1ce26abaa7ff83a246 https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda#5fc3d86518a050fe18719eb49cd0e6ad @@ -443,7 +443,7 @@ https://conda.anaconda.org/conda-forge/osx-64/librsvg-2.62.3-h7321050_0.conda#2d https://conda.anaconda.org/conda-forge/osx-64/libgd-2.3.3-hb2c11ec_12.conda#e12673b408d1eb708adb3ecc2f621d78 https://conda.anaconda.org/conda-forge/osx-64/gts-0.7.6-h53e17e3_4.conda#848cc963fcfbd063c7a023024aa3bec0 https://conda.anaconda.org/conda-forge/osx-64/hicolor-icon-theme-0.17-h694c41f_3.conda#690e5077aaccf8d280a4284d7c9ec6b4 -https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda#71618f9b86b1d1ff2678c3c196045ca1 +https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda#49adcd2aa24e9af0cdf38e9f180f7a35 https://conda.anaconda.org/conda-forge/osx-64/epoxy-1.5.10-h8616949_2.conda#efe7fa6c60b20cb0a3a22e8c3e7b721e https://conda.anaconda.org/conda-forge/osx-64/atk-1.0-2.38.0-h4bec284_2.conda#d9684247c943d492d9aac8687bc5db77 https://conda.anaconda.org/conda-forge/osx-64/gtk3-3.24.52-hf2d442a_0.conda#76be17e448c23c6d1c99a56c15b15925 @@ -452,7 +452,7 @@ https://conda.anaconda.org/conda-forge/osx-64/graphviz-14.1.2-h44fc223_0.conda#4 https://conda.anaconda.org/conda-forge/osx-64/glpk-5.0-h3cb5acd_0.tar.bz2#323537f09c8044f0352a8af30a6fc650 https://conda.anaconda.org/conda-forge/noarch/geojson-3.3.0-pyhd8ed1ab_0.conda#c3cee0e0843e38698c45dfec869e9888 https://conda.anaconda.org/conda-forge/noarch/descartes-1.1.0-pyhd8ed1ab_5.conda#4a25cae637029c5589135903aa15b3b6 -https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314h0963f2d_0.conda#d625059c40ae8c04611ec03f3b3ba356 +https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314hd6e1bd6_1.conda#e83e5e7facf32ac83965ec07ce9bcada https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda#5498feb783ab29db6ca8845f68fa0f03 https://conda.anaconda.org/conda-forge/osx-64/numcodecs-0.16.5-py314hc4308db_0.conda#44a8614dd3db9cfbd30cf8a4efa3553c https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda#c56a7fa5597ad78b62e1f5d21f7f8b8f @@ -469,7 +469,7 @@ https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.36-pyhd8ed1ab_0.conda#f740e8acb38ea16c22e60b6fc0ae7c9e https://conda.anaconda.org/conda-forge/noarch/arcosparse-0.5.1-pyhd8ed1ab_0.conda#3fab2110d93a828f88ace66e418d6ef8 https://conda.anaconda.org/conda-forge/noarch/copernicusmarine-2.4.1-pyhd8ed1ab_0.conda#690847cdb78772816f430fc91490f915 -https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda#0b9176cd15bf526d74fd6638df5194af +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda#1f739dc58e57c36a2a5452af6ff298f2 https://conda.anaconda.org/conda-forge/osx-64/cartopy-0.25.0-py314hc4308db_1.conda#86496825870c3bc6af922d58ed3ba613 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 diff --git a/envs/default_osx-arm64.pin.txt b/envs/default_osx-arm64.pin.txt index 8f09d60966..cdd2871a66 100644 --- a/envs/default_osx-arm64.pin.txt +++ b/envs/default_osx-arm64.pin.txt @@ -11,7 +11,7 @@ https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539 https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-hbd8a1cb_0.conda#a9965dd99f683c5f444428f896635716 https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.3-hd24854e_0.conda#8187a86242741725bfa74785fe812979 https://conda.anaconda.org/conda-forge/osx-arm64/icu-78.3-hef89b57_0.conda#f1182c91c0de31a7abd40cedf6a5ebef -https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda#1ebde5c677f00765233a17e278571177 +https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda#2749be4dc52f3a6699e9dea29b78410a https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h84a0fba_1.conda#57c4be259f5e0b99a5983799a228ae55 https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.3-h8088a28_0.conda#b1fd823b5ae54fbec272cea0811bd8a9 https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.5.2-hcf2aa1b_0.conda#43c04d9cb46ef176bb2a4c77e324d599 @@ -155,7 +155,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda#b53 https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda#ba3dcdc8584155c97c648ae9c044b7a3 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda#ffc17e785d64e12fc311af9184221839 https://conda.anaconda.org/conda-forge/noarch/mako-1.3.12-pyhcf101f3_0.conda#a73036dabdd6dfe9679ed893baa8b230 -https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda#c45fa7cf996b766cb63eadf3c3e6408a +https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda#5e2f9d485f398f312a6b0f17e11d9c6f https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda#f3549a4607ecf6f0bdbb4afe9b05f2d2 https://conda.anaconda.org/bioconda/noarch/snkmt-0.4.0-pyhdfd78af_0.conda#38ba1f1279491d848303cd050dfe56cc https://conda.anaconda.org/bioconda/noarch/snakemake-logger-plugin-snkmt-0.1.6-pyhdfd78af_0.conda#8fbd31325e6fbb325e15625471b44dfc @@ -167,7 +167,7 @@ https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.15-py314ha https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda#06ad944772941d5dae1e0d09848d8e49 https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda#145c6f2ac90174d9ad1a2a51b9d7c1dd https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c -https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda#a1036a11bb370ff199cac47cc6255b7f +https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda#725a35de8e373be31d2e1b5c7ef70a0a https://conda.anaconda.org/conda-forge/osx-arm64/libwebp-base-1.6.0-h07db88b_0.conda#e5e7d467f80da752be17796b87fe6385 https://conda.anaconda.org/conda-forge/osx-arm64/libjpeg-turbo-3.1.4.1-h84a0fba_0.conda#b8a7544c83a67258b0e8592ec6a5d322 https://conda.anaconda.org/conda-forge/osx-arm64/libdeflate-1.25-hc11a715_0.conda#a6130c709305cd9828b4e1bd9ba0000c @@ -252,7 +252,7 @@ https://conda.anaconda.org/conda-forge/osx-arm64/libfreetype-2.14.3-hce30654_1.c https://conda.anaconda.org/conda-forge/osx-arm64/lcms2-2.19.1-hdfa7624_1.conda#d2f2c7c10e2957647d45589b7701a453 https://conda.anaconda.org/conda-forge/osx-arm64/pillow-12.2.0-py314hab283cf_0.conda#adf49537da0e0c34cf735e71fe579506 https://conda.anaconda.org/conda-forge/osx-arm64/libintl-0.25.1-h493aca8_0.conda#5103f6a6b210a3912faf8d7db516918c -https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda#62d6f3b832d7d79ae0c0aa1bb3c325fa +https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda#03123cafdc96cef79fc8a615f9119b79 https://conda.anaconda.org/conda-forge/osx-arm64/graphite2-1.3.15-hf6b4638_0.conda#0d576cff278a2e60456d5b2c0a1ffda3 https://conda.anaconda.org/conda-forge/osx-arm64/pixman-0.46.4-h81086ad_1.conda#17c3d745db6ea72ae2fce17e7338547f https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 @@ -319,7 +319,7 @@ https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.c https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda#421a865222cd0c9d83ff08bc78bf3a61 https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda#8a9936643c4a9565459c4a8eb5d4e3ff https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda#fc49257102291bf3724c550e7ce4b188 -https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda#e8deca19695b2d6e31ada22746c164ec +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda#6854227473d4f98293c286e69931b8ac https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.28.0-pyhcf101f3_0.conda#83afc1048b879d3c2dd91f48ce78978f https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.75.0-pyhcf101f3_0.conda#d0f51913131d5b1ce26abaa7ff83a246 https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda#5fc3d86518a050fe18719eb49cd0e6ad @@ -439,7 +439,7 @@ https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.62.3-he8aa2a2_0.conda https://conda.anaconda.org/conda-forge/osx-arm64/libgd-2.3.3-h05bcc79_12.conda#fa4a92cfaae9570d89700a292a9ca714 https://conda.anaconda.org/conda-forge/osx-arm64/gts-0.7.6-he42f4ea_4.conda#21b4dd3098f63a74cf2aa9159cbef57d https://conda.anaconda.org/conda-forge/osx-arm64/hicolor-icon-theme-0.17-hce30654_3.conda#cfb39109ac5fa8601eb595d66d5bf156 -https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda#8d4580a91948a6c3383a7c2fbfe5311c +https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda#973a5ef252899cd0916418c75a864169 https://conda.anaconda.org/conda-forge/osx-arm64/epoxy-1.5.10-hc919400_2.conda#3b87dabebe54c6d66a07b97b53ac5874 https://conda.anaconda.org/conda-forge/osx-arm64/atk-1.0-2.38.0-hd03087b_2.conda#57301986d02d30d6805fdce6c99074ee https://conda.anaconda.org/conda-forge/osx-arm64/gtk3-3.24.52-hc0f3e19_0.conda#5557a2433b1339b8e536c264afea41ef @@ -448,7 +448,7 @@ https://conda.anaconda.org/conda-forge/osx-arm64/graphviz-14.1.2-hec8c438_0.cond https://conda.anaconda.org/conda-forge/osx-arm64/glpk-5.0-h6d7a090_0.tar.bz2#02b868940101a06a6365c109ab1a94fe https://conda.anaconda.org/conda-forge/noarch/geojson-3.3.0-pyhd8ed1ab_0.conda#c3cee0e0843e38698c45dfec869e9888 https://conda.anaconda.org/conda-forge/noarch/descartes-1.1.0-pyhd8ed1ab_5.conda#4a25cae637029c5589135903aa15b3b6 -https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314h6cfcd04_0.conda#7f80c3267c4b89767d7bbdf36d69fe80 +https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314hf8a3a22_1.conda#437187ee6b84e1cb787b8b8194478174 https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda#5498feb783ab29db6ca8845f68fa0f03 https://conda.anaconda.org/conda-forge/osx-arm64/numcodecs-0.16.5-py314ha3d490a_0.conda#0aaf2782f8b7e4ca443b0d83c2a1ffdf https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda#c56a7fa5597ad78b62e1f5d21f7f8b8f @@ -465,7 +465,7 @@ https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.36-pyhd8ed1ab_0.conda#f740e8acb38ea16c22e60b6fc0ae7c9e https://conda.anaconda.org/conda-forge/noarch/arcosparse-0.5.1-pyhd8ed1ab_0.conda#3fab2110d93a828f88ace66e418d6ef8 https://conda.anaconda.org/conda-forge/noarch/copernicusmarine-2.4.1-pyhd8ed1ab_0.conda#690847cdb78772816f430fc91490f915 -https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda#0b9176cd15bf526d74fd6638df5194af +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda#1f739dc58e57c36a2a5452af6ff298f2 https://conda.anaconda.org/conda-forge/osx-arm64/cartopy-0.25.0-py314ha3d490a_1.conda#5def62152c68e2343228e1b27a9338c0 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 diff --git a/envs/default_win-64.pin.txt b/envs/default_win-64.pin.txt index cdda585bb9..99dc56ba0e 100644 --- a/envs/default_win-64.pin.txt +++ b/envs/default_win-64.pin.txt @@ -12,7 +12,7 @@ https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda#0481bfd https://conda.anaconda.org/conda-forge/noarch/python_abi-3.14-8_cp314.conda#0539938c55b6b1a59b560e843ad864a4 https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.6.17-h4c7d964_0.conda#b9696b2cf00dfeec138c70cee38ed192 https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.3-hf411b9b_0.conda#e99f95734a326c0fd4d02bbd995150d4 -https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda#df294e7f9f24a6063f0e226f4d028fda +https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda#b510cd61047daf53a68be8daeb56b426 https://conda.anaconda.org/conda-forge/win-64/libmpdec-4.0.0-hfd05255_1.conda#e4a9fc2bba3b022dad998c78856afe47 https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.3-hfd05255_0.conda#8f83619ab1588b98dd99c90b0bfc5c6d https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h3d046cb_0.conda#720b39f5ec0610457b725eb3f396219a @@ -161,7 +161,7 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.4.1-pyhcf101f3_0.conda#b53 https://conda.anaconda.org/conda-forge/noarch/zipp-4.1.0-pyhcf101f3_0.conda#ba3dcdc8584155c97c648ae9c044b7a3 https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-9.0.0-pyhcf101f3_0.conda#ffc17e785d64e12fc311af9184221839 https://conda.anaconda.org/conda-forge/noarch/mako-1.3.12-pyhcf101f3_0.conda#a73036dabdd6dfe9679ed893baa8b230 -https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda#c45fa7cf996b766cb63eadf3c3e6408a +https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda#5e2f9d485f398f312a6b0f17e11d9c6f https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda#f3549a4607ecf6f0bdbb4afe9b05f2d2 https://conda.anaconda.org/bioconda/noarch/snkmt-0.4.0-pyhdfd78af_0.conda#38ba1f1279491d848303cd050dfe56cc https://conda.anaconda.org/bioconda/noarch/snakemake-logger-plugin-snkmt-0.1.6-pyhdfd78af_0.conda#8fbd31325e6fbb325e15625471b44dfc @@ -171,7 +171,7 @@ https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py314hc5db https://conda.anaconda.org/conda-forge/noarch/ruamel.yaml-0.19.1-pyhcf101f3_0.conda#06ad944772941d5dae1e0d09848d8e49 https://conda.anaconda.org/conda-forge/noarch/xarray-2025.6.1-pyhd8ed1ab_1.conda#145c6f2ac90174d9ad1a2a51b9d7c1dd https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda#9aa358575bbd4be126eaa5e0039f835c -https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda#58e6f936ab416fddc633d4105f43aea2 +https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda#7d8680823bb3bd9ee8d84d51dac62f9a https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.1.4.1-hfd05255_0.conda#25a127bad5470852b30b239f030ec95b https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.25-h51727cc_0.conda#e77030e67343e28b084fabd7db0ce43e https://conda.anaconda.org/conda-forge/win-64/lerc-4.1.0-hd936e49_0.conda#54b231d595bc1ff9bff668dd443ee012 @@ -246,7 +246,7 @@ https://conda.anaconda.org/conda-forge/win-64/libfreetype-2.14.3-h57928b3_1.cond https://conda.anaconda.org/conda-forge/win-64/lcms2-2.19.1-hf2c6c5f_1.conda#1df4012c8a2478699d07bc26af66d41e https://conda.anaconda.org/conda-forge/win-64/pillow-12.2.0-py314h61b30b5_0.conda#23ce08e46c625eb523ffef8939cb3ca9 https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda#2cf0cf76cc15d360dfa2f17fd6cf9772 -https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda#5fb838786a8317ebb38056bbe236d3ff +https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda#5be116480ef34a5646894d7f7cd7ae41 https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.15-hac47afa_0.conda#ff9a9bfe791f56b0227597a7651a6af0 https://conda.anaconda.org/conda-forge/win-64/pixman-0.46.4-h5112557_1.conda#08c8fa3b419df480d985e304f7884d35 https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda#49023d73832ef61042f6a237cb2687e7 @@ -316,7 +316,7 @@ https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhcf101f3_2.c https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda#421a865222cd0c9d83ff08bc78bf3a61 https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda#8a9936643c4a9565459c4a8eb5d4e3ff https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda#fc49257102291bf3724c550e7ce4b188 -https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda#e8deca19695b2d6e31ada22746c164ec +https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda#6854227473d4f98293c286e69931b8ac https://conda.anaconda.org/conda-forge/noarch/proto-plus-1.28.0-pyhcf101f3_0.conda#83afc1048b879d3c2dd91f48ce78978f https://conda.anaconda.org/conda-forge/noarch/googleapis-common-protos-1.75.0-pyhcf101f3_0.conda#d0f51913131d5b1ce26abaa7ff83a246 https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda#5fc3d86518a050fe18719eb49cd0e6ad @@ -446,7 +446,7 @@ https://conda.anaconda.org/conda-forge/win-64/graphviz-14.1.2-h4c50273_0.conda#a https://conda.anaconda.org/conda-forge/win-64/glpk-5.0-h8ffe710_0.tar.bz2#ff4181250d91940494d3127243a9d858 https://conda.anaconda.org/conda-forge/noarch/geojson-3.3.0-pyhd8ed1ab_0.conda#c3cee0e0843e38698c45dfec869e9888 https://conda.anaconda.org/conda-forge/noarch/descartes-1.1.0-pyhd8ed1ab_5.conda#4a25cae637029c5589135903aa15b3b6 -https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314h909e829_0.conda#a2bf7491b2d71489532f20db59f470c3 +https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314hf309875_1.conda#2a6b2dce5b76d32c67d11fcdd88ef037 https://conda.anaconda.org/conda-forge/noarch/deprecated-1.3.1-pyhd8ed1ab_1.conda#5498feb783ab29db6ca8845f68fa0f03 https://conda.anaconda.org/conda-forge/win-64/numcodecs-0.16.5-py314hd8fd7ce_0.conda#04b1473b12a9e487fa9c085223095b0d https://conda.anaconda.org/conda-forge/noarch/donfig-0.8.1.post1-pyhd8ed1ab_1.conda#c56a7fa5597ad78b62e1f5d21f7f8b8f @@ -463,7 +463,7 @@ https://conda.anaconda.org/conda-forge/noarch/s3transfer-0.19.0-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/boto3-1.43.36-pyhd8ed1ab_0.conda#f740e8acb38ea16c22e60b6fc0ae7c9e https://conda.anaconda.org/conda-forge/noarch/arcosparse-0.5.1-pyhd8ed1ab_0.conda#3fab2110d93a828f88ace66e418d6ef8 https://conda.anaconda.org/conda-forge/noarch/copernicusmarine-2.4.1-pyhd8ed1ab_0.conda#690847cdb78772816f430fc91490f915 -https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda#0b9176cd15bf526d74fd6638df5194af +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda#1f739dc58e57c36a2a5452af6ff298f2 https://conda.anaconda.org/conda-forge/win-64/cartopy-0.25.0-py314hd8fd7ce_1.conda#f087cf669551d9c98b68869395f311f4 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhf9edf01_1.conda#d7585b6550ad04c8c5e21097ada2888e https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda#9614359868482abba1bd15ce465e3c42 diff --git a/pixi.lock b/pixi.lock index a572214cf9..4ee9cee0ab 100644 --- a/pixi.lock +++ b/pixi.lock @@ -89,7 +89,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda @@ -161,7 +161,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda @@ -200,7 +200,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libscotch-7.0.11-int64_h807e49d_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspral-2025.09.18-h74cae3c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda @@ -229,7 +229,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-hd0bcaf9_1007.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.1-hb71707f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h9891dd4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h97ea11e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-include-5.8.2-h5a610fb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda @@ -284,7 +284,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/simplejson-4.1.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py314hc02f841_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -331,7 +331,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -407,7 +407,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -488,7 +488,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -590,7 +590,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -666,7 +666,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -746,7 +746,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -877,7 +877,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glpk-5.0-h3cb5acd_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda @@ -938,7 +938,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-netcdf-3.12.2-ha19e286_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-h8ac052b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.73.1-h451496d_1.conda @@ -967,7 +967,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-h16cd5d8_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.11-int64_hdc26f42_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda @@ -991,7 +991,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-h3023b02_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.2.1-he29b9bd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.2-h31caf2d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314h0963f2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314hd6e1bd6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-include-5.8.2-h6a5cfba_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-seq-5.8.2-h10d2f05_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/muparser-2.3.5-hb996559_0.conda @@ -1042,7 +1042,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/simplejson-4.1.1-py314h217eccc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.51-py314h0b69929_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py314hd1ec8a2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tbb-2023.0.0-he3dc2fa_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -1083,7 +1083,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -1159,7 +1159,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -1238,7 +1238,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -1366,7 +1366,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glpk-5.0-h6d7a090_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda @@ -1427,7 +1427,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.2-h4eb6350_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-head0a95_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-hfa3a374_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.73.1-h3063b79_1.conda @@ -1456,7 +1456,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha909e78_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.11-int64_hc5c7ca1_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda @@ -1480,7 +1480,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/metis-5.1.0-h15f6cfe_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.2.1-hdb7fadc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.2-h6bc93b0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314h6cfcd04_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314hf8a3a22_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-include-5.8.2-h2ca763e_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-seq-5.8.2-h49d0c1d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/muparser-2.3.5-h11e0b38_0.conda @@ -1531,7 +1531,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simplejson-4.1.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.51-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py314hdcf55e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-he0260a5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -1569,7 +1569,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -1645,7 +1645,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -1724,7 +1724,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -1907,7 +1907,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf4-3.12.2-h5bd48a5_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf5-3.12.2-h5260803_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-netcdf-3.12.2-h1c765f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.39.0-h19ee442_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.39.0-he04ea4c_0.conda @@ -1930,7 +1930,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2025.11.05-h0eb2380_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-haa95264_20.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-gpl_h0cd62ae_119.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h2e43b2f_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -1957,7 +1957,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-include-2026.0.0-h57928b3_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-static-2026.0.0-hfdbc840_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mpfr-4.2.2-h883a981_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314h909e829_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314hf309875_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mumps-seq-5.8.2-h607cc0b_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/muparser-2.3.5-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/netcdf4-1.7.3-nompi_py314h640c526_100.conda @@ -2008,7 +2008,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/simplejson-4.1.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py314h2dcd201_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -2124,7 +2124,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda @@ -2196,7 +2196,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda @@ -2236,7 +2236,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspral-2025.09.18-h74cae3c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda @@ -2265,7 +2265,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-hd0bcaf9_1007.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.1-hb71707f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h9891dd4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h97ea11e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-include-5.8.2-h5a610fb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda @@ -2313,7 +2313,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py314h0f05182_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.19-h6a952e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.20-h6a952e8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.6.2-he8a4886_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py314hf09ca88_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scip-10.0.2-h6576b78_1.conda @@ -2322,7 +2322,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/simplejson-4.1.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py314hc02f841_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -2371,7 +2371,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -2459,7 +2459,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -2576,7 +2576,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -2694,7 +2694,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -2783,7 +2783,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -2899,7 +2899,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -3049,7 +3049,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glpk-5.0-h3cb5acd_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda @@ -3110,7 +3110,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-netcdf-3.12.2-ha19e286_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-h8ac052b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.73.1-h451496d_1.conda @@ -3140,7 +3140,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.11-int64_hdc26f42_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda @@ -3164,7 +3164,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-h3023b02_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.2.1-he29b9bd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.2-h31caf2d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314h0963f2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314hd6e1bd6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-include-5.8.2-h6a5cfba_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-seq-5.8.2-h10d2f05_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/muparser-2.3.5-hb996559_0.conda @@ -3211,7 +3211,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-2026.5.1-py314h1d56075_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.15-py314hd330473_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.19-h1ddadc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.20-h1ddadc8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py314he40e093_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scip-10.0.2-h1609d71_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.18.0-py314h5727af0_0.conda @@ -3219,7 +3219,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/simplejson-4.1.1-py314h217eccc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.51-py314h0b69929_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py314hd1ec8a2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tbb-2023.0.0-he3dc2fa_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -3262,7 +3262,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -3351,7 +3351,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -3466,7 +3466,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -3613,7 +3613,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glpk-5.0-h6d7a090_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda @@ -3674,7 +3674,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.2-h4eb6350_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-head0a95_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-hfa3a374_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.73.1-h3063b79_1.conda @@ -3704,7 +3704,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.11-int64_hc5c7ca1_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda @@ -3728,7 +3728,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/metis-5.1.0-h15f6cfe_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.2.1-hdb7fadc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.2-h6bc93b0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314h6cfcd04_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314hf8a3a22_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-include-5.8.2-h2ca763e_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-seq-5.8.2-h49d0c1d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/muparser-2.3.5-h11e0b38_0.conda @@ -3775,7 +3775,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.15-py314ha14b1ff_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.19-h80928e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.20-h80928e0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py314h15f0f0f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scip-10.0.2-ha8121a5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda @@ -3783,7 +3783,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simplejson-4.1.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.51-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py314hdcf55e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-he0260a5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -3823,7 +3823,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -3911,7 +3911,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -4026,7 +4026,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -4228,7 +4228,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf4-3.12.2-h5bd48a5_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf5-3.12.2-h5260803_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-netcdf-3.12.2-h1c765f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.39.0-h19ee442_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.39.0-he04ea4c_0.conda @@ -4252,7 +4252,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-haa95264_20.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-gpl_h0cd62ae_119.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h2e43b2f_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -4279,7 +4279,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-include-2026.0.0-h57928b3_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-static-2026.0.0-hfdbc840_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mpfr-4.2.2-h883a981_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314h909e829_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314hf309875_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mumps-seq-5.8.2-h607cc0b_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/muparser-2.3.5-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/netcdf4-1.7.3-nompi_py314h640c526_100.conda @@ -4325,7 +4325,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2025.11.05-ha104f34_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py314hc5dbbe4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.19-h45713df_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.20-h45713df_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.8.0-np2py314h1b5b07a_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scip-10.0.2-h10a4840_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda @@ -4333,7 +4333,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/simplejson-4.1.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py314h2dcd201_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -4540,7 +4540,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/librsvg-2.58.4-he92a37e_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/librttopo-1.1.0-hd718a1a_18.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-he17ca71_14.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda @@ -4563,7 +4563,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.7-py312h7900ff3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.7-py312he3d6523_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.1-hb71707f_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312hd9148b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.6-hdb14827_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.4-nompi_py312h25f8dc5_102.conda @@ -4612,7 +4612,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/scipy-1.17.1-py312h54fa4ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/shapely-2.0.7-py312h21f5128_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py312h4f23490_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tabula-py-2.7.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -4716,7 +4716,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.30.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -4786,7 +4786,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pypandoc-1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda @@ -4805,8 +4805,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.1.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.1.2-hc34e891_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.2.0-he0c3440_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda @@ -4910,7 +4910,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.30.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -4979,7 +4979,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pypandoc-1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda @@ -4998,8 +4998,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.1.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.1.2-hc34e891_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.2.0-he0c3440_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda @@ -5164,7 +5164,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/librsvg-2.58.4-h21a6cfa_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-hd2ea1e3_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-hf0eb338_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda @@ -5182,7 +5182,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-3.10.7-py312hb401068_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.10.7-py312h7894933_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.2.1-he29b9bd_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py312hdb80668_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py312hb1dc2e7_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/multidict-6.7.1-py312hfc03ebc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.6-hcc0dc9a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/netcdf4-1.7.4-nompi_py312h6ec3a75_102.conda @@ -5227,7 +5227,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.17.1-py312h6309490_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/shapely-2.0.7-py312hbf10b29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py312h391ab28_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tabula-py-2.7.0-py312hb401068_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -5314,7 +5314,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.30.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -5383,7 +5383,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pypandoc-1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda @@ -5402,8 +5402,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.1.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.1.2-hc34e891_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.2.0-he0c3440_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda @@ -5568,7 +5568,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librsvg-2.58.4-h266df6f_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-h26cc057_18.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-hea0a7cd_14.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1b79a29_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1b79a29_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda @@ -5586,7 +5586,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-3.10.7-py312h1f38498_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/matplotlib-base-3.10.7-py312h605b88b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.2.1-hdb7fadc_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py312h766f71e_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py312h3093aea_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.7.1-py312h43af8aa_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.6-h1d4f5a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/netcdf4-1.7.4-nompi_py312h5d59a02_102.conda @@ -5631,7 +5631,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.17.1-py312h4519d97_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/shapely-2.0.7-py312hf733f26_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h85ec8f2_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h85ec8f2_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py312ha11c99a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tabula-py-2.7.0-py312h81bd7bf_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -5717,7 +5717,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.30.3-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.6.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -5787,7 +5787,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pypandoc-1.17-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.0.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda @@ -5807,8 +5807,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.2-hd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.2-pyhd8ed1ab_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.1.2-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.1.2-hc34e891_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.2.0-he0c3440_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smart_open-7.6.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/smmap-5.0.3-pyhcf101f3_1.conda @@ -5960,7 +5960,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2025.11.05-h04e5de1_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-hbfc9ebc_18.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-h378fb81_14.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h2e43b2f_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -5981,7 +5981,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/minizip-4.2.1-h0ffbb96_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-include-2025.3.1-h57928b3_13.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-static-2025.3.1-hfdbc840_13.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312hf90b1b7_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312h78d62e6_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/multidict-6.7.1-py312h05f76fc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/netcdf4-1.7.4-nompi_py312h8fa77f8_102.conda - conda: https://conda.anaconda.org/conda-forge/win-64/numexpr-2.14.1-py312h0c4f959_102.conda @@ -6027,7 +6027,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.17.1-py312h9b3c559_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/shapely-2.0.7-py312h3f81574_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py312h196c9fc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/symlink-exe-runtime-1.0-hfd05255_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tabula-py-2.7.0-py312h2e8e312_2.conda @@ -6139,7 +6139,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda @@ -6212,7 +6212,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda @@ -6249,7 +6249,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libscotch-7.0.11-int64_h807e49d_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspral-2025.09.18-h74cae3c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda @@ -6278,7 +6278,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-hd0bcaf9_1007.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.1-hb71707f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312hd9148b4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-include-5.8.2-h5a610fb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda @@ -6335,7 +6335,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/simplejson-4.1.1-py312h4c3975b_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py312h5253ce2_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py312h4f23490_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -6382,7 +6382,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.1-pyhcf101f3_0.conda @@ -6457,7 +6457,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -6541,7 +6541,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-explorer-0.1.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -6642,7 +6642,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.1-pyhcf101f3_0.conda @@ -6717,7 +6717,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -6800,7 +6800,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-explorer-0.1.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -6930,7 +6930,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glpk-5.0-h3cb5acd_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda @@ -6992,7 +6992,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-netcdf-3.12.2-ha19e286_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-h8ac052b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.73.1-h451496d_1.conda @@ -7020,7 +7020,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/librttopo-1.1.0-h16cd5d8_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.11-int64_hdc26f42_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda @@ -7044,7 +7044,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-h3023b02_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.2.1-he29b9bd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.2-h31caf2d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py313h862c624_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py313h224b87c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/multidict-6.7.1-py313h84cef87_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-include-5.8.2-h6a5cfba_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-seq-5.8.2-h10d2f05_2.conda @@ -7097,7 +7097,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/simplejson-4.1.1-py313hf59fe81_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.51-py313h22ab4a2_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py313h0f4b8c3_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tbb-2023.0.0-he3dc2fa_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -7137,7 +7137,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.1-pyhcf101f3_0.conda @@ -7212,7 +7212,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -7294,7 +7294,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-explorer-0.1.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -7421,7 +7421,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glpk-5.0-h6d7a090_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda @@ -7483,7 +7483,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.2-h4eb6350_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-head0a95_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-hfa3a374_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.73.1-h3063b79_1.conda @@ -7511,7 +7511,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/librttopo-1.1.0-ha909e78_20.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.11-int64_hc5c7ca1_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda @@ -7535,7 +7535,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/metis-5.1.0-h15f6cfe_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.2.1-hdb7fadc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.2-h6bc93b0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py313h5c29297_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py313h2af2deb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.7.1-py313haf6918d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-include-5.8.2-h2ca763e_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-seq-5.8.2-h49d0c1d_2.conda @@ -7588,7 +7588,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simplejson-4.1.1-py313h0997733_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.51-py313h6688731_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py313hc577518_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-he0260a5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -7625,7 +7625,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohappyeyeballs-2.6.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/anyio-4.14.1-pyhcf101f3_0.conda @@ -7700,7 +7700,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.5.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -7782,7 +7782,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-explorer-0.1.1-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -7966,7 +7966,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf4-3.12.2-h5bd48a5_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf5-3.12.2-h5260803_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-netcdf-3.12.2-h1c765f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.39.0-h19ee442_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.39.0-he04ea4c_0.conda @@ -7989,7 +7989,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libre2-11-2025.11.05-h0eb2380_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-haa95264_20.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-gpl_h0cd62ae_119.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h2e43b2f_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -8014,7 +8014,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.11.0-py313hd54256a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/minizip-4.2.1-h0ffbb96_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mpfr-4.2.2-h883a981_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py313hf069bd2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py313h1a38498_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/multidict-6.7.1-py313hd650c13_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mumps-seq-5.8.2-h607cc0b_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/muparser-2.3.5-he0c23c2_0.conda @@ -8066,7 +8066,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/simplejson-4.1.1-py313h5ea7bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py313h5fd188c_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py313h0591002_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -8183,7 +8183,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/glpk-5.0-h445213a_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/gmp-6.3.0-hac33072_2.conda @@ -8255,7 +8255,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgl-devel-1.7.0-ha4b6fd6_3.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.3-h5888daf_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_3.conda @@ -8295,7 +8295,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libsodium-1.0.22-h280c20c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspatialite-5.1.0-gpl_h2abfd87_119.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libspral-2025.09.18-h74cae3c_2.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_19.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_19.conda @@ -8324,7 +8324,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/metis-5.1.0-hd0bcaf9_1007.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/minizip-4.2.1-hb71707f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mpfr-4.2.2-he0a73b1_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h9891dd4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h97ea11e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-include-5.8.2-h5a610fb_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/mumps-seq-5.8.2-hc1b3267_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/muparser-2.3.5-h5888daf_0.conda @@ -8372,7 +8372,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/rpds-py-2026.5.1-py314h1bee95f_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ruamel.yaml.clib-0.2.15-py314h0f05182_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.19-h6a952e8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.20-h6a952e8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.6.2-he8a4886_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scikit-learn-1.8.0-np2py314hf09ca88_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/scip-10.0.2-h6576b78_1.conda @@ -8381,7 +8381,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/simplejson-4.1.1-py314h5bd0f2a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlalchemy-2.0.51-py314h0f05182_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py314hc02f841_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tbb-2023.0.0-hab88423_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda @@ -8430,7 +8430,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -8518,7 +8518,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -8635,7 +8635,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -8753,7 +8753,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -8842,7 +8842,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -8958,7 +8958,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -9108,7 +9108,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/geos-3.14.1-he483b9e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/gflags-2.2.2-hac325c4_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/giflib-5.2.2-h10d778d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/glpk-5.0-h3cb5acd_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/gmp-6.3.0-hf036a51_2.conda @@ -9169,7 +9169,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libgdal-netcdf-3.12.2-ha19e286_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran-15.2.0-h7e5c614_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-15.2.0-hd16e46c_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-storage-2.39.0-h8ac052b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libgrpc-1.73.1-h451496d_1.conda @@ -9199,7 +9199,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libscotch-7.0.11-int64_hdc26f42_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.22-ha3d0635_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libspatialite-5.1.0-gpl_hb921464_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libthrift-0.22.0-hebea4ca_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libtiff-4.7.1-ha0a348c_1.conda @@ -9223,7 +9223,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/metis-5.1.0-h3023b02_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/minizip-4.2.1-he29b9bd_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mpfr-4.2.2-h31caf2d_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314h0963f2d_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314hd6e1bd6_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-include-5.8.2-h6a5cfba_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/mumps-seq-5.8.2-h10d2f05_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/muparser-2.3.5-hb996559_0.conda @@ -9270,7 +9270,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.3-h68b038d_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/rpds-py-2026.5.1-py314h1d56075_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ruamel.yaml.clib-0.2.15-py314hd330473_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.19-h1ddadc8_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.20-h1ddadc8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.8.0-np2py314he40e093_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scip-10.0.2-h1609d71_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/scipy-1.18.0-py314h5727af0_0.conda @@ -9278,7 +9278,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/simplejson-4.1.1-py314h217eccc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/snappy-1.2.2-h01f5ddf_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlalchemy-2.0.51-py314h0b69929_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py314hd1ec8a2_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tbb-2023.0.0-he3dc2fa_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/tk-8.6.13-h7142dee_3.conda @@ -9321,7 +9321,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -9410,7 +9410,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -9525,7 +9525,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -9672,7 +9672,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/geos-3.14.1-h5afe852_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gflags-2.2.2-hf9b8971_1005.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/giflib-5.2.2-h93a5062_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glpk-5.0-h6d7a090_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/gmp-6.3.0-h7bae524_2.conda @@ -9733,7 +9733,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgdal-netcdf-3.12.2-h4eb6350_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran-15.2.0-h07b0088_19.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgfortran5-15.2.0-hdae7583_19.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-head0a95_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-storage-2.39.0-hfa3a374_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgrpc-1.73.1-h3063b79_1.conda @@ -9763,7 +9763,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libscotch-7.0.11-int64_hc5c7ca1_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.22-h1a92334_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libspatialite-5.1.0-gpl_ha239c29_119.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libthrift-0.22.0-h1fb9c8a_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libtiff-4.7.1-h4030677_1.conda @@ -9787,7 +9787,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/metis-5.1.0-h15f6cfe_1007.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/minizip-4.2.1-hdb7fadc_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mpfr-4.2.2-h6bc93b0_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314h6cfcd04_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314hf8a3a22_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-include-5.8.2-h2ca763e_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/mumps-seq-5.8.2-h49d0c1d_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/muparser-2.3.5-h11e0b38_0.conda @@ -9834,7 +9834,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.3-h46df422_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/rpds-py-2026.5.1-py314he1d1ac0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruamel.yaml.clib-0.2.15-py314ha14b1ff_1.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.19-h80928e0_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.20-h80928e0_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.8.0-np2py314h15f0f0f_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scip-10.0.2-ha8121a5_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scipy-1.18.0-py314h18e1515_0.conda @@ -9842,7 +9842,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/simplejson-4.1.1-py314h6c2aa35_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/snappy-1.2.2-hada39a4_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlalchemy-2.0.51-py314ha14b1ff_0.conda - - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py314hdcf55e8_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tbb-2023.0.0-he0260a5_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h010d191_3.conda @@ -9882,7 +9882,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/aiohttp-3.14.1-pyhf64b827_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosignal-1.4.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/aiosqlite-0.21.0-pyhaa4b35c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-doc-0.0.4-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/annotated-types-0.7.0-pyhd8ed1ab_1.conda @@ -9970,7 +9970,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/gitdb-4.0.12-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/gitpython-3.1.50-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-api-core-2.31.0-pyhcf101f3_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-storage-3.12.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/google-resumable-media-2.8.0-pyhd8ed1ab_0.conda @@ -10085,7 +10085,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyopenssl-26.3.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pypsa-1.1.2-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pystac-1.14.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-9.1.1-pyhc364b38_2.conda @@ -10287,7 +10287,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf4-3.12.2-h5bd48a5_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-hdf5-3.12.2-h5260803_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgdal-netcdf-3.12.2-h1c765f5_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-2.39.0-h19ee442_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libgoogle-cloud-storage-2.39.0-he04ea4c_0.conda @@ -10311,7 +10311,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/librttopo-1.1.0-haa95264_20.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.22-h6a83c73_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libspatialite-5.1.0-gpl_h0cd62ae_119.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libthrift-0.22.0-h2e43b2f_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.7.1-h8f73337_1.conda @@ -10338,7 +10338,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-include-2026.0.0-h57928b3_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mkl-static-2026.0.0-hfdbc840_908.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mpfr-4.2.2-h883a981_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314h909e829_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314hf309875_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/mumps-seq-5.8.2-h607cc0b_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/muparser-2.3.5-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/netcdf4-1.7.3-nompi_py314h640c526_100.conda @@ -10384,7 +10384,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/re2-2025.11.05-ha104f34_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/rpds-py-2026.5.1-py314hc980628_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/ruamel.yaml.clib-0.2.15-py314hc5dbbe4_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.19-h45713df_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.20-h45713df_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.8.0-np2py314h1b5b07a_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scip-10.0.2-h10a4840_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.18.0-py314h221f224_0.conda @@ -10392,7 +10392,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/simplejson-4.1.1-py314h5a2d7ad_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/snappy-1.2.2-h7fa0ca8_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/sqlalchemy-2.0.51-py314hc5dbbe4_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py314h2dcd201_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tbb-2023.0.0-hd3d4ead_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h6ed50ae_3.conda @@ -12592,18 +12592,18 @@ packages: run_exports: {} size: 116716 timestamp: 1754315054614 -- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.1-hee1de02_2.conda - sha256: ae41fd5c867bc4e713a8cc1dc06f5b418026fec116cc222abe33e94235c6b241 - md5: e5a459d2bb98edb88de5a44bfad66b9d +- conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.88.2-h8094192_0.conda + sha256: 079757e4e0497d67505b52062668e4cc0d2a86ec065ae2c0c57487a178206061 + md5: cfe66c21ae651b84a3d25a1dbb641a54 depends: - - libglib ==2.88.1 h0d30a3d_2 + - libglib ==2.88.2 h0d30a3d_0 - libffi - libgcc >=14 - __glibc >=2.17,<3.0.a0 license: LGPL-2.1-or-later run_exports: {} - size: 236955 - timestamp: 1778508800134 + size: 238517 + timestamp: 1782463895250 - conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 md5: ff862eebdfeb2fd048ae9dc92510baca @@ -14448,24 +14448,24 @@ packages: - libglib >=2.84.3,<3.0a0 size: 3961899 timestamp: 1754315006443 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.1-h0d30a3d_2.conda - sha256: 33eb5d5310a5c2c0a4707a0afa644801c2e08c8f70c45e1f62f354116dfe0970 - md5: 17d484ab9c8179c6a6e5b7dbb5065afc +- conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.88.2-h0d30a3d_0.conda + sha256: 4bee10e62796f01e4fa2b5849135b1cc061337fe9cf5eb9bd79e9664922ae0e4 + md5: 889febc66cd9e4190f80ef9718fa239b depends: - - __glibc >=2.17,<3.0.a0 - libgcc >=14 + - __glibc >=2.17,<3.0.a0 + - libiconv >=1.18,<2.0a0 + - libzlib >=1.3.2,<2.0a0 - libffi >=3.5.2,<3.6.0a0 - pcre2 >=10.47,<10.48.0a0 - - libzlib >=1.3.2,<2.0a0 - - libiconv >=1.18,<2.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later run_exports: weak: - - libglib >=2.88.1,<3.0a0 - size: 4754097 - timestamp: 1778508800134 + - libglib >=2.88.2,<3.0a0 + size: 4754220 + timestamp: 1782463895250 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglu-9.0.3-h5888daf_1.conda sha256: a0105eb88f76073bbb30169312e797ed5449ebb4e964a756104d6e54633d17ef md5: 8422fcc9e5e172c91e99aef703b3ce65 @@ -15310,9 +15310,9 @@ packages: - libspral >=2025.9.18,<2025.9.19.0a0 size: 360426 timestamp: 1778770889939 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_0.conda - sha256: 1ab603b6ec93933e76027e1f23b21b22b858ba1b56f1e1695ef6fe5e80cb7358 - md5: 062b0ac602fb0adf250e3dfa86f221c4 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-h0c1763c_1.conda + sha256: b86913fdd4e6882293c27f42573f6a425fc144de56a8f095fb728a759b884237 + md5: 0b98c49f3100288833c734a9f04c0197 depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 @@ -15321,8 +15321,22 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 957849 - timestamp: 1780574429573 + size: 961487 + timestamp: 1782406540298 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.53.2-hf4e2dac_1.conda + sha256: f2ad4d3abd4ed7a6a0d28c0ff153e27cb45c406814faa2570bc2581804283674 + md5: f283e98005089bf29ac5774c2e209fbf + depends: + - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 + - libgcc >=14 + - libzlib >=1.3.2,<2.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 964141 + timestamp: 1782406552467 - conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 md5: eecce068c7e4eddeb169591baac20ac4 @@ -15953,34 +15967,34 @@ packages: - mpfr >=4.2.2,<5.0a0 size: 730422 timestamp: 1773413915171 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312hd9148b4_0.conda - sha256: cb47e612ae50b589d6370eaacad826864894434515ac441898c790f635ba2c40 - md5: 7d3516af126c9f5330f31622350a443e +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py312h0a2e395_1.conda + sha256: c9764c77dd7f9c581c1d8a24c3024edf777cacfb5a4180de5badc6638dc8590f + md5: a142257c1b69e37cfefc66dc228a4d93 depends: + - python - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - libstdcxx >=14 - - python >=3.12,<3.13.0a0 + - libgcc >=14 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 102104 - timestamp: 1782070372383 -- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h9891dd4_0.conda - sha256: bbbb210e90dbd8c9ddba24730aca81aefe23f5ecaf79a81b6740e0dbd25f7b21 - md5: 9b67bf9c63607097b6e010a7b555a388 + size: 112800 + timestamp: 1782460774570 +- conda: https://conda.anaconda.org/conda-forge/linux-64/msgpack-python-1.2.1-py314h97ea11e_1.conda + sha256: f33032ef3dcb8759309e8a55b0cb989e377ce315122bb86b00c0adbcf6665abf + md5: 1c8698b2012012806ec17a062bb9f339 depends: + - python - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - libstdcxx >=14 - - python >=3.14,<3.15.0a0 + - libgcc >=14 - python_abi 3.14.* *_cp314 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 103513 - timestamp: 1782070374726 + size: 113343 + timestamp: 1782460776477 - conda: https://conda.anaconda.org/conda-forge/linux-64/multidict-6.7.1-py312h8a5da7c_0.conda sha256: 0da7e7f4e69bfd6c98eff92523e93a0eceeaec1c6d503d4a4cd0af816c3fe3dc md5: 17c77acc59407701b54404cfd3639cac @@ -17940,10 +17954,10 @@ packages: run_exports: {} size: 150041 timestamp: 1766159514023 -- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.19-h6a952e8_0.conda +- conda: https://conda.anaconda.org/conda-forge/linux-64/ruff-0.15.20-h6a952e8_0.conda noarch: python - sha256: 6791056748e4c4d06a286d1b591b2543764988b85d91ae12284635ae7f81de80 - md5: a7fb4598acb68a071b45d53820ff8812 + sha256: 4c10593eb248ae3b626ebfc2991bd67df96cb98a51816939188576237c54deee + md5: d9b134cef9bc26a9ed9a0fba1eff3356 depends: - python - __glibc >=2.17,<3.0.a0 @@ -17953,8 +17967,8 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 9506544 - timestamp: 1782288610637 + size: 9342178 + timestamp: 1782428525856 - conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.5.26-h5ac9029_0.conda sha256: 14acdf5685f457988dba0053b9d29f1861b1c8fff6da13ec863d6a2b6ac75bff md5: 0cfd80e699ae130623c0f42c6c6cf798 @@ -18248,13 +18262,14 @@ packages: run_exports: {} size: 4034632 timestamp: 1781547880247 -- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_0.conda - sha256: b7c3217b437f8aa531b4a18c89dc137b6066757f1e93146dc0d8d999ef55da09 - md5: 38d9bf35a4cc83094a327811e548b660 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-h04a0ce9_1.conda + sha256: e26c4cbcba43c2621f23e2df17abf8c823e93ef187796a1e352356b4d8aa807e + md5: 7c683cb1ee6df789277df1dc0cc63111 depends: - __glibc >=2.17,<3.0.a0 + - icu >=78.3,<79.0a0 - libgcc >=14 - - libsqlite 3.53.2 h0c1763c_0 + - libsqlite 3.53.2 hf4e2dac_1 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 @@ -18262,8 +18277,24 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 205545 - timestamp: 1780574435288 + size: 206428 + timestamp: 1782406558426 +- conda: https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.53.2-hbc0de68_1.conda + sha256: 721f9031814fc85b158b149110260770ad1ecd272885416a80921bca9f1327c3 + md5: 35f8daae80c1fa2b193d7d02730258c9 + depends: + - __glibc >=2.17,<3.0.a0 + - libgcc >=14 + - libsqlite 3.53.2 h0c1763c_1 + - libzlib >=1.3.2,<2.0a0 + - ncurses >=6.6,<7.0a0 + - readline >=8.3,<9.0a0 + license: blessing + run_exports: + weak: + - libsqlite >=3.53.2,<4.0a0 + size: 206200 + timestamp: 1782406545707 - conda: https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.6-py312h4f23490_0.conda sha256: 0c61eccf3f71b9812da8ced747b1f22bafd6f66f9a64abe06bbe147a03b7322e md5: 423b8676bd6eed60e97097b33f13ea3f @@ -19123,9 +19154,9 @@ packages: run_exports: {} size: 19715 timestamp: 1754034676396 -- conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.4-pyhcf101f3_0.conda - sha256: 83fc576dbcd59427f55be9623e1b101a1607ed9b4dc8633d86ada30c6ec1cf1d - md5: c45fa7cf996b766cb63eadf3c3e6408a +- conda: https://conda.anaconda.org/conda-forge/noarch/alembic-1.18.5-pyhcf101f3_0.conda + sha256: 3d523e517cb0b2a3cbfaf56a6f0d897062ab741eab1a8a4b3cc415a42bdef20a + md5: 5e2f9d485f398f312a6b0f17e11d9c6f depends: - python >=3.10 - sqlalchemy >=1.4.23 @@ -19136,8 +19167,8 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 184763 - timestamp: 1770806831769 + size: 185355 + timestamp: 1782460469542 - conda: https://conda.anaconda.org/conda-forge/noarch/amply-0.1.7-pyhd8ed1ab_0.conda sha256: a21c69c91d735faaf7b74dc2b3d013b14016951b66354461fc1d796caab9b1c4 md5: 69a01a9927733014f3955861e2969a7b @@ -20482,9 +20513,9 @@ packages: run_exports: {} size: 104917 timestamp: 1780524584750 -- conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.0-pyhcf101f3_0.conda - sha256: 5f82956159783647b46678a9af687dc6d9f0efd4b662d98ba94fc54f2cdd9218 - md5: e8deca19695b2d6e31ada22746c164ec +- conda: https://conda.anaconda.org/conda-forge/noarch/google-auth-2.55.1-pyhcf101f3_0.conda + sha256: c26854443379c838f48a2a76de066778d23b2a02af068227e47ec1465af970ef + md5: 6854227473d4f98293c286e69931b8ac depends: - python >=3.10 - pyasn1-modules >=0.2.1 @@ -20498,8 +20529,8 @@ packages: license: Apache-2.0 license_family: APACHE run_exports: {} - size: 150332 - timestamp: 1781607968342 + size: 150557 + timestamp: 1782460661361 - conda: https://conda.anaconda.org/conda-forge/noarch/google-cloud-core-2.4.3-pyhd8ed1ab_0.conda sha256: 3e674119e8ff016a0ddd6128c3709a7a449b1dc02088e242b5df349d120ca466 md5: 7a191cc7d8d50e6dd565f15c1b92170b @@ -22785,17 +22816,17 @@ packages: run_exports: {} size: 44699 timestamp: 1770992960710 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.2-pyhcf101f3_0.conda - sha256: 23cedb25c67c83308f235a11d4eaa2f2cf0825850e8711f2ebde04cdabe9b119 - md5: 0b9176cd15bf526d74fd6638df5194af +- conda: https://conda.anaconda.org/conda-forge/noarch/pyshp-3.1.3-pyhcf101f3_0.conda + sha256: 03d5a483bfa61675c44697663b7b619af2936b0a005820a8cb8daa875cc80f6c + md5: 1f739dc58e57c36a2a5452af6ff298f2 depends: - python >=3.10 - python license: MIT license_family: MIT run_exports: {} - size: 504983 - timestamp: 1782386671531 + size: 507481 + timestamp: 1782424408338 - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -23392,9 +23423,9 @@ packages: run_exports: {} size: 639697 timestamp: 1773074868565 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.1.2-pyhcf101f3_0.conda - sha256: 96a017d8edec2bf561585613e122d3d5a06683c360aefa9a41fd12ddf0c7672e - md5: 01e4f42b457f48ee8930e1eb61d749f1 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-scm-10.2.0-pyhcf101f3_0.conda + sha256: 8272686bacba85b683bf4ad1fedde16203b7610276074e22593a275b0ce3c017 + md5: 224418e442ea786882979fbd2b36061f depends: - python >=3.10 - vcs_versioning >=2.0.0.dev0 @@ -23406,18 +23437,18 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 29271 - timestamp: 1782211742106 -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.1.2-hc34e891_0.conda - sha256: 3ff569f739c3ae549ed450feab3d47f9de5183c37a591403be0f46228641af65 - md5: c2e0782d623a5c181cc83b19cfcc0b56 + size: 28577 + timestamp: 1782401906421 +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools_scm-10.2.0-he0c3440_0.conda + sha256: da16cd83d7bb21dc9cedab0cb140dfe1e2d3e5cfac0ba3996539e8f67f08dfda + md5: cc27f4be260e32227b41d00e87d16b32 depends: - - setuptools-scm ==10.1.2 pyhcf101f3_0 + - setuptools-scm ==10.2.0 pyhcf101f3_0 license: MIT license_family: MIT run_exports: {} - size: 3837 - timestamp: 1782211742106 + size: 3835 + timestamp: 1782401906421 - conda: https://conda.anaconda.org/conda-forge/noarch/shellingham-1.5.4-pyhd8ed1ab_2.conda sha256: 1d6534df8e7924d9087bd388fbac5bd868c5bf8971c36885f9f016da0657d22b md5: 83ea3a2ddb7a75c1b09cea582aa4f106 @@ -26034,18 +26065,18 @@ packages: run_exports: {} size: 102128 timestamp: 1754315404852 -- conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.1-h6437393_2.conda - sha256: f4e609d1c523de5ce3ae0a5844573b0b0b30d24b380ca044fb689f288f2c9e54 - md5: 71618f9b86b1d1ff2678c3c196045ca1 +- conda: https://conda.anaconda.org/conda-forge/osx-64/glib-tools-2.88.2-h04fd18e_0.conda + sha256: c4597ef24234e00fc9459f5b3a6ae3fc0ae0087a7d4801ad7c1f1bb27265bb5b + md5: 49adcd2aa24e9af0cdf38e9f180f7a35 depends: - - libglib ==2.88.1 hf28f236_2 + - libglib ==2.88.2 hf28f236_0 - libffi - __osx >=11.0 - libintl >=0.25.1,<1.0a0 license: LGPL-2.1-or-later run_exports: {} - size: 216282 - timestamp: 1778508940832 + size: 216041 + timestamp: 1782464244345 - conda: https://conda.anaconda.org/conda-forge/osx-64/glog-0.7.1-h2790a97_0.conda sha256: dd56547db8625eb5c91bb0a9fbe8bd6f5c7fbf5b6059d46365e94472c46b24f9 md5: 06cf91665775b0da395229cd4331b27d @@ -27601,24 +27632,24 @@ packages: - libglib >=2.84.3,<3.0a0 size: 3735183 timestamp: 1754315274931 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.1-hf28f236_2.conda - sha256: 9e10d37f49b4efef3426ac323dd8cec88a48df57d49e335d5aef8eac08ea9226 - md5: 6cf119d472892f945d81187e790cc131 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libglib-2.88.2-hf28f236_0.conda + sha256: 445e6806480103c6411993e7c2fd5ad1c6cb14ef1fee9386b44adeb536834d07 + md5: 6ed62b59574adb4c9629ed6932a51de7 depends: - __osx >=11.0 - - pcre2 >=10.47,<10.48.0a0 - - libintl >=0.25.1,<1.0a0 - - libffi >=3.5.2,<3.6.0a0 - libiconv >=1.18,<2.0a0 - libzlib >=1.3.2,<2.0a0 + - libintl >=0.25.1,<1.0a0 + - pcre2 >=10.47,<10.48.0a0 + - libffi >=3.5.2,<3.6.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later run_exports: weak: - - libglib >=2.88.1,<3.0a0 - size: 4519643 - timestamp: 1778508940832 + - libglib >=2.88.2,<3.0a0 + size: 4510929 + timestamp: 1782464244345 - conda: https://conda.anaconda.org/conda-forge/osx-64/libgoogle-cloud-2.39.0-hed66dea_0.conda sha256: 9b50362bafd60c4a3eb6c37e6dbf7e200562dab7ae1b282b1ebd633d4d77d4bd md5: 06564befaabd2760dfa742e47074bad2 @@ -28195,31 +28226,18 @@ packages: - libspatialite >=5.1.0,<5.2.0a0 size: 3144268 timestamp: 1742308894421 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_0.conda - sha256: e092c945764c0194298af892bc79c89dbdacac7fab6fa0cd315f91deb0780c03 - md5: 78bad38060b6d8bd30e1f43474dcf77c - depends: - - __osx >=11.0 - - libzlib >=1.3.2,<2.0a0 - license: blessing - run_exports: - weak: - - libsqlite >=3.53.2,<4.0a0 - size: 1006060 - timestamp: 1780574903119 -- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h8f8c405_0.conda - sha256: 4d4f3135d390d192ab9cdf3711d87e3be6bb7f3959c52a96e2f333b30960d6fb - md5: 4c019bd25570899d0f9755de01b89021 +- conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.53.2-h77d7759_1.conda + sha256: d6cced99517569e8a71bd5d90859343e18def7a1fb18e224671b54dfb531b387 + md5: 7dd6b4bcbd437bba3358914e8598ecc0 depends: - __osx >=11.0 - - icu >=78.3,<79.0a0 - libzlib >=1.3.2,<2.0a0 license: blessing run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 1010419 - timestamp: 1780575011758 + size: 1006612 + timestamp: 1782407335003 - conda: https://conda.anaconda.org/conda-forge/osx-64/libssh2-1.11.1-hed3591d_0.conda sha256: 00654ba9e5f73aa1f75c1f69db34a19029e970a4aeb0fa8615934d8e9c369c3c md5: a6cb15db1c2dc4d3a5f6cf3772e09e81 @@ -28742,45 +28760,45 @@ packages: - mpfr >=4.2.2,<5.0a0 size: 374756 timestamp: 1773414598704 -- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py312hdb80668_0.conda - sha256: 335f71b49d612985440f4442e4c95a74397b86f462cfb8b56b43f53044aaff29 - md5: 13f98c8be22877a6b44985c9018957e6 +- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py312hb1dc2e7_1.conda + sha256: de3762675f153fd0217148fc319d069643f5de94cbbb89d7ca93f0f9ea19a5b8 + md5: ef5aaa098ccc4df7a8e0c22952312779 depends: - - __osx >=11.0 + - python - libcxx >=19 - - python >=3.12,<3.13.0a0 + - __osx >=11.0 - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 91250 - timestamp: 1782070772954 -- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py313h862c624_0.conda - sha256: 816f16edc11caa675daba47419eb438cf9df88f74c0d5ffd05d1428c9d3e9158 - md5: ad0e8564023d0f623c10649d755116e6 + size: 103742 + timestamp: 1782460885527 +- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py313h224b87c_1.conda + sha256: 7d2406005a155805ffb4dfe5b5cffc1ddb3645058999a07dee055a6a172a4899 + md5: 96ac9dca0672f882f99f3feec1349f02 depends: + - python - __osx >=11.0 - libcxx >=19 - - python >=3.13,<3.14.0a0 - python_abi 3.13.* *_cp313 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 91699 - timestamp: 1782070761191 -- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314h0963f2d_0.conda - sha256: 1fc1abd4fa7c0e4197273d6dc86b352ab06b8153e9eebfa7b44b80be7c924c7b - md5: d625059c40ae8c04611ec03f3b3ba356 + size: 104096 + timestamp: 1782460838556 +- conda: https://conda.anaconda.org/conda-forge/osx-64/msgpack-python-1.2.1-py314hd6e1bd6_1.conda + sha256: 824a4dacde1ecd37758827448b0854c10e27fbbb08ab7044b3fa3fa5b251dd13 + md5: e83e5e7facf32ac83965ec07ce9bcada depends: + - python - __osx >=11.0 - libcxx >=19 - - python >=3.14,<3.15.0a0 - python_abi 3.14.* *_cp314 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 92969 - timestamp: 1782070841666 + size: 104644 + timestamp: 1782460865654 - conda: https://conda.anaconda.org/conda-forge/osx-64/multidict-6.7.1-py312hfc03ebc_0.conda sha256: 5365f648eeb6770c9f05d01f95df9a050f28e3c6ad287178411560e8cdf12130 md5: 60ca4e1376742de9d637162802d16102 @@ -30587,10 +30605,10 @@ packages: run_exports: {} size: 136902 timestamp: 1766159517466 -- conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.19-h1ddadc8_0.conda +- conda: https://conda.anaconda.org/conda-forge/osx-64/ruff-0.15.20-h1ddadc8_0.conda noarch: python - sha256: 1248df0118db9364dd64168744e5243d17f8775addc2f02ee518ed6acd651d9e - md5: bf898fc3e2352684937ba5f37d7f73c2 + sha256: c09f4f7cb6f116fe2c37b6fe90e234beab754f223e11e7368e272fde890d7bac + md5: 4abaf1414e448ab88712f10a67610410 depends: - python - __osx >=11.0 @@ -30599,8 +30617,8 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 9448616 - timestamp: 1782288855028 + size: 9318935 + timestamp: 1782428757092 - conda: https://conda.anaconda.org/conda-forge/osx-64/scikit-learn-1.7.2-py312hfee4f84_0.conda sha256: 6c492d58e51107b7f3944526bb7f8b4af4cb6ebcba648c4a08277fa7a4854762 md5: 9cecc4b9d6cca528546f53a6c0120a04 @@ -30850,28 +30868,12 @@ packages: run_exports: {} size: 4026773 timestamp: 1781548018930 -- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-h6775aab_0.conda - sha256: 5d1a016e4219f2acb4d9f9e8c4068d9207f8fd38ae459273694363acaf68c58c - md5: b57460eab663465f43ab65a73f2e4c1c - depends: - - __osx >=11.0 - - icu >=78.3,<79.0a0 - - libsqlite 3.53.2 h8f8c405_0 - - libzlib >=1.3.2,<2.0a0 - - ncurses >=6.6,<7.0a0 - - readline >=8.3,<9.0a0 - license: blessing - run_exports: - weak: - - libsqlite >=3.53.2,<4.0a0 - size: 191786 - timestamp: 1780575040872 -- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_0.conda - sha256: abeba58509c31e8c132c38f15bd4544ba8430b9b58365d411fd5ccf3721bdfcd - md5: 86fbde90494b0235a3080bc34f8fa9ae +- conda: https://conda.anaconda.org/conda-forge/osx-64/sqlite-3.53.2-hd4d344e_1.conda + sha256: 3418e26a97d65b47fc13c87e347cd3840477ebb519a95e150de023cd6612406e + md5: 4e0271ec4bdb2a378312dbcf86688f54 depends: - __osx >=11.0 - - libsqlite 3.53.2 h77d7759_0 + - libsqlite 3.53.2 h77d7759_1 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 @@ -30879,8 +30881,8 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 191714 - timestamp: 1780574924193 + size: 192067 + timestamp: 1782407365365 - conda: https://conda.anaconda.org/conda-forge/osx-64/statsmodels-0.14.6-py312h391ab28_0.conda sha256: 3d35c37ec7fd764e04b67e5f395a5f936285925836e4a5192ccc503392260065 md5: 114bf0de85f665ce5586e9a0f0f077a8 @@ -33022,18 +33024,18 @@ packages: run_exports: {} size: 101984 timestamp: 1754315707816 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.1-h37541a8_2.conda - sha256: 414bdf86a8096d5706293d163359def2e61b8ffd3fe106bbf2028d79e58e6a97 - md5: 8d4580a91948a6c3383a7c2fbfe5311c +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/glib-tools-2.88.2-h246a70f_0.conda + sha256: 6a98eabd4d5bb902c391e9f7c9e655ce61292ff6f1bb0c592da42fd66e6c89f9 + md5: 973a5ef252899cd0916418c75a864169 depends: - - libglib ==2.88.1 ha08bb59_2 + - libglib ==2.88.2 ha08bb59_0 - libffi - __osx >=11.0 - libintl >=0.25.1,<1.0a0 license: LGPL-2.1-or-later run_exports: {} - size: 204902 - timestamp: 1778508895255 + size: 205101 + timestamp: 1782463971075 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/glog-0.7.1-heb240a5_0.conda sha256: 9fc77de416953aa959039db72bc41bfa4600ae3ff84acad04a7d0c1ab9552602 md5: fef68d0a95aa5b84b5c1a4f6f3bf40e1 @@ -34616,24 +34618,24 @@ packages: - libglib >=2.84.3,<3.0a0 size: 3661135 timestamp: 1754315631978 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.1-ha08bb59_2.conda - sha256: 3b32a7a710132d509f2ea38b2f0384414c863533e0fc7ac71b6a0763e4c67424 - md5: 62d6f3b832d7d79ae0c0aa1bb3c325fa +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libglib-2.88.2-ha08bb59_0.conda + sha256: 68ac66904a284a7dfbb3bdf9225380eaf20750b2d414215e6d7af5caa3ed1a63 + md5: 03123cafdc96cef79fc8a615f9119b79 depends: - __osx >=11.0 - - libintl >=0.25.1,<1.0a0 - - libffi >=3.5.2,<3.6.0a0 - pcre2 >=10.47,<10.48.0a0 - libiconv >=1.18,<2.0a0 + - libintl >=0.25.1,<1.0a0 - libzlib >=1.3.2,<2.0a0 + - libffi >=3.5.2,<3.6.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later run_exports: weak: - - libglib >=2.88.1,<3.0a0 - size: 4439458 - timestamp: 1778508895255 + - libglib >=2.88.2,<3.0a0 + size: 4437447 + timestamp: 1782463971075 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libgoogle-cloud-2.39.0-head0a95_0.conda sha256: 209facdb8ea5b68163f146525720768fa3191cef86c82b2538e8c3cafa1e9dd4 md5: ad7272a081abe0966d0297691154eda5 @@ -35210,9 +35212,9 @@ packages: - libspatialite >=5.1.0,<5.2.0a0 size: 2942231 timestamp: 1742308744175 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_0.conda - sha256: 862463917e8ef5ac3ebdaf8f19914634b457609cc27ba678b7197124cefeb1f7 - md5: 1ebde5c677f00765233a17e278571177 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1ae2325_1.conda + sha256: f3b0289e03883f5ac3d646c318fefebc77f25897f2200459658f4273f901df45 + md5: 2749be4dc52f3a6699e9dea29b78410a depends: - __osx >=11.0 - icu >=78.3,<79.0a0 @@ -35221,11 +35223,11 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 927724 - timestamp: 1780575223548 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1b79a29_0.conda - sha256: f06b6d9d50d5ad1bed09daada386eb1aa8ed7a9ca4618facd3aead75b82db9ff - md5: 530ef68b7f9f7bee04f67db8d435f872 + size: 927043 + timestamp: 1782407511620 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.53.2-h1b79a29_1.conda + sha256: 72c921bea11f1f6b70c27909b03303f63e9b5f89e31454b324dba71c55c612b6 + md5: fe98452df9c7712237b3d621d3de0b48 depends: - __osx >=11.0 - libzlib >=1.3.2,<2.0a0 @@ -35233,8 +35235,8 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 923664 - timestamp: 1780574869893 + size: 924086 + timestamp: 1782407233071 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libssh2-1.11.1-h1590b86_0.conda sha256: 8bfe837221390ffc6f111ecca24fa12d4a6325da0c8d131333d63d6c37f27e0a md5: b68e8f66b94b44aaa8de4583d3d4cc40 @@ -35765,48 +35767,48 @@ packages: - mpfr >=4.2.2,<5.0a0 size: 348767 timestamp: 1773414111071 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py312h766f71e_0.conda - sha256: 342a8d6976c198d741844d51268beaffd5dec56a2b688b9350dbf9f4fa1004f9 - md5: 86d034fc6116be109bbbbe9079ac73f8 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py312h3093aea_1.conda + sha256: 1ace9b344734fda6d8c84d02c3efbf106fe68a90b6dfdb49cd46009f58e831ee + md5: bcab4615e2f53affe6b34fc8887b3f12 depends: + - python - __osx >=11.0 + - python 3.12.* *_cpython - libcxx >=19 - - python >=3.12,<3.13.0a0 - - python >=3.12,<3.13.0a0 *_cpython - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 90998 - timestamp: 1782070951579 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py313h5c29297_0.conda - sha256: 12f2c785c34a465f399e7af89e6b88a86684bde704e25460789e83efc0d8fd87 - md5: b929e2af3d4059fedfb0a5da0007556f + size: 104400 + timestamp: 1782460860576 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py313h2af2deb_1.conda + sha256: b3a134697c01b05906e23c5ba94ffad6b2647d20a5126f0fe1e1a973dd7f627a + md5: f4aec3b27ac208543c6f19a9a783caee depends: + - python - __osx >=11.0 + - python 3.13.* *_cp313 - libcxx >=19 - - python >=3.13,<3.14.0a0 - - python >=3.13,<3.14.0a0 *_cp313 - python_abi 3.13.* *_cp313 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 91552 - timestamp: 1782070886759 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314h6cfcd04_0.conda - sha256: 09ea486f9248fdd987430a3519c31a0331e903edecc9740586a3e0abd590f840 - md5: 7f80c3267c4b89767d7bbdf36d69fe80 + size: 104951 + timestamp: 1782460888910 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/msgpack-python-1.2.1-py314hf8a3a22_1.conda + sha256: a6f59e73e012318028ebe905eb7843f4a43c5c11205078b932cbb2d55b98f27a + md5: 437187ee6b84e1cb787b8b8194478174 depends: - - __osx >=11.0 + - python - libcxx >=19 - - python >=3.14,<3.15.0a0 - - python >=3.14,<3.15.0a0 *_cp314 + - __osx >=11.0 + - python 3.14.* *_cp314 - python_abi 3.14.* *_cp314 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 92074 - timestamp: 1782070774684 + size: 105734 + timestamp: 1782460899732 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/multidict-6.7.1-py312h43af8aa_0.conda sha256: d7f2c4137271b158a452d02a5a3c4ceade8e8e75352fc90a4360f4a7eda9be9f md5: 8094abe00f22955a9396d91c690f36e8 @@ -37678,10 +37680,10 @@ packages: run_exports: {} size: 133016 timestamp: 1766159585543 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.19-h80928e0_0.conda +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ruff-0.15.20-h80928e0_0.conda noarch: python - sha256: 7916eb37206fe9726db28f722f14fe2da5e64b68b3747ae5bf92a9df6245c79f - md5: 2639d46decb4c0ef9eca4f8fd2f5803e + sha256: 49c7cb7fa8bc6ad2e3448d3ea48e4e939df69690a984e768261ddc0728e40f7f + md5: 60e90a1347592b61888a3f26ad93035c depends: - python - __osx >=11.0 @@ -37690,8 +37692,8 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 8644257 - timestamp: 1782288982578 + size: 8539333 + timestamp: 1782428897543 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/scikit-learn-1.7.2-py312h79e0ffc_0.conda sha256: e46279d674d580dfeeb1c10dede94df65dbb25d951e35978893058e59e496bfa md5: c3b31a2189b2a54272ab6831fe16106d @@ -37951,13 +37953,13 @@ packages: run_exports: {} size: 4036851 timestamp: 1781547978515 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_0.conda - sha256: da9629eb03900b532fe21092a7f813ffb9d83c0b21ffa86475195f5596b7fec4 - md5: a1036a11bb370ff199cac47cc6255b7f +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h77b7338_1.conda + sha256: ed6b5cbae69f919f092429fc53cb642a0743f317772337757531255f68ce89d6 + md5: 725a35de8e373be31d2e1b5c7ef70a0a depends: - __osx >=11.0 - icu >=78.3,<79.0a0 - - libsqlite 3.53.2 h1ae2325_0 + - libsqlite 3.53.2 h1ae2325_1 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 @@ -37965,14 +37967,14 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 182162 - timestamp: 1780575254663 -- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h85ec8f2_0.conda - sha256: 5d0a6544dcbbec6322c06a8ee994d6823916af35bbd5a0f8c35387869f1b5d76 - md5: 1966e1b7f598b30cd746309ba483e541 + size: 182522 + timestamp: 1782407551924 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/sqlite-3.53.2-h85ec8f2_1.conda + sha256: dfcf7828bb59f660cd1b4ec933512869ce6c3e034a37ba40a8c8485e7e3888af + md5: 5e78cf69f914ff8a978986bdd4f7d3b9 depends: - __osx >=11.0 - - libsqlite 3.53.2 h1b79a29_0 + - libsqlite 3.53.2 h1b79a29_1 - libzlib >=1.3.2,<2.0a0 - ncurses >=6.6,<7.0a0 - readline >=8.3,<9.0a0 @@ -37980,8 +37982,8 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 182161 - timestamp: 1780574896374 + size: 182498 + timestamp: 1782407264440 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/statsmodels-0.14.6-py312ha11c99a_0.conda sha256: 18f8711f235e32d793938e1738057e7be1d0bfe98f7d27e3e4b98aa757deae92 md5: 31f49265d8de9776cd15b421f24b23e0 @@ -41619,26 +41621,26 @@ packages: - libglib >=2.84.3,<3.0a0 size: 3826069 timestamp: 1754315362939 -- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.1-h7ce1215_2.conda - sha256: f61277e224e9889c221bb2eac0f57d5aeeb82fc45d3dc326957d251c97444f7c - md5: 5fb838786a8317ebb38056bbe236d3ff +- conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.88.2-h7ce1215_0.conda + sha256: 20d4a182b8aa1d71b331579fae281bb3ccb1a199257ce15fadc53786031a7408 + md5: 5be116480ef34a5646894d7f7cd7ae41 depends: - vc >=14.3,<15 - vc14_runtime >=14.44.35208 - ucrt >=10.0.20348.0 - - libiconv >=1.18,<2.0a0 + - libintl >=0.22.5,<1.0a0 - libzlib >=1.3.2,<2.0a0 + - libiconv >=1.18,<2.0a0 - pcre2 >=10.47,<10.48.0a0 - - libintl >=0.22.5,<1.0a0 - libffi >=3.5.2,<3.6.0a0 constrains: - glib >2.66 license: LGPL-2.1-or-later run_exports: weak: - - libglib >=2.88.1,<3.0a0 - size: 4522891 - timestamp: 1778508851933 + - libglib >=2.88.2,<3.0a0 + size: 4518265 + timestamp: 1782463965040 - conda: https://conda.anaconda.org/conda-forge/win-64/libgomp-15.2.0-h8ee18e1_19.conda sha256: 4dc958ced2fc7f42bc675b07e2c9abe3e150875ffdf62ca551d94fc6facf1fd7 md5: f1147651e3fdd585e2f442c0c2fc8f2d @@ -42226,9 +42228,9 @@ packages: - libspatialite >=5.1.0,<5.2.0a0 size: 8277831 timestamp: 1742308854436 -- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_0.conda - sha256: 4cd81319dcc58fb758da20a6d5595950c021adc2c18d7cffeadcfb590529629f - md5: df294e7f9f24a6063f0e226f4d028fda +- conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.53.2-hf5d6505_1.conda + sha256: a643cbc7593b443967093afb14bb892b94094e9135e30772fd1a9dfda8bb08b6 + md5: b510cd61047daf53a68be8daeb56b426 depends: - ucrt >=10.0.20348.0 - vc >=14.3,<15 @@ -42237,8 +42239,8 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 1313306 - timestamp: 1780574491977 + size: 1314192 + timestamp: 1782406655419 - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.1-h9aa295b_0.conda sha256: cbdf93898f2e27cefca5f3fe46519335d1fab25c4ea2a11b11502ff63e602c09 md5: 9dce2f112bfd3400f4f432b3d0ac07b2 @@ -42886,48 +42888,48 @@ packages: - mpfr >=4.2.2,<5.0a0 size: 734113 timestamp: 1773415369651 -- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312hf90b1b7_0.conda - sha256: 706651825726865f4b93f8437507da94b5d7060476a3be09d33d8d4176aef886 - md5: 7be9af13377c126be5c6a2fd28af9b6c +- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py312h78d62e6_1.conda + sha256: f43cc72ae92759d661187cb4bc4fb4721b97128d150f336b9b0ebf24b8600a27 + md5: 0ac1766b278a8547f22cd0820b8a7e96 depends: - - python >=3.12,<3.13.0a0 - - python_abi 3.12.* *_cp312 - - ucrt >=10.0.20348.0 + - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.12.* *_cp312 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 89264 - timestamp: 1782070483584 -- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py313hf069bd2_0.conda - sha256: 08cfc45c7160779556abc25ea2ac1352fc68c05a7db5c8f7eaa051c928ce93b8 - md5: 83ede6d6d5227244621c126264ccaea9 + size: 89054 + timestamp: 1782460807428 +- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py313h1a38498_1.conda + sha256: e077fab86cde8d9f1f52adaddd80beb3bc3636bb3234c8523c95a087d340c5cb + md5: 26faa18b0b9a5466f65d0f309424babf depends: - - python >=3.13,<3.14.0a0 - - python_abi 3.13.* *_cp313 - - ucrt >=10.0.20348.0 + - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.13.* *_cp313 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 89970 - timestamp: 1782070487087 -- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314h909e829_0.conda - sha256: 5dc2c51a980e406faf3f06c3674792fb987f20fbcb5620c6860b6982f93f995f - md5: a2bf7491b2d71489532f20db59f470c3 + size: 89413 + timestamp: 1782460810590 +- conda: https://conda.anaconda.org/conda-forge/win-64/msgpack-python-1.2.1-py314hf309875_1.conda + sha256: 548f4b23229abf8503b1e28438682e79a82ed0f2081a0c5ddfadb49e721b5022 + md5: 2a6b2dce5b76d32c67d11fcdd88ef037 depends: - - python >=3.14,<3.15.0a0 - - python_abi 3.14.* *_cp314 - - ucrt >=10.0.20348.0 + - python - vc >=14.3,<15 - vc14_runtime >=14.44.35208 + - ucrt >=10.0.20348.0 + - python_abi 3.14.* *_cp314 license: Apache-2.0 - license_family: Apache + license_family: APACHE run_exports: {} - size: 90559 - timestamp: 1782070458677 + size: 89771 + timestamp: 1782460807585 - conda: https://conda.anaconda.org/conda-forge/win-64/multidict-6.7.1-py312h05f76fc_0.conda sha256: 3a33346421defe3bd5dfdd10bed8a7055a2ce3b696aafa47f9ec5b1749d38c54 md5: 3b54ef7993acc98becf31e0016e0404d @@ -44969,10 +44971,10 @@ packages: run_exports: {} size: 105668 timestamp: 1766159584330 -- conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.19-h45713df_0.conda +- conda: https://conda.anaconda.org/conda-forge/win-64/ruff-0.15.20-h45713df_0.conda noarch: python - sha256: bf2eccfa578cff287b9f464b9a312da2df420790783dfd3fd690906731bdf2a5 - md5: 5f1a5e6acee3c4f2a6b3375334b51e81 + sha256: 63cc41a9acf4d4bcc2273df322e0cb6d08311e9e7425fffe3bbe01e7c496fbb7 + md5: 7e18b4c765bf080576d39b177167b3f2 depends: - python - vc >=14.3,<15 @@ -44981,8 +44983,8 @@ packages: license: MIT license_family: MIT run_exports: {} - size: 9926237 - timestamp: 1782288657493 + size: 9813687 + timestamp: 1782428572744 - conda: https://conda.anaconda.org/conda-forge/win-64/scikit-learn-1.7.2-py312h91ac024_0.conda sha256: 22666360c1026cb5d197ca3f5b6e6e7902414cde266b0bb7e8b50f894254348e md5: 640f74b19cfe413de754391df630a15a @@ -45245,11 +45247,11 @@ packages: run_exports: {} size: 3986755 timestamp: 1781547909164 -- conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_0.conda - sha256: 0640ffa3360669c8826f05a8295f38c3bc57dc9cac0c9732940897ff5256f996 - md5: 58e6f936ab416fddc633d4105f43aea2 +- conda: https://conda.anaconda.org/conda-forge/win-64/sqlite-3.53.2-hdb435a2_1.conda + sha256: f189aa5a0ee2ff7d48332d4389a0c9b9bc12a67d7125293253f1a7c49d6332f6 + md5: 7d8680823bb3bd9ee8d84d51dac62f9a depends: - - libsqlite 3.53.2 hf5d6505_0 + - libsqlite 3.53.2 hf5d6505_1 - ucrt >=10.0.20348.0 - vc >=14.3,<15 - vc14_runtime >=14.44.35208 @@ -45257,8 +45259,8 @@ packages: run_exports: weak: - libsqlite >=3.53.2,<4.0a0 - size: 425926 - timestamp: 1780574498030 + size: 426300 + timestamp: 1782406661484 - conda: https://conda.anaconda.org/conda-forge/win-64/statsmodels-0.14.6-py312h196c9fc_0.conda sha256: 93daa6ead03ff50b6366c6389d268f46d490ad50724a312c2ba59dbd6b6e2415 md5: 180f6ee9579c0c6111af5a5638686a64 diff --git a/scripts/_helpers.py b/scripts/_helpers.py index 441a9a839d..1dac2f63bf 100644 --- a/scripts/_helpers.py +++ b/scripts/_helpers.py @@ -1143,11 +1143,11 @@ def extract_grid_data_tyndp( Parameters ---------- links : pd.DataFrame - DataFrame with raw links to extract grid information from + DataFrame with raw links to extract grid information from. replace_dict : dict - Dictionary with region names to replace + Dictionary with region names to replace. expand_from_index : bool - Whether to expand the bus0 and bus1 from index or directly use the columns + Whether to expand the bus0 and bus1 from index or directly use the columns. idx_prefix : str, optional Prefix to prepend to generated indices. idx_connector : str, optional @@ -1160,7 +1160,7 @@ def extract_grid_data_tyndp( Returns ------- pd.DataFrame - DataFrame with extracted grid data information with nominal capacity in input unit, bus0 and bus1 + DataFrame with extracted grid data information with nominal capacity in input unit, bus0 and bus1. """ if expand_from_index: @@ -1222,16 +1222,16 @@ def safe_pyear( year : int Planning horizon year which will be checked and possibly adjusted to previous available year. available_years : list[int], optional - List of available years. Defaults to [2030, 2040, 2050]. + List of available years. Default is [2030, 2040, 2050]. source : str, optional - Source of the data for which availability will be checked. For logging purpose only. Defaults to "TYNDP". + Source of the data for which availability will be checked. For logging purpose only. Default is "TYNDP". verbose : bool, optional - Whether to activate verbose logging. Defaults to True. + Whether to activate verbose logging. Default is True. Returns ------- year_new : int - Safe pyear adjusted for available years + Safe pyear adjusted for available years. """ if not available_years: @@ -1273,7 +1273,7 @@ def map_tyndp_carrier_names( Columns to merge on between the external carriers and tyndp_carriers. drop_on_columns : bool, optional Whether to drop merge columns and rename `open_tyndp_carrier` and `open_tyndp_index` to `carrier` - and `index_carrier`. Defaults to False. + and `index_carrier`. Default is False. Returns ------- @@ -1341,6 +1341,16 @@ def get_version(hash_len: int = 9) -> str: - If HEAD is exactly at a tag: returns the tag name (e.g., "v1.2.3") - If HEAD is beyond a tag: returns "tag+g{hash}" (e.g., "v1.2.3+g1a2b3c4d") - If no tags found: returns just the commit hash (e.g., "1a2b3c4d5") + + Parameters + ---------- + hash_len : int, optional + Number of characters to use from the commit hash. Default is 9. + + Returns + ------- + str + Version string derived from the git repository state. """ try: repo = git.Repo(search_parent_directories=True) @@ -1434,7 +1444,21 @@ def convert_units( def check_cyear(cyear: int, scenario: str) -> int: - """Check if the climatic year is valid for the given scenario.""" + """ + Check if the climatic year is valid for the given scenario. + + Parameters + ---------- + cyear : int + Climatic year to validate. + scenario : str + TYNDP scenario name. + + Returns + ------- + int + Valid climatic year, falling back to 2009 if the input is not available. + """ valid_years = { "NT": [1995, 2008, 2009], @@ -1604,9 +1628,21 @@ def interpolate_demand( return result -def find_free_port(start_port=8050, max_attempts=50): +def find_free_port(start_port: int = 8050, max_attempts: int = 50) -> int: """ Find the first available port starting from start_port. + + Parameters + ---------- + start_port : int, optional + Port number to begin scanning from. Default is 8050. + max_attempts : int, optional + Maximum number of ports to check before raising an error. Default is 50. + + Returns + ------- + int + First available port number in the scanned range. """ for port in range(start_port, start_port + max_attempts): try: @@ -1703,8 +1739,21 @@ def align_demand_to_snapshots( demand: pd.DataFrame, snapshots: pd.DatetimeIndex, format: str = None ) -> pd.DataFrame: """ - Convert demand index to DatetimeIndex, adjust year to match snapshots, - and reindex to snapshots. + Convert demand index to DatetimeIndex, adjust year to match snapshots, and reindex to snapshots. + + Parameters + ---------- + demand : pd.DataFrame + Demand time series with a datetime-compatible index. + snapshots : pd.DatetimeIndex + Target snapshot index to align demand to. + format : str, optional + Datetime format string for parsing the demand index. Default is None. + + Returns + ------- + pd.DataFrame + Demand data reindexed to the provided snapshots. """ demand.index = pd.to_datetime(demand.index, format=format) diff --git a/scripts/add_brownfield.py b/scripts/add_brownfield.py index 4c6468ec4c..e39fa2a314 100644 --- a/scripts/add_brownfield.py +++ b/scripts/add_brownfield.py @@ -45,21 +45,21 @@ def add_brownfield( Parameters ---------- n : pypsa.Network - Network to add brownfield to + Network to add brownfield to. n_p : pypsa.Network - Previous network to get brownfield from + Previous network to get brownfield from. year : int - Planning year - h2_retrofit : bool - Whether to allow hydrogen pipeline retrofitting - h2_retrofit_capacity_per_ch4 : float - Ratio of hydrogen to methane capacity for pipeline retrofitting - capacity_threshold : float - Threshold for removing assets with low capacity - offshore_hubs_tyndp : bool - Whether to enable offshore hubs - h2_topology_tyndp : bool - Whether to enable TYNDP Hydrogen topology + Planning year. + h2_retrofit : bool, optional + Whether to allow hydrogen pipeline retrofitting. Default is False. + h2_retrofit_capacity_per_ch4 : float, optional + Ratio of hydrogen to methane capacity for pipeline retrofitting. Default is None. + capacity_threshold : float, optional + Threshold for removing assets with low capacity. Default is None. + offshore_hubs_tyndp : bool, optional + Whether to enable offshore hubs. Default is False. + h2_topology_tyndp : bool, optional + Whether to enable TYNDP Hydrogen topology. Default is False. carriers_tyndp : list[str] List of TYNDP carriers included in the model. """ diff --git a/scripts/build_snapshot_weightings.py b/scripts/build_snapshot_weightings.py index f27612d85c..028df45298 100644 --- a/scripts/build_snapshot_weightings.py +++ b/scripts/build_snapshot_weightings.py @@ -3,7 +3,7 @@ # # SPDX-License-Identifier: MIT """ -Defines the time aggregation, known as ``snapshot_weightings``, to be used for sector-coupled network. +Defines the time aggregation, known as `snapshot_weightings`, to be used for sector-coupled network. Description ----------- diff --git a/scripts/build_tyndp_network.py b/scripts/build_tyndp_network.py index 10e3a81d36..004877d955 100644 --- a/scripts/build_tyndp_network.py +++ b/scripts/build_tyndp_network.py @@ -81,7 +81,20 @@ IBFI_COORD = (63.0, 25.0) -def format_bz_names(s: str): +def format_bz_names(s: str) -> str: + """ + Standardize bidding zone name formats to Open-TYNDP conventions. + + Parameters + ---------- + s : str + Raw bidding zone name string to format. + + Returns + ------- + str + Formatted bidding zone name with standardized region codes. + """ s = s.replace("FR-C", "FR15").replace("UK-N", "UKNI").replace("UK", "GB") return s @@ -100,7 +113,7 @@ def extract_shape_by_bbox( Parameters ---------- - gdf : GeoDataFrame + gdf : gpd.GeoDataFrame GeoDataFrame containing country geometries. country : str The country code or name to filter. @@ -117,7 +130,7 @@ def extract_shape_by_bbox( Returns ------- - GeoDataFrame + gpd.GeoDataFrame Updated GeoDataFrame with the extracted shape separated. """ country_gdf = gdf.explode().query(f"country == '{country}'").reset_index(drop=True) @@ -154,9 +167,9 @@ def build_shapes( Path to bidding zone shape file. countries : list[str] List of countries to consider. - geo_crs : CRS, optional + geo_crs : str, optional Coordinate reference system for geographic calculations. Defaults to GEO_CRS. - distance_crs : CRS, optional + distance_crs : str, optional Coordinate reference system to use for distance calculations. Defaults to DISTANCE_CRS. Returns @@ -226,11 +239,11 @@ def build_buses( Path to bidding zone shape file. countries : list[str] List of countries to consider. - bidding_shapes : GeoDataFrame + bidding_shapes : gpd.GeoDataFrame A GeoDataFrame including bidding zone geometry, representative point and id. - country_shapes : GeoDataFrame + country_shapes : gpd.GeoDataFrame A GeoDataFrame including country geometry and representative point. - geo_crs : CRS, optional + geo_crs : str, optional Coordinate reference system for geographic calculations. Defaults to GEO_CRS. Returns @@ -329,14 +342,19 @@ def add_links_missing_attributes( Parameters ---------- - - links (pd.DataFrame): DataFrame of links with 'bus0' and 'bus1' columns. - - buses (gpd.GeoDataFrame): GeoDataFrame of electrical buses including country and coordinates. - - geo_crs (CRS, optional): Coordinate reference system for geographic calculations. Defaults to GEO_CRS. - - distance_crs (CRS, optional): Coordinate reference system for distance calculations. Defaults to DISTANCE_CRS. + links : pd.DataFrame + DataFrame of links with bus0 and bus1 columns. + buses : gpd.GeoDataFrame + GeoDataFrame of electrical buses including country and coordinates. + geo_crs : str, optional + Coordinate reference system for geographic calculations. Defaults to GEO_CRS. + distance_crs : str, optional + Coordinate reference system for distance calculations. Defaults to DISTANCE_CRS. Returns ------- - - links: DataFrame with added geometry columns. + gpd.GeoDataFrame + GeoDataFrame of links with added geometry columns. """ links = links.merge( buses["geometry"], how="left", left_on="bus0", right_index=True @@ -416,12 +434,12 @@ def build_links( ---------- grid_fn : str | Path Path to bidding zone shape file. - buses : GeoDataFrame + buses : gpd.GeoDataFrame A GeoDataFrame of electrical buses including country and coordinates. Returns ------- - GeoDataFrame + gpd.GeoDataFrame A GeoDataFrame including NTC from the reference grid. """ links = pd.read_excel(grid_fn) diff --git a/scripts/cba/_helpers.py b/scripts/cba/_helpers.py index 497390d74f..fc241a256b 100644 --- a/scripts/cba/_helpers.py +++ b/scripts/cba/_helpers.py @@ -12,10 +12,10 @@ def get_link_attrs(project: pd.Series, costs: pd.DataFrame) -> dict: Return length, underwater_fraction, and capital_cost for a new DC link. The capital_cost is computed using the same per-km formula as - ``add_electricity.py`` to ensure consistency with existing network + `add_electricity.py` to ensure consistency with existing network links: - ``capital_cost = length * ((1 - uf) * overhead + uf * submarine) + inverter`` + `capital_cost = length * ((1 - uf) * overhead + uf * submarine) + inverter` Parameters ---------- @@ -24,8 +24,13 @@ def get_link_attrs(project: pd.Series, costs: pd.DataFrame) -> dict: underwater_fraction. costs : pd.DataFrame Technology costs table (indexed by technology name) with a - ``capital_cost`` column containing annualized EUR/MW or EUR/MW/km + `capital_cost` column containing annualized EUR/MW or EUR/MW/km values. + + Returns + ------- + dict + Dictionary with keys length, underwater_fraction, and capital_cost. """ length = float(project.get("length_km", 0)) uf = float(project.get("underwater_fraction", 0)) @@ -57,9 +62,9 @@ def filter_projects_by_specs( Parameters ---------- project_list : list[str] - List of all available project names to filter from + List of all available project names to filter from. spec_list : list[str], str, or None - List of specifications, a single specification string, or None to return all projects + List of specifications, a single specification string, or None to return all projects. Returns ------- diff --git a/scripts/cba/average_indicators.py b/scripts/cba/average_indicators.py index e7ca81fe84..07f2ae3c06 100644 --- a/scripts/cba/average_indicators.py +++ b/scripts/cba/average_indicators.py @@ -42,18 +42,27 @@ } -def average_indicators_csv(input_files, output_file, planning_horizon): +def average_indicators_csv( + input_files: list[str], output_file: str, planning_horizon: int | str +) -> None: """ Concatenate multiple CSV files into one using the csv module. - Args: - input_files: List of paths to input CSV files - output_file: Path to output CSV file - - The function: - 1. Reads the header from the first file - 2. Writes all rows from all files to the output - 3. Ensures all files have the same header structure + Reads the header from the first file, writes all rows from all files to the + output, and ensures all files have the same header structure. + + Parameters + ---------- + input_files : list[str] + List of paths to input CSV files. + output_file : str + Path to output CSV file. + planning_horizon : int or str + Planning horizon year used for climatic year weighting. + + Returns + ------- + None """ if not input_files: logger.warning("No input files provided") diff --git a/scripts/cba/build_msv_snapshot_weightings.py b/scripts/cba/build_msv_snapshot_weightings.py index e4119e650c..9d7c4f62a0 100644 --- a/scripts/cba/build_msv_snapshot_weightings.py +++ b/scripts/cba/build_msv_snapshot_weightings.py @@ -5,21 +5,21 @@ Generate snapshot weightings for MSV extraction temporal aggregation. Produces a CSV with resampled snapshot weightings at the configured -MSV extraction resolution. Follows the same logic as ``time_aggregation.py`` +MSV extraction resolution. Follows the same logic as `time_aggregation.py` for the supported resolution formats: -- ``false``: No aggregation, outputs empty CSV -- ``"Nsn"``: Representative snapshots (e.g., "2sn"), outputs empty CSV - (handled directly by ``set_temporal_aggregation``) -- ``"Nh"``: Hourly resampling (e.g., "24H", "48H"), outputs resampled weightings +- `false`: No aggregation, outputs empty CSV +- `"Nsn"`: Representative snapshots (e.g., "2sn"), outputs empty CSV + (handled directly by `set_temporal_aggregation`) +- `"Nh"`: Hourly resampling (e.g., "24H", "48H"), outputs resampled weightings **Inputs** -- ``resources/cba/networks/reference_{planning_horizons}.nc``: Reference network +- `resources/cba/networks/reference_{planning_horizons}.nc`: Reference network **Outputs** -- ``resources/cba/msv_snapshot_weightings_{planning_horizons}.csv``: Snapshot weightings +- `resources/cba/msv_snapshot_weightings_{planning_horizons}.csv`: Snapshot weightings """ import logging diff --git a/scripts/cba/clean_projects.py b/scripts/cba/clean_projects.py index 62cff8d599..4c9330290d 100644 --- a/scripts/cba/clean_projects.py +++ b/scripts/cba/clean_projects.py @@ -14,24 +14,24 @@ **Inputs** -- ``data/tyndp_2024_bundle/cba_projects/20250312_export_transmission.xlsx``: Excel file containing CBA transmission projects -- ``data/tyndp_2024_bundle/cba_projects/20250312_export_storage.xlsx``: Excel file containing CBA storage projects (not yet processed) +- `data/tyndp_2024_bundle/cba_projects/20250312_export_transmission.xlsx`: Excel file containing CBA transmission projects +- `data/tyndp_2024_bundle/cba_projects/20250312_export_storage.xlsx`: Excel file containing CBA storage projects (not yet processed) **Outputs** -- ``resources/cba/transmission_projects.csv``: Cleaned CSV with columns: - - ``project_id``: Integer project identifier - - ``project_name``: Project name - - ``border``: Border string in format "BUS0-BUS1" - - ``p_nom 0->1``: Transfer capacity increase from bus0 to bus1 (MW) - - ``p_nom 1->0``: Transfer capacity increase from bus1 to bus0 (MW) - - ``bus0``: Source bus code (4 alphanumeric characters) - - ``bus1``: Destination bus code (4 alphanumeric characters) - - ``length_km``: Total route length in km (from Trans.Investments) - - ``capex_meur``: Total estimated CAPEX in MEUR (from Trans.Investments) - - ``underwater_fraction``: Fraction of route that is offshore cable +- `resources/cba/transmission_projects.csv`: Cleaned CSV with columns: + - `project_id`: Integer project identifier + - `project_name`: Project name + - `border`: Border string in format "BUS0-BUS1" + - `p_nom 0->1`: Transfer capacity increase from bus0 to bus1 (MW) + - `p_nom 1->0`: Transfer capacity increase from bus1 to bus0 (MW) + - `bus0`: Source bus code (4 alphanumeric characters) + - `bus1`: Destination bus code (4 alphanumeric characters) + - `length_km`: Total route length in km (from Trans.Investments) + - `capex_meur`: Total estimated CAPEX in MEUR (from Trans.Investments) + - `underwater_fraction`: Fraction of route that is offshore cable -- ``resources/cba/storage_projects.csv``: Empty CSV with columns project_id and project_name (stub implementation) +- `resources/cba/storage_projects.csv`: Empty CSV with columns project_id and project_name (stub implementation) """ @@ -260,7 +260,7 @@ def read_tyndp_electricity_buses(buses_fn: str): Returns ------- - - buses: Index of electricity buses as used in open tyndp + - buses: Index of electricity buses as used in Open-TYNDP See Also -------- diff --git a/scripts/cba/clean_tyndp_indicators.py b/scripts/cba/clean_tyndp_indicators.py index 6b00088aa3..bdee8c96ae 100644 --- a/scripts/cba/clean_tyndp_indicators.py +++ b/scripts/cba/clean_tyndp_indicators.py @@ -47,8 +47,22 @@ def normalize_text( """ Normalize text for parsing the TYNDP Excel data. - Strips whitespace, remove Delta symbol, replace Euro symbols with 'euro', - standardizes spelling. + Strips whitespace, removes Delta symbol, replaces Euro symbols with 'euro', + and standardizes spelling. + + Parameters + ---------- + value : str + Input text to normalize. + drop_spaces : bool, optional + If True, remove all spaces from the result. Default is False. + monetised : bool, optional + If True, replace "monetized" with "monetised". Default is False. + + Returns + ------- + str + Normalized text string. """ text = ( str(value) diff --git a/scripts/cba/collect_indicators.py b/scripts/cba/collect_indicators.py index 688892753c..ed64d830a0 100644 --- a/scripts/cba/collect_indicators.py +++ b/scripts/cba/collect_indicators.py @@ -17,18 +17,19 @@ logger = logging.getLogger(__name__) -def collect_indicators_csv(input_files, output_file): +def collect_indicators_csv(input_files: list[str], output_file: str) -> None: """ Concatenate multiple CSV files into one using the csv module. - Args: - input_files: List of paths to input CSV files - output_file: Path to output CSV file + Reads the header from the first file, writes all rows from all files to the + output, and ensures all files have the same header structure. - The function: - 1. Reads the header from the first file - 2. Writes all rows from all files to the output - 3. Ensures all files have the same header structure + Parameters + ---------- + input_files : list[str] + List of paths to input CSV files. + output_file : str + Path to output CSV file. """ if not input_files: logger.warning("No input files provided") diff --git a/scripts/cba/fix_reference_sb_to_cba.py b/scripts/cba/fix_reference_sb_to_cba.py index be206f5eee..d921980ab4 100644 --- a/scripts/cba/fix_reference_sb_to_cba.py +++ b/scripts/cba/fix_reference_sb_to_cba.py @@ -3,7 +3,7 @@ # SPDX-License-Identifier: MIT """ -Build a ``Link`` dataframe of capacity corrections to align SB transmission projects with the CBA reference grid. A positive ``p_nom`` indicates capacity to add (potentially as a new link), while a negative ``p_nom`` indicates capacity to reduce on an existing link. +Build a `Link` dataframe of capacity corrections to align SB transmission projects with the CBA reference grid. A positive `p_nom` indicates capacity to add (potentially as a new link), while a negative `p_nom` indicates capacity to reduce on an existing link. This only works for 2040, as we are assuming the 2030 reference grid does not need corrections. """ diff --git a/scripts/cba/make_indicators.py b/scripts/cba/make_indicators.py index 828a81d811..9ee06026fd 100644 --- a/scripts/cba/make_indicators.py +++ b/scripts/cba/make_indicators.py @@ -90,7 +90,9 @@ def _apply_original_costs(n, remove_noisy_costs: bool) -> None: ].astype(t.static["capital_cost"].dtype) -def calculate_total_system_cost(n, remove_noisy_costs: bool = False): +def calculate_total_system_cost( + n: pypsa.Network, remove_noisy_costs: bool = False +) -> dict: """ Calculate total annualized system cost using PyPSA built-in statistics. @@ -99,11 +101,17 @@ def calculate_total_system_cost(n, remove_noisy_costs: bool = False): - Time-aggregated operational costs - All component types (generators, links, storage, etc.) - Args: - n: PyPSA Network (must be solved) + Parameters + ---------- + n : pypsa.Network + PyPSA network (must be solved). + remove_noisy_costs : bool, optional + Whether to remove noisy costs before calculation. Default is False. - Returns: - float: Total system cost in currency units (Euros) + Returns + ------- + dict + Dictionary with keys total, capex, and opex (all in MEur). """ if not n.is_solved: raise ValueError("Network must be solved before calculating costs") @@ -233,8 +241,8 @@ def get_ac_energy_balance( PyPSA network object. assets : pandas.Series Assets for which to calculate energy balance. - bus_carrier : str, optional - If set, filter energy balance to this bus carrier (e.g. "co2"). + bus_carrier : str or None, optional + If set, filter energy balance to this bus carrier (e.g. "co2"). Default is None. """ balance = n.statistics.energy_balance( groupby_time=False, @@ -252,17 +260,18 @@ def calculate_power_sector_co2_emissions( """ Calculate annual power-sector CO2 emissions for assets producing on AC buses. - Generators use carrier-specific ``co2_emissions`` intensities. Links use the + Generators use carrier-specific `co2_emissions` intensities. Links use the explicit CO2 port flows of the electricity-producing asset. Parameters ---------- n : pypsa.Network PyPSA network object. - ac_assets : pandas.Series, optional + ac_assets : pandas.Series or None, optional Pre-filtered Series of electricity-producing assets on AC buses. If not provided, it will be computed within the function. However, calculating it before calling this function can improve performance. + Default is None. Returns ------- @@ -381,7 +390,7 @@ def calculate_res_dump_per_carrier( return res_dump -def get_co2_ets_price(config, planning_horizon) -> float: +def get_co2_ets_price(config: dict, planning_horizon: int | str) -> float: """ Retrieve the CO2 ETS price for a given planning horizon from the configuration. @@ -409,8 +418,11 @@ def get_co2_ets_price(config, planning_horizon) -> float: def calculate_b1_indicator( - n_reference, n_project, method="pint", remove_noisy_costs: bool = False -): + n_reference: pypsa.Network, + n_project: pypsa.Network, + method: str = "pint", + remove_noisy_costs: bool = False, +) -> tuple[dict, dict]: """ Calculate B1 indicator. @@ -418,13 +430,21 @@ def calculate_b1_indicator( - PINT: positive B1 means beneficial (project reduces costs) - TOOT: positive B1 means beneficial (removing project increases costs) - Args: - n_reference: Reference network - n_project: Project network - method: Either "pint" or "toot" (case-insensitive) + Parameters + ---------- + n_reference : pypsa.Network + Reference network (solved). + n_project : pypsa.Network + Project network. + method : str, optional + Either "pint" or "toot". Default is "pint". + remove_noisy_costs : bool, optional + Whether to remove noisy costs before calculation. Default is False. - Returns: - dict: Dictionary with B1 and component costs + Returns + ------- + tuple[dict, dict] + Tuple of (results, units) dictionaries with B1 and component costs. """ # Calculate full cost breakdowns for reporting cost_reference = calculate_total_system_cost(n_reference, remove_noisy_costs) @@ -517,14 +537,16 @@ def calculate_b2_indicator( Dictionary with keys "low", "central", "high" for societal cost of CO2 in EUR/t. co2_ets_price : float The CO2 ETS price in EUR/t for the relevant planning horizon. - ac_assets_reference : pandas.Series, optional + ac_assets_reference : pandas.Series or None, optional Pre-filtered Series of electricity-producing assets on AC buses for the reference network. If not provided, it will be computed within the function. Providing these can improve performance by avoiding redundant calculations. - ac_assets_project : pandas.Series, optional + Default is None. + ac_assets_project : pandas.Series or None, optional Pre-filtered Series of electricity-producing assets on AC buses for the project network. If not provided, it will be computed within the function. Providing these can improve performance by avoiding redundant calculations. + Default is None. Returns ------- @@ -652,11 +674,17 @@ def calculate_b4_indicator( emission_factors : pd.DataFrame DataFrame with non-CO2 emission factors (kg/MWh) indexed by carrier and with columns for different pollutants and statistics (min, mean, max). + ac_assets_reference : pandas.Series or None, optional + Pre-filtered Series of electricity-producing assets on AC buses for the reference network. + Default is None. + ac_assets_project : pandas.Series or None, optional + Pre-filtered Series of electricity-producing assets on AC buses for the project network. + Default is None. Returns ------- - dict - Dictionary with B4 indicators for each pollutant: + tuple[dict, dict] + Tuple of (results, units) dictionaries with B4 indicators for each pollutant: - B4{sub}_{pollutant} """ diff --git a/scripts/cba/plot_benchmark_indicators.py b/scripts/cba/plot_benchmark_indicators.py index b99fe60c82..d7af3c5e50 100644 --- a/scripts/cba/plot_benchmark_indicators.py +++ b/scripts/cba/plot_benchmark_indicators.py @@ -53,7 +53,23 @@ def select_value_by_subindex( def benchmark_range( df: pd.DataFrame, indicator: str, source: str = "TYNDP 2024" ) -> tuple[float, float, float] | None: - """Return (min, mean, max) range for a benchmark indicator.""" + """ + Return (min, mean, max) range for a benchmark indicator. + + Parameters + ---------- + df : pd.DataFrame + DataFrame containing benchmark indicator data. + indicator : str + Indicator key. + source : str, optional + Data source label to filter on. Default is "TYNDP 2024". + + Returns + ------- + tuple[float, float, float] or None + (min, mean, max) values for the indicator, or None if no data. + """ benchmark = df[(df["source"] == source) & (df["indicator"] == indicator)].copy() benchmark.subindex = benchmark.subindex.fillna("explicit") if benchmark.empty: @@ -115,7 +131,20 @@ def plot_project_benchmarks( project_label: str | None = None, area_subtitle: str | None = None, ) -> None: - """Plot one subplot per indicator with its own y-axis and legend.""" + """ + Plot one subplot per indicator with its own y-axis and legend. + + Parameters + ---------- + df : pd.DataFrame + DataFrame containing indicator data for one project. + output_path : Path + File path where the plot is saved. + project_label : str or None, optional + Label shown in the plot title. Default is None (no label). + area_subtitle : str or None, optional + Subtitle describing the spatial scope of the assessment. Default is None. + """ indicators = sorted(df["indicator"].dropna().unique()) if not indicators: logger.info("No benchmark indicators available to plot") @@ -323,8 +352,26 @@ def plot_project_benchmarks( plt.close(fig) -def create_plots(indicators_file, output_path, planning_horizon=None, area=None): - """Create benchmark plots from a per-project or collected indicators file.""" +def create_plots( + indicators_file: str | Path, + output_path: str | Path, + planning_horizon: int | str | None = None, + area: str | None = None, +) -> None: + """ + Create benchmark plots from a per-project or collected indicators file. + + Parameters + ---------- + indicators_file : str or Path + Path to the CSV file containing indicator data. + output_path : str or Path + Output file path or directory for the generated plots. + planning_horizon : int or str, optional + Planning horizon used to label project. Default is None. + area : str or None, optional + Spatial scope identifier passed to format_area_subtitle. Default is None. + """ output_path = Path(output_path) output_dir = output_path if output_path.suffix == "" else output_path.parent output_dir.mkdir(parents=True, exist_ok=True) diff --git a/scripts/cba/plot_indicators.py b/scripts/cba/plot_indicators.py index d26de94eea..0a92b810f5 100644 --- a/scripts/cba/plot_indicators.py +++ b/scripts/cba/plot_indicators.py @@ -102,8 +102,14 @@ def load_and_merge_data(indicators_path, projects_path): def plot_b1_top_projects( - df, output_dir, method, colors, output_formats, n_top=20, filename_suffix="" -): + df: pd.DataFrame, + output_dir: str | Path, + method: str, + colors: dict, + output_formats: list[str], + n_top: int = 20, + filename_suffix: str = "", +) -> None: """ Diverging bar chart showing B1 with CAPEX/OPEX breakdown for top N projects. @@ -111,6 +117,23 @@ def plot_b1_top_projects( - CAPEX change extending left from zero (negative = cost saved) - OPEX change extending right from zero (positive = additional cost) - Diamond marker showing the net B1 value + + Parameters + ---------- + df : pd.DataFrame + DataFrame with B1 results per project. + output_dir : str or Path + Directory where the plot file is saved. + method : str + CBA method ("pint" or "toot"). + colors : dict + Color mapping. + output_formats : list[str] + File formats to save. + n_top : int, optional + Number of top projects to display. Default is 20. + filename_suffix : str, optional + Suffix appended to the output filename. Default is "". """ df_top = df.nlargest(n_top, "B1_billion_EUR", keep="first") df_sorted = df_top.sort_values("B1_billion_EUR", ascending=True).reset_index( @@ -249,9 +272,34 @@ def plot_b1_top_projects( def plot_b1_summary( - df, output_dir, method, colors, output_formats, total_projects, filename_suffix="" -): - """Summary plot with B1 histogram.""" + df: pd.DataFrame, + output_dir: str | Path, + method: str, + colors: dict, + output_formats: list[str], + total_projects: int, + filename_suffix: str = "", +) -> None: + """ + Summary histogram of B1 values across all projects. + + Parameters + ---------- + df : pd.DataFrame + DataFrame with B1 results per project. + output_dir : str or Path + Directory where the plot file is saved. + method : str + CBA method ("pint" or "toot"). + colors : dict + Color mapping. + output_formats : list[str] + File formats to save. + total_projects : int + Total number of projects. + filename_suffix : str, optional + Suffix appended to the output filename. Default is "". + """ beneficial = df[df["is_beneficial"] == True] not_beneficial = df[df["is_beneficial"] == False] @@ -297,9 +345,32 @@ def plot_b1_summary( def plot_b1_capex_vs_opex( - df, output_dir, method, colors, output_formats, filename_suffix="" -): - """Scatter plot of B1 CAPEX vs OPEX changes.""" + df: pd.DataFrame, + output_dir: str | Path, + method: str, + colors: dict, + output_formats: list[str], + filename_suffix: str = "", +) -> None: + """ + Scatter plot of B1 CAPEX vs OPEX changes per project. + + Parameters + ---------- + df : pd.DataFrame + DataFrame with B1 results per project including capex_change_billion + and opex_change_billion columns. + output_dir : str or Path + Directory where the plot file is saved. + method : str + CBA method ("pint" or "toot"). + colors : dict + Color mapping. + output_formats : list[str] + File formats to save. + filename_suffix : str, optional + Suffix appended to the output filename. Default is "". + """ fig, ax = plt.subplots(figsize=(10, 8)) beneficial = df[df["is_beneficial"]] diff --git a/scripts/cba/prepare_rolling_horizon.py b/scripts/cba/prepare_rolling_horizon.py index c750390323..df97d00373 100644 --- a/scripts/cba/prepare_rolling_horizon.py +++ b/scripts/cba/prepare_rolling_horizon.py @@ -33,7 +33,7 @@ def disable_global_constraints(n: pypsa.Network): Parameters ---------- n : pypsa.Network - Network to modify + Network to modify. """ if "co2_sequestration_limit" in n.global_constraints.index: n.remove("GlobalConstraint", "co2_sequestration_limit") @@ -55,8 +55,8 @@ def disable_store_cyclicity( ---------- n : pypsa.Network Network to modify in place. - cyclic_carriers : list[str], optional - Carriers that remain cyclic. Defaults to empty list. + cyclic_carriers : list[str] or None, optional + Carriers that remain cyclic. Default is None (treated as empty list). """ if cyclic_carriers is None: cyclic_carriers = [] @@ -89,13 +89,18 @@ def resample_msv_to_target( Parameters ---------- msv : pd.DataFrame - MSV data from extraction (e.g., 24H resolution) + MSV data from extraction (e.g., 24H resolution). target_snapshots : pd.DatetimeIndex - Target snapshots (e.g., 3H resolution) + Target snapshots (e.g., 3H resolution). method : str, optional Resampling method: - - "ffill": Forward fill - each MSV value applies until the next one - - "interpolate": Linear interpolation between marginal storage values + - "ffill": Forward fill - each MSV value applies until the next one. + - "interpolate": Linear interpolation between marginal storage values. + + Returns + ------- + pd.DataFrame + Resampled MSV data aligned to target_snapshots. """ if method == "interpolate": # Combine indices and interpolate @@ -125,7 +130,7 @@ def disable_volume_limits(n: pypsa.Network): Parameters ---------- n : pypsa.Network - Network to modify + Network to modify. """ for c in n.components[{"Generator", "Link"}]: has_e_sum_min = isfinite(c.static.get("e_sum_min", [])) @@ -260,8 +265,8 @@ def fix_reservoir_soc_at_boundaries( Target network for rolling horizon (will be modified in place). n_msv : pypsa.Network Network with perfect foresight solution. - carriers : list[str], optional - Carriers to fix. Defaults to ["hydro-reservoir"]. + carriers : list[str] or None, optional + Carriers to fix. Default is None (treated as ["hydro-reservoir"]). horizon : int Number of snapshots per rolling horizon window. Default 168 (one week at 1H). overlap : int diff --git a/scripts/cba/simplify_sb_network.py b/scripts/cba/simplify_sb_network.py index a1a32a9672..390acd80d7 100644 --- a/scripts/cba/simplify_sb_network.py +++ b/scripts/cba/simplify_sb_network.py @@ -15,7 +15,7 @@ **Outputs** -- ``resources/cba/networks/simple_{planning_horizons}.nc``: Simplified network for CBA +- `resources/cba/networks/simple_{planning_horizons}.nc`: Simplified network for CBA """ import logging @@ -29,7 +29,9 @@ logger = logging.getLogger(__name__) -def extend_primary_fuel_sources(n: pypsa.Network, tyndp_conventional_carriers: list): +def extend_primary_fuel_sources( + n: pypsa.Network, tyndp_conventional_carriers: list +) -> None: """ Set infinite capacity for primary fuel source generators. @@ -40,7 +42,7 @@ def extend_primary_fuel_sources(n: pypsa.Network, tyndp_conventional_carriers: l Parameters ---------- n : pypsa.Network - Network to modify + Network to modify. tyndp_conventional_carriers : list List of conventional carrier names from TYNDP data, which may include fuel sub-types (e.g., 'oil-light', 'oil-heavy'). These are grouped by diff --git a/scripts/cba/solve_cba_msv_extraction.py b/scripts/cba/solve_cba_msv_extraction.py index e494409887..9ea9998c08 100644 --- a/scripts/cba/solve_cba_msv_extraction.py +++ b/scripts/cba/solve_cba_msv_extraction.py @@ -11,12 +11,12 @@ **Inputs** -- ``resources/cba/networks/reference_{planning_horizons}.nc``: Reference network -- ``resources/cba/msv_snapshot_weightings_{planning_horizons}.csv``: Snapshot weightings (optional) +- `resources/cba/networks/reference_{planning_horizons}.nc`: Reference network +- `resources/cba/msv_snapshot_weightings_{planning_horizons}.csv`: Snapshot weightings (optional) **Outputs** -- ``resources/cba/networks/msv_{planning_horizons}.nc``: Network with marginal storage values in stores_t.mu_energy_balance +- `resources/cba/networks/msv_{planning_horizons}.nc`: Network with marginal storage values in stores_t.mu_energy_balance """ import copy diff --git a/scripts/cba/solve_cba_network.py b/scripts/cba/solve_cba_network.py index eb21fb57d0..7a61459f4f 100644 --- a/scripts/cba/solve_cba_network.py +++ b/scripts/cba/solve_cba_network.py @@ -11,8 +11,8 @@ Description ----------- -The optimization is based on the :func:`network.optimize_with_rolling_horizon` method. -Additionally, some extra constraints specified in :mod:`solve_network` are added, if +The optimization is based on the `network.optimize_with_rolling_horizon` method. +Additionally, some extra constraints specified in `solve_network` are added, if they apply to the dispatch. """ @@ -57,23 +57,23 @@ def extra_functionality( planning_horizons: str | None = None, ) -> None: """ - Add custom constraints and functionality for operations network + Add custom constraints and functionality for operations network. + + Collects supplementary constraints which will be passed to + `pypsa.optimization.optimize`. + + If you want to enforce additional custom constraints, this is a good + location to add them. The arguments `opts` and + `snakemake.config` are expected to be attached to the network. Parameters ---------- n : pypsa.Network - The PyPSA network instance with config and params attributes + The PyPSA network instance with config and params attributes. snapshots : pd.DatetimeIndex - Simulation timesteps - planning_horizons : str, optional - The current planning horizon year or None in perfect foresight - - Collects supplementary constraints which will be passed to - ``pypsa.optimization.optimize``. - - If you want to enforce additional custom constraints, this is a good - location to add them. The arguments ``opts`` and - ``snakemake.config`` are expected to be attached to the network. + Simulation timesteps. + planning_horizons : str or None, optional + The current planning horizon year or None in perfect foresight. """ config = n.config @@ -114,18 +114,20 @@ def optimize_with_rolling_horizon( Parameters ---------- n : pypsa.Network - snapshots : list-like - Set of snapshots to consider in the optimization. The default is None. + The PyPSA network instance to optimize. + snapshots : Sequence or None, optional + Set of snapshots to consider in the optimization. Default is None. horizon : int - Number of snapshots to consider in each iteration. Defaults to 100. + Number of snapshots to consider in each iteration. Default is 100. overlap : int - Number of snapshots to overlap between two iterations. Defaults to 0. - **kwargs: - Keyword argument used by `linopy.Model.solve`, such as `solver_name`, + Number of snapshots to overlap between two iterations. Default is 0. + **kwargs + Keyword arguments used by `linopy.Model.solve`, such as `solver_name`. Returns ------- tuple[str, str] + Tuple of (status, condition) from the final optimization window. """ if snapshots is None: snapshots: Sequence = n.snapshots @@ -212,28 +214,17 @@ def solve_network( Parameters ---------- n : pypsa.Network - The PyPSA network instance - config : Dict - Configuration dictionary containing solver settings - params : Dict - Dictionary of solving parameters - solving : Dict - Dictionary of solving options and configuration - rule_name : str, optional - Name of the snakemake rule being executed - planning_horizons : str, optional - The current planning horizon year or None in perfect foresight + The PyPSA network instance. + config : dict + Configuration dictionary containing solver settings. + params : dict + Dictionary of solving parameters. + solving : dict + Dictionary of solving options and configuration. + planning_horizons : str or None, optional + The current planning horizon year or None in perfect foresight. **kwargs - Additional keyword arguments passed to the solver - - Returns - ------- - n : pypsa.Network - Solved network instance - status : str - Solution status - condition : str - Termination condition + Additional keyword arguments passed to the solver. Raises ------ diff --git a/scripts/cba/summarize_all.py b/scripts/cba/summarize_all.py index e445154821..6cbca2c559 100644 --- a/scripts/cba/summarize_all.py +++ b/scripts/cba/summarize_all.py @@ -70,7 +70,25 @@ def benchmark_range( source: str = "TYNDP 2024", planning_horizon: int = 0, ) -> tuple[float, float, float] | None: - """Return (min, mean, max) range for a benchmark indicator.""" + """ + Return (min, mean, max) range for a benchmark indicator. + + Parameters + ---------- + df : pd.DataFrame + DataFrame containing benchmark indicator data. + indicator : str + Indicator key to look up. + source : str, optional + Data source label to filter on. Default is "TYNDP 2024". + planning_horizon : int, optional + Planning horizon year to filter on. Default is 0. + + Returns + ------- + tuple[float, float, float] or None + (min, mean, max) values for the indicator, or None if no data. + """ benchmark = df[ (df["source"] == source) & (df["indicator"] == indicator) @@ -125,10 +143,23 @@ def format_area_subtitle(area: str | None) -> str | None: def create_plots( df: pd.DataFrame, output_file: str, - planning_horizons=None, - area: str = None, -): - """Create benchmark plot from all collected indicator files.""" + planning_horizons: list | None = None, + area: str | None = None, +) -> None: + """ + Create benchmark plot from all collected indicator files. + + Parameters + ---------- + df : pd.DataFrame + Combined DataFrame with all indicator data. + output_file : str + Output file path for the generated plot. + planning_horizons : list, optional + Planning horizons to include. Default is None (derived from df). + area : str or None, optional + Spatial scope identifier passed to format_area_subtitle. Default is None. + """ # if df.empty: diff --git a/scripts/cba/summarize_indicators.py b/scripts/cba/summarize_indicators.py index 976c75cc51..f55f293e54 100644 --- a/scripts/cba/summarize_indicators.py +++ b/scripts/cba/summarize_indicators.py @@ -79,7 +79,25 @@ def benchmark_range( source: str = "TYNDP 2024", planning_horizon: int = 0, ) -> tuple[float, float, float] | None: - """Return (min, mean, max) range for a benchmark indicator.""" + """ + Return (min, mean, max) range for a benchmark indicator. + + Parameters + ---------- + df : pd.DataFrame + DataFrame containing benchmark indicator data. + indicator : str + Indicator key to look up. + source : str, optional + Data source label to filter on. Default is "TYNDP 2024". + planning_horizon : int, optional + Planning horizons to filter on. Default is 0. + + Returns + ------- + tuple[float, float, float] or None + (min, mean, max) values for the indicator, or None if no data. + """ benchmark = df[ (df["source"] == source) & (df["indicator"] == indicator) @@ -137,7 +155,20 @@ def plot_project_benchmarks( project_label: str | None = None, area_subtitle: str | None = None, ) -> None: - """Plot one subplot per indicator with its own y-axis and legend.""" + """ + Plot one subplot per indicator with its own y-axis and legend. + + Parameters + ---------- + df : pd.DataFrame + DataFrame containing indicator data for one project. + output_path : Path + File path where the plot is saved. + project_label : str or None, optional + Label shown in the plot title. Default is None (no label). + area_subtitle : str or None, optional + Subtitle describing the spatial scope of the assessment. Default is None. + """ indicators = sorted(df["indicator"].dropna().unique()) if not indicators: logger.info("No benchmark indicators available to plot") @@ -296,18 +327,19 @@ def create_plots(df, output_file, area): logger.info("Benchmark plots saved to %s", output_file) -def summarize_indicators(input_files, output_file): +def summarize_indicators(input_files: list[str], output_file: str) -> None: """ Concatenate multiple CSV files into one using the csv module. - Args: - input_files: List of paths to input CSV files - output_file: Path to output CSV file + Reads the header from the first file, writes all rows from all files to the + output, and ensures all files have the same header structure. - The function: - 1. Reads the header from the first file - 2. Writes all rows from all files to the output - 3. Ensures all files have the same header structure + Parameters + ---------- + input_files : list[str] + List of paths to input CSV files. + output_file : str + Path to output CSV file. """ if not input_files: logger.warning("No input files provided") diff --git a/scripts/prepare_sector_network.py b/scripts/prepare_sector_network.py index a4bebf66fd..f785af6578 100755 --- a/scripts/prepare_sector_network.py +++ b/scripts/prepare_sector_network.py @@ -78,7 +78,7 @@ def attach_tyndp_transmission_projects( fn_projects : str Path to CSV file containing transmission project data. fn_projects_fix : str|None (optional) - Path to CSV file containing transmission project corrections (default: None). + Path to CSV file containing transmission project corrections. Default is None. """ logger.info("Adding transmission projects to the electrical network") projects = _load_links_from_raw(fn_projects) @@ -120,7 +120,7 @@ def define_spatial( Parameters ---------- nodes : list-like - Nodes to define spatial data for + Nodes to define spatial data for. options : dict Configuration options containing at least: - biomass_spatial : bool @@ -131,10 +131,12 @@ def define_spatial( - methanol : dict - regional_oil_demand : bool - regional_coal_demand : bool - buses_h2_file : str - Path to the file containing TYNDP H2 buses information. - offshore_buses_fn : str - Path to the file containing offshore bus data. + offshore_buses_fn : str, optional + Path to the file containing offshore bus data. Default is None. + buses_h2_file : str, optional + Path to the file containing TYNDP H2 buses information. Default is None. + tyndp_scenario : str, optional + TYNDP scenario name. Default is None. """ spatial.nodes = nodes @@ -572,9 +574,9 @@ def create_h2_topology_tyndp(n, fn_h2_network, options): Parameters ---------- n : pypsa.Network - Network to create H2 topology for + Network to create H2 topology for. fn_h2_network : str - Pointing to the input TYNDP H2 reference grid csv file + Pointing to the input TYNDP H2 reference grid csv file. options : dict Dictionary of configuration options. Key options include: - h2_zones_tyndp : bool @@ -1507,22 +1509,22 @@ def _add_other_non_res_tyndp( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. generator : str - Name of the Other Non-RES generator + Name of the Other Non-RES generator. carrier : str - Name of the Other Non-RES fuel carrier + Name of the Other Non-RES fuel carrier. carrier_nodes : list - Nodes of the fuel carrier + Nodes of the fuel carrier. spatial : SimpleNamespace Namespace containing spatial information for different carriers, - including nodes and locations + including nodes and locations. costs : pd.DataFrame - DataFrame containing cost and technical parameters for different technologies + DataFrame containing cost and technical parameters for different technologies. pemmdb_capacities : pd.DataFrame - Dataframe containing PEMMDB capacities including information on the different Other Non-RES price bands + Dataframe containing PEMMDB capacities including information on the different Other Non-RES price bands. co2_price: float - Emission price for the given planning year + Emission price for the given planning year. Returns ------- @@ -1610,24 +1612,24 @@ def add_thermal_generation_tyndp( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. costs : pd.DataFrame - DataFrame containing cost and technical parameters for different technologies + DataFrame containing cost and technical parameters for different technologies. nodes : pd.Index - pd.Index with demand nodes + pd.Index with demand nodes. tyndp_conventionals : dict[str, str] - Dictionary mapping TYNDP conventional generation technologies to their energy carriers + Dictionary mapping TYNDP conventional generation technologies to their energy carriers. spatial : SimpleNamespace Namespace containing spatial information for different carriers, - including nodes and locations + including nodes and locations. options : dict - Configuration dictionary containing settings for the model + Configuration dictionary containing settings for the model. cf_industry : dict - Dictionary of industrial conversion factors, needed for carrier buses + Dictionary of industrial conversion factors, needed for carrier buses. pemmdb_capacities: pd.DataFrame - Dataframe containing PEMMDB capacities including Other Non-RES price band information + Dataframe containing PEMMDB capacities including Other Non-RES price band information. co2_price: float - Emission price for the given planning year + Emission price for the given planning year. Returns ------- @@ -1721,7 +1723,7 @@ def add_other_res_tyndp( n : pypsa.Network The PyPSA network container object. costs : pd.DataFrame - DataFrame containing cost and technical parameters for different technologies + DataFrame containing cost and technical parameters for different technologies. pop_layout : SimpleNamespace. Namespace containing spatial information for different carriers, including nodes and locations. @@ -1965,7 +1967,7 @@ def _add_other_non_res_capacities( tech : str Other Non-RES price band to be added to the network. group_conventionals : bool - Whether TYNDP conventional carriers are aggregated into higher level groups + Whether TYNDP conventional carriers are aggregated into higher level groups. Returns ------- @@ -2114,7 +2116,7 @@ def _add_conventional_thermal_capacities( nuclear_profiles : pd.DataFrame DataFrame containing the availability profiles of nuclear power plants. group_conventionals : bool - Whether TYNDP conventional carriers are aggregated into higher level groups + Whether TYNDP conventional carriers are aggregated into higher level groups. Returns ------- @@ -2314,7 +2316,7 @@ def _extract_inflows( hydro_tech_i : pd.Index Index of network components associated with the hydro technology. name_sfx : str, optional - String suffix added to the column name of the returned inflow Dataframe + String suffix added to the column name of the returned inflow Dataframe. Returns ------- @@ -3138,7 +3140,7 @@ def add_ammonia( 'fixed', 'VOM', 'efficiency', 'lifetime', etc. pop_layout : pd.DataFrame Population layout data with index of location nodes - spatial : Namespace + spatial : SimpleNamespace Configuration object containing ammonia-specific spatial information with attributes: - nodes: list of ammonia bus nodes @@ -3483,20 +3485,26 @@ def add_electricity_grid_connection(n, costs): ] -def add_h2_production_tyndp(n, nodes, buses_h2, costs, options={}): +def add_h2_production_tyndp( + n: pypsa.Network, + nodes: pd.Index, + buses_h2: pd.Index, + costs: pd.DataFrame, + options: dict = {}, +) -> None: """ Add TYNDP electrolyzers for Z1 and Z2, and optionally add SMR, SMR CC and ATR. Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. nodes : pd.Index - Pandas Index of electricity node locations/nodes + Pandas Index of electricity node locations/nodes. buses_h2 : pd.Index - Pandas Index of hydrogen nodes to which H2 production technologies will connect + Pandas Index of hydrogen nodes to which H2 production technologies will connect. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: @@ -3607,20 +3615,25 @@ def add_h2_production_tyndp(n, nodes, buses_h2, costs, options={}): ) -def add_h2_dres_tyndp(n, spatial, buses_h2_z2, costs): +def add_h2_dres_tyndp( + n: pypsa.Network, + spatial: SimpleNamespace, + buses_h2_z2: SimpleNamespace, + costs: pd.DataFrame, +) -> None: """ Adds TYNDP Z2 DRES electricity buses and electrolyzers. Parameters ---------- n : pypsa.Network - The PyPSA network container object - spatial : object - Namespace object with spatial nodes for different carriers such as `h2_tyndp` + The PyPSA network container object. + spatial : SimpleNamespace + Namespace object with spatial nodes for different carriers such as `h2_tyndp`. buses_h2_z2 : SimpleNamespace - Namespace object with spatial nodes of H2 Z2 buses + Namespace object with spatial nodes of H2 Z2 buses. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -3653,23 +3666,30 @@ def add_h2_dres_tyndp(n, spatial, buses_h2_z2, costs): ) -def add_h2_reconversion_tyndp(n, spatial, nodes, buses_h2, costs, options=None): +def add_h2_reconversion_tyndp( + n: pypsa.Network, + spatial: SimpleNamespace, + nodes: pd.Index, + buses_h2: pd.Index, + costs: pd.DataFrame, + options: dict | None = None, +) -> None: """ Adds TYNDP H2 reconversion with options for Fuel cells, H2 turbines and methanation. Parameters ---------- n : pypsa.Network - The PyPSA network container object - spatial : object - Namespace object with spatial nodes for different carriers such as `h2_tyndp` + The PyPSA network container object. + spatial : SimpleNamespace + Namespace object with spatial nodes for different carriers such as `h2_tyndp`. nodes : pd.Index - Pandas Index of electricity node locations/nodes + Pandas Index of electricity node locations/nodes. buses_h2 : pd.Index - Pandas Index of hydrogen nodes to which H2 reconversion technologies will connect + Pandas Index of hydrogen nodes to which H2 reconversion technologies will connect. costs : pd.DataFrame - Technology cost assumptions - options : dict, optional + Technology cost assumptions. + options : dict or None, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: - methanation : bool @@ -3740,22 +3760,29 @@ def add_h2_reconversion_tyndp(n, spatial, nodes, buses_h2, costs, options=None): ) -def add_h2_grid_tyndp(n, nodes, h2_pipes_file, interzonal_file, costs, options): +def add_h2_grid_tyndp( + n: pypsa.Network, + nodes: pd.Index, + h2_pipes_file: str, + interzonal_file: str, + costs: pd.DataFrame, + options: dict, +) -> None: """ Adds TYNDP hydrogen pipelines and interzonal (Z1 <-> Z2) connections. Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. nodes : pd.Index - Pandas Index of electricity node locations/nodes + Pandas Index of electricity node locations/nodes. h2_pipes_file : str - Path to CSV file containing prepped H2 reference grid data + Path to CSV file containing prepped H2 reference grid data. interzonal_file : str - Path to CSV file containing prepped H2 interzonal connection data + Path to CSV file containing prepped H2 interzonal connection data. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. options : dict Dictionary of configuration options. Key options include: - h2_zones_tyndp : bool @@ -3823,13 +3850,13 @@ def _add_h2_stores_and_links_tyndp( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. storage_tech: str Storage technology to add. Can be either 'cavern-storage' or 'tank-storage' buses : pd.Index - nodes of H2 buses to add the storages to + nodes of H2 buses to add the storages to. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. extendable : bool Whether the added storage components shall be extendable in the optimization or not. @@ -3900,13 +3927,13 @@ def add_h2_storage_tyndp( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. buses_h2_z1 : pd.Index - Nnodes of H2 Z1 buses + Nnodes of H2 Z1 buses. buses_h2_z2 : pd.Index - Nodes of H2 Z2 buses + Nodes of H2 Z2 buses. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. - h2_zones_tyndp : bool @@ -3941,15 +3968,15 @@ def add_h2_storage_tyndp( def add_h2_topology_tyndp( - n, - pop_layout, - spatial, - h2_pipes_file, - interzonal_file, - costs, - options, - h2_demand_file, -): + n: pypsa.Network, + pop_layout: pd.DataFrame, + spatial: SimpleNamespace, + h2_pipes_file: str, + interzonal_file: str, + costs: pd.DataFrame, + options: dict, + h2_demand_file: str, +) -> None: """ Add TYNDP H2 topology to the network. This adds new single country H2 buses (Z1 + Z2 nodes) and pipeline connections @@ -3965,21 +3992,21 @@ def add_h2_topology_tyndp( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. pop_layout : pd.DataFrame - Population layout with index of locations/nodes - spatial : object - Namespace object with spatial nodes for different carriers such as `h2_tyndp` + Population layout with index of locations/nodes. + spatial : SimpleNamespace + Namespace object with spatial nodes for different carriers such as `h2_tyndp`. h2_pipes_file : str - Path to CSV file containing prepped H2 reference grid data + Path to CSV file containing prepped H2 reference grid data. interzonal_file : str - Path to CSV file containing prepped H2 interzonal connection data + Path to CSV file containing prepped H2 interzonal connection data. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. h2_demand_file : str - Path to CSV file containing exogenous hydrogen demand time series + Path to CSV file containing exogenous hydrogen demand time series. Returns @@ -4061,16 +4088,16 @@ def add_h2_topology_tyndp( add_h2_demand_tyndp(n=n, h2_demand_file=h2_demand_file) -def add_h2_demand_tyndp(n, h2_demand_file): +def add_h2_demand_tyndp(n: pypsa.Network, h2_demand_file: str) -> None: """ Add exogenous TYNDP hydrogen demand to the network. Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. h2_demand_file : str - Path to CSV file containing exogenous hydrogen demand time series + Path to CSV file containing exogenous hydrogen demand time series. """ logger.info("Add exogenous hydrogen demand to network") @@ -4105,9 +4132,9 @@ def add_h2_production(n, nodes, options, spatial, costs): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. nodes : pd.Index - Pandas Index of locations/nodes + Pandas Index of locations/nodes. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: @@ -4115,9 +4142,9 @@ def add_h2_production(n, nodes, options, spatial, costs): - SMR : bool - cc_fraction : float spatial : object, optional - Object containing spatial information about nodes and their locations + Object containing spatial information about nodes and their locations. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -4182,9 +4209,9 @@ def add_h2_reconversion(n, nodes, options, spatial, costs): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. nodes : pd.Index - Pandas Index of locations/nodes + Pandas Index of locations/nodes. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: @@ -4192,9 +4219,9 @@ def add_h2_reconversion(n, nodes, options, spatial, costs): - hydrogen_turbine : bool - methanation : bool spatial : object, optional - Object containing spatial information about nodes and their locations + Object containing spatial information about nodes and their locations. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -4264,19 +4291,19 @@ def add_h2_storage(n, nodes, options, cavern_types, h2_cavern_file, costs): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. nodes : pd.Index - Pandas Index of locations/nodes + Pandas Index of locations/nodes. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: - hydrogen_underground_storage : bool cavern_types : list - List of underground storage types to consider + List of underground storage types to consider. h2_cavern_file : str - Path to CSV file containing hydrogen cavern storage potentials + Path to CSV file containing hydrogen cavern storage potentials. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -4343,16 +4370,16 @@ def add_gas_network(n, gas_pipes, options, costs, gas_input_nodes): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. gas_pipes : pd.DataFrame - Dataframe containing gas network data + Dataframe containing gas network data. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: - H2_retrofit : bool - gas_network_connectivity_upgrade : int costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. gas_input_nodes : pd.DataFrame, optional DataFrame containing gas input node information (LNG, pipeline, etc.) @@ -4489,15 +4516,15 @@ def add_h2_pipeline_retrofit(n, gas_pipes, options, costs): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. gas_pipes : pd.DataFrame - Dataframe containing gas network data + Dataframe containing gas network data. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: - H2_retrofit_capacity_per_CH4 : float costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -4535,9 +4562,9 @@ def add_h2_pipeline_new(n, costs): Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. costs : pd.DataFrame - Technology cost assumptions + Technology cost assumptions. Returns ------- @@ -4587,25 +4614,25 @@ def add_h2_gas_infrastructure( Parameters ---------- n : pypsa.Network - The PyPSA network container object + The PyPSA network container object. costs : pd.DataFrame Cost assumptions for different technologies. Must include gas and hydrogen assumptions. pop_layout : pd.DataFrame - Population layout with index of locations/nodes + Population layout with index of locations/nodes. h2_cavern_file : str - Path to CSV file containing hydrogen cavern storage potentials + Path to CSV file containing hydrogen cavern storage potentials. h2_pipes_file : str - Path to CSV file containing prepped H2 reference grid data + Path to CSV file containing prepped H2 reference grid data. interzonal_file : str - Path to CSV file containing prepped H2 interzonal connection data + Path to CSV file containing prepped H2 interzonal connection data. cavern_types : list - List of underground storage types to consider + List of underground storage types to consider. clustered_gas_network_file : str, optional - Path to CSV file containing gas network data + Path to CSV file containing gas network data. gas_input_nodes : pd.DataFrame, optional DataFrame containing gas input node information (LNG, pipeline, etc.) spatial : object, optional - Object containing spatial information about nodes and their locations + Object containing spatial information about nodes and their locations. options : dict, optional Dictionary of configuration options. Defaults to empty dict if not provided. Key options include: @@ -4620,7 +4647,7 @@ def add_h2_gas_infrastructure( - cc_fraction : float - methanation : bool h2_demand_file : str - Path to CSV file containing exogenous hydrogen demand data + Path to CSV file containing exogenous hydrogen demand data. Returns ------- @@ -5252,7 +5279,7 @@ def add_offshore_hubs_tyndp( Series mapping technology names (indexes) to PECD profile file paths (values). costs : pd.DataFrame Technology costs assumptions. - spatial : object, optional + spatial : SimpleNamespace Object containing spatial information about nodes and their locations. options : dict Configuration options containing at least: @@ -5345,10 +5372,10 @@ def attach_gas_load( - gas_demand_exogenously costs : pd.DataFrame Technology costs assumptions. - spatial : object, optional + spatial : SimpleNamespace Object containing spatial information about nodes and their locations. - nhours : int - Number of hours over which the annual gas demand is divided. + nhours : int, optional + Number of hours over which the annual gas demand is divided. Default is 8760. """ gas_demand = pd.read_csv(gas_demand_fn, index_col=0) / nhours diff --git a/scripts/sb/build_pemmdb_data.py b/scripts/sb/build_pemmdb_data.py index d0de6b515e..0e99395045 100644 --- a/scripts/sb/build_pemmdb_data.py +++ b/scripts/sb/build_pemmdb_data.py @@ -8,8 +8,8 @@ ------- Cleaned CSV file with all NT capacities (p_nom) in long format and NetCDF file containing the must run obligations (p_min_pu) and availability (p_max_pu) for each of the different PEMMDB technologies. -- ``resources/pemmdb_capacities_{planning_horizon}.csv`` in long format -- ``resources/pemmdb_profiles_{planning_horizon}.nc`` with the following structure: +- `resources/pemmdb_capacities_{planning_horizon}.csv` in long format +- `resources/pemmdb_profiles_{planning_horizon}.nc` with the following structure: =================== ==================== ========================================================= Field Coordinates Description @@ -106,7 +106,8 @@ def read_pemmdb_data( pyear : int Planning year used for data retrieval (fallback year if pyear_i not available). required_sheets : list[str], optional - List of required technology sheets to read PEMMDB data for. + List of required technology sheets to read PEMMDB data for. Default is None, + which reads all available sheets. Returns ------- @@ -155,18 +156,18 @@ def _drop_duplicate_price_bands( Dataframe to check for duplicate prices bands. groupby : str|list[str] Columns to group by. - pemmdb_tech: str + pemmdb_tech : str PEMMDB technology name. - node: str + node : str Node name. - cyear: int + cyear : int Climate year. **kwargs : dict Keyword arguments passed to pd.DataFrame.groupby(). Returns ------- - df : pd.DataFrame + pd.DataFrame Dataframe without duplicate prices bands. """ if (groupby in df.columns and df[groupby].duplicated().any()) or ( @@ -1083,7 +1084,7 @@ def process_pemmdb_profiles( sns_year_h : pd.DatetimeIndex Hourly Datetime index for a full given cyear. carrier_mapping_fn : str - Path to file with mapping from external carriers to available tyndp_carrier names + Path to file with mapping from external carriers to available tyndp_carrier names. Returns ------- diff --git a/scripts/sb/build_renewable_profiles_pecd.py b/scripts/sb/build_renewable_profiles_pecd.py index 522455c7f6..307b601d18 100644 --- a/scripts/sb/build_renewable_profiles_pecd.py +++ b/scripts/sb/build_renewable_profiles_pecd.py @@ -6,12 +6,12 @@ generation time series are read for each node across all renewable technologies, including onshore wind, AC-connected offshore wind, DC-connected offshore wind, and solar PV generators. -.. note:: Hydroelectric profiles will be built in script :mod:`build_hydro_profiles_PECD`. Not yet implemented. +.. note:: Hydroelectric profiles will be built in script `build_hydro_profiles_PECD`. Not yet implemented. Outputs ------- -- ``resources/profile_pecd_{clusters}_{technology}.nc`` with the following structure +- `resources/profile_pecd_{clusters}_{technology}.nc` with the following structure =================== ==================== ========================================================= Field Dimensions Description diff --git a/scripts/sb/build_statistics.py b/scripts/sb/build_statistics.py index c6d75f67a3..406f1cfa79 100644 --- a/scripts/sb/build_statistics.py +++ b/scripts/sb/build_statistics.py @@ -43,19 +43,19 @@ def add_benchmarking_mappings( ) -> None: """ Load benchmarking mappings from the carrier mapping file and apply them - to the ``mapping`` configuration dictionary of each table. + to the `mapping` configuration dictionary of each table. Parameters ---------- carrier_mapping_fn : str Path to csv file with carrier mapping. tables : dict - Dictionary defining the benchmarking tables. When the ``mapping_col`` key is + Dictionary defining the benchmarking tables. When the `mapping_col` key is defined in the configuration, the loaded carrier mapping will be added to - the dictionary with the ``mapping`` key. + the dictionary with the `mapping` key. group_tyndp_conventionals : bool, default False - Whether TYNDP technologies are grouped to their ``open_tyndp_type``. - These group names then take precedence over the names in ``open_tyndp_index`` and ``open_tyndp_carrier``. + Whether TYNDP technologies are grouped to their `open_tyndp_type`. + These group names then take precedence over the names in `open_tyndp_index` and `open_tyndp_carrier`. Returns ------- @@ -85,7 +85,7 @@ def add_benchmarking_mappings( ) -def remove_last_day(sws: pd.Series, nhours: int = 24): +def remove_last_day(sws: pd.Series, nhours: int = 24) -> pd.Series: """ Remove the last day from snapshots to ensure exactly 52 weeks of data. @@ -98,8 +98,8 @@ def remove_last_day(sws: pd.Series, nhours: int = 24): Returns ------- - tuple[pd.DatetimeIndex, pd.Series] - Modified snapshots and snapshot weightings with the last day removed. + pd.Series + Snapshot weightings with the last day zeroed out. """ sws = sws.copy() diff --git a/scripts/sb/build_tyndp_gas_demand.py b/scripts/sb/build_tyndp_gas_demand.py index 7cbd3456fe..a47a9eb014 100644 --- a/scripts/sb/build_tyndp_gas_demand.py +++ b/scripts/sb/build_tyndp_gas_demand.py @@ -38,7 +38,7 @@ Inputs ------ -- ``data/tyndp_2024_bundle/Supply Tool/20240518-Supply-Tool.xlsm``: TYNDP 2024 Supply Tool Excel file containing: +- `data/tyndp_2024_bundle/Supply Tool/20240518-Supply-Tool.xlsm`: TYNDP 2024 Supply Tool Excel file containing: - NT+ data sheet: Final demand by country - Other data and Conversions sheet: Heat distribution and efficiency factors - IT sheet: Italian gas production data @@ -46,7 +46,7 @@ Outputs ------- -- ``gas_demand_tyndp_{planning_horizons}.csv``: Processed gas demand data (MWh) by country/bus +- `gas_demand_tyndp_{planning_horizons}.csv`: Processed gas demand data (MWh) by country/bus for the specified planning horizon """ diff --git a/scripts/sb/build_tyndp_h2_demand.py b/scripts/sb/build_tyndp_h2_demand.py index d697c42332..7368ae7563 100644 --- a/scripts/sb/build_tyndp_h2_demand.py +++ b/scripts/sb/build_tyndp_h2_demand.py @@ -5,16 +5,16 @@ Builds TYNDP Scenario Building hydrogen demand profiles for Open-TYNDP. This script processes hydrogen demand data from TYNDP 2024, using the -``snapshots`` year as the climatic year (``cyear``) for demand profiles. +`snapshots` year as the climatic year (`cyear`) for demand profiles. The data is filtered and interpolated based on the selected scenario (Distributed Energy, Global Ambition, or National Trends) and planning horizon. Climatic Year Selection ----------------------- -The ``snapshots`` year determines the climatic year for demand profiles: +The `snapshots` year determines the climatic year for demand profiles: -- **DE and GA scenarios**: Must use 1995, 2008, or 2009. If ``snapshots`` +- **DE and GA scenarios**: Must use 1995, 2008, or 2009. If `snapshots` is not one of these years, 2009 is used as the default (considered most representative). - **NT scenario**: Must be between 1982 and 2019. @@ -40,12 +40,12 @@ Inputs ------ -- ``data/tyndp_2024_bundle/Demand Profiles``: TYNDP 2024 hydrogen demand profiles +- `data/tyndp_2024_bundle/Demand Profiles`: TYNDP 2024 hydrogen demand profiles Outputs ------- -- ``resources/h2_demand_tyndp_{planning_horizons}.csv``: Processed hydrogen +- `resources/h2_demand_tyndp_{planning_horizons}.csv`: Processed hydrogen demand time series for the specified planning horizon """ @@ -139,7 +139,25 @@ def read_h2_excel( def get_file_path(fn: str, scenario: str, pyear: int, h2_zone: int = None) -> Path: - """Construct file path for given planning year and zone.""" + """ + Construct file path for given planning year and zone. + + Parameters + ---------- + fn : str + Base directory path containing scenario subdirectories. + scenario : str + Scenario name. + pyear : int + Planning year. + h2_zone : int, optional + H2 zone identifier required for "DE" and "GA" scenarios. Default is None. + + Returns + ------- + Path + Path to the H2 demand Excel file for the given scenario and year. + """ if scenario == "NT": return Path( diff --git a/scripts/sb/build_tyndp_h2_network.py b/scripts/sb/build_tyndp_h2_network.py index fe992983be..69c131c940 100644 --- a/scripts/sb/build_tyndp_h2_network.py +++ b/scripts/sb/build_tyndp_h2_network.py @@ -29,14 +29,26 @@ def normalize_starting_grid_h2_nodes(df: pd.DataFrame) -> pd.DataFrame: Normalize node IDs from the newer H2 starting grid workbook to the country-level H2 node IDs currently used in the TYNDP H2 topology. - This is needed because the newer H2 starting grid workbook contains node IDs with trailing zeros (e.g. ``DE00``) - and some exceptions (e.g. ``UK00`` instead of ``GB00``) that need to be normalized to match the country-level node IDs - used in the TYNDP H2 topology (e.g. ``DE``, ``GB``). - - Examples: - - ``AT00`` -> ``AT`` - - ``IBIT00`` -> ``IBIT`` - - ``UK00`` -> ``GB`` + This is needed because the newer H2 starting grid workbook contains node IDs with + trailing zeros (e.g. `DE00`) and some exceptions (e.g. `UK00` instead of `GB00`) + that need to be normalized to match the country-level node IDs used in the TYNDP + H2 topology (e.g. `DE`, `GB`). + + Parameters + ---------- + df : pd.DataFrame + DataFrame with bus0 and bus1 columns containing raw H2 node IDs. + + Returns + ------- + pd.DataFrame + DataFrame with normalized node IDs in bus0 and bus1. + + Notes + ----- + - `AT00` -> `AT` + - `IBIT00` -> `IBIT` + - `UK00` -> `GB` """ df = df.copy() @@ -50,7 +62,9 @@ def normalize_starting_grid_h2_nodes(df: pd.DataFrame) -> pd.DataFrame: return df -def load_h2_interzonal_connections(fn, scenario="GA", pyear=2030): +def load_h2_interzonal_connections( + fn: str, scenario: str = "GA", pyear: int = 2030 +) -> pd.DataFrame: """ Load and clean H2 interzonal connections. Returns the cleaned interzonal connections as dataframe. @@ -77,7 +91,7 @@ def load_h2_interzonal_connections(fn, scenario="GA", pyear=2030): Returns ------- pd.DataFrame - The function returns cleaned TYNDP H2 interzonal connections. + Cleaned TYNDP H2 interzonal connections. """ if scenario in ["DE", "GA"]: @@ -130,7 +144,7 @@ def load_h2_grid_entsoe(fn_grid: str, pyear: int) -> pd.DataFrame: Returns ------- pd.DataFrame - The function returns the cleaned TYNDP H2 reference grid. + Cleaned TYNDP H2 reference grid. """ available_years = [2030, 2040, 2050] @@ -173,13 +187,13 @@ def load_h2_grid_entsos(fn_grid: str, fn_projects: str | None) -> pd.DataFrame: ---------- fn_grid : str Path to Excel file containing the ENTSO-E H2 reference grid data. - fn_projects : str + fn_projects : str or None Path to CSV file containing H2 projects data. Returns ------- pd.DataFrame - The function returns the cleaned TYNDP H2 reference grid. + Cleaned TYNDP H2 reference grid. """ h2_grid_raw = pd.read_excel(fn_grid) @@ -210,6 +224,24 @@ def load_h2_grid( ) -> pd.DataFrame: """ Load the corresponding H2 grid based on the source. + + Parameters + ---------- + source : str + Source identifier, either 'entsoe' or 'entsos'. + fn_grid_entsoe : str + Path to the ENTSO-E H2 reference grid file. + fn_grid_entsos : str + Path to the ENTSO-E/ENTSOG joint scenarios H2 reference grid file. + fn_projects : str or None + Path to CSV file containing H2 projects data. + pyear : int + Planning horizon year. + + Returns + ------- + pd.DataFrame + Cleaned H2 grid data for the specified source. """ if source == "entsoe": diff --git a/scripts/sb/build_tyndp_hydro_profile.py b/scripts/sb/build_tyndp_hydro_profile.py index a7e998fe4d..2b9acee2a0 100644 --- a/scripts/sb/build_tyndp_hydro_profile.py +++ b/scripts/sb/build_tyndp_hydro_profile.py @@ -7,7 +7,7 @@ Outputs ------- -- ``resources/profile_pemmdb_hydro.nc``: +- `resources/profile_pemmdb_hydro.nc`: =================== ================ ========================================================= Field Dimensions Description diff --git a/scripts/sb/build_tyndp_offshore_hubs.py b/scripts/sb/build_tyndp_offshore_hubs.py index bec28c101c..14b7c31366 100644 --- a/scripts/sb/build_tyndp_offshore_hubs.py +++ b/scripts/sb/build_tyndp_offshore_hubs.py @@ -18,7 +18,7 @@ GEO_CRS = "EPSG:4326" -def load_offshore_hubs(fn: str): +def load_offshore_hubs(fn: str) -> gpd.GeoDataFrame: """ Load and process offshore hub coordinates from Excel file. @@ -79,7 +79,7 @@ def load_offshore_grid( countries: list[str], max_capacity: dict[str, int], h2_zones_tyndp: bool, -): +) -> pd.DataFrame: """ Load offshore grid (electricity and hydrogen) and format data. @@ -96,7 +96,7 @@ def load_offshore_grid( countries : list[str] List of country codes used to clean data. max_capacity : dict[str, int] - Maximum transmission capacity between two offshore hubs per carrier + Maximum transmission capacity between two offshore hubs per carrier. h2_zones_tyndp : bool Whether to use TYNDP hydrogen zones splitting. @@ -219,7 +219,7 @@ def load_offshore_electrolysers( planning_horizons: list[int], countries: list[str], h2_zones_tyndp: bool, -): +) -> pd.DataFrame: """ Load offshore electrolysers data and format data. @@ -292,7 +292,9 @@ def load_offshore_electrolysers( return electrolysers -def collect_from_layer(generators_e, generators_l, nodes): +def collect_from_layer( + generators_e: pd.DataFrame, generators_l: pd.DataFrame, nodes: pd.DataFrame +) -> pd.DataFrame: """ Combine existing capacities with potentials and resolve bus allocations. @@ -396,7 +398,7 @@ def load_offshore_generators( planning_horizons: list[int], countries: list[str], extendable_carriers: dict[str, list[str]], -): +) -> tuple[pd.DataFrame, pd.DataFrame]: """ Load offshore generators data and format data. @@ -430,10 +432,10 @@ def load_offshore_generators( Returns ------- generators : pd.DataFrame - DataFrame containing the formatted offshore generators data + DataFrame containing the formatted offshore generators data. zone_trajectories : pd.DataFrame - DataFrame containing the zone potentials trajectories + DataFrame containing the zone potentials trajectories. """ column_names = { "NODE": "bus", diff --git a/scripts/sb/build_tyndp_trajectories.py b/scripts/sb/build_tyndp_trajectories.py index 457e607c7c..c41e8c3f42 100644 --- a/scripts/sb/build_tyndp_trajectories.py +++ b/scripts/sb/build_tyndp_trajectories.py @@ -8,7 +8,7 @@ ------- Cleaned CSV file with all TYNDP trajectories (`p_nom_min`, `p_nom_max`) in long format. -- ``resources/tyndp_trajectories.csv`` in long format. +- `resources/tyndp_trajectories.csv` in long format. """ import logging diff --git a/scripts/sb/build_tyndp_transmission_projects.py b/scripts/sb/build_tyndp_transmission_projects.py index d37ebbc5a0..53cef57132 100644 --- a/scripts/sb/build_tyndp_transmission_projects.py +++ b/scripts/sb/build_tyndp_transmission_projects.py @@ -15,18 +15,18 @@ Inputs ------ -- ``data/tyndp_2024_bundle/Investment Datasets/GRID.xlsx``: Grid investment dataset +- `data/tyndp_2024_bundle/Investment Datasets/GRID.xlsx`: Grid investment dataset containing electricity and hydrogen transmission projects with capacities and commissioning years. -- ``resources/tyndp/build/geojson/buses.geojson``: Electrical buses with geometry. -- ``resources/tyndp/build/geojson/buses_h2.geojson``: Hydrogen buses with geometry. +- `resources/tyndp/build/geojson/buses.geojson`: Electrical buses with geometry. +- `resources/tyndp/build/geojson/buses_h2.geojson`: Hydrogen buses with geometry. Outputs ------- -- ``resources/tyndp/new_links_{planning_horizons}.csv``: Processed electricity transmission projects with bus +- `resources/tyndp/new_links_{planning_horizons}.csv`: Processed electricity transmission projects with bus connections, capacities (p_nom), lengths, and geometry attributes ready for network integration. -- ``resources/tyndp/new_links_h2_{planning_horizons}.csv``: Processed hydrogen transmission projects with bus +- `resources/tyndp/new_links_h2_{planning_horizons}.csv`: Processed hydrogen transmission projects with bus connections and capacities (p_nom) attributes ready for network integration. """ diff --git a/scripts/sb/clean_tyndp_h2_imports.py b/scripts/sb/clean_tyndp_h2_imports.py index 66c9c30843..ded8941625 100644 --- a/scripts/sb/clean_tyndp_h2_imports.py +++ b/scripts/sb/clean_tyndp_h2_imports.py @@ -21,22 +21,24 @@ logger = logging.getLogger(__name__) -def match_centroids(df, countries_centroids): +def match_centroids( + df: pd.DataFrame, countries_centroids: gpd.GeoDataFrame +) -> pd.DataFrame: """ Matches coordinates of country centroids to bus0 countries. Manually matches coordinates next to Faroe Island ("FO") to Ammonia import node. Parameters ---------- - df : pd:DataFrame - Dataframe containing import data with bus0 as import nodes + df : pd.DataFrame + DataFrame containing import data with bus0 as import nodes. countries_centroids : gpd.GeoDataFrame - GeoDataFrame containing country centroid information as geometry + GeoDataFrame containing country centroid information as geometry. Returns ------- pd.DataFrame - The function returns the input Dataframe df with matched coordinates inside new columns bus0_x and bus0_y + Input DataFrame with matched coordinates in new columns bus0_x and bus0_y. """ import_nodes = df.bus0.unique() @@ -67,20 +69,21 @@ def match_centroids(df, countries_centroids): ) -def load_import_data(fn, countries_centroids): +def load_import_data(fn: str, countries_centroids: gpd.GeoDataFrame) -> pd.DataFrame: """ - Load and clean TYNDP H2 import potentials, maximum capacity, offer quantity and marginal cost for pipeline and shipping - Returns the cleaned data as dataframe. + Load and clean TYNDP H2 import potentials, maximum capacity, offer quantity and marginal cost for pipeline and shipping. Parameters ---------- fn : str Path to Excel file containing TYNDP H2 imports data. + countries_centroids : gpd.GeoDataFrame + GeoDataFrame containing country centroid information as geometry. Returns ------- pd.DataFrame - The function returns cleaned TYNDP H2 import potentials, maximum capacity, offer quantity and marginal cost. + Cleaned TYNDP H2 import potentials, maximum capacity, offer quantity and marginal cost. """ column_dict = { diff --git a/scripts/sb/clean_tyndp_h2_storages.py b/scripts/sb/clean_tyndp_h2_storages.py index e821d3ad79..a96e28ffa1 100644 --- a/scripts/sb/clean_tyndp_h2_storages.py +++ b/scripts/sb/clean_tyndp_h2_storages.py @@ -39,7 +39,7 @@ def load_h2_storage_data( Returns ------- pd.DataFrame - The function returns cleaned TYNDP H2 storage data. + Cleaned TYNDP H2 storage data. """ column_dict = { diff --git a/scripts/sb/clean_tyndp_output_benchmark.py b/scripts/sb/clean_tyndp_output_benchmark.py index 1eb2e03d48..53ecff89b7 100644 --- a/scripts/sb/clean_tyndp_output_benchmark.py +++ b/scripts/sb/clean_tyndp_output_benchmark.py @@ -123,6 +123,23 @@ def load_crossborder_sheet( filepath: str | Path, skiprows: int = 5, ) -> pd.DataFrame: + """ + Load the cross-border flow sheet from a TYNDP Market Model output file. + + Parameters + ---------- + sheet_name : str + Name of the Excel sheet to read. + filepath : str or Path + Path to the Excel file. + skiprows : int, optional + Number of header rows to skip. Default is 5. + + Returns + ------- + pd.DataFrame + DataFrame with normalized cross-border flow data. + """ df = pd.read_excel( filepath, sheet_name=sheet_name, @@ -204,7 +221,7 @@ def load_MM_sheet( table_name : str Name of the table from LOOKUP_TABLES (e.g., "power_capacity"). countries : list[str] - List of modelled countries + List of modelled countries. eu27 : list List of EU27 country codes. mapping : dict[str, dict[str, str]] @@ -505,7 +522,7 @@ def clean_h2_imports_for_benchmarking( Returns ------- pd.DataFrame - dataFrame with columns [carrier, bus, unit, table, value] for each importing country and an EU27 aggregated row. + DataFrame with columns [carrier, bus, unit, table, value] for each importing country and an EU27 aggregated row. """ df = ( crossborder_h2.loc[["bus0", "bus1", "sum"]] diff --git a/scripts/sb/clean_tyndp_report_benchmark.py b/scripts/sb/clean_tyndp_report_benchmark.py index 09653d07da..b57384e573 100644 --- a/scripts/sb/clean_tyndp_report_benchmark.py +++ b/scripts/sb/clean_tyndp_report_benchmark.py @@ -137,16 +137,16 @@ def _add_identifier(s: str) -> str: def add_report_carrier_mappings(carrier_mapping_fn: str, tables: dict) -> None: """ Load report carrier mappings from the carrier mapping file and apply them - to the ``mapping`` configuration dictionary of each table. + to the `mapping` configuration dictionary of each table. Parameters ---------- carrier_mapping_fn : str Path to csv file with carrier mapping. tables : dict - Dictionary defining the benchmarking tables. When the ``mapping_col`` key is + Dictionary defining the benchmarking tables. When the `mapping_col` key is defined in the configuration, the loaded carrier mapping will be added to - the dictionary with the ``mapping`` key. + the dictionary with the `mapping` key. Returns ------- @@ -193,11 +193,12 @@ def clean_data_for_benchmarking( Parameters ---------- table : str - Benchmarking table name + Benchmarking table name. df : pd.DataFrame - Dataframe containing report values for benchmarking - mapping : dict + DataFrame containing report values for benchmarking. + mapping : dict, optional Carrier mapping from report carrier names to benchmarking carrier names. + Default is {} (no renaming applied). Returns ------- diff --git a/scripts/sb/clean_tyndp_smr.py b/scripts/sb/clean_tyndp_smr.py index d168810629..44002f8fdf 100644 --- a/scripts/sb/clean_tyndp_smr.py +++ b/scripts/sb/clean_tyndp_smr.py @@ -33,14 +33,14 @@ def load_smr_data( pyear : int Planning horizon to read SMR data for. h2_zones_tyndp : bool - Whether TYNDP H2 nodes are split into two zones (Z1, Z2) + Whether TYNDP H2 nodes are split into two zones (Z1, Z2). scenario : str TYNDP scenario to filter for. Returns ------- pd.DataFrame - The function returns cleaned TYNDP SMR data with capacity, must run and CCS information. + Cleaned TYNDP SMR data with capacity, must run and CCS information. """ column_dict = { diff --git a/scripts/sb/group_tyndp_conventionals.py b/scripts/sb/group_tyndp_conventionals.py index 589757037a..d07e23102d 100644 --- a/scripts/sb/group_tyndp_conventionals.py +++ b/scripts/sb/group_tyndp_conventionals.py @@ -12,16 +12,16 @@ Inputs ------ -- ``pemmdb_capacities_{planning_horizon}.csv``: Processed PEMMDB capacities for the given planning_horizon. -- ``pemmdb_profiles_{planning_horizon}.nc``: Processed PEMMDB must-run and availability profiles for the given +- `pemmdb_capacities_{planning_horizon}.csv`: Processed PEMMDB capacities for the given planning_horizon. +- `pemmdb_profiles_{planning_horizon}.nc`: Processed PEMMDB must-run and availability profiles for the given planning_horizon. -- ``data/tyndp_technology_map.csv``: TYNDP technology mapping used for the grouping. +- `data/tyndp_technology_map.csv`: TYNDP technology mapping used for the grouping. Outputs ------- -- ``pemmdb_capacities_{planning_horizon}_grouped.csv``: Grouped PEMMDB capacities for the given planning_horizon. -- ``pemmdb_profiles_{planning_horizon}_grouped.nc``: Grouped PEMMDB must-run and availability profiles for the given +- `pemmdb_capacities_{planning_horizon}_grouped.csv`: Grouped PEMMDB capacities for the given planning_horizon. +- `pemmdb_profiles_{planning_horizon}_grouped.nc`: Grouped PEMMDB must-run and availability profiles for the given planning_horizon. """ @@ -171,7 +171,7 @@ def group_tyndp_conventionals( pemmdb_profiles : pd.DataFrame All PEMMDB must-run and availability profiles. tyndp_conventional_carriers : list[str] - List of TYNDP conventional carriers to group + List of TYNDP conventional carriers to group. Returns ------- diff --git a/scripts/sb/make_benchmark.py b/scripts/sb/make_benchmark.py index 1f533712fc..53fd8b89a1 100644 --- a/scripts/sb/make_benchmark.py +++ b/scripts/sb/make_benchmark.py @@ -50,14 +50,14 @@ def load_data( Path to the Open-TYNDP results data file. scenario : str Name of scenario to compare. - vp_data_fn : str (optional) + vp_data_fn : str, optional Path to the Visualisation data file. - mm_data_fn : str (optional) + mm_data_fn : str, optional Path to the Market Model Output data file. Returns ------- - benchmarks_raw : pd.DataFrame + pd.DataFrame Combined DataFrame containing both Open-TYNDP and TYNDP 2024 data. """ @@ -310,7 +310,20 @@ def _compute_growth_rate(values: pd.Series) -> float: def _compute_missing(df_na: pd.DataFrame, cols: str | list[str] = "carrier") -> int: """ - Calculate missing count, by default, using carriers. + Calculate missing count by unique values of the specified column(s). + + Parameters + ---------- + df_na : pd.DataFrame + DataFrame containing rows with missing values. + cols : str or list[str], optional + Column(s) to use for deduplication when counting missing items. + Default is "carrier". + + Returns + ------- + int + Number of unique missing entries. """ if isinstance(cols, str): cols = [cols] @@ -341,9 +354,9 @@ def compute_all_indicators( Column name for model/projected values (ŷᵢ). rfc_col : str, default "TYNDP 2024 Scenarios Report" Column name for reference/actual values (yᵢ). - eps: float, default 1e-6 + eps : float, default 1e-6 Small value used when the denominator is zero. - carrier: str, default None + carrier : str, default None Name of the carrier for indicator calculation. If None, calculates overall table indicator. df_na : pd.DataFrame, default pd.DataFrame() DataFrame with missing values for missing carrier calculation. @@ -451,9 +464,9 @@ def compute_indicators( Returns ------- pd.DataFrame - DataFrame with per carriers accuracy indicators. + DataFrame with per carriers accuracy indicators. pd.Series - Series containing overall accuracy indicators. + Series containing overall accuracy indicators. """ opt = options["tables"][table] missing_name = "Missing countries" if bus_col_name != "bus" else "Missing buses" @@ -543,8 +556,6 @@ def compare_sources( ---------- table : str Benchmark metric to compute. - bus : str - Bus of the current figure. benchmarks_raw : pd.DataFrame Combined DataFrame containing both Open-TYNDP and TYNDP 2024 data. scenario : str @@ -561,9 +572,9 @@ def compare_sources( Returns ------- pd.DataFrame - DataFrame containing original data with appended multi-value accuracy metric columns. + DataFrame containing original data with appended multi-value accuracy metric columns. pd.Series - Series containing single-value accuracy metrics. + Series containing single-value accuracy metrics. """ # Parameters opt = options["tables"][table] @@ -658,17 +669,19 @@ def compute_overall_accuracy( Parameters ---------- - benchmarks_raw: pd.DataFrame + benchmarks_raw : pd.DataFrame Combined DataFrame containing both Open-TYNDP and TYNDP 2024 data. options : dict Full benchmarking configuration. - bus_col_name : str, default "bus" - Bus column name. + bus_col_name : str, optional + Bus column name. Default is "bus". + model_col : str, optional + Column name identifying Open-TYNDP model results. Default is "Open-TYNDP". Returns ------- pd.Series - Series containing overall accuracy metrics. + Series containing overall accuracy metrics. """ logger.info("Making global benchmark using TYNDP 2024 and Open-TYNDP") tables_series = [ # noqa: F841 diff --git a/scripts/sb/plot_base_hydrogen_network.py b/scripts/sb/plot_base_hydrogen_network.py index 3fc4d92602..76fc528da6 100644 --- a/scripts/sb/plot_base_hydrogen_network.py +++ b/scripts/sb/plot_base_hydrogen_network.py @@ -59,10 +59,10 @@ def plot_h2_map_base( map_fn : str Path to save the final map plot to. expanded : bool, optional - Whether to plot expanded capacities. Defaults to plotting only base network (p_nom). + Whether to plot expanded capacities. Default is plotting only base network (p_nom). regions_for_storage : gpd.GeoDataframe, optional Geodataframe of regions to use for plotting hydrogen storage capacities. Index needs to match storage locations. - If none is given, no hydrogen storage capacities are plotted. + Default is None (no hydrogen storage capacities are plotted). Returns ------- diff --git a/scripts/sb/plot_benchmark.py b/scripts/sb/plot_benchmark.py index 978058c646..90c2e160af 100644 --- a/scripts/sb/plot_benchmark.py +++ b/scripts/sb/plot_benchmark.py @@ -503,11 +503,11 @@ def plot_benchmark( Benchmark table to plot. bus : str Bus of the current figure. - benchmarks: pd.DataFrame + benchmarks : pd.DataFrame Combined DataFrame containing both model and reference data. - output_dir: str + output_dir : str Output directory. - scenario: str + scenario : str Scenario name. snapshots : dict[str, str] Dictionary defining the temporal range with 'start' and 'end' keys. diff --git a/scripts/sb/plot_offshore_network.py b/scripts/sb/plot_offshore_network.py index fedbc55269..7a9cb1e4bd 100644 --- a/scripts/sb/plot_offshore_network.py +++ b/scripts/sb/plot_offshore_network.py @@ -8,6 +8,7 @@ import logging import re +import cartopy.crs as ccrs import geopandas as gpd import matplotlib.pyplot as plt import numpy as np @@ -28,16 +29,16 @@ def plot_offshore_map( - network, - map_opts, - proj, - map_fn, - planning_horizons, - carrier="DC_OH", - p_nom="p_nom", - legend=True, - hubs_only=False, -): + network: pypsa.Network, + map_opts: dict, + proj: ccrs.Projection, + map_fn: str, + planning_horizons: int, + carrier: str = "DC_OH", + p_nom: str | float = "p_nom", + legend: bool = True, + hubs_only: bool = False, +) -> None: """ Plots the offshore network hydrogen or electricity capacities and offshore-hubs buses. If `p_nom` parameter is set as `p_nom_opt`, optimal capacities are plotted instead. @@ -48,14 +49,14 @@ def plot_offshore_map( PyPSA network for plotting the offshore grid. Can be either presolving or post solving. map_opts : dict Map options for plotting. - proj : cartopy.crs.Projection - Projection to use for plotting. + proj : ccrs.Projection + Cartopy CRS projection to use for plotting. map_fn : str Path to save the final map plot to. planning_horizons : int - The planning horizon year + The planning horizon year. carrier : str, optional - Carrier to plot + Carrier to plot. p_nom : str | float, optional Nominal power parameter for determining link thickness. If str, must be "p_nom" or "p_nom_opt". If float, uses fixed value for all links. Defaults to plotting only base network (p_nom). diff --git a/scripts/solve_network.py b/scripts/solve_network.py index 41c9b186b6..09773aecaf 100644 --- a/scripts/solve_network.py +++ b/scripts/solve_network.py @@ -519,6 +519,7 @@ def prepare_network( config : dict, default None A dictionary containing configuration information, specifically the "plotting" key with "nice_names" and "tech_colors" keys for carriers. + Default is None. Returns ------- @@ -1242,11 +1243,11 @@ def add_import_limit_constraint(n: pypsa.Network, sns: pd.DatetimeIndex): def add_offshore_hubs_constraint( - n, + n: pypsa.Network, planning_horizons: int, - offshore_zone_trajectories_fn, + offshore_zone_trajectories_fn: str, renewable_carriers_tyndp: list[str], -): +) -> None: """ Add two constraints on offshore hubs. @@ -1256,13 +1257,13 @@ def add_offshore_hubs_constraint( Parameters ---------- n : pypsa.Network - The PyPSA network instance - planning_horizons : int, optional - The current planning horizon year or None in perfect foresight - offshore_zone_trajectories_fn: str - Path to the file containing the offshore zone potentials trajectories - renewable_carriers_tyndp : list[str], optional - List of TYNDP renewable carriers + The PyPSA network instance. + planning_horizons : int + The current planning horizon year. + offshore_zone_trajectories_fn : str + Path to the file containing the offshore zone potentials trajectories. + renewable_carriers_tyndp : list[str] + List of TYNDP renewable carriers. """ ext_i = n.generators.p_nom_extendable gens = n.generators.assign( @@ -1429,10 +1430,11 @@ def extra_functionality( Simulation timesteps planning_horizons : str, optional The current planning horizon year or None in perfect foresight. - offshore_zone_trajectories_fn: str, optional - Path to the file containing the offshore zone potentials trajectories + offshore_zone_trajectories_fn : str or None, optional + Path to the file containing the offshore zone potentials trajectories. + Default is None. renewable_carriers_tyndp : list[str], optional - List of TYNDP renewable carriers + List of TYNDP renewable carriers. Default is []. Notes ----- @@ -1673,10 +1675,11 @@ def create_optimization_model( Arguments for n.optimize.solve_model() planning_horizons : str, optional The current planning horizon year or None in perfect foresight - offshore_zone_trajectories_fn : str, optional - Path to DataFrame containing the offshore zone potentials trajectories + offshore_zone_trajectories_fn : str or None, optional + Path to DataFrame containing the offshore zone potentials trajectories. + Default is None. renewable_carriers_tyndp : list[str], optional - List of TYNDP renewable carriers + List of TYNDP renewable carriers. Default is []. """ # Add config and params to network for extra_functionality n.config = config diff --git a/scripts/temporal_aggregation.py b/scripts/temporal_aggregation.py index 3ba25b453e..a21ab70180 100644 --- a/scripts/temporal_aggregation.py +++ b/scripts/temporal_aggregation.py @@ -7,8 +7,8 @@ Description ----------- -Reads the snapshot weightings from the CSV file prepared in ``build_snapshot_weightings`` -and applies it on the time-varying network data prepared in ``prepare_sector_network.py``. +Reads the snapshot weightings from the CSV file prepared in `build_snapshot_weightings` +and applies it on the time-varying network data prepared in `prepare_sector_network.py`. """ import logging