powerio_synth/
pegase_like.rs1use rand::RngExt;
4use rand::SeedableRng;
5use rand_chacha::ChaCha8Rng;
6
7use powerio_tx::BalancedNetwork;
8
9use super::{SynthSpec, make_branch, make_buses, net};
10
11pub fn generate_pegase_like(spec: &SynthSpec) -> BalancedNetwork {
12 let n = spec.n.max(2);
13 let mut rng = ChaCha8Rng::seed_from_u64(spec.seed);
14
15 let buses = make_buses(n);
16 let mut branches = Vec::with_capacity((n as f64 * 1.3) as usize);
17
18 for k in 1..n {
19 let parent = rng.random_range(0..k);
20 branches.push(make_branch(parent + 1, k + 1, spec, &mut rng));
21 }
22
23 let extra = n / 3;
24 for _ in 0..extra {
25 let i = rng.random_range(0..n);
26 let mut j = rng.random_range(0..n);
27 if i == j {
28 j = (j + 1) % n;
29 }
30 branches.push(make_branch(i + 1, j + 1, spec, &mut rng));
31 }
32
33 net(format!("synth_pegase_n{n}"), buses, branches)
34}