unitforge/quantities/
inverse_distance.rs1use crate::impl_macros::macros::*;
2use crate::prelude::*;
3use crate::quantities::*;
4use ndarray::{Array1, Array2, ArrayView1, ArrayView2};
5use num_traits::identities::Zero;
6use num_traits::{Float, FromPrimitive};
7#[cfg(feature = "pyo3")]
8use pyo3::pyclass;
9#[cfg(feature = "serde")]
10use serde::{Deserialize, Serialize};
11use std::cmp::Ordering;
12use std::fmt;
13use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign};
14#[cfg(feature = "strum")]
15use strum_macros::EnumIter;
16
17#[cfg_attr(feature = "strum", derive(EnumIter))]
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19#[derive(Copy, Clone, PartialEq, Debug)]
20#[cfg_attr(feature = "pyo3", pyclass(eq, eq_int))]
21pub enum InverseDistanceUnit {
22 _km,
23 _m,
24 _dm,
25 _cm,
26 _mm,
27 _um,
28 _nm,
29 _mi,
30 _yd,
31 _ft,
32 _inch,
33}
34
35impl PhysicsUnit for InverseDistanceUnit {
36 fn name(&self) -> &str {
37 match &self {
38 InverseDistanceUnit::_km => "1/km",
39 InverseDistanceUnit::_m => "1/m",
40 InverseDistanceUnit::_dm => "1/dm",
41 InverseDistanceUnit::_cm => "1/cm",
42 InverseDistanceUnit::_mm => "1/mm",
43 InverseDistanceUnit::_um => "1/μm",
44 InverseDistanceUnit::_nm => "1/nm",
45 InverseDistanceUnit::_mi => "1/mi",
46 InverseDistanceUnit::_yd => "1/yd",
47 InverseDistanceUnit::_ft => "1/ft",
48 InverseDistanceUnit::_inch => "1/in",
49 }
50 }
51
52 fn base_per_x(&self) -> (f64, i32) {
53 match self {
54 InverseDistanceUnit::_km => (1., -3),
55 InverseDistanceUnit::_m => (1., 0),
56 InverseDistanceUnit::_dm => (1., 1),
57 InverseDistanceUnit::_cm => (1., 2),
58 InverseDistanceUnit::_mm => (1., 3),
59 InverseDistanceUnit::_um => (1., 6),
60 InverseDistanceUnit::_nm => (1., 9),
61 InverseDistanceUnit::_mi => (0.62137, -3),
62 InverseDistanceUnit::_yd => (0.10936, 1),
63 InverseDistanceUnit::_ft => (0.32808, 1),
64 InverseDistanceUnit::_inch => (0.393700787, 2),
65 }
66 }
67}
68
69impl_quantity!(
70 InverseDistance,
71 InverseDistanceUnit,
72 [InverseDistanceUnit::_mm]
73);
74impl_div_with_self_to_f64!(InverseDistance);
75
76impl_mul!(InverseDistance, Distance, f64);