//! Domain specific language for the Lazy API.1//!2//! This DSL revolves around the [`Expr`] type, which represents an abstract3//! operation on a DataFrame, such as mapping over a column, filtering, group_by, or aggregation.4//! In general, functions on [`LazyFrame`]s consume the [`LazyFrame`] and produce a new [`LazyFrame`] representing5//! the result of applying the function and passed expressions to the consumed LazyFrame.6//! At runtime, when [`LazyFrame::collect`](crate::frame::LazyFrame::collect) is called, the expressions that comprise7//! the [`LazyFrame`]'s logical plan are materialized on the actual underlying Series.8//! For instance, `let expr = col("x").pow(lit(2)).alias("x2");` would produce an expression representing the abstract9//! operation of squaring the column `"x"` and naming the resulting column `"x2"`, and to apply this operation to a10//! [`LazyFrame`], you'd use `let lazy_df = lazy_df.with_column(expr);`.11//! (Of course, a column named `"x"` must either exist in the original DataFrame or be produced by one of the preceding12//! operations on the [`LazyFrame`].)13//!14//! [`LazyFrame`]: crate::frame::LazyFrame15//!16//! There are many, many free functions that this module exports that produce an [`Expr`] from scratch; [`col`] and17//! [`lit`] are two examples.18//! Expressions also have several methods, such as [`pow`](`Expr::pow`) and [`alias`](`Expr::alias`), that consume them19//! and produce a new expression.20//!21//! Several expressions are only available when the necessary feature is enabled.22//! Examples of features that unlock specialized expression include `string`, `temporal`, and `dtype-categorical`.23//! These specialized expressions provide implementations of functions that you'd otherwise have to implement by hand.24//!25//! Because of how abstract and flexible the [`Expr`] type is, care must be take to ensure you only attempt to perform26//! sensible operations with them.27//! For instance, as mentioned above, you have to make sure any columns you reference already exist in the LazyFrame.28//! Furthermore, there is nothing stopping you from calling, for example, [`any`](`Expr::any`) with an expression29//! that will yield an `f64` column (instead of `bool`), or `col("string") - col("f64")`, which would attempt30//! to subtract an `f64` Series from a `string` Series.31//! These kinds of invalid operations will only yield an error at runtime, when32//! [`collect`](crate::frame::LazyFrame::collect) is called on the [`LazyFrame`].3334pub mod functions;3536pub use functions::*;37pub use polars_plan::dsl::*;38pub use polars_plan::plans::UdfSchema;394041