Skip to main content

sc_neurocore_engine/bindings/stochastic/
glm.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 — Generalised linear model neuron PyO3 binding
8
9use pyo3::prelude::*;
10
11use crate::neurons;
12
13#[pyclass(name = "GLMNeuron", module = "sc_neurocore_engine.sc_neurocore_engine")]
14#[derive(Clone)]
15pub struct PyGLMNeuron {
16    inner: neurons::GLMNeuron,
17}
18
19#[pymethods]
20impl PyGLMNeuron {
21    #[new]
22    #[pyo3(signature = (n_k=10, n_h=20, seed=42))]
23    fn new(n_k: usize, n_h: usize, seed: u64) -> Self {
24        Self {
25            inner: neurons::GLMNeuron::new(n_k, n_h, seed),
26        }
27    }
28
29    fn step(&mut self, stimulus: f64) -> i32 {
30        self.inner.step(stimulus)
31    }
32
33    fn reset(&mut self) {
34        self.inner.reset();
35    }
36}
37
38pub(super) fn register(module: &Bound<'_, PyModule>) -> PyResult<()> {
39    module.add_class::<PyGLMNeuron>()?;
40    Ok(())
41}