polars_compute/min_max/
mod.rs1use polars_utils::min_max::MinMax;
2
3pub use self::dyn_array::{
4 dyn_array_max_ignore_nan, dyn_array_max_propagate_nan, dyn_array_min_ignore_nan,
5 dyn_array_min_max_propagate_nan, dyn_array_min_propagate_nan,
6};
7
8pub trait MinMaxKernel {
10 type Scalar<'a>: MinMax
11 where
12 Self: 'a;
13
14 fn min_ignore_nan_kernel(&self) -> Option<Self::Scalar<'_>>;
15 fn max_ignore_nan_kernel(&self) -> Option<Self::Scalar<'_>>;
16 fn min_max_ignore_nan_kernel(&self) -> Option<(Self::Scalar<'_>, Self::Scalar<'_>)> {
17 Some((self.min_ignore_nan_kernel()?, self.max_ignore_nan_kernel()?))
18 }
19
20 fn min_propagate_nan_kernel(&self) -> Option<Self::Scalar<'_>>;
21 fn max_propagate_nan_kernel(&self) -> Option<Self::Scalar<'_>>;
22 fn min_max_propagate_nan_kernel(&self) -> Option<(Self::Scalar<'_>, Self::Scalar<'_>)> {
23 Some((
24 self.min_propagate_nan_kernel()?,
25 self.max_propagate_nan_kernel()?,
26 ))
27 }
28}
29
30trait NotSimdPrimitive {}
32
33#[cfg(not(feature = "simd"))]
34impl<T> NotSimdPrimitive for T {}
35
36#[cfg(feature = "simd")]
37impl NotSimdPrimitive for u128 {}
38#[cfg(feature = "simd")]
39impl NotSimdPrimitive for i128 {}
40
41mod dyn_array;
42mod scalar;
43
44#[cfg(feature = "simd")]
45mod simd;