Skip to main content

deep_causality_num/complex/complex_number/
cast.rs

1/*
2 * SPDX-License-Identifier: MIT
3 * Copyright (c) 2023 - 2026. The DeepCausality Authors and Contributors. All Rights Reserved.
4 */
5use crate::{AsPrimitive, Complex, FromPrimitive, NumCast, RealField, ToPrimitive};
6
7// AsPrimitive
8impl<T, U> AsPrimitive<U> for Complex<T>
9where
10    T: RealField + AsPrimitive<U> + 'static,
11    U: 'static + Copy,
12{
13    #[inline]
14    fn as_(self) -> U {
15        self.re.as_()
16    }
17}
18
19// NumCast
20impl<T: RealField + NumCast> NumCast for Complex<T> {
21    #[inline]
22    fn from<N: ToPrimitive>(n: N) -> Option<Self> {
23        T::from(n).map(Self::from_real)
24    }
25}
26
27// FromPrimitive
28impl<T: RealField + FromPrimitive> FromPrimitive for Complex<T> {
29    fn from_isize(n: isize) -> Option<Self> {
30        T::from_isize(n).map(Self::from_real)
31    }
32    fn from_i8(n: i8) -> Option<Self> {
33        T::from_i8(n).map(Self::from_real)
34    }
35    fn from_i16(n: i16) -> Option<Self> {
36        T::from_i16(n).map(Self::from_real)
37    }
38    fn from_i32(n: i32) -> Option<Self> {
39        T::from_i32(n).map(Self::from_real)
40    }
41    fn from_i64(n: i64) -> Option<Self> {
42        T::from_i64(n).map(Self::from_real)
43    }
44    fn from_i128(n: i128) -> Option<Self> {
45        T::from_i128(n).map(Self::from_real)
46    }
47    fn from_usize(n: usize) -> Option<Self> {
48        T::from_usize(n).map(Self::from_real)
49    }
50    fn from_u8(n: u8) -> Option<Self> {
51        T::from_u8(n).map(Self::from_real)
52    }
53    fn from_u16(n: u16) -> Option<Self> {
54        T::from_u16(n).map(Self::from_real)
55    }
56    fn from_u32(n: u32) -> Option<Self> {
57        T::from_u32(n).map(Self::from_real)
58    }
59    fn from_u64(n: u64) -> Option<Self> {
60        T::from_u64(n).map(Self::from_real)
61    }
62    fn from_u128(n: u128) -> Option<Self> {
63        T::from_u128(n).map(Self::from_real)
64    }
65    fn from_f32(n: f32) -> Option<Self> {
66        T::from_f32(n).map(Self::from_real)
67    }
68    fn from_f64(n: f64) -> Option<Self> {
69        T::from_f64(n).map(Self::from_real)
70    }
71}
72
73// ToPrimitive
74impl<T: RealField + ToPrimitive> ToPrimitive for Complex<T> {
75    fn to_isize(&self) -> Option<isize> {
76        self.re.to_isize()
77    }
78    fn to_i8(&self) -> Option<i8> {
79        self.re.to_i8()
80    }
81    fn to_i16(&self) -> Option<i16> {
82        self.re.to_i16()
83    }
84    fn to_i32(&self) -> Option<i32> {
85        self.re.to_i32()
86    }
87    fn to_i64(&self) -> Option<i64> {
88        self.re.to_i64()
89    }
90    fn to_i128(&self) -> Option<i128> {
91        self.re.to_i128()
92    }
93    fn to_usize(&self) -> Option<usize> {
94        self.re.to_usize()
95    }
96    fn to_u8(&self) -> Option<u8> {
97        self.re.to_u8()
98    }
99    fn to_u16(&self) -> Option<u16> {
100        self.re.to_u16()
101    }
102    fn to_u32(&self) -> Option<u32> {
103        self.re.to_u32()
104    }
105    fn to_u64(&self) -> Option<u64> {
106        self.re.to_u64()
107    }
108    fn to_u128(&self) -> Option<u128> {
109        self.re.to_u128()
110    }
111    fn to_f32(&self) -> Option<f32> {
112        self.re.to_f32()
113    }
114    fn to_f64(&self) -> Option<f64> {
115        self.re.to_f64()
116    }
117}