polars_python/series/
mod.rs1#[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 let series: Vec<Series> = self
82 .into_iter()
83 .map(|c| c.take_materialized_series())
84 .collect();
85 series.to_pyseries()
86 }
87}