Skip to main content

PhysicalExpr

Trait PhysicalExpr 

Source
pub trait PhysicalExpr: Send + Sync {
    // Required methods
    fn evaluate_impl(
        &self,
        df: &DataFrame,
        _state: &ExecutionState,
    ) -> PolarsResult<Column>;
    fn evaluate_on_groups_impl<'a>(
        &self,
        df: &DataFrame,
        groups: &'a GroupPositions,
        state: &ExecutionState,
    ) -> PolarsResult<AggregationContext<'a>>;
    fn to_field(&self, input_schema: &Schema) -> PolarsResult<Field>;
    fn is_scalar(&self) -> bool;

    // Provided methods
    fn as_expression(&self) -> Option<&Expr> { ... }
    fn as_column(&self) -> Option<PlSmallStr> { ... }
    fn evaluate(
        &self,
        df: &DataFrame,
        state: &ExecutionState,
    ) -> PolarsResult<Column> { ... }
    fn evaluate_on_groups<'a>(
        &self,
        df: &DataFrame,
        groups: &'a GroupPositions,
        state: &ExecutionState,
    ) -> PolarsResult<AggregationContext<'a>> { ... }
    fn is_literal(&self) -> bool { ... }
}
Expand description

Take a DataFrame and evaluate the expressions. Implement this for Column, lt, eq, etc

Required Methods§

Source

fn evaluate_impl( &self, df: &DataFrame, _state: &ExecutionState, ) -> PolarsResult<Column>

Source

fn evaluate_on_groups_impl<'a>( &self, df: &DataFrame, groups: &'a GroupPositions, state: &ExecutionState, ) -> PolarsResult<AggregationContext<'a>>

Source

fn to_field(&self, input_schema: &Schema) -> PolarsResult<Field>

Get the output field of this expr

Source

fn is_scalar(&self) -> bool

Provided Methods§

Source

fn as_expression(&self) -> Option<&Expr>

Source

fn as_column(&self) -> Option<PlSmallStr>

Source

fn evaluate( &self, df: &DataFrame, state: &ExecutionState, ) -> PolarsResult<Column>

Take a DataFrame and evaluate the expression.

Note: implementers should implement evaluate_impl instead, as this wraps that call with an error context.

Source

fn evaluate_on_groups<'a>( &self, df: &DataFrame, groups: &'a GroupPositions, state: &ExecutionState, ) -> PolarsResult<AggregationContext<'a>>

Some expression that are not aggregations can be done per group Think of sort, slice, filter, shift, etc. defaults to ignoring the group

This method is called by an aggregation function.

In case of a simple expr, like ‘column’, the groups are ignored and the column is returned. In case of an expr where group behavior makes sense, this method is called. For a filter operation for instance, a Series is created per groups and filtered.

An implementation of this method may apply an aggregation on the groups only. For instance on a shift, the groups are first aggregated to a ListChunked and the shift is applied per group. The implementation then has to return the Series exploded (because a later aggregation will use the group tuples to aggregate). The group tuples also have to be updated, because aggregation to a list sorts the exploded Series by group.

This has some gotcha’s. An implementation may also change the group tuples instead of the Series.

Source

fn is_literal(&self) -> bool

Trait Implementations§

Source§

impl Display for &dyn PhysicalExpr

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§