@@ -304,7 +304,7 @@ pub fn lobpcg<
304304 } ;
305305
306306 // mask and orthonormalize P and AP
307- let p_ap = previous_p_ap
307+ let mut p_ap = previous_p_ap
308308 . as_ref ( )
309309 . and_then ( |( p, ap) | {
310310 let active_p = ndarray_mask ( p. view ( ) , & activemask) ;
@@ -356,6 +356,8 @@ pub fn lobpcg<
356356 )
357357 } )
358358 . or_else ( |_| {
359+ p_ap = None ;
360+
359361 sorted_eig (
360362 stack ! [ Axis ( 0 ) , stack![ Axis ( 1 ) , xax, xar] , stack![ Axis ( 1 ) , xar. t( ) , rar] ] ,
361363 Some ( stack ! [ Axis ( 0 ) , stack![ Axis ( 1 ) , xx, xr] , stack![ Axis ( 1 ) , xr. t( ) , rr] ] ) ,
@@ -431,14 +433,13 @@ mod tests {
431433 use super :: Order ;
432434 use crate :: close_l2;
433435 use crate :: qr:: * ;
436+ use crate :: generate;
434437 use ndarray:: prelude:: * ;
435- use ndarray_rand:: rand_distr:: Uniform ;
436- use ndarray_rand:: RandomExt ;
437438
438439 /// Test the `sorted_eigen` function
439440 #[ test]
440441 fn test_sorted_eigen ( ) {
441- let matrix = Array2 :: random ( ( 10 , 10 ) , Uniform :: new ( 0. , 10. ) ) ;
442+ let matrix: Array2 < f64 > = generate :: random ( ( 10 , 10 ) ) * 10.0 ;
442443 let matrix = matrix. t ( ) . dot ( & matrix) ;
443444
444445 // return all eigenvectors with largest first
@@ -454,15 +455,15 @@ mod tests {
454455 /// Test the masking function
455456 #[ test]
456457 fn test_masking ( ) {
457- let matrix = Array2 :: random ( ( 10 , 5 ) , Uniform :: new ( 0. , 10. ) ) ;
458+ let matrix: Array2 < f64 > = generate :: random ( ( 10 , 5 ) ) * 10.0 ;
458459 let masked_matrix = ndarray_mask ( matrix. view ( ) , & [ true , true , false , true , false ] ) ;
459460 close_l2 ( & masked_matrix. slice ( s ! [ .., 2 ] ) , & matrix. slice ( s ! [ .., 3 ] ) , 1e-12 ) ;
460461 }
461462
462463 /// Test orthonormalization of a random matrix
463464 #[ test]
464465 fn test_orthonormalize ( ) {
465- let matrix: Array2 < f64 > = Array2 :: random ( ( 10 , 10 ) , Uniform :: new ( - 10. , 10. ) ) ;
466+ let matrix: Array2 < f64 > = generate :: random ( ( 10 , 10 ) ) * 10.0 ;
466467
467468 let ( n, l) = orthonormalize ( matrix. clone ( ) ) . unwrap ( ) ;
468469
@@ -483,10 +484,9 @@ mod tests {
483484 assert_symmetric ( a) ;
484485
485486 let n = a. len_of ( Axis ( 0 ) ) ;
486- let x: Array2 < f64 > = Array2 :: random ( ( n, num) , Uniform :: new ( 0.0 , 1.0 ) ) ;
487+ let x: Array2 < f64 > = generate :: random ( ( n, num) ) ;
487488
488489 let result = lobpcg ( |y| a. dot ( & y) , x, |_| { } , None , 1e-5 , n * 2 , order) ;
489- dbg ! ( & result) ;
490490 match result {
491491 LobpcgResult :: Ok ( vals, _, r_norms) | LobpcgResult :: Err ( vals, _, r_norms, _) => {
492492 // check convergence
@@ -523,7 +523,7 @@ mod tests {
523523 #[ test]
524524 fn test_eigsolver_constructed ( ) {
525525 let n = 50 ;
526- let tmp = Array2 :: random ( ( n, n) , Uniform :: new ( 0.0 , 1.0 ) ) ;
526+ let tmp = generate :: random ( ( n, n) ) ;
527527 //let (v, _) = tmp.qr_square().unwrap();
528528 let ( v, _) = orthonormalize ( tmp) . unwrap ( ) ;
529529
@@ -540,7 +540,7 @@ mod tests {
540540 fn test_eigsolver_constrained ( ) {
541541 let diag = arr1 ( & [ 1. , 2. , 3. , 4. , 5. , 6. , 7. , 8. , 9. , 10. ] ) ;
542542 let a = Array2 :: from_diag ( & diag) ;
543- let x: Array2 < f64 > = Array2 :: random ( ( 10 , 1 ) , Uniform :: new ( 0.0 , 1.0 ) ) ;
543+ let x: Array2 < f64 > = generate :: random ( ( 10 , 1 ) ) ;
544544 let y: Array2 < f64 > = arr2 ( & [
545545 [ 1.0 , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ] ,
546546 [ 0. , 1.0 , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. ] ,
0 commit comments