polars_ops/series/ops/
negate.rs

1use polars_core::prelude::*;
2
3pub fn negate(s: &Series) -> PolarsResult<Series> {
4    use DataType::*;
5    let out = match s.dtype() {
6        #[cfg(feature = "dtype-i8")]
7        Int8 => s.i8().unwrap().wrapping_neg().into_series(),
8        #[cfg(feature = "dtype-i16")]
9        Int16 => s.i16().unwrap().wrapping_neg().into_series(),
10        Int32 => s.i32().unwrap().wrapping_neg().into_series(),
11        Int64 => s.i64().unwrap().wrapping_neg().into_series(),
12        #[cfg(feature = "dtype-f16")]
13        Float16 => s.f16().unwrap().wrapping_neg().into_series(),
14        Float32 => s.f32().unwrap().wrapping_neg().into_series(),
15        Float64 => s.f64().unwrap().wrapping_neg().into_series(),
16        #[cfg(feature = "dtype-decimal")]
17        Decimal(_, _) => {
18            let ca = s.decimal().unwrap();
19            let precision = ca.precision();
20            let scale = ca.scale();
21
22            let out = ca.physical().wrapping_neg();
23            out.into_decimal_unchecked(precision, scale).into_series()
24        },
25        #[cfg(feature = "dtype-duration")]
26        Duration(_) => {
27            let physical = s.to_physical_repr();
28            let ca = physical.i64().unwrap();
29            let out = ca.wrapping_neg().into_series();
30            out.cast(s.dtype())?
31        },
32        dt => polars_bail!(opq = neg, dt),
33    };
34    Ok(out)
35}