sc_neurocore_engine/bindings/
rulkov_map.rs1use numpy::{IntoPyArray, PyArray1};
12use pyo3::prelude::*;
13use pyo3::types::PyDict;
14
15use crate::neurons::RulkovMapNeuron;
16
17py_neuron_default!("RulkovMapNeuron", PyRulkovMapNeuron, RulkovMapNeuron, state x, state y);
18
19pub(super) fn register(module: &Bound<'_, PyModule>) -> PyResult<()> {
21 module.add_class::<PyRulkovMapNeuron>()?;
22 module.add_function(wrap_pyfunction!(py_rulkov_map_simulate, module)?)?;
23 Ok(())
24}
25
26#[pyfunction]
32#[pyo3(signature = (x0, y0, alpha, sigma, mu, x_threshold, n_steps, current))]
33#[allow(clippy::too_many_arguments)]
34fn py_rulkov_map_simulate<'py>(
35 py: Python<'py>,
36 x0: f64,
37 y0: f64,
38 alpha: f64,
39 sigma: f64,
40 mu: f64,
41 x_threshold: f64,
42 n_steps: usize,
43 current: f64,
44) -> (Bound<'py, PyArray1<f64>>, i64, f64, f64) {
45 let mut neuron = RulkovMapNeuron {
46 x: x0,
47 y: y0,
48 alpha,
49 sigma,
50 mu,
51 x_threshold,
52 };
53 let (trace, spikes) = neuron.simulate(n_steps, current);
54 (trace.into_pyarray(py), spikes, neuron.x, neuron.y)
55}