Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-python/src/expr/mod.rs
7889 views
1
#[cfg(feature = "pymethods")]
2
mod array;
3
#[cfg(feature = "pymethods")]
4
mod binary;
5
#[cfg(feature = "pymethods")]
6
mod bitwise;
7
#[cfg(feature = "pymethods")]
8
mod categorical;
9
pub mod datatype;
10
#[cfg(feature = "pymethods")]
11
mod datetime;
12
#[cfg(feature = "pymethods")]
13
mod extension;
14
#[cfg(feature = "pymethods")]
15
mod general;
16
#[cfg(feature = "pymethods")]
17
mod list;
18
#[cfg(all(feature = "meta", feature = "pymethods"))]
19
mod meta;
20
#[cfg(feature = "pymethods")]
21
mod name;
22
#[cfg(feature = "pymethods")]
23
mod rolling;
24
pub mod selector;
25
#[cfg(feature = "pymethods")]
26
mod serde;
27
#[cfg(feature = "pymethods")]
28
mod string;
29
#[cfg(feature = "pymethods")]
30
mod r#struct;
31
32
use std::mem::ManuallyDrop;
33
34
use polars::lazy::dsl::Expr;
35
use pyo3::pyclass;
36
37
#[pyclass] // Not marked as frozen for pickling, but that's the only &mut self method.
38
#[repr(transparent)]
39
#[derive(Clone)]
40
pub struct PyExpr {
41
pub inner: Expr,
42
}
43
44
impl From<Expr> for PyExpr {
45
fn from(expr: Expr) -> Self {
46
PyExpr { inner: expr }
47
}
48
}
49
50
pub(crate) trait ToExprs {
51
fn to_exprs(self) -> Vec<Expr>;
52
}
53
54
impl ToExprs for Vec<PyExpr> {
55
fn to_exprs(self) -> Vec<Expr> {
56
// SAFETY: repr is transparent.
57
unsafe {
58
let length = self.len();
59
let capacity = self.capacity();
60
let mut manual_drop_vec = ManuallyDrop::new(self);
61
let vec_ptr: *mut PyExpr = manual_drop_vec.as_mut_ptr();
62
let ptr: *mut Expr = vec_ptr as *mut Expr;
63
Vec::from_raw_parts(ptr, length, capacity)
64
}
65
}
66
}
67
68
pub(crate) trait ToPyExprs {
69
fn to_pyexprs(self) -> Vec<PyExpr>;
70
}
71
72
impl ToPyExprs for Vec<Expr> {
73
fn to_pyexprs(self) -> Vec<PyExpr> {
74
// SAFETY: repr is transparent.
75
unsafe {
76
let length = self.len();
77
let capacity = self.capacity();
78
let mut manual_drop_vec = ManuallyDrop::new(self);
79
let vec_ptr: *mut Expr = manual_drop_vec.as_mut_ptr();
80
let ptr: *mut PyExpr = vec_ptr as *mut PyExpr;
81
Vec::from_raw_parts(ptr, length, capacity)
82
}
83
}
84
}
85
86