Path: blob/main/crates/polars-plan/src/dsl/function_expr/array.rs
8353 views
use std::fmt;12use polars_core::prelude::{ExplodeOptions, 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(ExplodeOptions),40Concat,41#[cfg(feature = "array_to_struct")]42ToStruct(Option<super::DslNameGenerator>),43}4445impl fmt::Display for ArrayFunction {46fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {47use ArrayFunction::*;48let name = match self {49Concat => "concat",50Length => "length",51Slice(_, _) => "slice",52Min => "min",53Max => "max",54Sum => "sum",55ToList => "to_list",56Unique(_) => "unique",57NUnique => "n_unique",58Std(_) => "std",59Var(_) => "var",60Mean => "mean",61Median => "median",62#[cfg(feature = "array_any_all")]63Any => "any",64#[cfg(feature = "array_any_all")]65All => "all",66Sort(_) => "sort",67Reverse => "reverse",68ArgMin => "arg_min",69ArgMax => "arg_max",70Get(_) => "get",71Join(_) => "join",72#[cfg(feature = "is_in")]73Contains { nulls_equal: _ } => "contains",74#[cfg(feature = "array_count")]75CountMatches => "count_matches",76Shift => "shift",77Explode { .. } => "explode",78#[cfg(feature = "array_to_struct")]79ToStruct(_) => "to_struct",80};81write!(f, "arr.{name}")82}83}8485impl From<ArrayFunction> for FunctionExpr {86fn from(value: ArrayFunction) -> Self {87Self::ArrayExpr(value)88}89}909192