From d57d4f88febdd9583011394829b92252148958fb Mon Sep 17 00:00:00 2001 From: Evan Parker Date: Thu, 24 Sep 2026 21:59:29 +0000 Subject: [PATCH 1/4] Split JEDI python dependencies into a new jedi-python-env jedi-base-env pulled in 12 python packages, so every environment built on it inherited python whether or not it needed it -- including the model interface environments jedi-mpas-env and jedi-fv3-env. Move 11 of them into a new jedi-python-env bundle, following the existing neptune-env / neptune-python-env split. py-pybind11 stays in jedi-base-env because core JEDI packages link its headers. jedi-mpas-env and jedi-fv3-env are left with no python dependency other than py-pybind11. The other eight jedi-base-env dependents (ai-env, ewok-env, gmao-swell-env, jedi-geos-env, jedi-neptune-env, jedi-ufs-env, jedi-um-env, soca-env) gain an explicit jedi-python-env dependency so their content is unchanged. jedi-python-env is added to the unified-dev and skylab-dev templates. --- configs/templates/skylab-dev/spack.yaml | 1 + configs/templates/unified-dev/spack.yaml | 1 + .../spack_stack/packages/ai_env/package.py | 1 + .../spack_stack/packages/ewok_env/package.py | 1 + .../packages/gmao_swell_env/package.py | 1 + .../packages/jedi_base_env/package.py | 14 +------ .../packages/jedi_geos_env/package.py | 1 + .../packages/jedi_neptune_env/package.py | 1 + .../packages/jedi_python_env/package.py | 40 +++++++++++++++++++ .../packages/jedi_ufs_env/package.py | 1 + .../packages/jedi_um_env/package.py | 1 + .../spack_stack/packages/soca_env/package.py | 1 + 12 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py diff --git a/configs/templates/skylab-dev/spack.yaml b/configs/templates/skylab-dev/spack.yaml index 36f1bc989..4a5190dc7 100644 --- a/configs/templates/skylab-dev/spack.yaml +++ b/configs/templates/skylab-dev/spack.yaml @@ -15,6 +15,7 @@ spack: - jedi-geos-env ^esmf@=8.9.1 - jedi-mpas-env - jedi-neptune-env ^esmf@=9.0.0b18 + - jedi-python-env - jedi-tools-env - jedi-ufs-env ^esmf@=8.8.0 - neptune-env ^esmf@=9.0.0b18 diff --git a/configs/templates/unified-dev/spack.yaml b/configs/templates/unified-dev/spack.yaml index b59aa498b..f16a5aafd 100644 --- a/configs/templates/unified-dev/spack.yaml +++ b/configs/templates/unified-dev/spack.yaml @@ -20,6 +20,7 @@ spack: - jedi-geos-env ^esmf@=9.0.0b18 - jedi-mpas-env - jedi-neptune-env ^esmf@=9.0.0b18 + - jedi-python-env - jedi-ufs-env ^esmf@=8.8.0 - neptune-env ^esmf@=9.0.0b18 - neptune-python-env ^esmf@=9.0.0b18 diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ai_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ai_env/package.py index 902d6ddfb..fdf5cb2d9 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ai_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ai_env/package.py @@ -19,6 +19,7 @@ class AiEnv(BundlePackage): version("1.0.0") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("py-torch", type="run") # There is no need for install() since there is no code. diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/ewok_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/ewok_env/package.py index 3573828cf..4c39207be 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/ewok_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/ewok_env/package.py @@ -39,6 +39,7 @@ class EwokEnv(BundlePackage): ) depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("awscli-v2", type="run") depends_on("py-boto3", type="run") depends_on("py-cartopy", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/gmao_swell_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/gmao_swell_env/package.py index bd5292977..748406165 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/gmao_swell_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/gmao_swell_env/package.py @@ -20,6 +20,7 @@ class GmaoSwellEnv(BundlePackage): # Main JEDI modules depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") # Add CRTM 2.4.0 depends_on("crtm", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py index d3530c72f..ea909896f 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py @@ -54,19 +54,9 @@ class JediBaseEnv(BundlePackage): #depends_on("sp", type="run", when="^ip@:4") depends_on("udunits", type="run") - # Python packages - depends_on("py-eccodes", type="run") - depends_on("py-f90nml", type="run") - depends_on("py-h5py", type="run") - depends_on("py-netcdf4", type="run") - depends_on("py-pandas", type="run") - depends_on("py-pycodestyle", type="run") + # Python packages. Everything else moved to jedi-python-env; py-pybind11 + # stays because core JEDI packages link its headers. depends_on("py-pybind11", type="run") - depends_on("py-pyhdf", when="+hdf4", type="run") - depends_on("py-python-dateutil", type="run") - depends_on("py-pyyaml", type="run") - depends_on("py-scipy", type="run") - depends_on("py-xarray", type="run") conflicts( "platform=darwin %gcc", diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_geos_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_geos_env/package.py index 78abbf125..3bad93902 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_geos_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_geos_env/package.py @@ -18,6 +18,7 @@ class JediGeosEnv(BundlePackage): version("1.0.0") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") #depends_on("blas", type="run") depends_on("mepo", type="run") depends_on("esmf", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py index d570e289d..a311dd62e 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_neptune_env/package.py @@ -26,6 +26,7 @@ class JediNeptuneEnv(BundlePackage): variant("jedi", default=False, description="Build JEDI components required for JEDI-NEPTUNE") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("neptune-env", type="run") depends_on("neptune-python-env", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py new file mode 100644 index 000000000..34da90e27 --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py @@ -0,0 +1,40 @@ +# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other +# Spack Project Developers. See the top-level COPYRIGHT file for details. +# +# SPDX-License-Identifier: (Apache-2.0 OR MIT) + +from spack_repo.builtin.build_systems.bundle import BundlePackage +from spack.package import * + + +class JediPythonEnv(BundlePackage): + """Python dependencies for JEDI applications, on top of jedi-base-env""" + + homepage = "https://github.com/jcsda/spack-stack" + git = "https://github.com/jcsda/spack-stack.git" + + maintainers("climbfuji", "srherbener") + + version("1.0.0") + + # Mirrors the jedi-base-env variant so py-pyhdf tracks the hdf4 library + variant("hdf4", default=True, description="Build hdf4 library and python hdf module") + + depends_on("jedi-base-env", type="run") + depends_on("jedi-base-env +hdf4", when="+hdf4", type="run") + depends_on("jedi-base-env ~hdf4", when="~hdf4", type="run") + + # Python packages + depends_on("py-eccodes", type="run") + depends_on("py-f90nml", type="run") + depends_on("py-h5py", type="run") + depends_on("py-netcdf4", type="run") + depends_on("py-pandas", type="run") + depends_on("py-pycodestyle", type="run") + depends_on("py-pyhdf", when="+hdf4", type="run") + depends_on("py-python-dateutil", type="run") + depends_on("py-pyyaml", type="run") + depends_on("py-scipy", type="run") + depends_on("py-xarray", type="run") + + # There is no need for install() since there is no code. diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_ufs_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_ufs_env/package.py index bf788588f..6fcbb56ef 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_ufs_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_ufs_env/package.py @@ -18,6 +18,7 @@ class JediUfsEnv(BundlePackage): version("1.0.0") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("fms +gfs_phys constants=GFS", type="run") depends_on("bacio", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_um_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_um_env/package.py index a04f74e51..5cb49eb08 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_um_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_um_env/package.py @@ -20,6 +20,7 @@ class JediUmEnv(BundlePackage): version("1.0.0") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("ectrans", type="run") depends_on("fiat", type="run") depends_on("shumlib", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/soca_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/soca_env/package.py index a730a72a1..9f1478522 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/soca_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/soca_env/package.py @@ -18,6 +18,7 @@ class SocaEnv(BundlePackage): version("1.0.0") depends_on("jedi-base-env", type="run") + depends_on("jedi-python-env", type="run") depends_on("nco", type="run") # There is no need for install() since there is no code. From 5cd386bfb0d84d99c1c853a87e5008a958f39c98 Mon Sep 17 00:00:00 2001 From: Evan Parker Date: Thu, 24 Sep 2026 22:28:44 +0000 Subject: [PATCH 2/4] move bufr query --- configs/sites/tier2/aws-ubuntu2404/README.md | 4 +++- configs/sites/tier2/aws-ubuntu2404/packages.yaml | 4 +++- configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml | 4 +++- .../spack_stack/packages/jedi_base_env/package.py | 3 --- .../spack_stack/packages/jedi_python_env/package.py | 6 ++++++ 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/configs/sites/tier2/aws-ubuntu2404/README.md b/configs/sites/tier2/aws-ubuntu2404/README.md index 654ba0993..9961aed73 100644 --- a/configs/sites/tier2/aws-ubuntu2404/README.md +++ b/configs/sites/tier2/aws-ubuntu2404/README.md @@ -362,9 +362,11 @@ cat << 'EOF' >> ${SPACK_SYSTEM_CONFIG_PATH}/packages.yaml - 'cxxflags="-O1"' jedi-base-env: require: - - ~bufrquery - +fftw - +hdf4 + jedi-python-env: + require: + - ~bufrquery py-pyyaml: require: - +libyaml diff --git a/configs/sites/tier2/aws-ubuntu2404/packages.yaml b/configs/sites/tier2/aws-ubuntu2404/packages.yaml index bb4ad8a49..8ee1d27dd 100644 --- a/configs/sites/tier2/aws-ubuntu2404/packages.yaml +++ b/configs/sites/tier2/aws-ubuntu2404/packages.yaml @@ -18,7 +18,9 @@ packages: require: - "@1.7.2" jedi-base-env: - require: [+fftw, +hdf4, +bufrquery] + require: [+fftw, +hdf4] + jedi-python-env: + require: [+bufrquery] # System packages. autoconf: diff --git a/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml b/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml index 55149ad0a..a49908993 100644 --- a/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml +++ b/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml @@ -84,7 +84,9 @@ packages: # Package constraints. jedi-base-env: - require: [+fftw, +hdf4, +bufrquery] + require: [+fftw, +hdf4] + jedi-python-env: + require: [+bufrquery] eccodes: require: - "jp2k=jasper" diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py index ea909896f..43e551426 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_base_env/package.py @@ -21,15 +21,12 @@ class JediBaseEnv(BundlePackage): # Need to find a free fftw provider for fftw-api ... variant("fftw", default=True, description="Build fftw") variant("hdf4", default=True, description="Build hdf4 library and python hdf module") - variant("bufrquery", default=True, description="Build bufr-query library") depends_on("libbacktrace", type="run") depends_on("base-env", type="run") depends_on("bison", type="run") depends_on("blas", type="run") depends_on("boost", type="run") - depends_on("bufr", type="run") - depends_on("bufr-query", when="+bufrquery", type="run") # Force users to load manually # depends_on("crtm@v2.4.1-jedi", type="run") depends_on("ecbuild", type="run") diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py index 34da90e27..05bcd697c 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py @@ -19,11 +19,17 @@ class JediPythonEnv(BundlePackage): # Mirrors the jedi-base-env variant so py-pyhdf tracks the hdf4 library variant("hdf4", default=True, description="Build hdf4 library and python hdf module") + variant("bufrquery", default=True, description="Build bufr-query library") depends_on("jedi-base-env", type="run") depends_on("jedi-base-env +hdf4", when="+hdf4", type="run") depends_on("jedi-base-env ~hdf4", when="~hdf4", type="run") + # bufr is built +python in configs/common/packages.yaml, so it carries a + # py-numpy run dependency; bufr-query is its python-bindings companion. + depends_on("bufr", type="run") + depends_on("bufr-query", when="+bufrquery", type="run") + # Python packages depends_on("py-eccodes", type="run") depends_on("py-f90nml", type="run") From cdd88392206fa1e168c13c1070b92b448bb17792 Mon Sep 17 00:00:00 2001 From: Evan Parker Date: Thu, 24 Sep 2026 22:32:55 +0000 Subject: [PATCH 3/4] jedi_python_env s/climbfuji/eap/ --- .../spack_repo/spack_stack/packages/jedi_python_env/package.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py index 05bcd697c..8ace2e43b 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py @@ -13,7 +13,7 @@ class JediPythonEnv(BundlePackage): homepage = "https://github.com/jcsda/spack-stack" git = "https://github.com/jcsda/spack-stack.git" - maintainers("climbfuji", "srherbener") + maintainers("eap", "srherbener") version("1.0.0") From d342459ea65f9b671c2ecce0118131ca137de5d9 Mon Sep 17 00:00:00 2001 From: Evan Parker Date: Fri, 25 Sep 2026 16:16:54 +0000 Subject: [PATCH 4/4] Add py-zarr to jedi-python-env, pinned to @3: --- configs/common/packages.yaml | 3 +++ .../spack_repo/spack_stack/packages/jedi_python_env/package.py | 1 + 2 files changed, 4 insertions(+) diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 6a1d84d3b..0c38e5c36 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -522,6 +522,9 @@ packages: py-versioneer: require: - '@0.28:' + py-zarr: + require: + - '@3:' # On a per-site basis, either set qt to buildable: false # or add requirement to build with gcc for Intel oneAPI qt: diff --git a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py index 8ace2e43b..a9a73c2d2 100644 --- a/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py @@ -42,5 +42,6 @@ class JediPythonEnv(BundlePackage): depends_on("py-pyyaml", type="run") depends_on("py-scipy", type="run") depends_on("py-xarray", type="run") + depends_on("py-zarr", type="run") # There is no need for install() since there is no code.