Path: blob/main/crates/polars-ops/src/series/ops/int_range.rs
6939 views
use polars_core::prelude::*;1use polars_core::series::IsSorted;23pub fn new_int_range<T>(4start: T::Native,5end: T::Native,6step: i64,7name: PlSmallStr,8) -> PolarsResult<Series>9where10T: PolarsIntegerType,11std::ops::Range<T::Native>: DoubleEndedIterator<Item = T::Native>,12{13let mut ca = match step {140 => polars_bail!(InvalidOperation: "step must not be zero"),151 => ChunkedArray::<T>::from_iter_values(name, start..end),162.. => ChunkedArray::<T>::from_iter_values(name, (start..end).step_by(step as usize)),17_ => ChunkedArray::<T>::from_iter_values(18name,19(end..start)20.step_by(step.unsigned_abs() as usize)21.map(|x| start - (x - end)),22),23};2425let is_sorted = if end < start {26IsSorted::Descending27} else {28IsSorted::Ascending29};30ca.set_sorted_flag(is_sorted);3132Ok(ca.into_series())33}343536