Path: blob/main/crates/polars-python/src/lazyframe/optflags.rs
7889 views
use parking_lot::RwLock;1use polars::prelude::OptFlags;2use pyo3::pymethods;34use super::PyOptFlags;56macro_rules! flag_getter_setters {7($(($flag:ident, $getter:ident, $setter:ident, clear=$clear:literal))+) => {8#[pymethods]9impl PyOptFlags {10#[staticmethod]11pub fn empty() -> Self {12Self {13inner: RwLock::new(OptFlags::empty())14}15}1617#[staticmethod]18#[allow(clippy::should_implement_trait)]19pub fn default() -> Self {20Self { inner: RwLock::default() }21}2223pub fn no_optimizations(&self) {24$(if $clear {25self.inner.write().remove(OptFlags::$flag);26})+27}2829pub fn copy(&self) -> Self {30Self { inner: RwLock::new(self.inner.read().clone()) }31}3233$(34#[getter]35fn $getter(&self) -> bool {36self.inner.read().contains(OptFlags::$flag)37}38#[setter]39fn $setter(&self, value: bool) {40self.inner.write().set(OptFlags::$flag, value)41}42)+43}44};45}4647flag_getter_setters! {48(TYPE_COERCION, get_type_coercion, set_type_coercion, clear=false)49(TYPE_CHECK, get_type_check, set_type_check, clear=false)5051(PROJECTION_PUSHDOWN, get_projection_pushdown, set_projection_pushdown, clear=true)52(PREDICATE_PUSHDOWN, get_predicate_pushdown, set_predicate_pushdown, clear=true)53(CLUSTER_WITH_COLUMNS, get_cluster_with_columns, set_cluster_with_columns, clear=true)54(SIMPLIFY_EXPR, get_simplify_expression, set_simplify_expression, clear=true)55(SLICE_PUSHDOWN, get_slice_pushdown, set_slice_pushdown, clear=true)56(COMM_SUBPLAN_ELIM, get_comm_subplan_elim, set_comm_subplan_elim, clear=true)57(COMM_SUBEXPR_ELIM, get_comm_subexpr_elim, set_comm_subexpr_elim, clear=true)58(CHECK_ORDER_OBSERVE, get_check_order_observe, set_check_order_observe, clear=true)59(FAST_PROJECTION, get_fast_projection, set_fast_projection, clear=true)6061(EAGER, get_eager, set_eager, clear=true)62(NEW_STREAMING, get_streaming, set_streaming, clear=true)63}646566