From 3f942554e3632f3f8435a4ced0a34a9ff86c99c3 Mon Sep 17 00:00:00 2001 From: Greg Munday <100290135+mo-gregmunday@users.noreply.github.com> Date: Thu, 22 May 2025 14:31:03 +0100 Subject: [PATCH 01/13] Update README.md Quick update to the README.md to include users needing to the the `pip install -e .` command before running the tool. --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index b0f37e4..30ba562 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,9 @@ Users are advised to read this guide before using any products as it describes t The ProFSea tool user guide should be cited as: Perks, R. J. (2023). Met Office Projecting Future Sea Level (ProFSea) tool - User Guide (1.1). Met Office. https://doi.org/10.5281/zenodo.10245409 +--- +Once the `ProFSea-env` conda environment has been set up, users must also run `pip install -e .` from the root (top-most) directory in order to run the tool. + ## Contributors Several people have contributed to the development of the ProFSea tool and User Guide documentation, namely: Rachel Perks, Jacob Cheung, Benjamin Harrison, Katie Hodge, Mathew Palmer, Michael Sanderson, Hamish Steptoe, Jennifer Weeks and Gregory Munday. From fcf79ce0493e2160ddf3b334f6edb1c09a18b299 Mon Sep 17 00:00:00 2001 From: mo-gregmunday Date: Thu, 14 Aug 2025 10:43:37 +0100 Subject: [PATCH 02/13] Upgrade env + breaking fixes --- ProFSea-environment.lock | 274 ++++++++++++------ ProFSea-environment.yml | 4 +- profsea/slr_pkg/__init__.py | 12 +- profsea/step1_extract_cmip.py | 2 +- ...3_process_regional_sealevel_projections.py | 8 +- profsea/tide_gauge_locations.py | 2 +- 6 files changed, 195 insertions(+), 107 deletions(-) diff --git a/ProFSea-environment.lock b/ProFSea-environment.lock index e00b900..2190a2d 100644 --- a/ProFSea-environment.lock +++ b/ProFSea-environment.lock @@ -2,98 +2,182 @@ # $ conda create --name ProFSea-env --file ProFSea-environment.lock # platform: linux-64 @EXPLICIT -https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-3.0.0-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.25.0-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/geos-3.9.1-h9c3ff4c_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda -https://conda.anaconda.org/conda-forge/linux-64/icu-67.1-he1b5a44_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.3-h58526e2_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1w-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.51.0-hdcd2b5c_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-haa6b8db_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.10.2-hc401514_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-hf9c8cef_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.26-pthreads_h413a1c8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda -https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.87.0-h6312ad2_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/python-3.7.7-hcff3b4d_5.conda -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/curl-7.87.0-h6312ad2_0.conda -https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.1.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/proj-8.0.1-h1217e81_0.conda -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.7-2_cp37m.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda -https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/antlr-python-runtime-4.7.2-py37h89c1867_1003.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.6.1-h5e45101_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.1-py37h540881e_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.21.6-py37h976b520_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.2.1-py37hcc46e62_6.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-2.0.0-py37h5e8e339_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py37h540881e_4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/setuptools-59.8.0-py37h89c1867_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.2-py37h540881e_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py37hc105733_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.2.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py37h7cecad7_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pandas-1.3.5-py37he8f5f7f_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.7.3-py37hf2a6cf1_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/shapely-1.8.0-py37h48c49eb_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.0.1-py37hb1e94ed_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.2.2-py37h1d35a4c_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.4.1-py37ha292673_200.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.20.0-py37hbe109c4_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.2.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/iris-3.1.0-pyhd8ed1ab_3.tar.bz2 - +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgomp-15.1.0-h767d61c_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/python_abi-3.13-8_cp313.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgcc-15.1.0-h767d61c_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/alsa-lib-1.2.14-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/c-ares-1.34.5-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libbrotlicommon-1.1.0-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libdeflate-1.24-h86f0d12_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgcc-ng-15.1.0-h69a702a_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgfortran5-15.1.0-hcea5267_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libjpeg-turbo-3.1.0-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/liblzma-5.8.1-hb9d3cd8_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libmpdec-4.0.0-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libstdcxx-15.1.0-h8f9b012_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxau-1.0.12-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xxhash-0.8.3-hb47aa4a_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/geos-3.13.1-h97f6797_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libaec-1.1.4-h3f801dc_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libbrotlidec-1.1.0-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libbrotlienc-1.1.0-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libdrm-2.4.125-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libev-4.33-hd590300_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgfortran-15.1.0-h69a702a_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libpng-1.6.50-h421ea60_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libsqlite-3.50.4-h0c1763c_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libstdcxx-ng-15.1.0-h4852527_4.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/tk-8.6.13-noxft_hd72426e_102.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/brotli-bin-1.1.0-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/icu-75.1-he02047a_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libfreetype6-2.13.3-h48d6fc4_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libnghttp2-1.64.0-h161d5f1_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libtiff-4.7.0-h8261f1e_6.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pcre2-10.45-hc749103_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/sqlite-3.50.4-hbc0de68_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/brotli-1.1.0-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/certifi-2025.8.3-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/cloudpickle-3.1.1-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/fsspec-2025.7.0-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/kiwisolver-1.4.9-py313hc8edb43_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/lcms2-2.17-h717163a_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libblas-3.9.0-34_h59b9bed_openblas.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libcurl-8.14.1-h332b0f4_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libfreetype-2.13.3-ha770c72_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libglib-2.84.3-hf39c6af_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libwebp-1.6.0-h9635ea4_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libxml2-2.13.8-h04c0eec_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/markupsafe-3.0.2-py313h8060acc_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/openjpeg-2.5.3-h55fea9a_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/pip-25.2-pyh145f28c_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/pyshp-3.0.0-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/python-xxhash-3.5.0-py313h536fd9c_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pyyaml-6.0.2-py313h8060acc_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/toolz-1.0.0-pyhd8ed1ab_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/tornado-6.5.2-py313h07c4f96_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xkeyboard-config-2.45-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxext-1.3.6-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxfixes-6.0.1-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/fonttools-4.59.0-py313h3dea7bd_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/hdf5-1.14.6-nompi_h6e4c0c1_103.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libcblas-3.9.0-34_he106b2a_openblas.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/liblapack-3.9.0-34_h7ac8fdf_openblas.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libllvm20-20.1.8-hecd9e04_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libxkbcommon-1.11.0-he8b52b9_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libxslt-1.1.43-h7a3aeb2_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pillow-11.3.0-py313h8db990d_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xcb-util-cursor-0.1.5-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxcomposite-0.4.6-hb9d3cd8_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxrandr-1.5.4-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxxf86vm-1.1.6-hb9d3cd8_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/dask-core-2025.7.0-pyhe01879c_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libclang-cpp20.1-20.1.8-default_hddf928d_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libclang13-20.1.8-default_ha444ac7_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libnetcdf-4.9.2-nompi_h21f7587_118.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/libpq-17.5-h27ae623_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/numpy-2.3.2-py313hf6604e3_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pyproj-3.7.1-py313hcd509b5_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/cftime-1.6.4-py313ha014f3b_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/contourpy-1.3.3-py313h7037e92_1.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pandas-2.3.1-py313h08cd8bf_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/scipy-1.16.1-py313h3a520b0_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/shapely-2.1.1-py313h576e190_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/cf-units-3.3.0-py313ha014f3b_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/harfbuzz-11.3.3-hbb57e21_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/matplotlib-base-3.10.5-py313h683a580_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/netcdf4-1.7.2-nompi_py313h6d1955d_102.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/cartopy-0.25.0-py313h08cd8bf_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/qt6-main-6.9.1-h6ac528c_2.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/noarch/iris-3.13.0-pyha770c72_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/pyside6-6.9.1-py313h7dabd7a_0.conda +https://metoffice.jfrog.io/metoffice/api/conda/conda-forge/linux-64/matplotlib-3.10.5-py313h78bf25f_0.conda diff --git a/ProFSea-environment.yml b/ProFSea-environment.yml index 2a3e238..a6da655 100755 --- a/ProFSea-environment.yml +++ b/ProFSea-environment.yml @@ -4,11 +4,11 @@ channels: dependencies: - numpy - pandas - - python=3.7.7 + - python=3.13 - scipy - pyyaml - netcdf4 - matplotlib - - libwebp>=1.3.2 + - libwebp - cartopy - iris \ No newline at end of file diff --git a/profsea/slr_pkg/__init__.py b/profsea/slr_pkg/__init__.py index 8476945..ac8dbce 100644 --- a/profsea/slr_pkg/__init__.py +++ b/profsea/slr_pkg/__init__.py @@ -88,21 +88,21 @@ def extract_dyn_steric_regression(models, df, scenarios): try: # dynamic sea level (zos) zos_date = zos_dict[model][scenario]['driftcorr'] - zos_file = f'{datadir}normalized_zos_Omon_{model}_' \ - f'{scenario}_{zos_date}_driftcorr.nc' + zos_file = os.path.join(datadir, f'normalized_zos_Omon_{model}_' \ + f'{scenario}_{zos_date}_driftcorr.nc') zos = cubedata.read_zos_cube(zos_file)[0][:, j, i] # -------------------------------------------------------- # global mean thermosteric (zostoga) # Extract, and drift-correct CMIP "zostoga" data # Normal (concatenated) zostoga_date = zos_dict[model][scenario]['zostoga'] - zostoga_file = f'{datadir}zostoga_Omon_{model}_' \ - f'{scenario}_{zostoga_date}.nc' + zostoga_file = os.path.join(datadir, f'zostoga_Omon_{model}_' \ + f'{scenario}_{zostoga_date}.nc') zostoga_raw = cubedata.read_zos_cube(zostoga_file)[0] # piControl (concatenated) piControl_date = zos_dict[model][scenario]['piControl'] - zostoga_pic_file = f'{datadir}zostoga_Omon_' \ - f'{model}_piControl_{piControl_date}.nc' + zostoga_pic_file = os.path.join(datadir, f'zostoga_Omon_' \ + f'{model}_piControl_{piControl_date}.nc') zostoga_pic = cubedata.read_zos_cube(zostoga_pic_file)[0] regr = process.Regress('linear') diff --git a/profsea/step1_extract_cmip.py b/profsea/step1_extract_cmip.py index 276c065..49996f1 100644 --- a/profsea/step1_extract_cmip.py +++ b/profsea/step1_extract_cmip.py @@ -140,7 +140,7 @@ def extract_ssh_data(cmip_sea): for model in model_names: print(f'Getting data for {model} model') cmip_date = cmip_dict[model]['historical'] - cmip_file = f'{cmip_dir}zos_Omon_{model}_historical_{cmip_date}.nc' + cmip_file = os.path.join(cmip_dir, f'zos_Omon_{model}_historical_{cmip_date}.nc') cube = cubeutils.loadcube(cmip_file, ncvar='zos')[0] cubes.append(cube.slices(['latitude', 'longitude']).next()) diff --git a/profsea/step3_process_regional_sealevel_projections.py b/profsea/step3_process_regional_sealevel_projections.py index 0db288e..29138c3 100644 --- a/profsea/step3_process_regional_sealevel_projections.py +++ b/profsea/step3_process_regional_sealevel_projections.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023, Met Office +Copyright (c) 2023-2025, Met Office All rights reserved. """ @@ -437,9 +437,13 @@ def read_gia_estimates(sci_method, coords): GIA_vals = [] lat, lon = coords + # The GIA_dict contains interpolator objects for key in list(GIA_dict.keys()): - val = GIA_dict[key]([lat, lon])[0] + old_grid = GIA_dict[key].grid + old_vals = GIA_dict[key].values + new_rgi = RegularGridInterpolator(old_grid, old_vals) + val = np.squeeze(new_rgi([lat, lon])) GIA_vals.append(val) nGIA = len(GIA_vals) diff --git a/profsea/tide_gauge_locations.py b/profsea/tide_gauge_locations.py index ced9dd4..152f247 100644 --- a/profsea/tide_gauge_locations.py +++ b/profsea/tide_gauge_locations.py @@ -95,7 +95,7 @@ def extract_site_info(data_source, data_type, region, site_name, latlon): keep='first')].transpose() df_temp = pd.DataFrame(site_data).transpose() - dfObj = dfObj.append(df_temp) + dfObj = dfObj._append(df_temp) elif latlon != [[]]: print(f'{site_to_check} - Site metadata taken from user input') From 21bf0831b87b0aea4fd7765a0027c77afded2ff6 Mon Sep 17 00:00:00 2001 From: mo-gregmunday Date: Thu, 14 Aug 2025 10:49:26 +0100 Subject: [PATCH 03/13] Updated copyright dates --- profsea/step1_extract_cmip.py | 2 +- profsea/step2_extract_steric_dyn_regression.py | 2 +- profsea/step4_plot_regional_sealevel.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/profsea/step1_extract_cmip.py b/profsea/step1_extract_cmip.py index 49996f1..44190c9 100644 --- a/profsea/step1_extract_cmip.py +++ b/profsea/step1_extract_cmip.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023, Met Office +Copyright (c) 2023-2025, Met Office All rights reserved. """ diff --git a/profsea/step2_extract_steric_dyn_regression.py b/profsea/step2_extract_steric_dyn_regression.py index 599b1b9..f8aed5b 100644 --- a/profsea/step2_extract_steric_dyn_regression.py +++ b/profsea/step2_extract_steric_dyn_regression.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023, Met Office +Copyright (c) 2023-2025, Met Office All rights reserved. """ diff --git a/profsea/step4_plot_regional_sealevel.py b/profsea/step4_plot_regional_sealevel.py index 6d968d8..a3bebad 100644 --- a/profsea/step4_plot_regional_sealevel.py +++ b/profsea/step4_plot_regional_sealevel.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023, Met Office +Copyright (c) 2023-2025, Met Office All rights reserved. """ From cbf902d49c2e85c9c8934fd1bf13fdab8a7d1019 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Thu, 14 Aug 2025 13:55:30 +0100 Subject: [PATCH 04/13] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 30ba562..97e543b 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ This work was supported by the UK Research & Innovation (UKRI) Strategic Priorit ## Licence ProFSea is licensed under the [Open Government Licence 3.0](https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/). -If you have any queries about this tool please contact: enquiries@metoffice.gov.uk +If you have any queries or feedback about this tool please contact Rachel Perks at rachel.perks@metoffice.gov.uk or the Met Office Service Desk at enquiries@metoffice.gov.uk.
Met Office
From bffde08f668d2657830a477b4e8ed55c42f6e227 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Thu, 14 Aug 2025 15:04:21 +0100 Subject: [PATCH 05/13] Update file paths to reduce inputs --- profsea/slr_pkg/__init__.py | 19 ++++++++-- profsea/step1_extract_cmip.py | 12 ++++-- .../step2_extract_steric_dyn_regression.py | 10 ++--- ...3_process_regional_sealevel_projections.py | 38 +++++++++++++++---- profsea/step4_plot_regional_sealevel.py | 4 +- profsea/user-settings.yml | 23 +++++++---- 6 files changed, 77 insertions(+), 29 deletions(-) diff --git a/profsea/slr_pkg/__init__.py b/profsea/slr_pkg/__init__.py index 8476945..3e42f66 100644 --- a/profsea/slr_pkg/__init__.py +++ b/profsea/slr_pkg/__init__.py @@ -42,7 +42,11 @@ def extract_dyn_steric_regression(models, df, scenarios): :param scenarios: list of RCP scenarios """ # Base directory for CMIP "zos" and "zostoga" data - datadir = settings["cmipinfo"]["sealevelbasedir"] + if settings["datalocation"] != "": + datadir = os.path.join(settings["datalocation"],"cmip5/") + else: + datadir = settings["cmipinfo"]["sealevelbasedir"] + # Dictionary of CMIP models and experiments zos_dict = cmip.zos_dictionary() @@ -326,9 +330,18 @@ def choose_montecarlo_dir(): """ end_yr = settings["projection_end_year"] if (end_yr >= 2050) & (end_yr <= 2100): - mcdir = settings["short_montecarlodir"] + if settings["datalocation"] != "": + mcdir = os.path.join(settings["datalocation"], + "monte_carlo_timeseries") + else: + mcdir = settings["short_montecarlodir"] + elif (end_yr > 2100) & (end_yr <= 2300): - mcdir = settings["long_montecarlodir"] + if settings["datalocation"] != "": + mcdir = os.path.join(settings["datalocation"], "slr") + else: + mcdir = settings["long_montecarlodir"] + else: raise ValueError('Projection end year must be between 2050 and 2300') diff --git a/profsea/step1_extract_cmip.py b/profsea/step1_extract_cmip.py index 276c065..498ff1c 100644 --- a/profsea/step1_extract_cmip.py +++ b/profsea/step1_extract_cmip.py @@ -123,7 +123,11 @@ def extract_ssh_data(cmip_sea): :param cmip_sea: variable to distinguish between which CMIP models to use :return: CMIP model names, and associated SSH data cubes """ - cmip_dir = settings["cmipinfo"]["sealevelbasedir"] + if settings["datalocation"] != "": + cmip_dir = os.path.join(settings["datalocation"],"cmip5/") + else: + cmip_dir = settings["cmipinfo"]["sealevelbasedir"] + # Select CMIP models to use depending on whether location is within a # marginal sea if cmip_sea == 'all': @@ -316,9 +320,9 @@ def main(): print(f' No lat lon specified - use tide gauge metadata if ' f'available') print(f'User specified science method is: {settings["sciencemethod"]}') - if {settings["cmipinfo"]["cmip_sea"]} == {'all'}: + if {settings["cmip_sea"]} == {'all'}: print('User specified all CMIP models') - elif {settings["cmipinfo"]["cmip_sea"]} == {'marginal'}: + elif {settings["cmip_sea"]} == {'marginal'}: print('User specified CMIP models for marginal seas only') # Extract site data from station list (e.g. tide gauge location) or @@ -331,7 +335,7 @@ def main(): # Find the nearest, appropriate ocean point in CMIP models to specified # site location - cmip_models, ssh_cubes = extract_ssh_data(settings["cmipinfo"]["cmip_sea"]) + cmip_models, ssh_cubes = extract_ssh_data(settings["cmip_sea"]) ocean_point_wrapper(df_site_data, cmip_models, ssh_cubes) diff --git a/profsea/step2_extract_steric_dyn_regression.py b/profsea/step2_extract_steric_dyn_regression.py index 599b1b9..040846b 100644 --- a/profsea/step2_extract_steric_dyn_regression.py +++ b/profsea/step2_extract_steric_dyn_regression.py @@ -20,14 +20,14 @@ def extract_cmip5_steric_dyn_regression(df): scenarios = ['rcp26', 'rcp45', 'rcp85'] # Select CMIP5 models to use - if settings["cmipinfo"]["cmip_sea"] == 'all': + if settings["cmip_sea"] == 'all': model_names = models.cmip5_names() - elif settings["cmipinfo"]["cmip_sea"] == 'marginal': + elif settings["cmip_sea"] == 'marginal': model_names = models.cmip5_names_marginal() else: raise UnboundLocalError( 'The selected CMIP5 models to use - cmip_sea = ' + - f'{settings["cmipinfo"]["cmip_sea"]} - ' + + f'{settings["cmip_sea"]} - ' + 'is not recognised') # Calculate the regression parameters and plot the results @@ -51,9 +51,9 @@ def main(): print(f' No lat lon specified - use tide gauge metadata if ' f'available') print(f'User specified science method is: {settings["sciencemethod"]}') - if {settings["cmipinfo"]["cmip_sea"]} == {'all'}: + if {settings["cmip_sea"]} == {'all'}: print('User specified all CMIP models') - elif {settings["cmipinfo"]["cmip_sea"]} == {'marginal'}: + elif {settings["cmip_sea"]} == {'marginal'}: print('User specified CMIP models for marginal seas only') # Extract site data from station list (e.g. tide gauge location) or diff --git a/profsea/step3_process_regional_sealevel_projections.py b/profsea/step3_process_regional_sealevel_projections.py index 0db288e..0a7960d 100644 --- a/profsea/step3_process_regional_sealevel_projections.py +++ b/profsea/step3_process_regional_sealevel_projections.py @@ -395,7 +395,11 @@ def load_CMIP5_slope_coeffs_UK(scenario): :return: 1D array of slope coefficients and 1D array of weights """ print('running function load_CMIP5_slope_coeffs_UK') - in_zosdir_uk = settings["cmipinfo"]["slopecoeffsuk"] + if settings["datalocation"] != "": + in_zosdir_uk = os.path.join(settings["datalocation"],"uk_cmip_slope_coefficients") + else: + in_zosdir_uk = settings["cmipinfo"]["slopecoeffsuk"] + filename_uk = f'{scenario}_CMIP5_regress_coeffs_uk_mask_1.pickle' try: @@ -425,9 +429,18 @@ def read_gia_estimates(sci_method, coords): print('running function read_gia_estimates') # Directories containing GIA data (independent of scenario) if sci_method == 'global': - gia_file = settings["giaestimates"]["global"] + if settings["datalocation"] != "": + gia_file = os.path.join(settings["datalocation"], "gia_estimates", + "global_GIA_interpolators.pickle") + else: + gia_file = settings["giaestimates"]["global"] + elif sci_method == 'UK': - gia_file = settings["giaestimates"]["uk"] + if settings["datalocation"] != "": + gia_file = os.path.join(settings["datalocation"], "gia_estimates", + "Bradley_GIA_interpolator.pickle") + else: + gia_file = settings["giaestimates"]["uk"] else: raise UnboundLocalError('The selected GIA estimate - ' + f'{sci_method} - is not available') @@ -461,9 +474,18 @@ def setup_FP_interpolators(components, sci_method): print('running function setup_FP_interpolators') # Directories for the Slangen, Spada and Klemann fingerprints - slangendir = settings["fingerprints"]["slangendir"] - spadadir = settings["fingerprints"]["spadadir"] - klemanndir = settings["fingerprints"]["klemanndir"] + if settings["datalocation"] != "": + slangendir = os.path.join(settings["datalocation"], + "grd_fingerprints") + spadadir = os.path.join(settings["datalocation"], + "grd_fingerprints") + klemanndir = os.path.join(settings["datalocation"], + "grd_fingerprints") + else: + slangendir = settings["fingerprints"]["slangendir"] + spadadir = settings["fingerprints"]["spadadir"] + klemanndir = settings["fingerprints"]["klemanndir"] + # Create empty dictionaries for the Slangen, Spada and Klemann fingerprints # interpolator objects. @@ -516,9 +538,9 @@ def main(): print(f' No lat lon specified - use tide gauge metadata if ' f'available') print(f'User specified science method is: {settings["sciencemethod"]}') - if {settings["cmipinfo"]["cmip_sea"]} == {'all'}: + if {settings["cmip_sea"]} == {'all'}: print('User specified all CMIP models') - elif {settings["cmipinfo"]["cmip_sea"]} == {'marginal'}: + elif {settings["cmip_sea"]} == {'marginal'}: print('User specified CMIP models for marginal seas only') print(f'\nProjecting out to: {settings["projection_end_year"]}\n') diff --git a/profsea/step4_plot_regional_sealevel.py b/profsea/step4_plot_regional_sealevel.py index 6d968d8..c9f9477 100644 --- a/profsea/step4_plot_regional_sealevel.py +++ b/profsea/step4_plot_regional_sealevel.py @@ -882,9 +882,9 @@ def main(): print(f' No lat lon specified - use tide gauge metadata if ' f'available') print(f'User specified science method is: {settings["sciencemethod"]}') - if {settings["cmipinfo"]["cmip_sea"]} == {'all'}: + if {settings["cmip_sea"]} == {'all'}: print('User specified all CMIP models') - elif {settings["cmipinfo"]["cmip_sea"]} == {'marginal'}: + elif {settings["cmip_sea"]} == {'marginal'}: print('User specified CMIP models for marginal seas only') # Extract site data from station list (e.g. tide gauge location) or diff --git a/profsea/user-settings.yml b/profsea/user-settings.yml index 7fce703..8180485 100644 --- a/profsea/user-settings.yml +++ b/profsea/user-settings.yml @@ -23,10 +23,15 @@ projection_end_year: 2300 # int between 2050 and 2300 # Science method # UKCP18 --> sciencemethod: 'UK' -# Palmer et al (2020) --> sciencemethod: 'global +# Palmer et al (2020) --> sciencemethod: 'global' # N.B. Used to identify which GIA estimates to use sciencemethod: 'global' # str +# cmip_sea: for non-UK locations, specify if site is within marginal sea +# Not in a marginal sea --> cmip_sea: 'all' +# Marginal sea --> cmip_sea: 'marginal' +cmip_sea: 'all' # str + # Tide gauge information (recommend default below) # source: source of tide gauge information # N.B. Also used to identify which TG directory to use @@ -38,12 +43,16 @@ tidegaugeinfo: datafq: ['annual'] # list psmsldir: '/home/user/data/PSMSL/' +# File path of data from CEDA (up to 'profsea_tool' directory) +# N.B. If working with data in a different structure to the default, +# leave this as a blank string and fill in the directory paths below +datalocation: '/home/user/data/deposited2023/profsea_tool/' + + +# Optional Settings: Settings listed below only need to be set if datalocation is blank + # CMIP information cmipinfo: -# cmip_sea: for non-UK locations, specify if site is within marginal sea -# Not in a marginal sea --> cmip_sea: 'all' -# Marginal sea --> cmip_sea: 'marginal' - cmip_sea: 'all' # str # sealevelbasedir: Base directory for CMIP "zos" and "zostoga" data sealevelbasedir: '/deposited2023/profsea_tool/cmip5/' # slopecoeffsuk: CMIP5 slope coefficients developed for UKCP18 @@ -65,5 +74,5 @@ fingerprints: # Directory of Monte Carlo time series for new projections # N.B. Originally developed by Jonathan Gregory -short_montecarlodir: '/path/to/2100/montecarlo/simulations' # Required for projections up to 2100 -long_montecarlodir: '/path/to/2300/montecarlo/simulations' # Required for projections from 2100 up to 2300 +short_montecarlodir: '/deposited2023/profsea_tool/monte_carlo_timeseries/' # Required for projections up to 2100 +long_montecarlodir: '/deposited2023/profsea_tool/slr/' # Required for projections from 2100 up to 2300 From 253097408e76639a894a19731a9859f64948e3db Mon Sep 17 00:00:00 2001 From: mo-gregmunday Date: Thu, 14 Aug 2025 15:50:18 +0100 Subject: [PATCH 06/13] Update .yml --- ProFSea-environment.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ProFSea-environment.yml b/ProFSea-environment.yml index a6da655..7c1c843 100755 --- a/ProFSea-environment.yml +++ b/ProFSea-environment.yml @@ -4,7 +4,7 @@ channels: dependencies: - numpy - pandas - - python=3.13 + - python=3.13.5 - scipy - pyyaml - netcdf4 From ad66532ce26cc9b619441d05a2ca34f3a10de194 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Thu, 14 Aug 2025 15:59:49 +0100 Subject: [PATCH 07/13] Update step 3 file not found errors --- ...3_process_regional_sealevel_projections.py | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/profsea/step3_process_regional_sealevel_projections.py b/profsea/step3_process_regional_sealevel_projections.py index 0a7960d..7c86f29 100644 --- a/profsea/step3_process_regional_sealevel_projections.py +++ b/profsea/step3_process_regional_sealevel_projections.py @@ -203,7 +203,14 @@ def calculate_sl_components(mcdir, components, scenario, site_loc, loc_coords, offset = G_offset * offset_slopes[comp] - cube = iris.load_cube(os.path.join(mcdir, f'{scenario}_{comp}.nc')) + try: + cube = iris.load_cube(os.path.join(mcdir, f'{scenario}_{comp}.nc')) + except IOError: + raise FileNotFoundError(os.path.join(mcdir, + f'{scenario}_{comp}.nc'), + '- monte carlo file not found, please ' \ + 'check file path') + montecarlo_G[cc, :, :] = cube.data[:nyrs, resamples] + offset if comp == 'exp': @@ -322,7 +329,13 @@ def create_FP_interpolator(datadir, dfile, method='linear'): :param method: interpolation type --> 'linear' or 'nearest' :return: 2D Interpolator object """ - cube = iris.load_cube(os.path.join(datadir, dfile)) + try: + cube = iris.load_cube(os.path.join(datadir, dfile)) + except IOError: + raise FileNotFoundError(os.path.join(datadir, dfile), + '- grd fingerprint file not found, ' \ + 'please check file path') + lon = cube.coord('longitude').points lat = cube.coord('latitude').points @@ -396,7 +409,8 @@ def load_CMIP5_slope_coeffs_UK(scenario): """ print('running function load_CMIP5_slope_coeffs_UK') if settings["datalocation"] != "": - in_zosdir_uk = os.path.join(settings["datalocation"],"uk_cmip_slope_coefficients") + in_zosdir_uk = os.path.join(settings["datalocation"], + "uk_cmip_slope_coefficients") else: in_zosdir_uk = settings["cmipinfo"]["slopecoeffsuk"] @@ -406,8 +420,9 @@ def load_CMIP5_slope_coeffs_UK(scenario): with open(os.path.join(in_zosdir_uk, filename_uk), 'rb') as f: data = pickle.load(f, encoding='latin1')['uk_mask_1'] except FileNotFoundError: - raise FileNotFoundError(filename_uk, - '- scenario selected does not exist') + raise FileNotFoundError(os.path.join(in_zosdir_uk, filename_uk), + '- CMIP5 Slope Coeffs not found, please' \ + ' check file path') # Keys are: 'coeffs', 'models', 'weights' coeffs = data['coeffs'] @@ -445,8 +460,13 @@ def read_gia_estimates(sci_method, coords): raise UnboundLocalError('The selected GIA estimate - ' + f'{sci_method} - is not available') - with open(gia_file, "rb") as ifp: - GIA_dict = pickle.load(ifp, encoding='latin1') + try: + with open(gia_file, "rb") as ifp: + GIA_dict = pickle.load(ifp, encoding='latin1') + except FileNotFoundError: + raise FileNotFoundError(os.path.join("gia_estimates", gia_file), + '- gia estimates file not found, please ' \ + 'check file path') GIA_vals = [] lat, lon = coords From 4a066eab90be97d800ea712c4d9a0bf7cff5949c Mon Sep 17 00:00:00 2001 From: mo-gregmunday Date: Thu, 14 Aug 2025 16:17:16 +0100 Subject: [PATCH 08/13] Remove copyright changes --- profsea/step1_extract_cmip.py | 2 +- profsea/step2_extract_steric_dyn_regression.py | 2 +- profsea/step3_process_regional_sealevel_projections.py | 2 +- profsea/step4_plot_regional_sealevel.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/profsea/step1_extract_cmip.py b/profsea/step1_extract_cmip.py index 44190c9..49996f1 100644 --- a/profsea/step1_extract_cmip.py +++ b/profsea/step1_extract_cmip.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023-2025, Met Office +Copyright (c) 2023, Met Office All rights reserved. """ diff --git a/profsea/step2_extract_steric_dyn_regression.py b/profsea/step2_extract_steric_dyn_regression.py index f8aed5b..599b1b9 100644 --- a/profsea/step2_extract_steric_dyn_regression.py +++ b/profsea/step2_extract_steric_dyn_regression.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023-2025, Met Office +Copyright (c) 2023, Met Office All rights reserved. """ diff --git a/profsea/step3_process_regional_sealevel_projections.py b/profsea/step3_process_regional_sealevel_projections.py index 29138c3..a401f76 100644 --- a/profsea/step3_process_regional_sealevel_projections.py +++ b/profsea/step3_process_regional_sealevel_projections.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023-2025, Met Office +Copyright (c) 2023, Met Office All rights reserved. """ diff --git a/profsea/step4_plot_regional_sealevel.py b/profsea/step4_plot_regional_sealevel.py index a3bebad..6d968d8 100644 --- a/profsea/step4_plot_regional_sealevel.py +++ b/profsea/step4_plot_regional_sealevel.py @@ -1,5 +1,5 @@ """ -Copyright (c) 2023-2025, Met Office +Copyright (c) 2023, Met Office All rights reserved. """ From 05fa48ba3bf6eb079de5eaa30ba08aa18e3f26c6 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Fri, 15 Aug 2025 15:02:32 +0100 Subject: [PATCH 09/13] Add descriptive file not found error in step 1 --- profsea/step1_extract_cmip.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/profsea/step1_extract_cmip.py b/profsea/step1_extract_cmip.py index a1f75a1..e069ebc 100644 --- a/profsea/step1_extract_cmip.py +++ b/profsea/step1_extract_cmip.py @@ -145,7 +145,13 @@ def extract_ssh_data(cmip_sea): print(f'Getting data for {model} model') cmip_date = cmip_dict[model]['historical'] cmip_file = os.path.join(cmip_dir, f'zos_Omon_{model}_historical_{cmip_date}.nc') - cube = cubeutils.loadcube(cmip_file, ncvar='zos')[0] + try: + cube = cubeutils.loadcube(cmip_file, ncvar='zos')[0] + except IOError: + raise FileNotFoundError(os.path.join(cmip_file), + '- CMIP5 sea level data not found, please' \ + ' check file path') + cubes.append(cube.slices(['latitude', 'longitude']).next()) return model_names, cubes From 6d3c616b5e8c894730448b171a574ed0c0d5b647 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Tue, 19 Aug 2025 09:14:24 +0100 Subject: [PATCH 10/13] Bug fix latlon mode for new conda env --- profsea/tide_gauge_locations.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profsea/tide_gauge_locations.py b/profsea/tide_gauge_locations.py index 152f247..161a584 100644 --- a/profsea/tide_gauge_locations.py +++ b/profsea/tide_gauge_locations.py @@ -110,7 +110,7 @@ def extract_site_info(data_source, data_type, region, site_name, latlon): 'Location', 'Dataset type', 'Station ID', 'Latitude', 'Longitude']) df_temp = df_temp.set_index('Location') - dfObj = dfObj.append(df_temp) + dfObj = dfObj._append(df_temp) else: raise IndexError(f'No site metadata for this site: {site_to_check}, have you spelled it correctly?') From a780c0b2284fe81cfe85a4a7fee6efcf45304900 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Tue, 19 Aug 2025 13:26:18 +0100 Subject: [PATCH 11/13] Tidy default file paths --- profsea/user-settings.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profsea/user-settings.yml b/profsea/user-settings.yml index 8180485..b9c4a22 100644 --- a/profsea/user-settings.yml +++ b/profsea/user-settings.yml @@ -63,8 +63,8 @@ cmipinfo: # UKCP18 --> UK specific ones # Global locations --> Lambeck, ICE5G giaestimates: - global: '/deposited2023/profsea_tool/gia_estimates /global_GIA_interpolators.pickle' - uk: '‘/deposited2023/profsea_tool/gia_estimates/Bradley_GIA_interpolator.pickle' + global: '/deposited2023/profsea_tool/gia_estimates/global_GIA_interpolators.pickle' + uk: '/deposited2023/profsea_tool/gia_estimates/Bradley_GIA_interpolator.pickle' # Directories for the Slangen, Spada and Klemann fingerprints fingerprints: From a87456c2d308c224a7642c0fe5442743f1c355fe Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Fri, 22 Aug 2025 09:26:25 +0100 Subject: [PATCH 12/13] Clarified error message --- profsea/step3_process_regional_sealevel_projections.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/profsea/step3_process_regional_sealevel_projections.py b/profsea/step3_process_regional_sealevel_projections.py index d9455a2..db529c2 100644 --- a/profsea/step3_process_regional_sealevel_projections.py +++ b/profsea/step3_process_regional_sealevel_projections.py @@ -421,8 +421,8 @@ def load_CMIP5_slope_coeffs_UK(scenario): data = pickle.load(f, encoding='latin1')['uk_mask_1'] except FileNotFoundError: raise FileNotFoundError(os.path.join(in_zosdir_uk, filename_uk), - '- CMIP5 Slope Coeffs not found, please' \ - ' check file path') + '- CMIP5 UK Slope Coefficients not found, ' \ + 'please check file path') # Keys are: 'coeffs', 'models', 'weights' coeffs = data['coeffs'] From 3bdb6754e8cf3d04cc28c21cafe7c89d1a18b550 Mon Sep 17 00:00:00 2001 From: Daniel Palmer Date: Fri, 6 Feb 2026 09:49:39 +0000 Subject: [PATCH 13/13] Pin packages in .yml and make new .lock --- ProFSea-environment.lock | 266 ++++++++++++++++++++++++++------------- ProFSea-environment.yml | 4 +- 2 files changed, 180 insertions(+), 90 deletions(-) diff --git a/ProFSea-environment.lock b/ProFSea-environment.lock index 796c8c1..a07935d 100644 --- a/ProFSea-environment.lock +++ b/ProFSea-environment.lock @@ -3,96 +3,186 @@ # platform: linux-64 @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-3.0.0-1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda +https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.1.4-hbd8a1cb_0.conda +https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libglvnd-1.7.0-ha4b6fd6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libgomp-15.2.0-he0feb66_17.conda +https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda +https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.25.0-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/geos-3.9.1-h9c3ff4c_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.1-h0b41bf4_3.conda -https://conda.anaconda.org/conda-forge/linux-64/icu-67.1-he1b5a44_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2 +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-hc364b38_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libegl-1.7.0-ha4b6fd6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libopengl-1.7.0-ha4b6fd6_2.conda +https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgcc-15.2.0-he0feb66_17.conda +https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.2-h39aace5_0.conda +https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_8.conda +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.3-hecca717_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-15.2.0-h69a702a_17.conda +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_17.conda +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.1.2-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libmpdec-4.0.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libntlm-1.8-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libpciaccess-0.18-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_17.conda +https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda +https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.12-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.5-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.3-hb47aa4a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda +https://conda.anaconda.org/conda-forge/linux-64/double-conversion-3.3.1-h5888daf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/geos-3.14.1-h480dda7_0.conda +https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda +https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda +https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h0aef613_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libaec-1.1.5-h088129d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libdrm-2.4.125-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20250104-pl5321h7949ede_0.conda https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda -https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libffi-3.3-h58526e2_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-h59595ed_2.conda -https://conda.anaconda.org/conda-forge/linux-64/openssl-1.1.1w-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xxhash-0.8.2-hd590300_0.conda -https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda -https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-hf9c8cef_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.51.0-hdcd2b5c_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.10.0-haa6b8db_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_17.conda +https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.54-h421ea60_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.51.2-h0c1763c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_17.conda https://conda.anaconda.org/conda-forge/linux-64/libudunits2-2.2.28-h40f5838_3.conda -https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda -https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda -https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda -https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda -https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda -https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.10.2-hc401514_3.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-7.87.0-h6312ad2_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.26-pthreads_h413a1c8_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda -https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.44.2-h2c6b66d_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.17.0-h8a09558_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libzip-1.11.2-h6991a6a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.46-h1321c63_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda +https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda +https://conda.anaconda.org/conda-forge/linux-64/wayland-1.24.0-h3e06ad9_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda +https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.3.3-hceb46e0_1.conda +https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda +https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.2.0-hb03c661_1.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda +https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.3-h659f571_0.conda +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.45.1-default_hbd61a6d_101.conda +https://conda.anaconda.org/conda-forge/linux-64/libfreetype6-2.14.1-h73754d4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.0-h1fed272_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.67.0-had1ee68_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.30-pthreads_h94d23a6_4.conda +https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda +https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda +https://conda.anaconda.org/conda-forge/linux-64/sqlite-3.51.2-hbc0de68_0.conda https://conda.anaconda.org/conda-forge/linux-64/udunits2-2.2.28-h40f5838_3.conda -https://conda.anaconda.org/conda-forge/linux-64/curl-7.87.0-h6312ad2_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.3.2-h658648e_1.conda -https://repo.anaconda.com/pkgs/main/linux-64/proj-8.0.1-h1217e81_0.conda -https://repo.anaconda.com/pkgs/main/linux-64/python-3.7.7-hcff3b4d_5.conda -https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/cloudpickle-2.2.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/cycler-0.11.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.1.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-21_linux64_openblas.conda -https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.6.1-h5e45101_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.1-h4f16b4b_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.1-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.10-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.2-hb711507_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.12-h4f16b4b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/brotli-1.2.0-hed03a55_1.conda +https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda +https://conda.anaconda.org/conda-forge/linux-64/dbus-1.16.2-h3c4dab8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.18-h0c24ade_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-5_h4a7cf45_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-hb8b1518_5.conda +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.18.0-h4e3cde8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libfreetype-2.14.1-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libglx-1.7.0-ha4b6fd6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libwebp-1.6.0-h9635ea4_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.1-ha9997c6_0.conda +https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.4-h55fea9a_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-3.13.5-hec9711d_102_cp313.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-hb711507_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.46-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxfixes-6.0.2-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.12-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/noarch/certifi-2026.1.4-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh8f84b5b_1.conda +https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.1.2-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhcf101f3_2.conda +https://conda.anaconda.org/conda-forge/linux-64/freetype-2.14.1-ha770c72_0.conda +https://conda.anaconda.org/conda-forge/noarch/fsspec-2026.1.0-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/hdf5-1.14.6-nompi_h1b119a7_105.conda +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.9-py313hc8edb43_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-5_h0358290_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libgl-1.7.0-ha4b6fd6_2.conda +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-5_h47877c9_openblas.conda +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.1-h26afc86_0.conda https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/pyshp-2.3.1-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.7-2_cp37m.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.7.1-pyha770c72_0.conda -https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/antlr-python-runtime-4.7.2-py37h89c1867_1003.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.1-py37h540881e_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.21.6-py37h976b520_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.2.1-py37hcc46e62_6.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-2.0.0-py37h5e8e339_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0-py37h540881e_4.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/setuptools-59.8.0-py37h89c1867_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.2-py37h540881e_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.7.1-hd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.2-py37hc105733_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/dask-core-2022.2.0-pyhd8ed1ab_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.3-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py37h7cecad7_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/pandas-1.3.5-py37he8f5f7f_0.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/pip-23.3.2-pyhd8ed1ab_0.conda -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.7.3-py37hf2a6cf1_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/shapely-1.8.0-py37h48c49eb_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.0.1-py37hb1e94ed_2.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.2.2-py37h1d35a4c_1.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.4.1-py37ha292673_200.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.20.0-py37hbe109c4_0.tar.bz2 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.2.2-1.tar.bz2 -https://conda.anaconda.org/conda-forge/noarch/iris-3.1.0-pyhd8ed1ab_3.tar.bz2 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.3-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/openldap-2.6.10-he970967_0.conda +https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pillow-12.1.0-py313h80991f8_0.conda +https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh145f28c_0.conda +https://conda.anaconda.org/conda-forge/linux-64/proj-9.7.1-he0df7b0_2.conda +https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.3.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/noarch/pyshp-3.0.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.3-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/python-xxhash-3.6.0-py313heab5758_1.conda +https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.3-py313h3dea7bd_1.conda +https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda +https://conda.anaconda.org/conda-forge/noarch/toolz-1.1.0-pyhd8ed1ab_1.conda +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.5.4-py313hd02dea0_0.conda +https://conda.anaconda.org/conda-forge/noarch/tqdm-4.67.3-pyh8f84b5b_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xcb-util-cursor-0.1.6-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcomposite-0.4.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxcursor-1.2.3-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdamage-1.1.6-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxi-1.8.2-hb9d3cd8_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrandr-1.5.5-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxxf86vm-1.1.7-hb03c661_0.conda +https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.15.0-h7e30c49_1.conda +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.61.1-py313h3dea7bd_0.conda +https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.7.0-pyhe01879c_1.conda +https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda +https://conda.anaconda.org/conda-forge/linux-64/libllvm21-21.1.8-hf7376ad_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libnetcdf-4.9.3-nompi_h11f7409_103.conda +https://conda.anaconda.org/conda-forge/linux-64/libpq-18.1-h5c52fec_2.conda +https://conda.anaconda.org/conda-forge/linux-64/libvulkan-loader-1.4.341.0-h5279c79_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.13.1-hca5e8e5_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libxslt-1.1.43-h711ed8c_1.conda +https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.2-py313hf6604e3_1.conda +https://conda.anaconda.org/conda-forge/noarch/partd-1.4.2-pyhd8ed1ab_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyproj-3.7.2-py313h77f6078_2.conda +https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda +https://conda.anaconda.org/conda-forge/linux-64/xorg-libxtst-1.2.5-hb9d3cd8_3.conda +https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.4-h3394656_0.conda +https://conda.anaconda.org/conda-forge/linux-64/cftime-1.6.5-py313h29aa505_1.conda +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.3.3-py313hc8edb43_4.conda +https://conda.anaconda.org/conda-forge/noarch/dask-core-2026.1.2-pyhcf101f3_0.conda +https://conda.anaconda.org/conda-forge/linux-64/libclang-cpp21.1-21.1.8-default_h99862b1_3.conda +https://conda.anaconda.org/conda-forge/linux-64/libclang13-21.1.8-default_h746c552_3.conda +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.3.1-py313h08cd8bf_0.conda +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.16.1-py313h11c21cd_1.conda +https://conda.anaconda.org/conda-forge/linux-64/shapely-2.1.2-py313had47c43_2.conda +https://conda.anaconda.org/conda-forge/linux-64/cf-units-3.3.1-py313h29aa505_0.conda +https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-12.1.0-h15599e2_0.conda +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.10.8-py313h683a580_0.conda +https://conda.anaconda.org/conda-forge/linux-64/netcdf4-1.7.4-nompi_py313h16051e2_102.conda +https://conda.anaconda.org/conda-forge/linux-64/cartopy-0.25.0-py313h08cd8bf_1.conda +https://conda.anaconda.org/conda-forge/linux-64/qt6-main-6.9.3-h5c1c036_1.conda +https://conda.anaconda.org/conda-forge/noarch/iris-3.14.1-pyha770c72_0.conda +https://conda.anaconda.org/conda-forge/linux-64/pyside6-6.9.3-py313h85046ba_2.conda +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.10.8-py313h78bf25f_0.conda diff --git a/ProFSea-environment.yml b/ProFSea-environment.yml index d331e5a..2d5cf93 100755 --- a/ProFSea-environment.yml +++ b/ProFSea-environment.yml @@ -3,9 +3,9 @@ channels: - conda-forge dependencies: - numpy - - pandas + - pandas<=2.3.1 - python=3.13.5 - - scipy + - scipy<=1.16.1 - pyyaml - netcdf4 - matplotlib