Skip to main content

sc_neurocore_engine/
pyo3_neurons.rs

1// SPDX-License-Identifier: AGPL-3.0-or-later
2// Commercial license available
3// © Concepts 1996–2026 Miroslav Šotek. All rights reserved.
4// © Code 2020–2026 Miroslav Šotek. All rights reserved.
5// ORCID: 0009-0009-3560-0851
6// Contact: www.anulum.li | protoscience@anulum.li
7// SC-NeuroCore — PyO3 wrappers for all neuron models
8
9//! PyO3 wrappers and compatibility exports for all neuron models.
10
11use pyo3::prelude::*;
12
13#[macro_use]
14#[path = "bindings/default_neuron.rs"]
15mod default_neuron_binding;
16
17#[path = "bindings/adex_neuron.rs"]
18mod adex_neuron_binding;
19#[path = "bindings/alpha.rs"]
20mod alpha_binding;
21#[path = "bindings/ermentrout_kopell_pop.rs"]
22mod ermentrout_kopell_pop_binding;
23#[path = "bindings/jansen_rit.rs"]
24mod jansen_rit_binding;
25#[path = "bindings/lapicque_neuron.rs"]
26mod lapicque_neuron_binding;
27#[path = "bindings/mcculloch_pitts.rs"]
28mod mcculloch_pitts_binding;
29#[path = "bindings/sigmoid_rate.rs"]
30mod sigmoid_rate_binding;
31#[path = "bindings/threshold_linear_rate.rs"]
32mod threshold_linear_rate_binding;
33#[path = "bindings/wong_wang.rs"]
34mod wong_wang_binding;
35
36#[path = "bindings/biophysical/mod.rs"]
37mod biophysical_bindings;
38#[path = "bindings/hardware/mod.rs"]
39mod hardware_bindings;
40#[path = "bindings/learning/mod.rs"]
41mod learning_bindings;
42#[path = "bindings/maps/mod.rs"]
43mod map_bindings;
44#[path = "bindings/multi_compartment/mod.rs"]
45mod multi_compartment_bindings;
46#[path = "bindings/simple_spiking/mod.rs"]
47mod simple_spiking_bindings;
48#[path = "bindings/stochastic/mod.rs"]
49mod stochastic_bindings;
50#[path = "bindings/trivial/mod.rs"]
51mod trivial_bindings;
52
53#[path = "bindings/adaptive_threshold_moe_neuron.rs"]
54mod adaptive_threshold_moe_neuron_binding;
55#[path = "bindings/arcane_neuron.rs"]
56mod arcane_neuron_binding;
57#[path = "bindings/attention_gated_neuron.rs"]
58mod attention_gated_neuron_binding;
59#[path = "bindings/cerebellar/mod.rs"]
60mod cerebellar_bindings;
61#[path = "bindings/channels/mod.rs"]
62mod channel_bindings;
63#[path = "bindings/compositional_binding_neuron.rs"]
64mod compositional_binding_neuron_binding;
65#[path = "bindings/continuous_attractor_neuron.rs"]
66mod continuous_attractor_neuron_binding;
67#[path = "bindings/differentiable_surrogate_neuron.rs"]
68mod differentiable_surrogate_neuron_binding;
69#[path = "bindings/hybrid_linear_attention_neuron.rs"]
70mod hybrid_linear_attention_neuron_binding;
71#[path = "bindings/interneurons/mod.rs"]
72mod interneuron_bindings;
73#[path = "bindings/meta_plastic_neuron.rs"]
74mod meta_plastic_neuron_binding;
75#[path = "bindings/misc/mod.rs"]
76mod misc_bindings;
77#[path = "bindings/motor/mod.rs"]
78mod motor_bindings;
79#[path = "bindings/multi_timescale_neuron.rs"]
80mod multi_timescale_neuron_binding;
81#[path = "bindings/population/mod.rs"]
82mod population_bindings;
83#[path = "bindings/predictive_coding_neuron.rs"]
84mod predictive_coding_neuron_binding;
85#[path = "bindings/quantum_inspired_lif_neuron.rs"]
86mod quantum_inspired_lif_neuron_binding;
87#[path = "bindings/rate/mod.rs"]
88mod rate_bindings;
89#[path = "bindings/self_referential_neuron.rs"]
90mod self_referential_neuron_binding;
91#[path = "bindings/sensory/mod.rs"]
92mod sensory_bindings;
93#[path = "bindings/synapses/mod.rs"]
94mod synapse_bindings;
95
96pub use biophysical_bindings::*;
97pub use cerebellar_bindings::*;
98pub use channel_bindings::*;
99pub use hardware_bindings::*;
100pub use interneuron_bindings::*;
101pub use learning_bindings::*;
102pub use map_bindings::*;
103pub use misc_bindings::*;
104pub use motor_bindings::*;
105pub use multi_compartment_bindings::*;
106pub use population_bindings::*;
107pub use rate_bindings::*;
108pub use sensory_bindings::*;
109pub use simple_spiking_bindings::*;
110pub use stochastic_bindings::*;
111pub use synapse_bindings::*;
112pub use trivial_bindings::*;
113
114pub use adaptive_threshold_moe_neuron_binding::PyAdaptiveThresholdMoENeuron;
115pub use adex_neuron_binding::PyAdExNeuron;
116pub use alpha_binding::PyAlphaNeuron;
117pub use arcane_neuron_binding::PyArcaneNeuron;
118pub use attention_gated_neuron_binding::PyAttentionGatedNeuron;
119pub use compositional_binding_neuron_binding::PyCompositionalBindingNeuron;
120pub use continuous_attractor_neuron_binding::PyContinuousAttractorNeuron;
121pub use differentiable_surrogate_neuron_binding::PyDifferentiableSurrogateNeuron;
122pub use ermentrout_kopell_pop_binding::PyErmentroutKopellPopulation;
123pub use hybrid_linear_attention_neuron_binding::PyHybridLinearAttentionNeuron;
124pub use jansen_rit_binding::PyJansenRitUnit;
125pub use lapicque_neuron_binding::PyLapicqueNeuron;
126pub use mcculloch_pitts_binding::PyMcCullochPittsNeuron;
127pub use meta_plastic_neuron_binding::PyMetaPlasticNeuron;
128pub use multi_timescale_neuron_binding::PyMultiTimescaleNeuron;
129pub use predictive_coding_neuron_binding::PyPredictiveCodingNeuron;
130pub use quantum_inspired_lif_neuron_binding::PyQuantumInspiredLIFNeuron;
131pub use self_referential_neuron_binding::PySelfReferentialNeuron;
132pub use sigmoid_rate_binding::PySigmoidRateNeuron;
133pub use threshold_linear_rate_binding::PyThresholdLinearRateNeuron;
134
135// ═══════════════════════════════════════════════════════════════════
136// Registration function — call from lib.rs pymodule init
137// ═══════════════════════════════════════════════════════════════════
138
139pub fn register_neuron_classes(m: &Bound<'_, PyModule>) -> PyResult<()> {
140    // ai_optimized
141    multi_timescale_neuron_binding::register(m)?;
142    attention_gated_neuron_binding::register(m)?;
143    predictive_coding_neuron_binding::register(m)?;
144    self_referential_neuron_binding::register(m)?;
145    compositional_binding_neuron_binding::register(m)?;
146    differentiable_surrogate_neuron_binding::register(m)?;
147    continuous_attractor_neuron_binding::register(m)?;
148    meta_plastic_neuron_binding::register(m)?;
149    // gap models (ai_optimized)
150    adaptive_threshold_moe_neuron_binding::register(m)?;
151    hybrid_linear_attention_neuron_binding::register(m)?;
152    quantum_inspired_lif_neuron_binding::register(m)?;
153    trivial_bindings::register(m)?;
154    simple_spiking_bindings::register_primary(m)?;
155    stochastic_bindings::register_adaptation(m)?;
156    population_bindings::register_brunel_wang(m)?;
157    alpha_binding::register(m)?;
158    simple_spiking_bindings::register_conductance_models(m)?;
159    learning_bindings::register(m)?;
160    simple_spiking_bindings::register_tail(m)?;
161    map_bindings::register(m)?;
162    biophysical_bindings::register(m)?;
163    multi_compartment_bindings::register(m)?;
164    stochastic_bindings::register(m)?;
165    population_bindings::register_wilson_cowan_unit(m)?;
166    jansen_rit_binding::register(m)?;
167    population_bindings::register_wong_wang_unit(m)?;
168    wong_wang_binding::register(m)?;
169    ermentrout_kopell_pop_binding::register(m)?;
170    population_bindings::register_neural_mass_tail(m)?;
171    hardware_bindings::register(m)?;
172    // rate
173    mcculloch_pitts_binding::register(m)?;
174    sigmoid_rate_binding::register(m)?;
175    threshold_linear_rate_binding::register(m)?;
176    rate_bindings::register(m)?;
177    arcane_neuron_binding::register(m)?;
178    // neuron.rs (legacy)
179    adex_neuron_binding::register(m)?;
180    crate::exp_if_binding::register_legacy_alias(m)?;
181    lapicque_neuron_binding::register(m)?;
182    interneuron_bindings::register(m)?;
183    motor_bindings::register(m)?;
184    sensory_bindings::register(m)?;
185    cerebellar_bindings::register(m)?;
186    channel_bindings::register(m)?;
187    population_bindings::register(m)?;
188    misc_bindings::register(m)?;
189    synapse_bindings::register(m)?;
190    Ok(())
191}