Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-compute/src/min_max/mod.rs
8430 views
1
#[cfg(feature = "simd")]
2
use polars_utils::float16::pf16;
3
use polars_utils::min_max::MinMax;
4
5
pub 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.
11
pub 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.
33
trait NotSimdPrimitive {}
34
35
#[cfg(not(feature = "simd"))]
36
impl<T> NotSimdPrimitive for T {}
37
38
#[cfg(feature = "simd")]
39
impl NotSimdPrimitive for u128 {}
40
#[cfg(feature = "simd")]
41
impl NotSimdPrimitive for i128 {}
42
#[cfg(feature = "simd")]
43
impl NotSimdPrimitive for pf16 {}
44
45
mod dyn_array;
46
mod scalar;
47
48
#[cfg(feature = "simd")]
49
mod simd;
50
51