Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-expr/src/dispatch/random.rs
7884 views
1
use polars_core::error::{PolarsResult, polars_ensure};
2
use polars_core::prelude::DataType::Float64;
3
use polars_core::prelude::{Column, IDX_DTYPE};
4
5
pub(super) fn shuffle(s: &Column, seed: Option<u64>) -> PolarsResult<Column> {
6
Ok(s.shuffle(seed))
7
}
8
9
pub(super) fn sample_frac(
10
s: &[Column],
11
with_replacement: bool,
12
shuffle: bool,
13
seed: Option<u64>,
14
) -> PolarsResult<Column> {
15
let src = &s[0];
16
let frac_s = &s[1];
17
18
polars_ensure!(
19
frac_s.len() == 1,
20
ComputeError: "Sample fraction must be a single value."
21
);
22
23
let frac_s = frac_s.cast(&Float64)?;
24
let frac = frac_s.f64()?;
25
26
match frac.get(0) {
27
Some(frac) => src.sample_frac(frac, with_replacement, shuffle, seed),
28
None => Ok(Column::new_empty(src.name().clone(), src.dtype())),
29
}
30
}
31
32
pub(super) fn sample_n(
33
s: &[Column],
34
with_replacement: bool,
35
shuffle: bool,
36
seed: Option<u64>,
37
) -> PolarsResult<Column> {
38
let src = &s[0];
39
let n_s = &s[1];
40
41
polars_ensure!(
42
n_s.len() == 1,
43
ComputeError: "Sample size must be a single value."
44
);
45
46
let n_s = n_s.cast(&IDX_DTYPE)?;
47
let n = n_s.idx()?;
48
49
match n.get(0) {
50
Some(n) => src.sample_n(n as usize, with_replacement, shuffle, seed),
51
None => Ok(Column::new_empty(src.name().clone(), src.dtype())),
52
}
53
}
54
55