Path: blob/main/crates/polars-expr/src/dispatch/random.rs
7884 views
use polars_core::error::{PolarsResult, polars_ensure};1use polars_core::prelude::DataType::Float64;2use polars_core::prelude::{Column, IDX_DTYPE};34pub(super) fn shuffle(s: &Column, seed: Option<u64>) -> PolarsResult<Column> {5Ok(s.shuffle(seed))6}78pub(super) fn sample_frac(9s: &[Column],10with_replacement: bool,11shuffle: bool,12seed: Option<u64>,13) -> PolarsResult<Column> {14let src = &s[0];15let frac_s = &s[1];1617polars_ensure!(18frac_s.len() == 1,19ComputeError: "Sample fraction must be a single value."20);2122let frac_s = frac_s.cast(&Float64)?;23let frac = frac_s.f64()?;2425match frac.get(0) {26Some(frac) => src.sample_frac(frac, with_replacement, shuffle, seed),27None => Ok(Column::new_empty(src.name().clone(), src.dtype())),28}29}3031pub(super) fn sample_n(32s: &[Column],33with_replacement: bool,34shuffle: bool,35seed: Option<u64>,36) -> PolarsResult<Column> {37let src = &s[0];38let n_s = &s[1];3940polars_ensure!(41n_s.len() == 1,42ComputeError: "Sample size must be a single value."43);4445let n_s = n_s.cast(&IDX_DTYPE)?;46let n = n_s.idx()?;4748match n.get(0) {49Some(n) => src.sample_n(n as usize, with_replacement, shuffle, seed),50None => Ok(Column::new_empty(src.name().clone(), src.dtype())),51}52}535455