Skip to main content

nyx_space/od/position/
python.rs

1use crate::od::msr::MeasurementType;
2use crate::od::noise::StochasticNoise;
3use anise::prelude::Frame;
4use indexmap::IndexMap;
5use pyo3::prelude::*;
6
7use super::PositionDevice;
8
9#[cfg(feature = "python")]
10#[pymethods]
11impl PositionDevice {
12    /// Create a new Position Tracking Device.
13    ///
14    /// :type name: str
15    /// :type frame: Frame
16    #[new]
17    fn py_new(name: String, frame: Frame) -> Self {
18        Self::new(name, frame)
19    }
20
21    /// Add a measurement type with stochastic noise.
22    ///
23    /// :type msr_type: MeasurementType
24    /// :type noise: StochasticNoise
25    /// :rtype: PositionDevice
26    #[pyo3(name = "with_noise")]
27    pub fn py_with_noise(
28        mut slf: PyRefMut<'_, Self>,
29        msr_type: MeasurementType,
30        noise: StochasticNoise,
31    ) -> PyResult<PyRefMut<'_, Self>> {
32        if slf.stochastic_noises.is_none() {
33            slf.stochastic_noises = Some(IndexMap::new());
34        }
35        slf.stochastic_noises
36            .as_mut()
37            .unwrap()
38            .insert(msr_type, noise);
39        slf.measurement_types.insert(msr_type);
40        Ok(slf)
41    }
42
43    #[getter]
44    pub fn get_name(&self) -> String {
45        self.name.clone()
46    }
47
48    #[setter]
49    pub fn set_name(&mut self, name: String) {
50        self.name = name;
51    }
52
53    #[getter]
54    pub fn get_frame(&self) -> Frame {
55        self.frame
56    }
57
58    #[setter]
59    pub fn set_frame(&mut self, frame: Frame) {
60        self.frame = frame;
61    }
62
63    fn __str__(&self) -> String {
64        format!("{self}")
65    }
66
67    fn __repr__(&self) -> String {
68        format!("{self:?} @ {self:p}")
69    }
70
71    fn __eq__(&self, other: &Self) -> bool {
72        self == other
73    }
74}