diff --git a/configs/common/packages.yaml b/configs/common/packages.yaml index 65fbaed25d..51b581e26b 100644 --- a/configs/common/packages.yaml +++ b/configs/common/packages.yaml @@ -479,13 +479,13 @@ packages: py-pandas: require: - '@:2' - prefer: - - '~performance' # py-versioneer is unavoidably duplicated by pins in py-pyogrio (@0.28) and # py-partd (@0.29). py-pandas is unconstrained and can further cascade splits # into py-xarray/met/metplus/jedi-base-env. This constraints py-versioneer to @0.28 # (shared with py-pyogrio) so only py-versioneer itself is duplicated. - ^py-versioneer@0.28 + prefer: + - '~performance' # To avoid duplicate packages py-poetry-core: require: diff --git a/configs/sites/tier1/container/packages_oneapi.yaml b/configs/sites/tier1/container/packages_oneapi.yaml index 0ab8599b11..88edc96092 100644 --- a/configs/sites/tier1/container/packages_oneapi.yaml +++ b/configs/sites/tier1/container/packages_oneapi.yaml @@ -10,7 +10,7 @@ packages: intel-oneapi-compilers: buildable: false externals: - - spec: intel-oneapi-compilers@2025.3.0 + - spec: intel-oneapi-compilers@2025.3.0 +fix_rt_linkage prefix: /opt/intel/oneapi modules: - umf/1.0.2 diff --git a/configs/sites/tier2/aws-ubuntu2404/README.md b/configs/sites/tier2/aws-ubuntu2404/README.md index 654ba0993f..c5527c8bb0 100644 --- a/configs/sites/tier2/aws-ubuntu2404/README.md +++ b/configs/sites/tier2/aws-ubuntu2404/README.md @@ -314,7 +314,7 @@ pico ${PWD}/site/packages.yaml # intel-oneapi-compilers: # buildable: false # externals: -# - spec: intel-oneapi-compilers@2026.1.1 +# - spec: intel-oneapi-compilers@2026.1.1 +fix_rt_linkage # prefix: /opt/intel/oneapi # modules: # - umf/1.1.0 @@ -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 bb4ad8a49d..8ee1d27dd4 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 55149ad0ae..d56b47ec40 100644 --- a/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml +++ b/configs/sites/tier2/aws-ubuntu2404/packages_oneapi.yaml @@ -19,7 +19,7 @@ packages: intel-oneapi-compilers: buildable: false externals: - - spec: intel-oneapi-compilers@2026.1.1 + - spec: intel-oneapi-compilers@2026.1.1 +fix_rt_linkage prefix: /opt/intel/oneapi modules: - umf/1.1.0 @@ -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/configs/templates/skylab-dev/spack.yaml b/configs/templates/skylab-dev/spack.yaml index 36f1bc989c..4a5190dc7d 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 b59aa498b6..f16a5aafda 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 9d9cc50eed..f87c7fbac2 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 3573828cfd..4c39207bef 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 bd5292977b..748406165a 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 d3530c72f2..43e5514261 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") @@ -54,19 +51,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 78abbf1256..3bad939023 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 23f85d8c2d..e4abf3848a 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 @@ -27,6 +27,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 0000000000..8ace2e43b9 --- /dev/null +++ b/repos/spack_stack/spack_repo/spack_stack/packages/jedi_python_env/package.py @@ -0,0 +1,46 @@ +# 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("eap", "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") + 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") + 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 bf788588fd..6fcbb56efa 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 a04f74e51b..5cb49eb085 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 a730a72a10..9f14785226 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.