polars_python/series/
mod.rs

1#[cfg(feature = "pymethods")]
2mod aggregation;
3#[cfg(feature = "pymethods")]
4mod arithmetic;
5#[cfg(feature = "pymethods")]
6mod buffers;
7#[cfg(feature = "pymethods")]
8mod c_interface;
9#[cfg(feature = "pymethods")]
10mod comparison;
11#[cfg(feature = "pymethods")]
12mod construction;
13#[cfg(feature = "pymethods")]
14mod export;
15#[cfg(feature = "pymethods")]
16mod general;
17#[cfg(feature = "pymethods")]
18mod import;
19#[cfg(feature = "pymethods")]
20mod map;
21#[cfg(feature = "pymethods")]
22mod numpy_ufunc;
23#[cfg(feature = "pymethods")]
24mod scatter;
25pub(crate) use import::import_schema_pycapsule;
26use parking_lot::RwLock;
27use polars::prelude::{Column, Series};
28use pyo3::pyclass;
29
30#[pyclass(frozen)]
31#[repr(transparent)]
32pub struct PySeries {
33    pub series: RwLock<Series>,
34}
35
36impl Clone for PySeries {
37    fn clone(&self) -> Self {
38        Self {
39            series: RwLock::new(self.series.read().clone()),
40        }
41    }
42}
43
44impl From<Series> for PySeries {
45    fn from(series: Series) -> Self {
46        Self::new(series)
47    }
48}
49
50impl PySeries {
51    pub(crate) fn new(series: Series) -> Self {
52        PySeries {
53            series: RwLock::new(series),
54        }
55    }
56}
57
58pub(crate) trait ToSeries {
59    fn to_series(self) -> Vec<Series>;
60}
61
62impl ToSeries for Vec<PySeries> {
63    fn to_series(self) -> Vec<Series> {
64        self.into_iter().map(|s| s.series.into_inner()).collect()
65    }
66}
67
68pub(crate) trait ToPySeries {
69    fn to_pyseries(self) -> Vec<PySeries>;
70}
71
72impl ToPySeries for Vec<Series> {
73    fn to_pyseries(self) -> Vec<PySeries> {
74        self.into_iter().map(PySeries::from).collect()
75    }
76}
77
78impl ToPySeries for Vec<Column> {
79    fn to_pyseries(self) -> Vec<PySeries> {
80        // @scalar-opt
81        let series: Vec<Series> = self
82            .into_iter()
83            .map(|c| c.take_materialized_series())
84            .collect();
85        series.to_pyseries()
86    }
87}