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