Path: blob/main/crates/polars-plan/src/dsl/function_expr/array.rs
6940 views
use std::fmt;12use polars_core::prelude::SortOptions;34use super::FunctionExpr;56#[derive(Clone, Eq, PartialEq, Hash, Debug)]7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]8#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]9pub enum ArrayFunction {10Length,11Slice(i64, i64),12Min,13Max,14Sum,15ToList,16Unique(bool),17NUnique,18Std(u8),19Var(u8),20Mean,21Median,22#[cfg(feature = "array_any_all")]23Any,24#[cfg(feature = "array_any_all")]25All,26Sort(SortOptions),27Reverse,28ArgMin,29ArgMax,30Get(bool),31Join(bool),32#[cfg(feature = "is_in")]33Contains {34nulls_equal: bool,35},36#[cfg(feature = "array_count")]37CountMatches,38Shift,39Explode {40skip_empty: bool,41},42Concat,43#[cfg(feature = "array_to_struct")]44ToStruct(Option<super::DslNameGenerator>),45}4647impl fmt::Display for ArrayFunction {48fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {49use ArrayFunction::*;50let name = match self {51Concat => "concat",52Length => "length",53Slice(_, _) => "slice",54Min => "min",55Max => "max",56Sum => "sum",57ToList => "to_list",58Unique(_) => "unique",59NUnique => "n_unique",60Std(_) => "std",61Var(_) => "var",62Mean => "mean",63Median => "median",64#[cfg(feature = "array_any_all")]65Any => "any",66#[cfg(feature = "array_any_all")]67All => "all",68Sort(_) => "sort",69Reverse => "reverse",70ArgMin => "arg_min",71ArgMax => "arg_max",72Get(_) => "get",73Join(_) => "join",74#[cfg(feature = "is_in")]75Contains { nulls_equal: _ } => "contains",76#[cfg(feature = "array_count")]77CountMatches => "count_matches",78Shift => "shift",79Explode { .. } => "explode",80#[cfg(feature = "array_to_struct")]81ToStruct(_) => "to_struct",82};83write!(f, "arr.{name}")84}85}8687impl From<ArrayFunction> for FunctionExpr {88fn from(value: ArrayFunction) -> Self {89Self::ArrayExpr(value)90}91}929394