sc_neurocore_engine/bindings/
ibarz_tanaka_map.rs1use numpy::{IntoPyArray, PyArray1};
12use pyo3::exceptions::PyFloatingPointError;
13use pyo3::prelude::*;
14use pyo3::types::PyDict;
15
16use crate::neurons::IbarzTanakaMapNeuron;
17
18py_neuron_default!("IbarzTanakaMapNeuron", PyIbarzTanakaMapNeuron, IbarzTanakaMapNeuron, state v, state u);
19
20pub(super) fn register(module: &Bound<'_, PyModule>) -> PyResult<()> {
22 module.add_class::<PyIbarzTanakaMapNeuron>()?;
23 module.add_function(wrap_pyfunction!(py_ibarz_tanaka_map_simulate, module)?)?;
24 Ok(())
25}
26
27#[pyfunction]
34#[pyo3(signature = (v0, u0, alpha, mu, sigma, n_steps, current))]
35fn py_ibarz_tanaka_map_simulate<'py>(
36 py: Python<'py>,
37 v0: f64,
38 u0: f64,
39 alpha: f64,
40 mu: f64,
41 sigma: f64,
42 n_steps: usize,
43 current: f64,
44) -> PyResult<(Bound<'py, PyArray1<f64>>, i64, f64, f64)> {
45 let mut neuron = IbarzTanakaMapNeuron {
46 v: v0,
47 u: u0,
48 alpha,
49 mu,
50 sigma,
51 };
52 let (trace, events) = neuron
53 .simulate(n_steps, current)
54 .map_err(PyFloatingPointError::new_err)?;
55 Ok((trace.into_pyarray(py), events, neuron.v, neuron.u))
56}