Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-plan/src/dsl/function_expr/range.rs
6940 views
1
use std::fmt;
2
3
use polars_core::prelude::*;
4
use polars_ops::series::ClosedInterval;
5
#[cfg(feature = "temporal")]
6
use polars_time::{ClosedWindow, Duration};
7
#[cfg(feature = "serde")]
8
use serde::{Deserialize, Serialize};
9
10
use super::{DataTypeExpr, FunctionExpr};
11
12
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
13
#[cfg_attr(feature = "dsl-schema", derive(schemars::JsonSchema))]
14
#[derive(Clone, PartialEq, Debug, Hash)]
15
pub enum RangeFunction {
16
IntRange {
17
step: i64,
18
dtype: DataTypeExpr,
19
},
20
IntRanges {
21
dtype: DataTypeExpr,
22
},
23
LinearSpace {
24
closed: ClosedInterval,
25
},
26
LinearSpaces {
27
closed: ClosedInterval,
28
array_width: Option<usize>,
29
},
30
#[cfg(feature = "dtype-date")]
31
DateRange {
32
interval: Duration,
33
closed: ClosedWindow,
34
},
35
#[cfg(feature = "dtype-date")]
36
DateRanges {
37
interval: Duration,
38
closed: ClosedWindow,
39
},
40
#[cfg(feature = "dtype-datetime")]
41
DatetimeRange {
42
interval: Duration,
43
closed: ClosedWindow,
44
time_unit: Option<TimeUnit>,
45
time_zone: Option<TimeZone>,
46
},
47
#[cfg(feature = "dtype-datetime")]
48
DatetimeRanges {
49
interval: Duration,
50
closed: ClosedWindow,
51
time_unit: Option<TimeUnit>,
52
time_zone: Option<TimeZone>,
53
},
54
#[cfg(feature = "dtype-time")]
55
TimeRange {
56
interval: Duration,
57
closed: ClosedWindow,
58
},
59
#[cfg(feature = "dtype-time")]
60
TimeRanges {
61
interval: Duration,
62
closed: ClosedWindow,
63
},
64
}
65
66
impl From<RangeFunction> for FunctionExpr {
67
fn from(value: RangeFunction) -> Self {
68
Self::Range(value)
69
}
70
}
71
72
impl fmt::Display for RangeFunction {
73
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> std::fmt::Result {
74
use RangeFunction::*;
75
let s = match self {
76
IntRange { .. } => "int_range",
77
IntRanges { .. } => "int_ranges",
78
LinearSpace { .. } => "linear_space",
79
LinearSpaces { .. } => "linear_spaces",
80
#[cfg(feature = "dtype-date")]
81
DateRange { .. } => "date_range",
82
#[cfg(feature = "temporal")]
83
DateRanges { .. } => "date_ranges",
84
#[cfg(feature = "dtype-datetime")]
85
DatetimeRange { .. } => "datetime_range",
86
#[cfg(feature = "dtype-datetime")]
87
DatetimeRanges { .. } => "datetime_ranges",
88
#[cfg(feature = "dtype-time")]
89
TimeRange { .. } => "time_range",
90
#[cfg(feature = "dtype-time")]
91
TimeRanges { .. } => "time_ranges",
92
};
93
write!(f, "{s}")
94
}
95
}
96
97