sc_neurocore_engine/bindings/biophysical/
gif_population.rs1use pyo3::prelude::*;
10use pyo3::types::PyDict;
11
12use crate::neurons;
13
14#[pyclass(
15 name = "GIFPopulationNeuron",
16 module = "sc_neurocore_engine.sc_neurocore_engine"
17)]
18#[derive(Clone)]
19pub struct PyGIFPopulationNeuron {
20 inner: neurons::GIFPopulationNeuron,
21}
22
23#[pymethods]
24impl PyGIFPopulationNeuron {
25 #[new]
26 #[pyo3(signature = (seed=42))]
27 fn new(seed: u64) -> Self {
28 Self {
29 inner: neurons::GIFPopulationNeuron::new(seed),
30 }
31 }
32
33 fn step(&mut self, current: f64) -> i32 {
34 self.inner.step(current)
35 }
36
37 fn reset(&mut self) {
38 self.inner.reset();
39 }
40
41 fn get_state(&self, py: Python<'_>) -> PyResult<Py<PyAny>> {
42 let state = PyDict::new(py);
43 state.set_item("v", self.inner.v)?;
44 state.set_item("theta", self.inner.theta)?;
45 state.set_item("eta", self.inner.eta)?;
46 Ok(state.into_any().unbind())
47 }
48}
49
50pub(super) fn register(module: &Bound<'_, PyModule>) -> PyResult<()> {
52 module.add_class::<PyGIFPopulationNeuron>()?;
53 Ok(())
54}