Neuron Model Reference

July 18, 2026 · View on GitHub

SC-NeuroCore currently exposes 158 lazy-loaded Python model classes across 153 Python model source modules in src/sc_neurocore/neurons/models/, plus 175 Rust PyO3 model wrappers in the optional engine. Matching model classes use the same step() / reset() / get_state() interface shape where the backend implements that surface.

Fidelity status: every model here has a faithful, tested Python reference. A stricter bar — a model whose whole four-language acceleration chain (accel/{rust,go,julia,mojo}) is real and Python-parity-proven — is tracked separately on the Model Fidelity & Polyglot Status page. Polyglot-complete today (40 models): Wang-Buzsaki, FitzHugh-Nagumo, Morris-Lecar, Connor-Stevens, Hodgkin-Huxley, AdEx, ExpIF, Lapicque, Perfect Integrator, Quadratic IF, Theta, DPI, COBA LIF, Escape Rate, Poisson, IQIF, McCulloch-Pitts, McKean, Hindmarsh-Rose, FitzHugh-Rinzel, Pernarowski, Terman-Wang, Wilson-HR, Rulkov map, GLIF, Mihalas-Niebur, Medvedev map, Cazelles map, Chialvo map, Courbage-Nekorkin map, Izhikevich 2007, Ibarz-Tanaka map, Ermentrout-Kopell, Sigmoid Rate, Threshold Linear Rate, Wilson-Cowan, Wong-Wang, Jansen-Rit, Montbrió-Pazó-Roxin (ErmentroutKopellPopulation), and Resonate-and-Fire. All other models are Python-faithful with their acceleration chain still under remediation.

Quick Start

# Python backend (default)
from sc_neurocore.neurons.models import HodgkinHuxleyNeuron
hh = HodgkinHuxleyNeuron()
spike = hh.step(current=10.0)

# Rust backend (faster, identical interface)
from sc_neurocore_engine.sc_neurocore_engine import HodgkinHuxleyNeuron
hh_rs = HodgkinHuxleyNeuron()
spike = hh_rs.step(current=10.0)

Backend Selection

BackendImport pathUse case
Pythonsc_neurocore.neurons.modelsPrototyping, parameter tuning, debugging
Rustsc_neurocore_engine.sc_neurocore_engineProduction, benchmarks, batch simulation

Backends use identical class names where parity wrappers exist (for example, HodgkinHuxleyNeuron). The Rust engine provides 175 Rust PyO3 model wrappers, 162 of which are wired into the NetworkRunner pipeline.

The package-level sc_neurocore.neurons facade remains lazy: core neuron symbols are available immediately, while model classes are resolved on first attribute access. Setting SC_NEUROCORE_NO_RUST=1 forces the pure-Python model registry even when the optional Rust engine is installed, and the fallback path caches the resolved Python class for later imports.

Rust Binding Coverage Map

tests/test_rust_python_neuron_parity.py is the live coverage map for the Python registry exposed by sc_neurocore.neurons.models.__all__. The generated capability inventory above counts 158 static classes in src/sc_neurocore/neurons/models/*.py; the registry-level map covers 160 public Python registry names because HybridFisherPosnerLIFNeuron and StochasticLIFNeuron are re-exported (from sc_neurocore.quantum_cognition.fisher_posner for population dispatch and sc_neurocore.neurons.stochastic_lif for the torch-free public root import, respectively) rather than defined as static classes under neurons/models/.

Current binding disposition:

The current registry map records 146 same-name Rust constructors, 9 Rust-prefixed or core-only constructors, and 5 Python-only registry names.

DispositionCountContract
Same-name Rust constructors146Python registry name matches the compiled sc_neurocore_engine.sc_neurocore_engine class name.
Rust-prefixed or core-only constructors9A Rust binding exists, but the generic scalar parity harness uses an explicit name map.
Python-only registry names5No same-name PyO3 neuron constructor is claimed; each entry below records the durable boundary.

Rust-prefixed or core-only constructor map:

Python registry nameRust constructor
AdaptiveThresholdMoENeuronRustAdaptiveThresholdMoENeuron
AstrocyteLIFNeuronRustAstrocyteLIFNeuron
CochlearHairCellRustCochlearHairCell
ContinuousAttractorNeuronRustContinuousAttractorNeuron
DendriticNMDANeuronRustDendriticNMDANeuron
DirectionSelectiveRGCRustDirectionSelectiveRGC
HybridLinearAttentionNeuronRustHybridLinearAttentionNeuron
MulticompartmentMCNNeuronRustMulticompartmentMCNNeuron
QuantumInspiredLIFNeuronRustQuantumInspiredLIFNeuron

Python-only boundary rationale:

Python registry nameBoundary
AstrocyteNeuronPopulation adapter over AstrocyteModel; the Rust engine already exposes AstrocyteModel and RustAstrocyteLIFNeuron, but this adapter threshold-converts cytosolic Ca²⁺ release into the population spike interface.
ChayKeizerMinimalNeuronThe reduced three-state pancreatic beta-cell model is a separate published reduction from the existing five-state Chay-Keizer Rust kernel and needs its own parameter-faithful implementation before a PyO3 constructor is claimed.
HybridFisherPosnerLIFNeuronThe population-compatible entry depends on the Python SpinPoolMPS quantum-metabolic state and shared-pool measurement side effects, so a same-name Rust constructor would overclaim parity until that state model is ported.
Izhikevich2007NeuronThis model already has a function-level compiled accelerator for the RK4 simulate() path (py_izhikevich2007_simulate), but no stateful PyO3 neuron constructor is claimed for the full Python object.
SRM0NeuronThe maintained Python model is an exact-flow SRM0 membrane accumulator; it is not equivalent to the older Rust SpikeResponseNeuron kernel, so the registry name stays Python-only until a faithful Rust SRM0 kernel lands.

The parity test checks this map against the Python registry, committed Rust PyO3 source declarations, and the built Rust engine when the optional engine is installed. Stochastic models without a shared RNG remain binding-covered but outside exact spike-train parity. EscapeRateNeuron and PoissonNeuron are the enrolled exceptions: their Python, Rust, Julia, Go, Mojo, schema, and RTL surfaces share one explicit seeded LFSR16 event-stream contract. IntegerQIFNeuron is the deterministic integer counterpart: every maintained runtime and Q32.0 RTL form reproduces the pinned Wu et al. source trajectory bit-for-bit. McCullochPittsNeuron preserves the original 1943 logical rule: a fixed positive active-excitatory-afferent count threshold, absolute veto by any active inhibitory afferent, and no internal cell state; signed Q32.0 uses -1 only as the hardware inhibition sentinel. ChayKeizerNeuron remains an expected parity divergence because the Python model is the five-dimensional Chay-Keizer burster while the current Rust kernel is the older reduced form.

Reference Trace Validation

The schema-driven validation harness in sc_neurocore.neurons.reference_traces loads committed JSON corpus entries, executes the UniversalNeuron runner, and compares scalar trace features with explicit per-feature tolerances. The corpus contains analytic, independently integrated, and map-iteration references tied to each entry's stated source. For example, the Ermentrout-Kopell hand-class enrolment independently advances the sourced theta flow with the maintained Euler, event, and circular-wrap conventions over 2,000 steps. A corpus entry is model-specific evidence, not a claim that every class below has external simulator parity. The Wong-Wang enrolment separately re-derives all four Euler/Ornstein-Uhlenbeck states and both pre-update rates from the 2006 Appendix and pins the paper-versus-author-code timestep discrepancy. The Jansen–Rit enrolment independently advances all six equation-(6) states, pins the published C1/C2/C3/C4 connectivity placement and Brian2 source commit, and records that the maintained 0.1 ms Euler step is implementation scope rather than a solver prescribed by the continuous paper equations. The ErmentroutKopellPopulation enrolment corrects that legacy public name to Montbrió, Pazó, and Roxin (2015), restores the printed dimensionless equation-(12) variables through R=tau*r and t'=t/tau, independently advances both states, and records that simultaneous explicit Euler is maintained implementation scope rather than a solver prescribed by the continuous paper. The ResonateAndFireNeuron enrolment independently evaluates the exact constant-input flow of Izhikevich's (2001) complex resonator, preserves x as current-like and y as voltage-like, thresholds only an upward sampled crossing of y, and checks the generalised source reset z=i*threshold rather than a radius test or origin reset.

Model Catalogue

The descriptor corpus lives under src/sc_neurocore/neurons/model_descriptors/<ClassName>.toml. Public catalogue helpers accept only public Python class identifiers such as AdExNeuron; dotted, empty, private, and path-like names fail before filesystem access. Studio uses the same load_descriptor() surface when it renders model detail pages, so the descriptor guard protects the browser-facing catalogue and maintenance tools.

tools/generate_model_descriptors.py refreshes the corpus through generate_descriptor_payload() and merge_descriptor_payloads(). The generator uses the same public-class-name boundary as the catalogue: invalid identifiers fail before registry lookup, while valid but unregistered names remain registry misses. Missing legacy v1 schemas are allowed so new models can receive honest empty curation fields, but malformed curated schemas abort the refresh instead of being silently discarded.

The v2 descriptor parser accepts both compact legacy scalar forms and expanded tables, then normalises them into ModelDescriptor, ParameterSpec, StateVariableSpec, BackendSupport, and reproducibility records. It rejects missing metadata, non-table sections, scalar tag fields, non-numeric values, malformed ranges, invalid provenance years, and invalid digest formats before a descriptor reaches the catalogue or Studio browser surface.

Tier-3 golden traces remain exact-hash contracts. When a scalar transcendental has two measured NumPy SIMD results on heterogeneous x86 hosts, the descriptor's [reproducibility] table may add golden_trace_sha256_variants; the typed parser requires every entry to be a unique, non-primary, lowercase SHA-256. The reproducibility gate accepts only that finite allowlist, reruns variant-bearing models with AVX-512 disabled, and requires the native and portable traces to stay within the same 1e-9 bound used for ULP-bounded backend parity. This records platform-level rounding honestly without turning the golden gate into a broad approximate comparison. Studio model-detail responses expose the typed variant list so clients can verify either measured platform trace without parsing the raw TOML descriptor.

Trivial IF Variants (18 models)

Python ClassRust ClassReference
QuadraticIFNeuronQuadraticIFNeuronLatham et al. 2000
ThetaNeuronThetaNeuronErmentrout & Kopell 1986
PerfectIntegratorNeuronPerfectIntegratorNeuron
GatedLIFNeuronGatedLIFNeuron
NonlinearLIFNeuronNonlinearLIFNeuronTouboul & Brette 2008
SFANeuronSFANeuronBenda & Herz 2003
MATNeuronMATNeuronKobayashi et al. 2009
EscapeRateNeuronEscapeRateNeuronGerstner 2000
KLIFNeuronKLIFNeuronEshraghian et al. 2021
InhibitoryLIFNeuronInhibitoryLIFNeuron
ComplementaryLIFNeuronComplementaryLIFNeuron
ParametricLIFNeuronParametricLIFNeuronFang et al. 2021
NonResettingLIFNeuronNonResettingLIFNeuronBrette 2004
AdaptiveThresholdIFNeuronAdaptiveThresholdIFNeuronPlatkiewicz & Brette 2010
SigmaDeltaNeuronSigmaDeltaNeuron
EnergyLIFNeuronEnergyLIFNeuronSengupta et al. 2013
IntegerQIFNeuronIntegerQIFNeuronWu et al. 2021, DOI 10.1109/AICAS51828.2021.9458572
ClosedFormContinuousNeuronClosedFormContinuousNeuronHasani et al. 2022

Simple Spiking (21 models)

Python ClassRust ClassReference
FitzHughNagumoNeuronFitzHughNagumoNeuronFitzHugh 1961
MorrisLecarNeuronMorrisLecarNeuronMorris & Lecar 1981
HindmarshRoseNeuronHindmarshRoseNeuronHindmarsh & Rose 1984
ResonateAndFireNeuronResonateAndFireNeuronIzhikevich 2001
BalancedResonateAndFireNeuronBalancedResonateAndFireNeuronHiguchi et al. 2024
FitzHughRinzelNeuronFitzHughRinzelNeuronRinzel 1987
McKeanNeuronMcKeanNeuronMcKean 1970
TermanWangOscillatorTermanWangOscillatorTerman & Wang 1995
BendaHerzNeuronBendaHerzNeuronBenda & Herz 2003
AlphaNeuronAlphaNeuron
COBALIFNeuronCOBALIFNeuronBrette et al. 2007
GutkinErmentroutNeuronGutkinErmentroutNeuronGutkin & Ermentrout 1998
WilsonHRNeuronWilsonHRNeuronWilson 1999
ChayNeuronChayNeuronChay 1985
ChayKeizerNeuronChayKeizerNeuronChay & Keizer 1983
ShermanRinzelKeizerNeuronShermanRinzelKeizerNeuronSherman et al. 1988
ButeraRespiratoryNeuronButeraRespiratoryNeuronButera et al. 1999
EPropALIFNeuronEPropALIFNeuronBellec et al. 2020
SuperSpikeNeuronSuperSpikeNeuronZenke & Ganguli 2018
LearnableNeuronModelLearnableNeuronModel
PernarowskiNeuronPernarowskiNeuronPernarowski 1994

Discrete Maps (7 models)

Python ClassRust ClassReference
ChialvoMapNeuronChialvoMapNeuronChialvo 1995
RulkovMapNeuronRulkovMapNeuronRulkov 2001
IbarzTanakaMapNeuronIbarzTanakaMapNeuronIbarz, Tanaka, Sanjuan & Aihara 2007, Eqs. 2–3
MedvedevMapNeuronMedvedevMapNeuronMedvedev 2005 slow-calcium first-return reduction
CazellesMapNeuronCazellesMapNeuronCazelles et al. 2001
CourageNekorkinMapNeuronCourageNekorkinMapNeuronCourbage, Nekorkin & Vdovin 2007
ErmentroutKopellMapNeuronErmentroutKopellMapNeuronErmentrout & Kopell 1986 (maintained Euler map)

Biophysical / Conductance-Based (20 models)

Python ClassRust ClassReference
HodgkinHuxleyNeuronHodgkinHuxleyNeuronHodgkin & Huxley 1952
TraubMilesNeuronTraubMilesNeuronTraub & Miles 1991
WangBuzsakiNeuronWangBuzsakiNeuronWang & Buzsáki 1996
ConnorStevensNeuronConnorStevensNeuronConnor et al. 1977
DestexheThalamicNeuronDestexheThalamicNeuronDestexhe et al. 1993
HuberBraunNeuronHuberBraunNeuronBraun et al. 1998
GolombFSNeuronGolombFSNeuronGolomb et al. 2007
PospischilNeuronPospischilNeuronPospischil et al. 2008
MainenSejnowskiNeuronMainenSejnowskiNeuronMainen & Sejnowski 1996
DeSchutterPurkinjeNeuronDeSchutterPurkinjeNeuronDe Schutter & Bower 1994
PlantR15NeuronPlantR15NeuronPlant & Kim 1976
PrescottNeuronPrescottNeuronPrescott et al. 2008
MihalasNieburNeuronMihalasNieburNeuronMihalas & Niebur 2009
GLIFNeuronGLIFNeuronAllen Institute GLIF5
GIFPopulationNeuronGIFPopulationNeuronMensi et al. 2012
AvRonCardiacNeuronAvRonCardiacNeuronAv-Ron et al. 1991
DurstewitzDopamineNeuronDurstewitzDopamineNeuronDurstewitz et al. 2000
HillTononiNeuronHillTononiNeuronHill & Tononi 2005
BertramPhantomBursterBertramPhantomBursterBertram et al. 2000
YamadaNeuronYamadaNeuronYamada et al. 1989

Multi-Compartment (7 models)

Python ClassRust ClassReference
PinskyRinzelNeuronPinskyRinzelNeuronPinsky & Rinzel 1994
HayL5PyramidalNeuronHayL5PyramidalNeuronHay et al. 2011
MarderSTGNeuronMarderSTGNeuronMarder & Calabrese 1996
RallCableNeuronRallCableNeuronRall 1964
BoothRinzelNeuronBoothRinzelNeuronBooth et al. 1997
DendrifyNeuronDendrifyNeuronBeniaguev et al. 2022
TwoCompartmentLIFNeuronTwoCompartmentLIFNeuron

Stochastic / Population / Neural Mass (13 models)

Python ClassRust ClassReference
PoissonNeuronPoissonNeuronGerstner et al. 2014, Sections 7.2 and 7.7
InhomogeneousPoissonNeuronInhomogeneousPoissonNeuron
GammaRenewalNeuronGammaRenewalNeuron
StochasticIFNeuronStochasticIFNeuron
GalvesLocherbachNeuronGalvesLocherbachNeuronGalves & Löcherbach 2013
SpikeResponseNeuronSpikeResponseNeuronGerstner 1995 (SRM0)
GLMNeuronGLMNeuronPillow et al. 2008
WilsonCowanUnitWilsonCowanUnitWilson & Cowan 1972
JansenRitUnitJansenRitUnitJansen & Rit 1995
WongWangUnitWongWangUnitWong & Wang 2006
ErmentroutKopellPopulationErmentroutKopellPopulationMontbrió et al. 2015
WendlingNeuronWendlingNeuronWendling et al. 2002
LarterBreakspearNeuronLarterBreakspearNeuronBreakspear et al. 2003

Hardware Chip Emulators (9 models)

Python ClassRust ClassReference
LoihiCUBANeuronLoihiCUBANeuronDavies et al. 2018 (Intel Loihi)
Loihi2NeuronLoihi2NeuronIntel Loihi 2
TrueNorthNeuronTrueNorthNeuronMerolla et al. 2014 (IBM)
BrainScaleSAdExNeuronBrainScaleSAdExNeuronSchemmel et al. 2010
SpiNNakerLIFNeuronSpiNNakerLIFNeuronFurber et al. 2014
SpiNNaker2NeuronSpiNNaker2NeuronTU Dresden 2024
DPINeuronDPINeuronIndiveri, Stefanini & Chicca 2010
AkidaNeuronAkidaNeuronBrainChip
NeuroGridNeuronNeuroGridNeuronBoahen 2014

Rate / Plasticity / Other (12 models)

Python ClassRust ClassReference
McCullochPittsNeuronMcCullochPittsNeuronMcCulloch & Pitts 1943
SigmoidRateNeuronSigmoidRateNeuronWilson & Cowan 1972
ThresholdLinearRateNeuronThresholdLinearRateNeuron
AstrocyteModelAstrocyteModelLi & Rinzel 1994
TsodyksMarkramNeuronTsodyksMarkramNeuronTsodyks & Markram 1997
LiquidTimeConstantNeuronLiquidTimeConstantNeuronHasani et al. 2021
CompteWMNeuronCompteWMNeuronCompte et al. 2000
SiegertTransferFunctionSiegertTransferFunctionSiegert 1951
FractionalLIFNeuronFractionalLIFNeuronTeka et al. 2014
ParallelSpikingNeuronParallelSpikingNeuronFang et al. 2023
AmariNeuralFieldAmariNeuralFieldAmari 1977
LeakyCompeteFireNeuronLeakyCompeteFireNeuron

Core IF (Rust neuron.rs) (3 models)

Python ClassRust ClassReference
AdExNeuronAdExNeuronBrette & Gerstner 2005
ExpIFNeuronExpIFNeuronFourcaud-Trocmé et al. 2003
LapicqueNeuronLapicqueNeuronLapicque 1907

Common Interface

All models share:

model.step(current)   # → int (spike: 1/0) or float (firing rate)
model.reset()         # → None (restore initial conditions)
model.get_state()     # → dict of current state variables

Multi-input models accept additional arguments:

  • AlphaNeuron.step(exc_current, inh_current)
  • COBALIFNeuron.step(current, delta_ge, delta_gi)
  • PinskyRinzelNeuron.step(current_soma, current_dend)
  • TsodyksMarkramNeuron.step(current, presynaptic_spike)
  • CompteWMNeuron.step(current, spike_in)

Neural mass models return float (firing rate or EEG potential):

  • WilsonCowanUnit, JansenRitUnit, WendlingNeuron
  • ErmentroutKopellPopulation, LarterBreakspearNeuron
  • SigmoidRateNeuron, SiegertTransferFunction

WongWangUnit.step(stim1, stim2) returns the two continuous pre-update rates as (r1, r2). Its deterministic batch additionally accepts interleaved external Gaussian samples and returns six complete traces plus four final states.

JansenRitUnit.step(p_ext) returns the post-update continuous y1-y2 EEG proxy. Its atomic batch accepts one external-drive sample per Euler step and returns all six state traces, the EEG trace, and six final-state receipts.

ErmentroutKopellPopulation.step(ext_input) returns the post-update continuous population firing rate from the Montbrió–Pazó–Roxin exact QIF-network mean field. Its atomic batch returns complete r and v traces plus both final- state receipts; the compatibility name does not denote the 1986 single-cell Ermentrout–Kopell theta equation.

AI-Optimized (9 models)

Novel neuron models designed for AI workloads, not biological simulation. Located in neurons/models/ai_optimized.py and neurons/models/arcane_neuron.py.

Python ClassRust ClassKey Feature
ArcaneNeuronArcaneNeuron5-compartment self-referential cognition: fast (5ms), working memory (200ms), deep context (10s), attention gate, forward self-model. Identity accumulates in the deep compartment. Confidence modulates threshold and meta-learning rate. Sotek & Arcane Sapience 2026.
MultiTimescaleNeuronThree-compartment (fast/medium/slow) with context-dependent threshold modulation
AttentionGatedNeuronLearned sigmoid gate (key/query weights) selectively filters input
PredictiveCodingNeuronFires only on prediction errors (novel stimuli), silent on expected input
SelfReferentialNeuronIntrospects own spike history to auto-regulate firing dynamics
CompositionalBindingNeuronPhase-coding for variable binding; in-phase = bound concepts
DifferentiableSurrogateNeuronTrainable surrogate gradient parameters (alpha, beta, theta)
ContinuousAttractorNeuronRing attractor with Mexican-hat connectivity for continuous working memory
MetaPlasticNeuronSelf-regulating meta-learning rate based on error trace