1use alloc::vec::Vec;
7
8pub fn map_positions_to_indexes(
10 positions: &[usize],
11 source_domain_size: usize,
12 folding_factor: usize,
13 num_partitions: usize,
14) -> Vec<usize> {
15 if num_partitions == 1 {
18 return positions.to_vec();
19 }
20
21 let target_domain_size = source_domain_size / folding_factor;
22 let partition_size = target_domain_size / num_partitions;
23
24 let mut result = Vec::new();
25 for position in positions {
26 let partition_idx = position % num_partitions;
27 let local_idx = (position - partition_idx) / num_partitions;
28 let position = partition_idx * partition_size + local_idx;
29 result.push(position);
30 }
31
32 result
33}