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/int_range.rs
6939 views
1
use polars_core::prelude::*;
2
use polars_core::series::IsSorted;
3
4
pub fn new_int_range<T>(
5
start: T::Native,
6
end: T::Native,
7
step: i64,
8
name: PlSmallStr,
9
) -> PolarsResult<Series>
10
where
11
T: PolarsIntegerType,
12
std::ops::Range<T::Native>: DoubleEndedIterator<Item = T::Native>,
13
{
14
let mut ca = match step {
15
0 => polars_bail!(InvalidOperation: "step must not be zero"),
16
1 => ChunkedArray::<T>::from_iter_values(name, start..end),
17
2.. => ChunkedArray::<T>::from_iter_values(name, (start..end).step_by(step as usize)),
18
_ => ChunkedArray::<T>::from_iter_values(
19
name,
20
(end..start)
21
.step_by(step.unsigned_abs() as usize)
22
.map(|x| start - (x - end)),
23
),
24
};
25
26
let is_sorted = if end < start {
27
IsSorted::Descending
28
} else {
29
IsSorted::Ascending
30
};
31
ca.set_sorted_flag(is_sorted);
32
33
Ok(ca.into_series())
34
}
35
36