use polars_core::prelude::SortOptions;
use crate::dsl::function_expr::{ArrayFunction, FunctionExpr};
use crate::prelude::*;
pub struct ArrayNameSpace(pub Expr);
impl ArrayNameSpace {
pub fn max(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Max))
}
pub fn min(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Min))
}
pub fn sum(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Sum))
}
pub fn unique(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Unique(false)))
}
pub fn unique_stable(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Unique(true)))
}
pub fn to_list(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::ToList))
}
#[cfg(feature = "array_any_all")]
pub fn all(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::All))
}
#[cfg(feature = "array_any_all")]
pub fn any(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Any))
}
pub fn sort(self, options: SortOptions) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Sort(options)))
}
pub fn reverse(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::Reverse))
}
pub fn arg_min(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::ArgMin))
}
pub fn arg_max(self) -> Expr {
self.0
.map_private(FunctionExpr::ArrayExpr(ArrayFunction::ArgMax))
}
pub fn get(self, index: Expr) -> Expr {
self.0.map_many_private(
FunctionExpr::ArrayExpr(ArrayFunction::Get),
&[index],
false,
false,
)
}
pub fn join(self, separator: Expr, ignore_nulls: bool) -> Expr {
self.0.map_many_private(
FunctionExpr::ArrayExpr(ArrayFunction::Join(ignore_nulls)),
&[separator],
false,
false,
)
}
#[cfg(feature = "is_in")]
pub fn contains<E: Into<Expr>>(self, other: E) -> Expr {
let other = other.into();
self.0.map_many_private(
FunctionExpr::ArrayExpr(ArrayFunction::Contains),
&[other],
false,
false,
)
}
#[cfg(feature = "array_count")]
pub fn count_matches<E: Into<Expr>>(self, element: E) -> Expr {
let other = element.into();
self.0
.map_many_private(
FunctionExpr::ArrayExpr(ArrayFunction::CountMatches),
&[other],
false,
false,
)
.with_function_options(|mut options| {
options.input_wildcard_expansion = true;
options
})
}
}