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::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
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16#[derive(Copy, Clone, PartialEq, Debug)]
17#[cfg_attr(feature = "pyo3", pyclass(eq, eq_int))]
18pub enum InverseDistanceUnit {
19 _km,
20 _m,
21 _dm,
22 _cm,
23 _mm,
24 _um,
25 _nm,
26 _mi,
27 _yd,
28 _ft,
29 _inch,
30}
31
32impl PhysicsUnit for InverseDistanceUnit {
33 fn name(&self) -> &str {
34 match &self {
35 InverseDistanceUnit::_km => "1/km",
36 InverseDistanceUnit::_m => "1/m",
37 InverseDistanceUnit::_dm => "1/dm",
38 InverseDistanceUnit::_cm => "1/cm",
39 InverseDistanceUnit::_mm => "1/mm",
40 InverseDistanceUnit::_um => "1/μm",
41 InverseDistanceUnit::_nm => "1/nm",
42 InverseDistanceUnit::_mi => "1/mi",
43 InverseDistanceUnit::_yd => "1/yd",
44 InverseDistanceUnit::_ft => "1/ft",
45 InverseDistanceUnit::_inch => "1/in",
46 }
47 }
48
49 fn base_per_x(&self) -> (f64, i32) {
50 match self {
51 InverseDistanceUnit::_km => (1., -3),
52 InverseDistanceUnit::_m => (1., 0),
53 InverseDistanceUnit::_dm => (1., 1),
54 InverseDistanceUnit::_cm => (1., 2),
55 InverseDistanceUnit::_mm => (1., 3),
56 InverseDistanceUnit::_um => (1., 6),
57 InverseDistanceUnit::_nm => (1., 9),
58 InverseDistanceUnit::_mi => (0.62137, -3),
59 InverseDistanceUnit::_yd => (0.10936, 1),
60 InverseDistanceUnit::_ft => (0.32808, 1),
61 InverseDistanceUnit::_inch => (0.393700787, 2),
62 }
63 }
64}
65
66impl_quantity!(
67 InverseDistance,
68 InverseDistanceUnit,
69 InverseDistanceUnit::_mm
70);
71impl_div_with_self_to_f64!(InverseDistance);
72
73impl_mul!(InverseDistance, Distance, f64);
74impl_mul!(InverseDistance, Stress, ForcePerVolume);
75impl_mul!(InverseDistance, ForceDistance, Force);
76impl_mul!(InverseDistance, Area, Distance);
77impl_mul!(InverseDistance, Volume, Area);