rstsr_core/storage/
combined_trait.rs

1use crate::prelude_dev::*;
2use num::{complex::ComplexFloat, Num};
3
4// This trait can be used for simple implementation of f32, f64, Complex<f32>,
5// Complex<f64> types operations.
6pub trait DeviceComplexFloatAPI<T, D = IxD>:
7    DeviceAPI<T>
8    // trait bound for complex part
9    + DeviceAPI<T::Real>
10    + DeviceCreationNumAPI<T>
11    + DeviceCreationAnyAPI<T>
12    + DeviceCreationComplexFloatAPI<T>
13    + OpAssignArbitaryAPI<T, D, D>
14    + OpAssignArbitaryAPI<T, D, IxD>
15    + OpAssignArbitaryAPI<T, IxD, D>
16    + OpAssignArbitaryAPI<T, IxD, IxD>
17    + OpAssignAPI<T, D>
18    + OpAssignAPI<T, IxD>
19    + DeviceConjAPI<T, D, TOut = T>
20    + DeviceConjAPI<T, IxD, TOut = T>
21    + DeviceCreationTriAPI<T>
22    // trait bound for real part
23    + DeviceCreationNumAPI<T::Real>
24    + DeviceCreationAnyAPI<T::Real>
25    + DeviceCreationComplexFloatAPI<T::Real>
26    + OpAssignArbitaryAPI<T::Real, D, D>
27    + OpAssignArbitaryAPI<T::Real, D, IxD>
28    + OpAssignArbitaryAPI<T::Real, IxD, D>
29    + OpAssignArbitaryAPI<T::Real, IxD, IxD>
30    + OpAssignAPI<T::Real, D>
31    + OpAssignAPI<T::Real, IxD>
32    + DeviceConjAPI<T::Real, D, TOut = T::Real>
33    + DeviceConjAPI<T::Real, IxD, TOut = T::Real>
34    + DeviceCreationTriAPI<T::Real>
35where
36    T: ComplexFloat,
37    D: DimAPI,
38{
39}
40
41pub trait DeviceNumAPI<T, D = IxD>:
42    DeviceAPI<T>
43    + DeviceCreationNumAPI<T>
44    + DeviceCreationAnyAPI<T>
45    + OpAssignArbitaryAPI<T, D, D>
46    + OpAssignArbitaryAPI<T, D, IxD>
47    + OpAssignArbitaryAPI<T, IxD, D>
48    + OpAssignArbitaryAPI<T, IxD, IxD>
49    + OpAssignAPI<T, D>
50    + OpAssignAPI<T, IxD>
51where
52    T: Num,
53    D: DimAPI,
54{
55}