diff --git a/.github/workflows/sanitize.yml b/.github/workflows/sanitize.yml
index 6762039add..8fd3c75772 100644
--- a/.github/workflows/sanitize.yml
+++ b/.github/workflows/sanitize.yml
@@ -1,10 +1,18 @@
name: Sanitize
on:
- pull_request:
+ push:
branches: [ master ]
paths-ignore: 'doc/**'
+ schedule:
+ - cron: '0 2 * * 0' # run at 2 AM every sunday
+
+permissions:
+ issues: write
+ pull-requests: write
+ contents: write
+
jobs:
build:
name: "Sanitize"
@@ -58,7 +66,39 @@ jobs:
cd -
- name: Run unit tests
run: |
- build/bin/unit --gtest_filter=-*DeathTest
- build/bin/unit-modcc
+ build/bin/unit --gtest_filter=-*DeathTest 2>&1 | tee output.log
+ build/bin/unit-modcc 2>&1 | tee -a output.log
+ shell: bash
- name: Run examples
- run: scripts/run_cpp_examples.sh
+ run: scripts/run_cpp_examples.sh 2>&1 | tee -a output.log
+ shell: bash
+ - name: Ouput File
+ if: ${{ failure() && github.event_name == 'schedule' }}
+ run: |
+ FENCE='```'
+ HEADER="$(cat << EOF
+
+
+ output from test runs
+
+ ${FENCE}
+ EOF
+ )"
+ FOOTER="$(cat << EOF
+ ${FENCE}
+
+
+ EOF
+ )"
+ echo "${HEADER}" > issue.md
+ cat output.log >> issue.md
+ echo "${FOOTER}" >> issue.md
+ echo -e "\nSee also the [corresponding workflow](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})\n" >> issue.md
+ - name: Create Issue From File
+ if: ${{ failure() && github.event_name == 'schedule' }}
+ uses: peter-evans/create-issue-from-file@v4
+ with:
+ title: '[AUTOMATED] Sanitize checks failed'
+ content-filepath: ./issue.md
+ labels: |
+ automated issue
diff --git a/.github/workflows/test-docs.yaml b/.github/workflows/test-docs.yaml
index 7c6918f2fd..d7cac2a8b2 100644
--- a/.github/workflows/test-docs.yaml
+++ b/.github/workflows/test-docs.yaml
@@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-20.04]
- python-version: [3.7]
+ python-version: [3.8]
steps:
- name: Set up cmake
uses: jwlawson/actions-setup-cmake@v1.13
diff --git a/.github/workflows/test-matrix.yml b/.github/workflows/test-matrix.yml
index c760b4d8c2..d1c4e8d0c6 100644
--- a/.github/workflows/test-matrix.yml
+++ b/.github/workflows/test-matrix.yml
@@ -20,7 +20,7 @@ jobs:
os: "ubuntu-20.04",
cc: "gcc-9",
cxx: "g++-9",
- py: "3.7",
+ py: "3.8",
cmake: "3.19.x",
mpi: "ON",
simd: "OFF"
@@ -30,7 +30,7 @@ jobs:
os: "ubuntu-20.04",
cc: "clang-9",
cxx: "clang++-9",
- py: "3.7",
+ py: "3.8",
cmake: "3.19.x",
mpi: "ON",
simd: "OFF"
@@ -40,7 +40,7 @@ jobs:
os: "macos-11",
cc: "clang",
cxx: "clang++",
- py: "3.7",
+ py: "3.8",
cmake: "3.19.x",
mpi: "ON",
simd: "OFF"
diff --git a/.github/workflows/test-pip.yml b/.github/workflows/test-pip.yml
index f65f1ca08d..df029593e9 100644
--- a/.github/workflows/test-pip.yml
+++ b/.github/workflows/test-pip.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
matrix:
os: [ubuntu-20.04]
- python-version: [3.7]
+ python-version: [3.8]
steps:
- uses: actions/setup-python@v4
with:
diff --git a/.readthedocs.yml b/.readthedocs.yml
index 2750945e28..10cbaca0f2 100644
--- a/.readthedocs.yml
+++ b/.readthedocs.yml
@@ -13,11 +13,10 @@ sphinx:
formats: []
build:
- os: ubuntu-20.04
+ os: ubuntu-22.04
tools:
- python: "3.7"
+ python: "3.11"
python:
- system_packages: true
install:
- - requirements: doc/requirements.txt
\ No newline at end of file
+ - requirements: doc/requirements.txt
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 26a3d153a2..c32763dda5 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -103,7 +103,7 @@ After much more delay than anticipated, we are very happy to present a new Arbor
## New Contributors
* @musicinmybrain made their first contribution in https://github.com/arbor-sim/arbor/pull/2080
-**Full Changelog**: https://github.com/arbor-sim/arbor/compare/v0.8...v0.9.0-rc
+**Full Changelog**: https://github.com/arbor-sim/arbor/compare/v0.8.1...v0.9.0
# v0.8.1
diff --git a/CITATION.bib b/CITATION.bib
index e271888207..2d42e26b7e 100644
--- a/CITATION.bib
+++ b/CITATION.bib
@@ -8,7 +8,7 @@ @INPROCEEDINGS{
doi={10.1109/EMPDP.2019.8671560},
ISSN={2377-5750}}
-@software{nora_abi_akar_2022_7473671,
+@software{nora_abi_akar_2023_8233847,
author = {Nora Abi Akar and
John Biddiscombe and
Benjamin Cumming and
@@ -32,11 +32,11 @@ @software{nora_abi_akar_2022_7473671
Simon Frasch and
Lukas Drescher and
Lennart Landsmeer},
- title = {Arbor Library v0.8.1},
+ title = {Arbor Library v0.9.0},
month = nov,
- year = 2022,
+ year = 2023,
publisher = {Zenodo},
- version = {v0.8},
- doi = {10.5281/zenodo.7473671},
- url = {https://doi.org/10.5281/zenodo.7473671}
-}
\ No newline at end of file
+ version = {v0.9.0},
+ doi = {10.5281/zenodo.8233847},
+ url = {https://doi.org/10.5281/zenodo.8233847}
+}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 20f75795f5..3a0e9e85d9 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -359,7 +359,7 @@ endif()
#----------------------------------------------------------
# The minimum version of Python supported by Arbor.
-set(arb_py_version 3.7.0)
+set(arb_py_version 3.8.0)
if(DEFINED PYTHON_EXECUTABLE)
set(Python3_EXECUTABLE ${PYTHON_EXECUTABLE})
diff --git a/VERSION b/VERSION
index ac39a106c4..dc9bff91aa 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-0.9.0
+0.9.1-dev
diff --git a/arbor/CMakeLists.txt b/arbor/CMakeLists.txt
index c8f1a465a7..c456e1e355 100644
--- a/arbor/CMakeLists.txt
+++ b/arbor/CMakeLists.txt
@@ -26,7 +26,7 @@ set(arbor_sources
io/serialize_hex.cpp
label_resolution.cpp
lif_cell_group.cpp
- mc_cell_group.cpp
+ cable_cell_group.cpp
mechcat.cpp
mechinfo.cpp
memory/gpu_wrappers.cpp
diff --git a/arbor/backends/event_delivery.md b/arbor/backends/event_delivery.md
index 5ca2945b04..fc2a63ead0 100644
--- a/arbor/backends/event_delivery.md
+++ b/arbor/backends/event_delivery.md
@@ -20,7 +20,7 @@ Target handles are used by the lowered cell implementation to identify a particu
instance that can receive events — ultimately via `net_receive` — and corresponding simulated
cell. The cell information is given as an index into the cell group collection of cells.
-Target handles are represented by the `target_handle` struct, opaque to `mc_cell_group`,
+Target handles are represented by the `target_handle` struct, opaque to `cable_cell_group`,
but created in the `fvm_multicell` for each point mechanism (synapse) in the cell group.
### Deliverable events
diff --git a/arbor/mc_cell_group.cpp b/arbor/cable_cell_group.cpp
similarity index 96%
rename from arbor/mc_cell_group.cpp
rename to arbor/cable_cell_group.cpp
index fdde92ff9b..ca7f1ad636 100644
--- a/arbor/mc_cell_group.cpp
+++ b/arbor/cable_cell_group.cpp
@@ -15,7 +15,7 @@
#include "cell_group.hpp"
#include "fvm_lowered_cell.hpp"
#include "label_resolution.hpp"
-#include "mc_cell_group.hpp"
+#include "cable_cell_group.hpp"
#include "profile/profiler_macro.hpp"
#include "sampler_map.hpp"
#include "util/filter.hpp"
@@ -26,7 +26,7 @@
namespace arb {
-mc_cell_group::mc_cell_group(const std::vector& gids,
+cable_cell_group::cable_cell_group(const std::vector& gids,
const recipe& rec,
cell_label_range& cg_sources,
cell_label_range& cg_targets,
@@ -68,7 +68,7 @@ mc_cell_group::mc_cell_group(const std::vector& gids,
spike_sources_.shrink_to_fit();
}
-void mc_cell_group::reset() {
+void cable_cell_group::reset() {
spikes_.clear();
for (auto &entry: sampler_map_) {
@@ -92,9 +92,9 @@ struct sampler_call_info {
sample_size_type end_offset;
};
-void mc_cell_group::t_serialize(serializer& ser,
+void cable_cell_group::t_serialize(serializer& ser,
const std::string& k) const { serialize(ser, k, *this); }
-void mc_cell_group::t_deserialize(serializer& ser,
+void cable_cell_group::t_deserialize(serializer& ser,
const std::string& k) { deserialize(ser, k, *this); }
// Working space for computing and collating data for samplers.
@@ -382,7 +382,7 @@ void run_samples(
std::visit([&](auto& x) {run_samples(x, sc, raw_times, raw_samples, sample_records, scratch); }, sc.pdata_ptr->info);
}
-void mc_cell_group::advance(epoch ep, time_type dt, const event_lane_subrange& event_lanes) {
+void cable_cell_group::advance(epoch ep, time_type dt, const event_lane_subrange& event_lanes) {
time_type tstart = lowered_->time();
// Bin and collate deliverable events from event lanes.
@@ -510,7 +510,7 @@ void mc_cell_group::advance(epoch ep, time_type dt, const event_lane_subrange& e
}
}
-void mc_cell_group::add_sampler(sampler_association_handle h, cell_member_predicate probeset_ids,
+void cable_cell_group::add_sampler(sampler_association_handle h, cell_member_predicate probeset_ids,
schedule sched, sampler_function fn)
{
std::lock_guard guard(sampler_mex_);
@@ -524,17 +524,17 @@ void mc_cell_group::add_sampler(sampler_association_handle h, cell_member_predic
}
}
-void mc_cell_group::remove_sampler(sampler_association_handle h) {
+void cable_cell_group::remove_sampler(sampler_association_handle h) {
std::lock_guard guard(sampler_mex_);
sampler_map_.erase(h);
}
-void mc_cell_group::remove_all_samplers() {
+void cable_cell_group::remove_all_samplers() {
std::lock_guard guard(sampler_mex_);
sampler_map_.clear();
}
-std::vector mc_cell_group::get_probe_metadata(cell_member_type probeset_id) const {
+std::vector cable_cell_group::get_probe_metadata(cell_member_type probeset_id) const {
// Probe associations are fixed after construction, so we do not need to grab the mutex.
std::optional maybe_tag = util::value_by_key(probe_map_.tag, probeset_id);
diff --git a/arbor/mc_cell_group.hpp b/arbor/cable_cell_group.hpp
similarity index 92%
rename from arbor/mc_cell_group.hpp
rename to arbor/cable_cell_group.hpp
index bab48c4294..ede7019984 100644
--- a/arbor/mc_cell_group.hpp
+++ b/arbor/cable_cell_group.hpp
@@ -22,11 +22,11 @@
namespace arb {
-class ARB_ARBOR_API mc_cell_group: public cell_group {
+class ARB_ARBOR_API cable_cell_group: public cell_group {
public:
- mc_cell_group() = default;
+ cable_cell_group() = default;
- mc_cell_group(const std::vector& gids,
+ cable_cell_group(const std::vector& gids,
const recipe& rec,
cell_label_range& cg_sources,
cell_label_range& cg_targets,
@@ -57,7 +57,7 @@ class ARB_ARBOR_API mc_cell_group: public cell_group {
std::vector get_probe_metadata(cell_member_type probeset_id) const override;
- ARB_SERDES_ENABLE(mc_cell_group, gids_, spikes_, lowered_);
+ ARB_SERDES_ENABLE(cable_cell_group, gids_, spikes_, lowered_);
virtual void t_serialize(serializer& ser, const std::string& k) const override;
virtual void t_deserialize(serializer& ser, const std::string& k) override;
diff --git a/arbor/cell_group_factory.cpp b/arbor/cell_group_factory.cpp
index e7fb7006a9..d6ced713da 100644
--- a/arbor/cell_group_factory.cpp
+++ b/arbor/cell_group_factory.cpp
@@ -9,7 +9,7 @@
#include "execution_context.hpp"
#include "fvm_lowered_cell.hpp"
#include "lif_cell_group.hpp"
-#include "mc_cell_group.hpp"
+#include "cable_cell_group.hpp"
#include "spike_source_cell_group.hpp"
namespace arb {
@@ -27,7 +27,7 @@ ARB_ARBOR_API cell_group_factory cell_kind_implementation(
switch (ck) {
case cell_kind::cable:
return [bk, ctx, seed](const gid_vector& gids, const recipe& rec, cell_label_range& cg_sources, cell_label_range& cg_targets) {
- return make_cell_group(gids, rec, cg_sources, cg_targets, make_fvm_lowered_cell(bk, ctx, seed));
+ return make_cell_group(gids, rec, cg_sources, cg_targets, make_fvm_lowered_cell(bk, ctx, seed));
};
case cell_kind::spike_source:
diff --git a/arbor/fvm_lowered_cell.hpp b/arbor/fvm_lowered_cell.hpp
index 179020a0cc..1361033e02 100644
--- a/arbor/fvm_lowered_cell.hpp
+++ b/arbor/fvm_lowered_cell.hpp
@@ -172,7 +172,7 @@ struct fvm_probe_data {
};
// Samplers are tied to probe ids, but one probe id may
-// map to multiple probe representations within the mc_cell_group.
+// map to multiple probe representations within the cable_cell_group.
struct probe_association_map {
// Keys are probe id.
diff --git a/doc/concepts/decor.rst b/doc/concepts/decor.rst
index bc7a2f79ca..89e5ee7d4a 100644
--- a/doc/concepts/decor.rst
+++ b/doc/concepts/decor.rst
@@ -176,7 +176,7 @@ Take for example the built-in mechanism for passive leaky dynamics:
.. _cablecell-scaled-mechs:
4. Scaling Mechanism and Membrane Parameters
-~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Mechanism parameters are usually homogeneous along a cell. However, sometimes it
is useful to scale parameters based on inhomogeneous properties.
diff --git a/doc/concepts/labels.rst b/doc/concepts/labels.rst
index 8b879431d0..5b7a0e2a16 100644
--- a/doc/concepts/labels.rst
+++ b/doc/concepts/labels.rst
@@ -273,6 +273,16 @@ Locset expressions
The set of locations at the midpoint of every branch, expressed as ``(on-branches 0.5)``.
+.. label:: (on-components pos:double)
+
+ Points on each component of the region proportional to ``pos``.
+
+ .. figure:: ../gen-images/on_components_label.svg
+ :width: 300
+ :align: center
+
+ This shows the component centers of the dendrite, i.e. ``(on-components 0.5 (region "dend"))``.
+
.. label:: (distal reg:region)
The set of the most distal locations of a region.
@@ -297,6 +307,15 @@ Locset expressions
On the left is the region with radius between 0.3 μm and 0.5 μm.
The right shows the proximal set of this region.
+.. label:: (boundary reg:region), (cboundary reg:region), and (segment-boundaries)
+
+ Boundary of (completed) region and those of all segments. The examples show
+ ``(boundary (segment 2))``, ``(cboundary (segment 2))``, and ``(segment-boundaries)``.
+
+ .. figure:: ../gen-images/boundaries_label.svg
+ :width: 600
+ :align: center
+
.. label:: (proximal-translate ls:locset distance:real)
The set of locations that correspond to moving each location in the ``ls`` in the proximal direction
@@ -387,6 +406,10 @@ Locset expressions
(join (location 1 0.5) (location 2 0.1) (location 1 0.2) (location 1 0.5) (location 4 0))
+.. label:: (support ls:locset)
+
+ Support of the multiset ``ls``, i.e. set of all points in the locset such that each appears once.
+
.. _labels-region-expr:
Region expressions
@@ -612,6 +635,42 @@ Region expressions
Two regions (left and middle) and their intersection (right).
+.. label:: (difference lhs:region rhs:region)
+
+ The intersection of two regions.
+
+ .. figure:: ../gen-images/difference_label.svg
+ :width: 900
+ :align: center
+
+ Two regions (left and middle) and their difference (right).
+
+.. label:: (complement reg:region)
+
+ The complement of a region.
+
+ .. figure:: ../gen-images/complement_label.svg
+ :width: 900
+ :align: center
+
+ A region (left) and its complement (right).
+
+.. label:: (complete reg:region)
+
+ Complete a region, i.e. add all covers of all included forks.
+
+ .. figure:: ../gen-images/completion_label.svg
+ :width: 900
+ :align: center
+
+ A region (left) and its completion (right).
+
+.. label:: (z-dist-from-root-lt dist:real), (z-dist-from-root-le dist:real), (z-dist-from-root-gt dist:real) and (z-dist-from-root-ge dist:real)
+
+ All points ``p`` of the morphology such that ``p``'s z-coordinate is less
+ than, less than or equal, greater than, or greater than or equal to
+ ``dist``.
+
.. _labels-iexpr:
diff --git a/doc/contrib/dependency-management.rst b/doc/contrib/dependency-management.rst
index ad783e2692..6f66f278d3 100644
--- a/doc/contrib/dependency-management.rst
+++ b/doc/contrib/dependency-management.rst
@@ -59,7 +59,8 @@ Dependency update rules
#. Dependencies shall be set to a (commit hash corresponding to a) specific version tag. (All current dependencies use semver.)
#. The version shall be compatible with the user platforms (see above).
#. The version shall be compatible with the requirements in ``doc/dependencies.csv``.
-#. The version shall be the lowest possible. More recent versions of submodules are automatically tested through ``.github/workflows/check-submodules.yml``, to catch merge problems early.
+#. The version shall be the lowest possible, to facilitate building of complex environments.
+#. The submodule shall be set to the highest version provided by the latest Spack release ("Spack stable"). Spack CI tests both Spack stable and develop.
#. Moreover, dependencies shall not be updated past the most recent version of the dependency in Spack.
* This prevents Spack builds from pulling in ``master``, when a more recent version than available is required. `See here `_.
diff --git a/doc/contrib/release.rst b/doc/contrib/release.rst
index 5213bb50d8..833df12f09 100644
--- a/doc/contrib/release.rst
+++ b/doc/contrib/release.rst
@@ -93,7 +93,7 @@ Release
#. Upload to pypi & verify
- Get the wheels from test PyPI or the Github Action that produced the release artifacts.
+ Get the wheels from test PyPI or the Github Action that produced the release artifacts. Make sure you have pip installed ``twine`` and have your ``~/.pypirc`` file setup with the right token (see `docs `_).
.. code-block:: bash
@@ -106,7 +106,9 @@ Release
#. Create Github Release: https://github.com/arbor-sim/arbor/releases
- The Github action that produced the release artifacts should have prepared a draft Release.
- - If not:
+ - Update body text with ``CHANGELOG.md``
+ - (Probably: delete the Github draft release for the ``-rc``)
+ - If no Github Release was automatically drafted:
- Go to `GH tags`_ and click “…” and “Create release”
- Categorize/edit Github's autogenerated release notes (alternatively go through merged PRs to come up with a changelog).
- Manually build full tarball:
@@ -118,7 +120,7 @@ Release
Post Release
------------
-#. Start a new release on Zenodo, this allocated a DOI, but you don't have to finish it right away. Add new Zenodo badge/link to docs/README.
+#. Start a new release on Zenodo, this allocated a DOI, but you don't have to finish it right away. Add new Zenodo DOI badge/link to ``CITATION.bib`` and ``docs/index.rst``.
#. Update Zenodo with authors and changelog created in previous step and submit.
@@ -138,7 +140,7 @@ Post Release
- Make sure that `Notebooks `_ work on the version that their image is built with.
#. Announce on our website
-#. Announce on HBP newsletter newsletter@humanbrainproject.eu, HBP Twitter/socials evan.hancock@ebrains.eu
+#. Announce on HBP newsletter newsletter@humanbrainproject.eu, communications@ebrains.eu, HBP Twitter/socials evan.hancock@ebrains.eu
#. [AUTOMATED] Add tagged version of docs on ReadTheDocs
#. HBP internal admin
@@ -152,8 +154,6 @@ Post Release
- ContentTypes: https://humanbrainproject.github.io/openMINDS/v3/core/v4/data/contentType.html
- details: https://github.com/HumanBrainProject/openMINDS_core/tree/v3/instances/data/contentTypes
-
- - Send an update to the folk in charge of HBP Twitter if we want to shout about it
#. FZJ admin
diff --git a/doc/cpp/probe_sample.rst b/doc/cpp/probe_sample.rst
index c1d19067ac..e00979173c 100644
--- a/doc/cpp/probe_sample.rst
+++ b/doc/cpp/probe_sample.rst
@@ -635,7 +635,7 @@ The ``schedule`` class and its implementations are found in ``schedule.hpp``.
Helper classes for probe/sampler management
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-The ``simulation`` and ``mc_cell_group`` classes use classes defined in
+The ``simulation`` and ``cable_cell_group`` classes use classes defined in
``scheduler_map.hpp`` to simplify the management of sampler--probe associations
and probe metadata.
@@ -644,7 +644,7 @@ handles and tuples (*schedule*, *sampler*, *probe set*), with thread-safe
accessors.
-Batched sampling in ``mc_cell_group``
+Batched sampling in ``cable_cell_group``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The ``fvm_multicell`` implementations for CPU and GPU simulation of multi-compartment
@@ -657,11 +657,11 @@ When an integration step for a cell covers a sample event on that cell, the samp
is satisfied with the value from the cell state at the beginning of the time step,
after any postsynaptic spike events have been delivered.
-It is the responsibility of the ``mc_cell_group::advance()`` method to create the sample
+It is the responsibility of the ``cable_cell_group::advance()`` method to create the sample
events from the entries of its ``sampler_association_map``, and to dispatch the
sampled values to the sampler callbacks after the integration is complete.
Given an association tuple (*schedule*, *sampler*, *probe set*) where the *schedule*
-has (non-zero) *n* sample times in the current integration interval, the ``mc_cell_group`` will
+has (non-zero) *n* sample times in the current integration interval, the ``cable_cell_group`` will
call the *sampler* callback once for probe in *probe set*, with *n* sample values.
.. note::
diff --git a/doc/dependencies.csv b/doc/dependencies.csv
index 5a7fe77167..2c0bcbef2a 100644
--- a/doc/dependencies.csv
+++ b/doc/dependencies.csv
@@ -11,15 +11,15 @@ ARB_GPU,CUDA,11.0,,"* It is available on all of the target HPC systems (Piz Dain
ARB_WITH_MPI,MPI,,Many MPI implementations are supported.,
"ARB_WITH_MPI, ARB_WITH_PYTHON ",mpi4py,3.1.0,Minimum version depends on compatiblity with your Python and MPI versions. 3.1.0 is the first release to support Python > 3.8.,
html, .. literalinclude:: ../requirements.txt,,See ``doc/requirements.txt``,
-unit,googletest,,submodule ``ext/gtest.*``,
+unit,googletest,1.12.1,submodule ``ext/gtest.*``,
bench,Google-benchmark,,submodule ``ext/google-benchmark``,
--,json,3.11.2,submodule ``ext/json``,
---,pugi,,submodule ``ext/pugixml``,
---,random123,,submodule ``ext/random123``,
---,fmt,,submodule ``ext/fmt``,
+--,pugi,1.13,submodule ``ext/pugixml``,
+--,random123,1.14.0,submodule ``ext/random123``,
+--,fmt,10.0.0,submodule ``ext/fmt``,
--,tinyopt,,source copy ``ext/tinyopt``,
-ARB_WITH_PYTHON,pybind11,,submodule ``ext/pybind11``,
-ARB_WITH_PYTHON,Python,3.7,Python compatiblity is the range between the latest officially released point version and the minimum here specified.,"* it is not more advanced than the version specified by NEP 29.
+ARB_WITH_PYTHON,pybind11,2.10.1,submodule ``ext/pybind11``,
+ARB_WITH_PYTHON,Python,3.8,Python compatiblity is the range between the latest officially released point version and the minimum here specified.,"* it is not more advanced than the version specified by NEP 29.
* it is available as a cray-python version on Piz Daint
* it is available on labs.ebrains.eu
diff --git a/doc/dev/cable_cell.rst b/doc/dev/cable_cell.rst
index 84b397ad4a..ff70c545d5 100644
--- a/doc/dev/cable_cell.rst
+++ b/doc/dev/cable_cell.rst
@@ -21,7 +21,7 @@ In Arbor's codebase some prefixes are used as a low-key namespacing
- ``fvm_``:: Concerning use by the Finite Volume Method (FVM), eg
``fvm_lowered_cell``.
- ``mc_``:: Related to Multi-Compartment (Cells), identical to cable cells the
- difference is purely historical, eg ``mc_cell_group``.
+ difference is purely historical, eg ``cable_cell_group``.
Setting up a Cable Cell simulation
----------------------------------
@@ -71,7 +71,7 @@ Lowered Cells, Shared State, and the Discretisation
To obtain a simulation we need to turn the ``cable_cell`` description object
into a ``fvm_lowered_cell``. However, multiple cells are collected into a
-``mc_cell_group`` and ``fvm_lowered_cell`` is the lowered representation of a
+``cable_cell_group`` and ``fvm_lowered_cell`` is the lowered representation of a
full cell group. The ``fvm_lowered_cell`` is responsible for holding the
backend-specific data of a cell group, managing sampling and stimuli, facilitate
event processing, and driving time integration.
diff --git a/doc/dev/cell_groups.rst b/doc/dev/cell_groups.rst
index abcdc61b71..8b29a02c6a 100644
--- a/doc/dev/cell_groups.rst
+++ b/doc/dev/cell_groups.rst
@@ -6,7 +6,7 @@ Cell groups
Cell groups represent a union of cells of a single *kind* simulated in lockstep.
In a sense, their existence is an optimisation, since parts of the internal
state and computations can be shared between cell in single group. The currently
-most complicated cell group is the one for cable cells, called ``mc_cell_group``
+most complicated cell group is the one for cable cells, called ``cable_cell_group``
(``mc`` stands for multi-compartment, used in older parts of Arbor), so we will
focus on this type here.
@@ -14,7 +14,7 @@ Cell groups are created by domain decomposition methods on consideration of soft
(like performance optimisation) and hard (cells connected by gap junctions must
be in the same group) constraints.
-Cable Cell group ``mc_cell_group``
+Cable Cell group ``cable_cell_group``
----------------------------------
Cable cell groups have backing store in ``shared_state`` (given the
diff --git a/doc/index.rst b/doc/index.rst
index 1e054f8e1d..be701d974e 100644
--- a/doc/index.rst
+++ b/doc/index.rst
@@ -54,6 +54,9 @@ The Arbor software can be cited by version via Zenodo or via Arbors introductory
Latest version
|zlatest|
+Version 0.9.0
+ |z090|
+
Version 0.8.1
|z081|
@@ -92,6 +95,9 @@ Cite (Bibtex format)
.. |zlatest| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.1459678.svg
:target: https://doi.org/10.5281/zenodo.1459678
+.. |z090| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.8233847.svg
+ :target: https://doi.org/10.5281/zenodo.8233847
+
.. |z081| image:: https://zenodo.org/badge/DOI/10.5281/zenodo.7473671.svg
:target: https://doi.org/10.5281/zenodo.7473671
diff --git a/doc/scripts/divio_docs_theme/layout.html b/doc/scripts/divio_docs_theme/layout.html
index 056f8c71fd..a51218d5f3 100755
--- a/doc/scripts/divio_docs_theme/layout.html
+++ b/doc/scripts/divio_docs_theme/layout.html
@@ -21,7 +21,7 @@
{# FAVICON #}
{% if favicon %}
-
+
{% endif %}
{# CANONICAL URL #}
{% if theme_canonical_url %}
@@ -125,7 +125,7 @@