diff --git a/packages/py-bluepyopt/package.py b/packages/py-bluepyopt/package.py new file mode 100644 index 0000000000000000000000000000000000000000..aa4e5254800dfa5a6d358856fe5637b77dcefbef --- /dev/null +++ b/packages/py-bluepyopt/package.py @@ -0,0 +1,42 @@ +# Copyright 2013-2024 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.package import * + + +class PyBluepyopt(PythonPackage): + """Bluebrain Python Optimisation Library""" + + homepage = "https://github.com/BlueBrain/BluePyOpt" + pypi = "bluepyopt/bluepyopt-1.9.27.tar.gz" + + license("LGPL-3.0-only") + + # NOTE : while adding new release check pmi_rank.patch compatibility + version("1.14.18", sha256="23d6239294d944c8f9d4ea298091bcf243d236735844e1bcba60535a0f520ca8") + version("1.14.11", sha256="fe2830c36699a93d2ef9ddef316da42f9c57ca6654c92356eab973ee2298ebf7") + version("1.14.4", sha256="7567fd736053250ca06030f67ad93c607b100c2b98df8dc588c26b64cb3e171c") + + # patch required to avoid hpe-mpi linked mechanism library + patch("pmi_rank.patch") + + variant("scoop", default=False, description="Use BluePyOpt together with py-scoop") + + depends_on("py-setuptools", type="build") + depends_on("py-numpy@1.6:", type=("build", "run")) + depends_on("py-pandas@0.18:", type=("build", "run")) + depends_on("py-deap@1.3.3:", type=("build", "run")) + depends_on("py-efel@2.13:", type=("build", "run")) + depends_on("py-ipyparallel", type=("build", "run")) + depends_on("py-pickleshare@0.7.3:", type=("build", "run")) + depends_on("py-jinja2@2.8:", type=("build", "run")) + depends_on("py-future", type=("build", "run")) + depends_on("py-pebble@4.6:", type=("build", "run")) + depends_on("py-scoop@0.7:", type=("build", "run"), when="+scoop") + depends_on("neuron@7.4:", type=("build", "run"), when="@:1.14.4") + depends_on("neuron@7.8:", type=("build", "run"), when="@1.14.11:") + + def setup_run_environment(self, env): + env.unset("PMI_RANK") + env.set("NEURON_INIT_MPI", "0") diff --git a/packages/py-bluepyopt/pmi_rank.patch b/packages/py-bluepyopt/pmi_rank.patch new file mode 100644 index 0000000000000000000000000000000000000000..21a73849b2868389f5e05d9670adc0fb18fadab5 --- /dev/null +++ b/packages/py-bluepyopt/pmi_rank.patch @@ -0,0 +1,17 @@ +diff --git a/bluepyopt/ephys/simulators.py b/bluepyopt/ephys/simulators.py +index e71ad8b..3c93237 100644 +--- a/bluepyopt/ephys/simulators.py ++++ b/bluepyopt/ephys/simulators.py +@@ -89,6 +89,12 @@ class NrnSimulator(object): + NrnSimulator._nrn_disable_banner() + self.banner_disabled = True + ++ # certain mpi libraries (hpe-mpt) use PMI_RANK env variable to initialize ++ # MPI before calling MPI_Init (which is undesirable). Unset this variable ++ # if exist to avoid issue with loading neuron and mechanism library. ++ if 'PMI_RANK' in os.environ: ++ os.environ.pop("PMI_RANK") ++ + import neuron # NOQA + + return neuron diff --git a/packages/py-snudda/package.py b/packages/py-snudda/package.py index 97b72292dd4e677db105d0a5c86b30517c901994..8d0ca3d80ac52b0d889b54332643d224b4152e09 100644 --- a/packages/py-snudda/package.py +++ b/packages/py-snudda/package.py @@ -24,7 +24,7 @@ class PySnudda(PythonPackage): depends_on("unzip", type=("build")) depends_on("py-setuptools", type=("build")) depends_on("py-importlib-metadata", type=("build","run")) - depends_on("py-bluepyopt@1.14.11:", type=("build","run")) + depends_on("py-bluepyopt@1.14.18:", type=("build","run")) depends_on("py-h5py@3.12.1:", type=("build","run")) depends_on("py-ipyparallel@8.4.1:", type=("build","run")) depends_on("py-matplotlib@3.8:", type=("build","run")) diff --git a/spack.yaml b/spack.yaml index b99a827038f34fffb388af454bfc187d263cb07f..809334f9675222c13f945ae0e15cfe24d1aa6a59 100644 --- a/spack.yaml +++ b/spack.yaml @@ -18,7 +18,7 @@ spack: - jaxsnn@10.0-a1 - py-bluepyefe@2.3.6 - py-bluepymm@0.8.7 - - py-bluepyopt@1.14.11 + - py-bluepyopt@1.14.18 - py-bsb-core@5.0.2 - py-bsb-hdf5@5.0.2 - py-bsb-yaml@4.2.2