1mod add;
23#[cfg(feature = "ndarrayl")]
24mod add_ndarray;
25mod add_vec;
26mod conj;
27#[cfg(feature = "ndarrayl")]
28mod conj_ndarray;
29mod conj_vec;
30mod div;
31#[cfg(feature = "ndarrayl")]
32mod div_ndarray;
33mod div_vec;
34mod dot;
35#[cfg(feature = "ndarrayl")]
36mod dot_ndarray;
37mod dot_vec;
38#[cfg(feature = "ndarrayl")]
39mod eye_ndarray;
40mod eye_vec;
41#[cfg(feature = "ndarrayl")]
42mod inv_ndarray;
43mod mul;
44#[cfg(feature = "ndarrayl")]
45mod mul_ndarray;
46mod mul_vec;
47mod norm;
48#[cfg(feature = "ndarrayl")]
49mod norm_ndarray;
50mod norm_vec;
51mod scaledadd;
52#[cfg(feature = "ndarrayl")]
53mod scaledadd_ndarray;
54mod scaledadd_vec;
55mod scaledsub;
56#[cfg(feature = "ndarrayl")]
57mod scaledsub_ndarray;
58mod scaledsub_vec;
59mod sub;
60#[cfg(feature = "ndarrayl")]
61mod sub_ndarray;
62mod sub_vec;
63mod transpose;
64#[cfg(feature = "ndarrayl")]
65mod transpose_ndarray;
66mod transpose_vec;
67mod weighteddot;
68mod zero;
69#[cfg(feature = "ndarrayl")]
70mod zero_ndarray;
71mod zero_vec;
72mod random_vec;
75mod minmax_vec;
78pub use crate::core::math::add::*;
79#[cfg(feature = "ndarrayl")]
80pub use crate::core::math::add_ndarray::*;
81pub use crate::core::math::add_vec::*;
82pub use crate::core::math::conj::*;
83#[cfg(feature = "ndarrayl")]
84pub use crate::core::math::conj_ndarray::*;
85pub use crate::core::math::conj_vec::*;
86#[cfg(feature = "ndarrayl")]
87pub use crate::core::math::div_ndarray::*;
88pub use crate::core::math::dot::*;
89#[cfg(feature = "ndarrayl")]
90pub use crate::core::math::dot_ndarray::*;
91pub use crate::core::math::dot_vec::*;
92#[cfg(feature = "ndarrayl")]
93pub use crate::core::math::eye_ndarray::*;
94pub use crate::core::math::eye_vec::*;
95#[cfg(feature = "ndarrayl")]
96pub use crate::core::math::inv_ndarray::*;
97pub use crate::core::math::mul::*;
98#[cfg(feature = "ndarrayl")]
99pub use crate::core::math::mul_ndarray::*;
100pub use crate::core::math::mul_vec::*;
101pub use crate::core::math::norm::*;
102#[cfg(feature = "ndarrayl")]
103pub use crate::core::math::norm_ndarray::*;
104pub use crate::core::math::norm_vec::*;
105pub use crate::core::math::scaledadd::*;
106#[cfg(feature = "ndarrayl")]
107pub use crate::core::math::scaledadd_ndarray::*;
108pub use crate::core::math::scaledadd_vec::*;
109pub use crate::core::math::scaledsub::*;
110#[cfg(feature = "ndarrayl")]
111pub use crate::core::math::scaledsub_ndarray::*;
112pub use crate::core::math::scaledsub_vec::*;
113pub use crate::core::math::sub::*;
114#[cfg(feature = "ndarrayl")]
115pub use crate::core::math::sub_ndarray::*;
116pub use crate::core::math::sub_vec::*;
117pub use crate::core::math::transpose::*;
118#[cfg(feature = "ndarrayl")]
119pub use crate::core::math::transpose_ndarray::*;
120pub use crate::core::math::transpose_vec::*;
121pub use crate::core::math::weighteddot::*;
122pub use crate::core::math::zero::*;
123#[cfg(feature = "ndarrayl")]
124pub use crate::core::math::zero_ndarray::*;
125pub use crate::core::math::zero_vec::*;
126pub use crate::core::math::random_vec::*;
129pub use crate::core::math::minmax_vec::*;
132
133use crate::core::Error;
134
135pub trait ArgminDot<T, U> {
137 fn dot(&self, other: &T) -> U;
139}
140
141pub trait ArgminWeightedDot<T, U, V> {
143 fn weighted_dot(&self, w: &V, vec: &T) -> U;
145}
146
147pub trait ArgminZero {
149 fn zero() -> Self;
151}
152
153pub trait ArgminConj {
155 fn conj(&self) -> Self;
157}
158
159pub trait ArgminZeroLike {
161 fn zero_like(&self) -> Self;
163}
164
165pub trait ArgminEye {
167 fn eye(n: usize) -> Self;
169 fn eye_like(&self) -> Self;
171}
172
173pub trait ArgminAdd<T, U> {
175 fn add(&self, other: &T) -> U;
177}
178
179pub trait ArgminSub<T, U> {
181 fn sub(&self, other: &T) -> U;
183}
184
185pub trait ArgminMul<T, U> {
187 fn mul(&self, other: &T) -> U;
189}
190
191pub trait ArgminDiv<T, U> {
193 fn div(&self, other: &T) -> U;
195}
196
197pub trait ArgminScaledAdd<T, U, V> {
199 fn scaled_add(&self, factor: &U, vec: &T) -> V;
201}
202
203pub trait ArgminScaledSub<T, U, V> {
205 fn scaled_sub(&self, factor: &U, vec: &T) -> V;
207}
208
209pub trait ArgminNorm<U> {
211 fn norm(&self) -> U;
213}
214
215pub trait ArgminTranspose {
218 fn t(self) -> Self;
220}
221
222pub trait ArgminInv<T> {
224 fn inv(&self) -> Result<T, Error>;
226}
227
228pub trait ArgminRandom {
230 fn rand_from_range(min: &Self, max: &Self) -> Self;
232}
233
234pub trait ArgminMinMax {
236 fn min(x: &Self, y: &Self) -> Self;
238 fn max(x: &Self, y: &Self) -> Self;
240}