fraug/augmenters/
permutate.rs1use super::base::Augmenter;
2use rand::rng;
3use rand::seq::SliceRandom;
4use tracing::{info_span};
5pub struct Permutate {
9 pub name: String,
10 pub window_size: usize,
12 pub segment_size: usize,
14 p: f64,
15}
16
17impl Permutate {
18 pub fn new(window_size: usize, segment_size: usize) -> Self {
20 Permutate {
21 name: "Permutate".to_string(),
22 window_size,
23 segment_size,
24 p: 1.0,
25 }
26 }
27}
28
29impl Augmenter for Permutate {
30 fn augment_one(&self, x: &[f64]) -> Vec<f64> {
31 let span = info_span!("", step = "augment_one");
32 let _enter = span.enter();
33 let mut windows = x.chunks(self.window_size).collect::<Vec<_>>();
34 let mut res = Vec::with_capacity(windows.len());
35
36 for window in &mut windows {
37 let mut segments = window.chunks(self.segment_size).collect::<Vec<_>>();
38
39 segments.shuffle(&mut rng());
40 res.push(segments.iter().map(|arr| arr.to_vec()).flatten().collect::<Vec<f64>>());
41 }
42
43 res.iter().map(|arr| arr.to_vec()).flatten().collect()
44 }
45
46 fn get_probability(&self) -> f64 {
47 self.p
48 }
49
50 fn set_probability(&mut self, probability: f64) {
51 self.p = probability;
52 }
53
54 fn get_name(&self) ->String {
55 self.name.clone()
56 }
57}