Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-python/src/series/arithmetic.rs
7889 views
1
use polars::prelude::*;
2
use pyo3::prelude::*;
3
4
use super::PySeries;
5
use crate::utils::EnterPolarsExt;
6
7
#[pymethods]
8
impl PySeries {
9
fn add(&self, py: Python<'_>, other: &PySeries) -> PyResult<Self> {
10
py.enter_polars_series(|| &*self.series.read() + &*other.series.read())
11
}
12
fn sub(&self, py: Python<'_>, other: &PySeries) -> PyResult<Self> {
13
py.enter_polars_series(|| &*self.series.read() - &*other.series.read())
14
}
15
fn mul(&self, py: Python<'_>, other: &PySeries) -> PyResult<Self> {
16
py.enter_polars_series(|| &*self.series.read() * &*other.series.read())
17
}
18
fn div(&self, py: Python<'_>, other: &PySeries) -> PyResult<Self> {
19
py.enter_polars_series(|| &*self.series.read() / &*other.series.read())
20
}
21
fn rem(&self, py: Python<'_>, other: &PySeries) -> PyResult<Self> {
22
py.enter_polars_series(|| &*self.series.read() % &*other.series.read())
23
}
24
}
25
26
macro_rules! impl_arithmetic {
27
($name:ident, $type:ty, $operand:tt) => {
28
#[pymethods]
29
impl PySeries {
30
fn $name(&self, py: Python<'_>, other: $type) -> PyResult<Self> {
31
py.enter_polars_series(|| Ok({&*self.series.read() $operand other}))
32
}
33
}
34
};
35
}
36
37
impl_arithmetic!(add_u8, u8, +);
38
impl_arithmetic!(add_u16, u16, +);
39
impl_arithmetic!(add_u32, u32, +);
40
impl_arithmetic!(add_u64, u64, +);
41
impl_arithmetic!(add_i8, i8, +);
42
impl_arithmetic!(add_i16, i16, +);
43
impl_arithmetic!(add_i32, i32, +);
44
impl_arithmetic!(add_i64, i64, +);
45
impl_arithmetic!(add_datetime, i64, +);
46
impl_arithmetic!(add_duration, i64, +);
47
impl_arithmetic!(add_f16, pf16, +);
48
impl_arithmetic!(add_f32, f32, +);
49
impl_arithmetic!(add_f64, f64, +);
50
impl_arithmetic!(sub_u8, u8, -);
51
impl_arithmetic!(sub_u16, u16, -);
52
impl_arithmetic!(sub_u32, u32, -);
53
impl_arithmetic!(sub_u64, u64, -);
54
impl_arithmetic!(sub_i8, i8, -);
55
impl_arithmetic!(sub_i16, i16, -);
56
impl_arithmetic!(sub_i32, i32, -);
57
impl_arithmetic!(sub_i64, i64, -);
58
impl_arithmetic!(sub_datetime, i64, -);
59
impl_arithmetic!(sub_duration, i64, -);
60
impl_arithmetic!(sub_f16, pf16, -);
61
impl_arithmetic!(sub_f32, f32, -);
62
impl_arithmetic!(sub_f64, f64, -);
63
impl_arithmetic!(div_u8, u8, /);
64
impl_arithmetic!(div_u16, u16, /);
65
impl_arithmetic!(div_u32, u32, /);
66
impl_arithmetic!(div_u64, u64, /);
67
impl_arithmetic!(div_i8, i8, /);
68
impl_arithmetic!(div_i16, i16, /);
69
impl_arithmetic!(div_i32, i32, /);
70
impl_arithmetic!(div_i64, i64, /);
71
impl_arithmetic!(div_f16, pf16, /);
72
impl_arithmetic!(div_f32, f32, /);
73
impl_arithmetic!(div_f64, f64, /);
74
impl_arithmetic!(mul_u8, u8, *);
75
impl_arithmetic!(mul_u16, u16, *);
76
impl_arithmetic!(mul_u32, u32, *);
77
impl_arithmetic!(mul_u64, u64, *);
78
impl_arithmetic!(mul_i8, i8, *);
79
impl_arithmetic!(mul_i16, i16, *);
80
impl_arithmetic!(mul_i32, i32, *);
81
impl_arithmetic!(mul_i64, i64, *);
82
impl_arithmetic!(mul_f16, pf16, *);
83
impl_arithmetic!(mul_f32, f32, *);
84
impl_arithmetic!(mul_f64, f64, *);
85
impl_arithmetic!(rem_u8, u8, %);
86
impl_arithmetic!(rem_u16, u16, %);
87
impl_arithmetic!(rem_u32, u32, %);
88
impl_arithmetic!(rem_u64, u64, %);
89
impl_arithmetic!(rem_i8, i8, %);
90
impl_arithmetic!(rem_i16, i16, %);
91
impl_arithmetic!(rem_i32, i32, %);
92
impl_arithmetic!(rem_i64, i64, %);
93
impl_arithmetic!(rem_f16, pf16, %);
94
impl_arithmetic!(rem_f32, f32, %);
95
impl_arithmetic!(rem_f64, f64, %);
96
97
macro_rules! impl_rhs_arithmetic {
98
($name:ident, $type:ty, $operand:ident) => {
99
#[pymethods]
100
impl PySeries {
101
fn $name(&self, py: Python<'_>, other: $type) -> PyResult<Self> {
102
py.enter_polars_series(|| Ok(other.$operand(&self.series.read())))
103
}
104
}
105
};
106
}
107
108
impl_rhs_arithmetic!(add_u8_rhs, u8, add);
109
impl_rhs_arithmetic!(add_u16_rhs, u16, add);
110
impl_rhs_arithmetic!(add_u32_rhs, u32, add);
111
impl_rhs_arithmetic!(add_u64_rhs, u64, add);
112
impl_rhs_arithmetic!(add_i8_rhs, i8, add);
113
impl_rhs_arithmetic!(add_i16_rhs, i16, add);
114
impl_rhs_arithmetic!(add_i32_rhs, i32, add);
115
impl_rhs_arithmetic!(add_i64_rhs, i64, add);
116
impl_rhs_arithmetic!(add_f16_rhs, pf16, add);
117
impl_rhs_arithmetic!(add_f32_rhs, f32, add);
118
impl_rhs_arithmetic!(add_f64_rhs, f64, add);
119
impl_rhs_arithmetic!(sub_u8_rhs, u8, sub);
120
impl_rhs_arithmetic!(sub_u16_rhs, u16, sub);
121
impl_rhs_arithmetic!(sub_u32_rhs, u32, sub);
122
impl_rhs_arithmetic!(sub_u64_rhs, u64, sub);
123
impl_rhs_arithmetic!(sub_i8_rhs, i8, sub);
124
impl_rhs_arithmetic!(sub_i16_rhs, i16, sub);
125
impl_rhs_arithmetic!(sub_i32_rhs, i32, sub);
126
impl_rhs_arithmetic!(sub_i64_rhs, i64, sub);
127
impl_rhs_arithmetic!(sub_f16_rhs, pf16, sub);
128
impl_rhs_arithmetic!(sub_f32_rhs, f32, sub);
129
impl_rhs_arithmetic!(sub_f64_rhs, f64, sub);
130
impl_rhs_arithmetic!(div_u8_rhs, u8, div);
131
impl_rhs_arithmetic!(div_u16_rhs, u16, div);
132
impl_rhs_arithmetic!(div_u32_rhs, u32, div);
133
impl_rhs_arithmetic!(div_u64_rhs, u64, div);
134
impl_rhs_arithmetic!(div_i8_rhs, i8, div);
135
impl_rhs_arithmetic!(div_i16_rhs, i16, div);
136
impl_rhs_arithmetic!(div_i32_rhs, i32, div);
137
impl_rhs_arithmetic!(div_i64_rhs, i64, div);
138
impl_rhs_arithmetic!(div_f16_rhs, pf16, div);
139
impl_rhs_arithmetic!(div_f32_rhs, f32, div);
140
impl_rhs_arithmetic!(div_f64_rhs, f64, div);
141
impl_rhs_arithmetic!(mul_u8_rhs, u8, mul);
142
impl_rhs_arithmetic!(mul_u16_rhs, u16, mul);
143
impl_rhs_arithmetic!(mul_u32_rhs, u32, mul);
144
impl_rhs_arithmetic!(mul_u64_rhs, u64, mul);
145
impl_rhs_arithmetic!(mul_i8_rhs, i8, mul);
146
impl_rhs_arithmetic!(mul_i16_rhs, i16, mul);
147
impl_rhs_arithmetic!(mul_i32_rhs, i32, mul);
148
impl_rhs_arithmetic!(mul_i64_rhs, i64, mul);
149
impl_rhs_arithmetic!(mul_f16_rhs, pf16, mul);
150
impl_rhs_arithmetic!(mul_f32_rhs, f32, mul);
151
impl_rhs_arithmetic!(mul_f64_rhs, f64, mul);
152
impl_rhs_arithmetic!(rem_u8_rhs, u8, rem);
153
impl_rhs_arithmetic!(rem_u16_rhs, u16, rem);
154
impl_rhs_arithmetic!(rem_u32_rhs, u32, rem);
155
impl_rhs_arithmetic!(rem_u64_rhs, u64, rem);
156
impl_rhs_arithmetic!(rem_i8_rhs, i8, rem);
157
impl_rhs_arithmetic!(rem_i16_rhs, i16, rem);
158
impl_rhs_arithmetic!(rem_i32_rhs, i32, rem);
159
impl_rhs_arithmetic!(rem_i64_rhs, i64, rem);
160
impl_rhs_arithmetic!(rem_f16_rhs, pf16, rem);
161
impl_rhs_arithmetic!(rem_f32_rhs, f32, rem);
162
impl_rhs_arithmetic!(rem_f64_rhs, f64, rem);
163
164