Skip to content

Update the Arbor backend to support Arbor 0.10.0 – 0.12.2#842

Merged
apdavison merged 6 commits into
NeuralEnsemble:masterfrom
apdavison:update-arbor
Jul 8, 2026
Merged

Update the Arbor backend to support Arbor 0.10.0 – 0.12.2#842
apdavison merged 6 commits into
NeuralEnsemble:masterfrom
apdavison:update-arbor

Conversation

@apdavison

Copy link
Copy Markdown
Member

The Arbor backend previously required Arbor 0.9.0 and no longer worked with current Arbor releases. This PR updates it to work, from a single codebase, with every Arbor version from 0.10.0 (the version currently in the EBRAINS Software Distribution) through 0.12.2, and adds additional tests.

Arbor API changes accommodated:

  • Units are now required at the interface (arbor.units) for properties, stimuli, thresholds, schedules and run/dt; cv_policy_max_extent also gained units in 0.12. (This also fixed a latent Hz-vs-kHz SpikeSourcePoisson bug.)
  • Morphology loaders return a bundle: use load_swc_neuron(...).segment_tree.
  • Discretisation moved from decor onto the cable_cell constructor
  • Probes/spikes: probe locations are emitted as resolved locsets (0.12 no longer resolves label references there), and spike recording uses spike_recording.local — the global callback was broken by the 0.12 MPI rework (arbor-sim/arbor#2511).
  • Naming: iclampi_clamp, and decor.place() dropped the label for current stimuli.

In addition, the catalogue .so is now keyed on arbor.__version__ to avoid stale ABIs.

apdavison added 2 commits July 7, 2026 15:46
Arbor 0.10.0 introduced breaking changes to its Python bindings that
prevented the backend from importing/running. Update the backend and
version pins accordingly:

- Units at the user interface: physical quantities passed to
  decor.set_property/set_ion, threshold_detector, iclamp, the spike
  schedules and simulation.run must now be unit-typed (arbor.units).
- Morphology loaders now return a bundle; use load_swc_neuron(f).segment_tree
  instead of the removed raw=True argument.
- Probes now require a tag string and sampling is addressed by (gid, tag)
  instead of the removed cell_member index.

Also fixes a latent frequency-unit bug in SpikeSourcePoisson: rate (Hz)
was passed into Arbor's kHz frequency slot; it is now tagged with U.Hz,
matching PyNN's Hz semantics and the NEURON/NEST backends.
Differences between these versions are handled in a new pyNN/arbor/_compat.py.
apdavison added 3 commits July 8, 2026 11:05
Arbor >= 0.10 requires the delay argument to arbor.connection to be a
unit-typed quantity rather than a plain float; pass it in ms.
…tantiation

MultiCompartmentNeuron.__init__ replaced the ion-channel and
post-synaptic classes with instances in place, mutating the class-level
dicts that hold them. A second instantiation of the same cell type then
failed with "object is not callable", and setting ion_channels on the
class in one test leaked instances into others.
@coveralls

coveralls commented Jul 8, 2026

Copy link
Copy Markdown

Coverage Status

coverage: 71.713% (+0.6%) from 71.141% — apdavison:update-arbor into NeuralEnsemble:master

# Conflicts:
#	test/system/scenarios/test_cell_types.py
@apdavison apdavison merged commit 9de85b0 into NeuralEnsemble:master Jul 8, 2026
9 checks passed
@apdavison apdavison deleted the update-arbor branch July 8, 2026 14:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants