Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-ops/src/series/ops/abs.rs
8446 views
1
use polars_core::prelude::*;
2
3
/// Convert numerical values to their absolute value.
4
pub fn abs(s: &Series) -> PolarsResult<Series> {
5
use DataType::*;
6
let out = match s.dtype() {
7
#[cfg(feature = "dtype-i8")]
8
Int8 => s.i8().unwrap().wrapping_abs().into_series(),
9
#[cfg(feature = "dtype-i16")]
10
Int16 => s.i16().unwrap().wrapping_abs().into_series(),
11
Int32 => s.i32().unwrap().wrapping_abs().into_series(),
12
Int64 => s.i64().unwrap().wrapping_abs().into_series(),
13
#[cfg(feature = "dtype-i128")]
14
Int128 => s.i128().unwrap().wrapping_abs().into_series(),
15
#[cfg(feature = "dtype-f16")]
16
Float16 => s.f16().unwrap().wrapping_abs().into_series(),
17
Float32 => s.f32().unwrap().wrapping_abs().into_series(),
18
Float64 => s.f64().unwrap().wrapping_abs().into_series(),
19
#[cfg(feature = "dtype-decimal")]
20
Decimal(_, _) => {
21
let ca = s.decimal().unwrap();
22
let precision = ca.precision();
23
let scale = ca.scale();
24
25
let out = ca.physical().wrapping_abs();
26
out.into_decimal_unchecked(precision, scale).into_series()
27
},
28
#[cfg(feature = "dtype-duration")]
29
Duration(_) => {
30
let physical = s.to_physical_repr();
31
let ca = physical.i64().unwrap();
32
let out = ca.wrapping_abs().into_series();
33
out.cast(s.dtype())?
34
},
35
dt if dt.is_unsigned_integer() => s.clone(),
36
dt => polars_bail!(opq = abs, dt),
37
};
38
Ok(out)
39
}
40
41