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
6939 views
1
use polars_utils::min_max::MinMax;
2
3
pub 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
8
/// Low-level min/max kernel.
9
pub 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
30
// Trait to enable the scalar blanket implementation.
31
trait NotSimdPrimitive {}
32
33
#[cfg(not(feature = "simd"))]
34
impl<T> NotSimdPrimitive for T {}
35
36
#[cfg(feature = "simd")]
37
impl NotSimdPrimitive for u128 {}
38
#[cfg(feature = "simd")]
39
impl NotSimdPrimitive for i128 {}
40
41
mod dyn_array;
42
mod scalar;
43
44
#[cfg(feature = "simd")]
45
mod simd;
46
47