|
4 | 4 | //! The implementation is based on the SVD approach proposed in the
|
5 | 5 | //! [Improving Fractal Pre-training](http://catalys1.github.io/fractal-pretraining/) paper.
|
6 | 6 |
|
7 |
| -use nalgebra::{Matrix2, Vector2, Rotation2}; |
8 |
| -use rand::Rng; |
| 7 | +use nalgebra::{Matrix2, Rotation2, Vector2}; |
9 | 8 | use rand::distributions::{Distribution, WeightedIndex};
|
| 9 | +use rand::Rng; |
10 | 10 |
|
11 | 11 | use crate::core::affine::Affine;
|
12 | 12 | use crate::core::types::{Matrix2f, Vector2f, IFS};
|
@@ -36,8 +36,15 @@ impl SigmaFactorIFS {
|
36 | 36 | ///
|
37 | 37 | /// A new SigmaFactorIFS
|
38 | 38 | pub fn new(transforms: Vec<Affine>, weights: Vec<f64>) -> Self {
|
39 |
| - assert_eq!(transforms.len(), weights.len(), "Number of transforms must match number of weights"); |
40 |
| - Self { transforms, weights } |
| 39 | + assert_eq!( |
| 40 | + transforms.len(), |
| 41 | + weights.len(), |
| 42 | + "Number of transforms must match number of weights" |
| 43 | + ); |
| 44 | + Self { |
| 45 | + transforms, |
| 46 | + weights, |
| 47 | + } |
41 | 48 | }
|
42 | 49 | }
|
43 | 50 |
|
@@ -71,26 +78,26 @@ pub fn sample_svs<R: Rng>(rng: &mut R, alpha: f64, n: usize) -> Vec<(f64, f64)>
|
71 | 78 | let mut b_upper = alpha;
|
72 | 79 |
|
73 | 80 | // Sample n-1 pairs
|
74 |
| - for _ in 0..(n-1) { |
| 81 | + for _ in 0..(n - 1) { |
75 | 82 | // Define sigma1
|
76 | 83 | let sigma1 = uniform(rng, f64::max(0.0, b_lower / 3.0), f64::min(1.0, b_upper));
|
77 | 84 | b_lower = b_lower - sigma1;
|
78 | 85 | b_upper = b_upper - sigma1;
|
79 | 86 |
|
80 | 87 | // Define sigma2
|
81 |
| - let sigma2 = uniform(rng, f64::max(0.0, 0.5 * b_lower), f64::min(sigma1, 0.5 * b_upper)); |
| 88 | + let sigma2 = uniform( |
| 89 | + rng, |
| 90 | + f64::max(0.0, 0.5 * b_lower), |
| 91 | + f64::min(sigma1, 0.5 * b_upper), |
| 92 | + ); |
82 | 93 | b_lower = b_lower - 2.0 * sigma2 + 3.0;
|
83 | 94 | b_upper = b_upper - 2.0 * sigma2;
|
84 | 95 |
|
85 | 96 | result.push((sigma1, sigma2));
|
86 | 97 | }
|
87 | 98 |
|
88 | 99 | // Last pair
|
89 |
| - let sigma2 = uniform( |
90 |
| - rng, |
91 |
| - f64::max(0.0, 0.5 * (b_upper - 1.0)), |
92 |
| - b_upper / 3.0, |
93 |
| - ); |
| 100 | + let sigma2 = uniform(rng, f64::max(0.0, 0.5 * (b_upper - 1.0)), b_upper / 3.0); |
94 | 101 | let sigma1 = b_upper - 2.0 * sigma2;
|
95 | 102 | result.push((sigma1, sigma2));
|
96 | 103 |
|
@@ -173,9 +180,7 @@ pub fn rand_sigma_factor_ifs<R: Rng>(rng: &mut R) -> SigmaFactorIFS {
|
173 | 180 | }
|
174 | 181 |
|
175 | 182 | // Create probability weights based on determinants
|
176 |
| - let mut weights: Vec<f64> = transforms.iter() |
177 |
| - .map(|t| t.determinant().abs()) |
178 |
| - .collect(); |
| 183 | + let mut weights: Vec<f64> = transforms.iter().map(|t| t.determinant().abs()).collect(); |
179 | 184 |
|
180 | 185 | // Normalize weights
|
181 | 186 | let sum: f64 = weights.iter().sum();
|
|
0 commit comments