Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-python/src/lazyframe/optflags.rs
7889 views
1
use parking_lot::RwLock;
2
use polars::prelude::OptFlags;
3
use pyo3::pymethods;
4
5
use super::PyOptFlags;
6
7
macro_rules! flag_getter_setters {
8
($(($flag:ident, $getter:ident, $setter:ident, clear=$clear:literal))+) => {
9
#[pymethods]
10
impl PyOptFlags {
11
#[staticmethod]
12
pub fn empty() -> Self {
13
Self {
14
inner: RwLock::new(OptFlags::empty())
15
}
16
}
17
18
#[staticmethod]
19
#[allow(clippy::should_implement_trait)]
20
pub fn default() -> Self {
21
Self { inner: RwLock::default() }
22
}
23
24
pub fn no_optimizations(&self) {
25
$(if $clear {
26
self.inner.write().remove(OptFlags::$flag);
27
})+
28
}
29
30
pub fn copy(&self) -> Self {
31
Self { inner: RwLock::new(self.inner.read().clone()) }
32
}
33
34
$(
35
#[getter]
36
fn $getter(&self) -> bool {
37
self.inner.read().contains(OptFlags::$flag)
38
}
39
#[setter]
40
fn $setter(&self, value: bool) {
41
self.inner.write().set(OptFlags::$flag, value)
42
}
43
)+
44
}
45
};
46
}
47
48
flag_getter_setters! {
49
(TYPE_COERCION, get_type_coercion, set_type_coercion, clear=false)
50
(TYPE_CHECK, get_type_check, set_type_check, clear=false)
51
52
(PROJECTION_PUSHDOWN, get_projection_pushdown, set_projection_pushdown, clear=true)
53
(PREDICATE_PUSHDOWN, get_predicate_pushdown, set_predicate_pushdown, clear=true)
54
(CLUSTER_WITH_COLUMNS, get_cluster_with_columns, set_cluster_with_columns, clear=true)
55
(SIMPLIFY_EXPR, get_simplify_expression, set_simplify_expression, clear=true)
56
(SLICE_PUSHDOWN, get_slice_pushdown, set_slice_pushdown, clear=true)
57
(COMM_SUBPLAN_ELIM, get_comm_subplan_elim, set_comm_subplan_elim, clear=true)
58
(COMM_SUBEXPR_ELIM, get_comm_subexpr_elim, set_comm_subexpr_elim, clear=true)
59
(CHECK_ORDER_OBSERVE, get_check_order_observe, set_check_order_observe, clear=true)
60
(FAST_PROJECTION, get_fast_projection, set_fast_projection, clear=true)
61
62
(EAGER, get_eager, set_eager, clear=true)
63
(NEW_STREAMING, get_streaming, set_streaming, clear=true)
64
}
65
66