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