single_utilities/traits/
mod.rs1use num_traits::float::FloatCore;
2use num_traits::{Bounded, FromPrimitive, NumCast, One, ToPrimitive, Unsigned, Zero};
3#[cfg(feature = "simd")]
4use simba::{scalar::RealField, simd::SimdRealField};
5use std::fmt::Debug;
6use std::iter::Sum;
7use std::ops::{Add, AddAssign, MulAssign, SubAssign};
8
9pub trait NumericOps:
10 Zero
11 + One
12 + NumCast
13 + Copy
14 + AddAssign
15 + MulAssign
16 + SubAssign
17 + PartialOrd
18 + Bounded
19 + Add<Output = Self>
20 + Sum
21 + Debug
22 + Default
23{
24}
25impl<
26 T: Zero
27 + One
28 + NumCast
29 + Copy
30 + AddAssign
31 + MulAssign
32 + SubAssign
33 + PartialOrd
34 + Bounded
35 + Add<Output = Self>
36 + Sum
37 + Debug
38 + Default,
39> NumericOps for T
40{
41}
42
43pub trait NumericOpsTS: NumericOps + Send + Sync {}
44
45impl<T: NumericOps + Send + Sync> NumericOpsTS for T {}
46
47pub trait FloatOps:
48 NumericOps + num_traits::Float + FromPrimitive + ToPrimitive + FloatCore
49{
50}
51
52impl<T: NumericOps + num_traits::Float + FromPrimitive + ToPrimitive + FloatCore> FloatOps for T {}
53
54pub trait FloatOpsTS: FloatOps + Sync + Send {}
55
56impl<T: FloatOps + Send + Sync> FloatOpsTS for T {}
57
58#[cfg(feature = "simd")]
59pub trait FloatOpsTSSimba: FloatOpsTS + SimdRealField + RealField {}
60
61#[cfg(feature = "simd")]
62impl<T: FloatOpsTS + SimdRealField + RealField> FloatOpsTSSimba for T {}
63
64pub trait NumericNormalize:
66 num_traits::Float + std::ops::AddAssign + std::iter::Sum + num_traits::NumCast
67{
68}
69
70impl<T> NumericNormalize for T where
72 T: num_traits::Float + std::ops::AddAssign + std::iter::Sum + num_traits::NumCast
73{
74}
75
76pub trait ZeroVec {
77 fn zero_len(&mut self, len: usize);
78}
79
80impl<T: Default + Clone> ZeroVec for Vec<T> {
81 fn zero_len(&mut self, len: usize) {
82 self.clear();
83 self.reserve(len);
84 self.extend(std::iter::repeat_n(T::default(), len));
85 }
86}
87
88pub trait UIndex:
89 Unsigned + Zero + One + Copy + PartialEq + PartialOrd + From<usize> + Into<usize> + Bounded
90{
91}
92
93impl<I: Unsigned + Zero + One + Copy + PartialEq + PartialOrd + From<usize> + Into<usize> + Bounded>
94 UIndex for I
95{
96}
97
98pub trait Scalar: 'static + Clone + PartialEq + Debug {}
99
100impl<T: 'static + Clone + PartialEq + Debug> Scalar for T {}