Skip to main content

polars_compute/min_max/
mod.rs

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