sc_neurocore_engine/bindings/
adc_to_spike.rs1use numpy::{IntoPyArray, PyReadonlyArray1};
12use pyo3::exceptions::PyValueError;
13use pyo3::prelude::*;
14use pyo3::types::PyDict;
15
16use crate::adc_to_spike;
17
18pub(crate) fn register(module: &Bound<'_, PyModule>) -> PyResult<()> {
20 module.add_function(wrap_pyfunction!(py_adc_to_spike_windows, module)?)?;
21 Ok(())
22}
23
24#[pyfunction]
34#[pyo3(signature = (
35 samples, adc_width, q_int, q_frac, decimation, signed_input, threshold_q,
36))]
37#[allow(clippy::too_many_arguments)]
38fn py_adc_to_spike_windows<'py>(
39 py: Python<'py>,
40 samples: PyReadonlyArray1<'py, i64>,
41 adc_width: u32,
42 q_int: u32,
43 q_frac: u32,
44 decimation: u32,
45 signed_input: i64,
46 threshold_q: i64,
47) -> PyResult<Py<PyAny>> {
48 let result = adc_to_spike::adc_to_spike_windows(
49 samples.as_slice()?,
50 adc_width,
51 q_int,
52 q_frac,
53 decimation,
54 signed_input != 0,
55 threshold_q,
56 )
57 .map_err(|e| PyValueError::new_err(e.to_string()))?;
58 let d = PyDict::new(py);
59 d.set_item("window_values_q", result.window_values_q.into_pyarray(py))?;
60 d.set_item("spike_counts", result.spike_counts.into_pyarray(py))?;
61 d.set_item("polarities", result.polarities.into_pyarray(py))?;
62 Ok(d.into_any().unbind())
63}