11pub mod legacy;
22pub mod error;
3- mod new;
4- mod masked;
53pub ( crate ) mod utils;
64
7- pub ( crate ) mod randomized;
5+ pub mod randomized;
6+
7+ pub mod laczos;
8+
9+ pub use utils:: * ;
810
9- pub use new:: * ;
10- pub use masked:: * ;
11- pub use randomized:: { randomized_svd, PowerIterationNormalizer } ;
1211
1312#[ cfg( test) ]
1413mod simple_comparison_tests {
@@ -19,7 +18,6 @@ mod simple_comparison_tests {
1918 use rand:: { Rng , SeedableRng } ;
2019 use rand:: rngs:: StdRng ;
2120 use rayon:: ThreadPoolBuilder ;
22- use crate :: randomized:: randomized_svd;
2321
2422 fn create_sparse_matrix ( rows : usize , cols : usize , density : f64 ) -> nalgebra_sparse:: coo:: CooMatrix < f64 > {
2523 use rand:: { rngs:: StdRng , Rng , SeedableRng } ;
@@ -77,7 +75,7 @@ mod simple_comparison_tests {
7775
7876 // Run both implementations with the same seed for deterministic behavior
7977 let seed = 42 ;
80- let current_result = svd_dim_seed ( & test_matrix, 0 , seed) . unwrap ( ) ;
78+ let current_result = laczos :: svd_dim_seed ( & test_matrix, 0 , seed) . unwrap ( ) ;
8179 let legacy_result = legacy:: svd_dim_seed ( & test_matrix, 0 , seed) . unwrap ( ) ;
8280
8381 // Compare dimensions
@@ -129,12 +127,12 @@ mod simple_comparison_tests {
129127 let csr = CsrMatrix :: from ( & coo) ;
130128
131129 // Calculate SVD using original method
132- let legacy_svd = svd_dim_seed ( & csr, 0 , seed as u32 ) . unwrap ( ) ;
130+ let legacy_svd = laczos :: svd_dim_seed ( & csr, 0 , seed as u32 ) . unwrap ( ) ;
133131
134132 // Calculate SVD using our masked method (using all columns)
135133 let mask = vec ! [ true ; ncols] ;
136- let masked_matrix = MaskedCSRMatrix :: new ( & csr, mask) ;
137- let current_svd = svd_dim_seed ( & masked_matrix, 0 , seed as u32 ) . unwrap ( ) ;
134+ let masked_matrix = laczos :: masked :: MaskedCSRMatrix :: new ( & csr, mask) ;
135+ let current_svd = laczos :: svd_dim_seed ( & masked_matrix, 0 , seed as u32 ) . unwrap ( ) ;
138136
139137 // Compare with relative tolerance
140138 let rel_tol = 1e-3 ; // 0.1% relative tolerance
@@ -161,13 +159,12 @@ mod simple_comparison_tests {
161159 let test_matrix = create_sparse_matrix ( 100 , 100 , 0.0098 ) ; // 0.98% non-zeros
162160
163161 // Should no longer fail with convergence error
164- let result = svd_dim_seed ( & test_matrix, 50 , 42 ) ;
162+ let result = laczos :: svd_dim_seed ( & test_matrix, 50 , 42 ) ;
165163 assert ! ( result. is_ok( ) , "{}" , format!( "SVD failed on 99.02% sparse matrix, {:?}" , result. err( ) . unwrap( ) ) ) ;
166164 }
167165
168166 #[ test]
169167 fn test_random_svd_computation ( ) {
170- use crate :: { randomized_svd, PowerIterationNormalizer } ;
171168
172169 // Create a matrix with high sparsity (99%)
173170 let test_matrix = create_sparse_matrix ( 1000 , 250 , 0.01 ) ; // 1% non-zeros
@@ -176,12 +173,12 @@ mod simple_comparison_tests {
176173 let csr = CsrMatrix :: from ( & test_matrix) ;
177174
178175 // Run randomized SVD with reasonable defaults for a sparse matrix
179- let result = randomized_svd (
176+ let result = randomized :: randomized_svd (
180177 & csr,
181178 50 , // target rank
182179 10 , // oversampling parameter
183180 3 , // power iterations
184- PowerIterationNormalizer :: QR , // use QR normalization
181+ randomized :: PowerIterationNormalizer :: QR , // use QR normalization
185182 Some ( 42 ) , // random seed
186183 ) ;
187184
@@ -219,7 +216,6 @@ mod simple_comparison_tests {
219216
220217 #[ test]
221218 fn test_randomized_svd_very_large_sparse_matrix ( ) {
222- use crate :: { randomized_svd, PowerIterationNormalizer } ;
223219
224220 // Create a very large matrix with high sparsity (99%)
225221 let test_matrix = create_sparse_matrix ( 100000 , 2500 , 0.01 ) ; // 1% non-zeros
@@ -230,12 +226,12 @@ mod simple_comparison_tests {
230226 // Run randomized SVD with reasonable defaults for a sparse matrix
231227 let threadpool = ThreadPoolBuilder :: new ( ) . num_threads ( 10 ) . build ( ) . unwrap ( ) ;
232228 let result = threadpool. install ( || {
233- randomized_svd (
229+ randomized :: randomized_svd (
234230 & csr,
235231 50 , // target rank
236232 10 , // oversampling parameter
237- 2 , // power iterations
238- PowerIterationNormalizer :: QR , // use QR normalization
233+ 7 , // power iterations
234+ randomized :: PowerIterationNormalizer :: QR , // use QR normalization
239235 Some ( 42 ) , // random seed
240236 )
241237 } ) ;
@@ -251,7 +247,6 @@ mod simple_comparison_tests {
251247
252248 #[ test]
253249 fn test_randomized_svd_small_sparse_matrix ( ) {
254- use crate :: { randomized_svd, PowerIterationNormalizer } ;
255250
256251 // Create a very large matrix with high sparsity (99%)
257252 let test_matrix = create_sparse_matrix ( 1000 , 250 , 0.01 ) ; // 1% non-zeros
@@ -262,12 +257,12 @@ mod simple_comparison_tests {
262257 // Run randomized SVD with reasonable defaults for a sparse matrix
263258 let threadpool = ThreadPoolBuilder :: new ( ) . num_threads ( 10 ) . build ( ) . unwrap ( ) ;
264259 let result = threadpool. install ( || {
265- randomized_svd (
260+ randomized :: randomized_svd (
266261 & csr,
267262 50 , // target rank
268263 10 , // oversampling parameter
269264 2 , // power iterations
270- PowerIterationNormalizer :: QR , // use QR normalization
265+ randomized :: PowerIterationNormalizer :: QR , // use QR normalization
271266 Some ( 42 ) , // random seed
272267 )
273268 } ) ;
0 commit comments