nyx_space/od/position/
python.rs1use 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 #[new]
17 fn py_new(name: String, frame: Frame) -> Self {
18 Self::new(name, frame)
19 }
20
21 #[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}