diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 81a0e3f6dc6a6daa31413aa95972fe9d9d38452a..bba6a5e7fd5e42f7897deed3e70bd7a1faa21a85 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -276,6 +276,95 @@ sync-esd-image: - if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE == "push" when: manual +# build test on JUSUF login node +build-esd-image_JUSUF: + stage: build + tags: + - esd_image_JUSUF + variables: + CI_SPACK_ENV: esd + SPACK_JOBS: 8 + # no OCI caching for JUSUF builds, we rely on shared fs + OCI_CACHE_PREFIX: "" + UPDATE_SPACK_OCI_CACHES: false + OCI_IMAGE_PREFIX: "" + # for now, we directly push to a local buildcache + UPDATE_SPACK_LOCAL_CACHE: true + FINALFLUSH_SPACK_LOCAL_CACHE: false + INSTALLATION_ROOT: /esd + SANDBOX_ROOT_RELATIVE: esd_image + TMPDIR: /dev/shm/ecm_gitlab_ci + SANDBOX_ROOT: ${TMPDIR}/${SANDBOX_ROOT_RELATIVE} + SYSTEMNAME: image-jusuf + SPACK_CACHE_SOURCE: /p/usersoftware/ebrains-sw-stack/ecm/test_mr_cache + SPACK_CACHE_BUILD: /p/usersoftware/ebrains-sw-stack/ecm/test_mr_cache + IMAGE_ROOT: /p/usersoftware/ebrains-sw-stack/images/jusuf + script: + # create a sandbox/image for performing an spack install inside based on some base image/install + - rm -rf $TMPDIR + - mkdir $TMPDIR || true + - | + cat <<EOF >image.def + Bootstrap: scratch + + %setup + mkdir \${APPTAINER_ROOTFS}/bin + # /etc exists + touch \${APPTAINER_ROOTFS}/etc/passwd + touch \${APPTAINER_ROOTFS}/etc/group + touch \${APPTAINER_ROOTFS}/etc/localtime + mkdir \${APPTAINER_ROOTFS}/lib + mkdir \${APPTAINER_ROOTFS}/lib64 + mkdir \${APPTAINER_ROOTFS}/usr + mkdir -p \${APPTAINER_ROOTFS}/${INSTALLATION_ROOT} + # JUSUF speciale + mkdir \${APPTAINER_ROOTFS}/p + mkdir -p \${APPTAINER_ROOTFS}/etc/FZJ + mkdir -p \${APPTAINER_ROOTFS}/etc/pki + # /var exists + EOF + - cat image.def + - apptainer build --fix-perms --force --sandbox ${SANDBOX_ROOT}/ image.def + # run installation script inside future container environment + # => DAG concretization, subsequent cache access + fetching and actual build should be separate steps + # begin of fixup for JUSUF + # end of fixup for JUSUF + - export APPTAINER_BIND="/bin,/lib,/lib64,/usr,/p,/etc/FZJ,/etc/pki" + - apptainer exec --writable --bind ${CI_PROJECT_DIR}:${INSTALLATION_ROOT} --cwd ${INSTALLATION_ROOT} ${SANDBOX_ROOT} bash ./install_spack_env.sh $SPACK_JOBS $INSTALLATION_ROOT ${INSTALLATION_ROOT} $CI_SPACK_ENV "" $UPDATE_SPACK_OCI_CACHES $OCI_CACHE_PREFIX + - echo "export SYSTEMNAME=${SYSTEMNAME}" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh + - echo ". ${INSTALLATION_ROOT}/vendor/spack/var/spack/environments/${CI_SPACK_ENV}/load_env.sh" >> ${SANDBOX_ROOT}/.singularity.d/env/90-environment.sh + # begin of fixup for JUSUF + - rm -rf ${SANDBOX_ROOT}/p + - rm -rf ${SANDBOX_ROOT}/etc/FZJ + # end of fixup for JUSUF + # preparing to assemble the image: move in the CI project contents... + - shopt -s dotglob + - find . -maxdepth 1 -and -not -name "." -and -not -name "${SANDBOX_ROOT_RELATIVE}" -exec mv -t ${SANDBOX_ROOT}/${INSTALLATION_ROOT} {} \; + # convert to SIF image file + - apptainer build latest.sif "${SANDBOX_ROOT}" + - du -sh latest.sif + - mkdir -p ${IMAGE_ROOT} + - export TMP_IMAGE=$(mktemp ${IMAGE_ROOT}/latest.sif.XXXXXX) + - cp latest.sif ${TMP_IMAGE} + - mv ${TMP_IMAGE} ${IMAGE_ROOT}/latest.sif + after_script: + - mkdir -p $CI_PROJECT_DIR/spack_logs/installed $CI_PROJECT_DIR/spack_logs/not_installed + # for succesfully installed packages: keep the spack logs for any package modified during this CI job + - PKG_DIR=${SANDBOX_ROOT}/${INSTALLATION_ROOT}/spack/opt/spack/**/linux-ubuntu20.04-x86_64/gcc-10.3.0 + - if cd $PKG_DIR; then find . \( -name ".spack" -o -name ".build" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/installed \;; fi + # for not succesfully installed packages: also keep the spack logs for any packages that failed + - if cd /tmp/$(whoami)/spack-stage/; then find . -maxdepth 2 \( -name "*.txt" -o -name ".install_time_tests" \) -exec cp -r --parents "{}" $CI_PROJECT_DIR/spack_logs/not_installed \;; fi + artifacts: + paths: + - spack_logs + when: always + timeout: 2 days + rules: + # branches that update the gitlab-runner upstream (read-only) installation and the spack OCI caches + - if: $CI_PIPELINE_SOURCE != "schedule" && $CI_PIPELINE_SOURCE != "merge_request_event" + #- if: ($CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH || $CI_COMMIT_BRANCH == "experimental_rel" || $CI_COMMIT_BRANCH =~ /^ebrains/) && $CI_PROJECT_PATH =~ /platform\/esd\/ebrains-spack-builds/ && $CI_PIPELINE_SOURCE != "schedule" + # when: manual + # update gitlab-runner upstream (read-only) installation sync-gitlab-spack-instance: stage: build diff --git a/install_spack_env.sh b/install_spack_env.sh index a0ed1f67a75ffc4d7f740871259abbf95f5ae258..3f719f18c358ddb9ba0c87c215e65a5676e6849e 100644 --- a/install_spack_env.sh +++ b/install_spack_env.sh @@ -23,6 +23,7 @@ export CI_SPACK_ROOT=${INSTALLATION_ROOT}/spack # disable local configuration and cache directories export SPACK_DISABLE_LOCAL_CONFIG=true +export SPACK_USER_CONFIG_PATH=/dev/null export SPACK_USER_CACHE_PATH=/tmp/spack # define SYSTEMNAME variable in sites where it's not already defined @@ -38,6 +39,11 @@ if [ ! -d ${INSTALLATION_ROOT} ]; then mkdir -p ${INSTALLATION_ROOT} fi +# site-specific environment modifications +if [ -e site-config/${SYSTEMNAME}/build_env.sh ]; then + . site-config/${SYSTEMNAME}/build_env.sh +fi + # initial setup: use spack submodule if spack dir doesn't already exist SPACK_ROOT_EXISTED=1 if [ ! -d ${CI_SPACK_ROOT} ]; then @@ -66,6 +72,10 @@ then spack repo add $EBRAINS_REPO fi +spack bootstrap status || true +spack bootstrap now # FIXME: --insecure was needed on JUSUF when /etc/pki wasn't available? +# FIXME JUSUF: spack config add config:verify_ssl:false ? maybe not needed + # make sure all fetching/clingo stuff happens before anything else spack spec aida @@ -130,12 +140,13 @@ spack-python -c "exit(not len(spack.environment.active_environment().uninstalled else echo "Updating of the source cache disabled." fi + # FIXME: local source cache update? if [ "$ret" -ne 0 ]; then (exit $ret) fi ) -if [ -n "${OCI_CACHE_PREFIX}" ]; then +if [ -n "${UPDATE_SPACK_LOCAL_CACHES}" ]; then # record the state of installed/uninstalled packages before actually installing them dag_hashes_pre_install=$(spack-python ${YASHCHIKI_HOME}/specfile_dag_hash.py ${CACHE_SPECFILE}) fi @@ -145,7 +156,7 @@ fi spack install --no-check-signature -y -j$SPACK_JOBS --fresh --test root && spack_install_ret=$? || spack_install_ret=$? # no need to update the local cache nor the remote cache if we don't want to update -if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true" ]; then +if [ -n "${UPDATE_SPACK_LOCAL_CACHE}" ]; then # push previously missing (but now installed) packages to the local cache for dag_hash in $dag_hashes_pre_install; do spack buildcache create --unsigned --only package ${SPACK_CACHE_BUILD} /${dag_hash} && ret=$? || ret=$? @@ -155,15 +166,19 @@ if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true fi done - # upload packages from local to remote cache - echo "Performing update of the build cache" - python3 ${YASHCHIKI_HOME}/update_cached_buildresults.py \ - --local-cache=${SPACK_CACHE_BUILD}/build_cache \ - --remote-cache-type=oci \ - --remote-cache=${OCI_CACHE_PREFIX}/build_cache \ - /tmp/missing_paths_buildresults.dat + if [ -n "${OCI_CACHE_PREFIX}" ] && [ "${UPDATE_SPACK_OCI_CACHES:-false}" = "true" ]; then + # upload packages from local to remote cache + echo "Performing update of the build cache" + python3 ${YASHCHIKI_HOME}/update_cached_buildresults.py \ + --local-cache=${SPACK_CACHE_BUILD}/build_cache \ + --remote-cache-type=oci \ + --remote-cache=${OCI_CACHE_PREFIX}/build_cache \ + /tmp/missing_paths_buildresults.dat + else + echo "Updating of remote build cache disabled." + fi else - echo "Updating of the build cache disabled." + echo "Updating of the local build cache disabled." fi # propagate spack install exit code @@ -172,7 +187,7 @@ if [ $spack_install_ret -ne 0 ]; then fi # remove local cache content -if [ -d ${SPACK_CACHE_BUILD} ]; then +if [ "${FINALFLUSH_SPACK_LOCAL_CACHE:-false}" = "true" ] && [ -d ${SPACK_CACHE_BUILD} ]; then spack mirror destroy --mirror-name local_cache fi diff --git a/packages/arbor/package.py b/packages/arbor/package.py index 8cf2887bb0005b43585d65f10ab10092722ce472..49fba43f2ff082008504fbeba0f3de54f380ed00 100644 --- a/packages/arbor/package.py +++ b/packages/arbor/package.py @@ -17,6 +17,7 @@ class Arbor(CMakePackage, CudaPackage): version("master", branch="master", submodules=True) version("develop", branch="master", submodules=True) + version("jusuf-benchmark", commit="c4ff08ceef2760796538c4117a259fd2104442ed", submodules=True) version( "0.10.0", sha256="72966b7a2f45ce259b8ba167ca3e4f5ab9f212136a300267aaac0c04ed3fe3fc", @@ -107,6 +108,11 @@ class Arbor(CMakePackage, CudaPackage): # end EBRAINS (modified) depends_on("py-mpi4py", when="+mpi+python", type=("build", "run")) + # begin EBRAINS (modified: added build dep) + depends_on("py-pybind11-stubgen", when="@0.11:", type="build") + depends_on("py-pybind11-stubgen", when="@jusuf-benchmark", type="build") + # end EBRAINS (modified) + # python (bindings) with when("+python"): extends("python") @@ -140,6 +146,10 @@ class Arbor(CMakePackage, CudaPackage): if "+cuda" in self.spec: args.append("-DARB_GPU=cuda") args.append(self.define_from_variant("ARB_USE_GPU_RNG", "gpu_rng")) + # begin EBRAINS (modified: set cuda arch) + cuda_arch = self.spec.variants["cuda_arch"].value + args.append("-DCMAKE_CUDA_ARCHITECTURES=%s" % cuda_arch) + # end EBRAINS # query spack for the architecture-specific compiler flags set by its wrapper args.append("-DARB_ARCH=none") @@ -154,6 +164,10 @@ class Arbor(CMakePackage, CudaPackage): return args + @on_package_attributes(when="+cuda") + def check(self): + pass + @run_after("install", when="+python") @on_package_attributes(run_tests=True) def install_test(self): diff --git a/packages/bm-arbor-euhpc/fix_install.patch b/packages/bm-arbor-euhpc/fix_install.patch new file mode 100644 index 0000000000000000000000000000000000000000..98af113177686763f9b4126b752d098bbf2a4eea --- /dev/null +++ b/packages/bm-arbor-euhpc/fix_install.patch @@ -0,0 +1,11 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 8f2adbd..aac57ab 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -17,3 +17,6 @@ set(JSON_Install OFF CACHE INTERNAL "") + add_subdirectory(ext/json) + + target_link_libraries(busyring PRIVATE arbor::arbor arbor::arborio arbor::arborenv nlohmann_json::nlohmann_json) ++ ++install(TARGETS busyring) ++install(FILES gen-inputs.py TYPE BIN) diff --git a/packages/bm-arbor-euhpc/fix_post-010-api.patch b/packages/bm-arbor-euhpc/fix_post-010-api.patch new file mode 100644 index 0000000000000000000000000000000000000000..d3498795a62371331cc7e96e0bbb9fb6edbc0d5d --- /dev/null +++ b/packages/bm-arbor-euhpc/fix_post-010-api.patch @@ -0,0 +1,33 @@ +diff --git a/ring.cpp b/ring.cpp +index d331449..1ae8882 100644 +--- a/ring.cpp ++++ b/ring.cpp +@@ -168,7 +168,7 @@ struct ring_recipe: public arb::recipe { + event_weight_(params.event_weight), + params_(params) { + gprop.default_parameters = arb::neuron_parameter_defaults; +- gprop.catalogue.import(arb::global_allen_catalogue(), ""); ++ gprop.catalogue.extend(arb::global_allen_catalogue(), ""); + + if (params.cell.complex_cell) { + gprop.default_parameters.reversal_potential_method["ca"] = "nernst/ca"; +@@ -443,9 +443,7 @@ arb::cable_cell complex_cell(arb::cell_gid_type gid, const cell_parameters& para + + decor.place(cntr, arb::threshold_detector{-20.0*U::mV}, "d"); + +- decor.set_default(arb::cv_policy_every_segment()); +- +- return {arb::morphology(tree), decor}; ++ return {arb::morphology(tree), decor, {}, arb::cv_policy_every_segment()}; + } + + arb::cable_cell branch_cell(arb::cell_gid_type gid, const cell_parameters& params) { +@@ -475,7 +473,5 @@ arb::cable_cell branch_cell(arb::cell_gid_type gid, const cell_parameters& param + } + + // Make a CV between every sample in the sample tree. +- decor.set_default(arb::cv_policy_every_segment()); +- +- return {arb::morphology(tree), decor}; ++ return {arb::morphology(tree), decor, {}, arb::cv_policy_every_segment()}; + } diff --git a/packages/bm-arbor-euhpc/fix_stdcxx.patch b/packages/bm-arbor-euhpc/fix_stdcxx.patch new file mode 100644 index 0000000000000000000000000000000000000000..1a58fbc9df3ac1a782881ff21aec220355a7778c --- /dev/null +++ b/packages/bm-arbor-euhpc/fix_stdcxx.patch @@ -0,0 +1,15 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index aac57ab..1fe4039 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -3,8 +3,8 @@ cmake_minimum_required(VERSION 3.19) + project(busyring) + + enable_language(CXX) +-set(CMAKE_CXX_STANDARD 17) +-set(CMAKE_CUDA_STANDARD 17) ++set(CMAKE_CXX_STANDARD 20) ++set(CMAKE_CUDA_STANDARD 20) + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(CMAKE_CXX_EXTENSIONS OFF) + diff --git a/packages/bm-arbor-euhpc/package.py b/packages/bm-arbor-euhpc/package.py new file mode 100644 index 0000000000000000000000000000000000000000..ceebc8f01455c229a95bf07678c3e1953ff87e91 --- /dev/null +++ b/packages/bm-arbor-euhpc/package.py @@ -0,0 +1,37 @@ +# 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 BmArborEuhpc(CMakePackage, CudaPackage): + """Arbor EUHPC Mini-Benchmark""" + + homepage = "https://github.com/thorstenhater" + url = "https://github.com/thorstenhater/euhpc-arbor-benchmark" + git = "https://github.com/thorstenhater/euhpc-arbor-benchmark.git" + + maintainers = ("thorstenhater") + + version("main", branch="main", submodules=True) + version("jusuf-benchmark", commit="0adb4ae9ff03a2158c1284634e9163665997506a", submodules=True) + + depends_on("arbor") + depends_on("arbor@jusuf-benchmark", when="@jusuf-benchmark") + + patch("fix_install.patch") + patch("fix_stdcxx.patch") + patch("fix_post-010-api.patch") + + def cmake_args(self): + args = [ + "-DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON", + ] + + if "+cuda" in self.spec: + cuda_arch = self.spec.variants["cuda_arch"].value + args.append("-DCMAKE_CUDA_ARCHITECTURES=%s" % cuda_arch) + + return args diff --git a/site-config/image-jusuf/build_env.sh b/site-config/image-jusuf/build_env.sh new file mode 100644 index 0000000000000000000000000000000000000000..5b5372aa7ce7e55b75c1a1b6463a3a79bff49afa --- /dev/null +++ b/site-config/image-jusuf/build_env.sh @@ -0,0 +1,6 @@ +module list +module --force purge +module load Stages/2025 +module load StdEnv/2025 +module load Python +module list diff --git a/site-config/image-jusuf/config.yaml b/site-config/image-jusuf/config.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8e58bc0377128adb64c3c25f790da18e19cd3316 --- /dev/null +++ b/site-config/image-jusuf/config.yaml @@ -0,0 +1,2 @@ +config: + test_stage: /tmp/spack_tests diff --git a/site-config/image-jusuf/packages.yaml b/site-config/image-jusuf/packages.yaml new file mode 100644 index 0000000000000000000000000000000000000000..1c380553b4f1311cc649fd74172e4735c05ac28a --- /dev/null +++ b/site-config/image-jusuf/packages.yaml @@ -0,0 +1,110 @@ +packages: +# all: +# compiler: ["gcc@13.3.0"] +# variants: +mpi +cuda cuda_arch=75 + gmake: + #buildable: False + externals: + - spec: gmake@4.3 + prefix: /usr + subversion: + buildable: False + externals: + - spec: subversion@1.10.2 + prefix: /usr + intel-tbb: +# compiler: ["gcc@13.3"] # Prefer GCC 13.3 for intel-tbb + variants: +shared # Enable shared libraries + version: [2021.9.0] # Use version 2021.9.0 (compatible with GCC 13.3) + buildable: true # Allow Spack to build intel-tbb if not found externally +# suitparse: +# compiler: ["gcc@13.3"] # Force suite-sparse to use gcc@13.3 + cuda: + buildable: False + externals: + - spec: cuda@12.6.0 + prefix: /p/software/jusuf/stages/2025/software/CUDA/12/ + modules: + - Stages/2025 + - CUDA/12 + cudnn: + buildable: False + externals: + - spec: cudnn@9.5.0.50-12 + prefix: /p/software/jusuf/stages/2025/software/cuDNN/9.5.0.50-CUDA-12/ + modules: + - Stages/2025 + - cuDNN/9.5.0.50-CUDA-12 + mpi: + buildable: False + mpich: + buildable: False + externals: + - spec: "mpich@4.1.5%gcc@13.3.0 arch=linux-rocky9-zen2" + prefix: /p/software/jusuf/stages/2025/software/psmpi/5.10.0-1-GCC-13.3.0/ + modules: + - Stages/2025 + - GCC/13.3.0 + - ParaStationMPI/5.10.0-1 + llvm: + variants: ~cuda + binutils: + buildable: False + externals: + - spec: binutils@2.42 + prefix: /p/software/jusuf/stages/2025/software/binutils/2.42-GCCcore-13.3.0 + numactl: + buildable: False + externals: + - spec: numactl@2.0.18 + prefix: /p/software/jusuf/stages/2025/software/numactl/2.0.18-GCCcore-13.3.0 + modules: + - numactl/2.0.18 + ucx: + buildable: False + externals: + - spec: ucx@1.17.0 + prefix: /p/software/jusuf/stages/2025/software/UCX/default-GCCcore-13.3.0 + modules: + - UCX/default + xz: + buildable: False + externals: + - spec: xz@5.4.5 + prefix: /p/software/jusuf/stages/2025/software/XZ/5.4.5-GCCcore-13.3.0 + libxml2: + buildable: False + externals: + - spec: libxml2@2.12.7 + prefix: /p/software/jusuf/stages/2025/software/libxml2/2.12.7-GCCcore-13.3.0 + libevent: + buildable: False + externals: + - spec: libevent@2.1.12 + prefix: /p/software/jusuf/stages/2025/software/libevent/2.1.12-GCCcore-13.3.0 + libpciaccess: + buildable: False + externals: + - spec: libpciaccess@0.18.1 + prefix: /p/software/jusuf/stages/2025/software/libpciaccess/0.18.1-GCCcore-13.3.0 + hwloc: + buildable: False + externals: + - spec: hwloc@2.10.0 + prefix: /p/software/jurecadc/stages/2025/software/hwloc/2.10.0-GCCcore-13.3.0 + modules: + - Stages/2025 + - GCC/13.3.0 + - hwloc/2.10.0 + pmix: + buildable: False + externals: + - spec: pmix@5.0.3 + prefix: /p/software/jusuf/stages/2025/software/PMIx/5.0.3-GCCcore-13.3.0 + modules: + - GCC/13.3.0 + - PMIx/5.0.3 + arbor: + variants: +python +mpi +cuda cuda_arch=70 +vectorize + bm-arbor-euhpc: + variants: +cuda cuda_arch=70 diff --git a/spack.yaml b/spack.yaml index da2a6fb26a1173f4bda40ceb4bc7397673e7b13e..f5bc8fb17b433c893ab73c53d072c8a0a79127b7 100644 --- a/spack.yaml +++ b/spack.yaml @@ -3,82 +3,83 @@ spack: - site-config/$SYSTEMNAME specs: # EBRAINS tools - - arbor@0.10.0 +python +mpi - - py-biobb-analysis@4.1.0 - - py-biobb-chemistry@4.1.0 - - py-biobb-common@4.1.0 - - py-biobb-gromacs@4.1.1 - - py-biobb-io@4.1.0 - - py-biobb-model@4.1.0 - - py-biobb-structure-checking@3.13.4 - - py-biobb-structure-utils@4.1.0 - - hxtorch@10.0-a1 + - arbor@jusuf-benchmark +python +mpi + - bm-arbor-euhpc@jusuf-benchmark +# - py-biobb-analysis@4.1.0 +# - py-biobb-chemistry@4.1.0 +# - py-biobb-common@4.1.0 +# - py-biobb-gromacs@4.1.1 +# - py-biobb-io@4.1.0 +# - py-biobb-model@4.1.0 +# - py-biobb-structure-checking@3.13.4 +# - py-biobb-structure-utils@4.1.0 +# - hxtorch@10.0-a1 - nest@3.8 +sonata - neuron@8.2.3 +mpi - - jaxsnn@10.0-a1 - - py-bluepyefe@2.3.6 - - py-bluepymm@0.8.7 - - py-bluepyopt@1.14.18 - - py-bsb-core@5.0.2 - - py-bsb-hdf5@5.0.2 - - py-bsb-yaml@4.2.2 - - py-bsb-json@4.2.2 - - py-bsb-nest@4.3.2 - - py-bsb-neuron@4.2.2 - - py-cobrawap@0.2.1 - - py-ebrains-drive@0.6.0 - - py-ebrains-kg-core@0.9.15 - - py-ebrains-validation-client@0.9.1 - - py-efel@5.2.0 - - py-elephant@1.1.1 - - py-fairgraph@0.12.1 - - py-frites@0.4.4 - - py-hbp-archive@1.1.1 - - py-hbp-neuromorphic-platform@0.11.2 - - py-hbp-validation-client@0.9.0 - - py-hippounit@1.4.1 - - py-lfpy@2.3 - - py-lfpykit@0.5.1 - - py-libneuroml@0.4.1 - - py-libsonata@0.1.23 - - py-neo@0.13.3 - - py-nestml@8.0.0 - - py-netpyne@1.0.6 - - py-neurom@3.2.4 - - py-neuror@1.6.4 - - py-pynn@0.12.3 +mpi - - py-pyunicore@1.1.1 - - py-quantities-scidash@0.12.4.3 - - py-quantities@0.16.0 - - py-siibra@1.0a9 - - py-snudda@2.1.10 - - py-spynnaker@7.3.0 - - py-tvb-framework@2.9 - - py-tvb-contrib@2.9.1 - - py-tvb-library@2.9.2 - - py-tvb-multiscale@2.1.0.ebrains - - py-tvb-widgets@2.1.0 - - py-tvb-ext-bucket - - py-tvb-ext-unicore - - py-tvb-ext-xircuits@1.1.0 - - py-viziphant@0.4.0 - - py-vbi@0.1.3.3 - - pynn-brainscales@10.0-a1 - - r-rgsl@0.1.1 - - r-sbtabvfgen@0.1 - - r-uqsa@2.2 - - sda@7.3.3d - # Workflows (meta-packages) - - wf-biobb - - wf-brainscales2-demos@10.0-a1 - - wf-bsb@4.4 +nest +neuron - - wf-protein-association-rates@0.1 - - wf-multi-area-model@1.2.0 - - wf-human-multi-area-model@2.0.1 - - wf-uq-akar4@0.1 - - wf-custom-python@0.1 - #- py-cerebstats - #- py-cerebunit - #- py-morphounit@1.0.4 +# - jaxsnn@10.0-a1 +# - py-bluepyefe@2.3.6 +# - py-bluepymm@0.8.7 +# - py-bluepyopt@1.14.18 +# - py-bsb-core@5.0.2 +# - py-bsb-hdf5@5.0.2 +# - py-bsb-yaml@4.2.2 +# - py-bsb-json@4.2.2 +# - py-bsb-nest@4.3.2 +# - py-bsb-neuron@4.2.2 +# - py-cobrawap@0.2.1 +# - py-ebrains-drive@0.6.0 +# - py-ebrains-kg-core@0.9.15 +# - py-ebrains-validation-client@0.9.1 +# - py-efel@5.2.0 +# - py-elephant@1.1.1 +# - py-fairgraph@0.12.1 +# - py-frites@0.4.4 +# - py-hbp-archive@1.1.1 +# - py-hbp-neuromorphic-platform@0.11.2 +# - py-hbp-validation-client@0.9.0 +# - py-hippounit@1.4.1 +# - py-lfpy@2.3 +# - py-lfpykit@0.5.1 +# - py-libneuroml@0.4.1 +# - py-libsonata@0.1.23 +# - py-neo@0.13.3 +# - py-nestml@8.0.0 +# - py-netpyne@1.0.6 +# - py-neurom@3.2.4 +# - py-neuror@1.6.4 +# - py-pynn@0.12.3 +mpi +# - py-pyunicore@1.1.1 +# - py-quantities-scidash@0.12.4.3 +# - py-quantities@0.16.0 +# - py-siibra@1.0a9 +# - py-snudda@2.1.10 +# - py-spynnaker@7.3.0 +# - py-tvb-framework@2.9 +# - py-tvb-contrib@2.9.1 +# - py-tvb-library@2.9.2 +# - py-tvb-multiscale@2.1.0.ebrains +# - py-tvb-widgets@2.1.0 +# - py-tvb-ext-bucket +# - py-tvb-ext-unicore +# - py-tvb-ext-xircuits@1.1.0 +# - py-viziphant@0.4.0 +# - py-vbi@0.1.3.3 +# - pynn-brainscales@10.0-a1 +# - r-rgsl@0.1.1 +# - r-sbtabvfgen@0.1 +# - r-uqsa@2.2 +# - sda@7.3.3d +# # Workflows (meta-packages) +# - wf-biobb +# - wf-brainscales2-demos@10.0-a1 +# - wf-bsb@4.4 +nest +neuron +# - wf-protein-association-rates@0.1 +# - wf-multi-area-model@1.2.0 +# - wf-human-multi-area-model@2.0.1 +# - wf-uq-akar4@0.1 +# - wf-custom-python@0.1 +# #- py-cerebstats +# #- py-cerebunit +# #- py-morphounit@1.0.4 concretizer: unify: true