Skip to content

Commit 0470a82

Browse files
committed
Use random_*_using API in ndarray_linalg/tests
1 parent b1fe48f commit 0470a82

21 files changed

+277
-156
lines changed

ndarray-linalg/tests/arnoldi.rs

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ use ndarray_linalg::{krylov::*, *};
33

44
#[test]
55
fn aq_qh_mgs() {
6-
let a: Array2<f64> = random((5, 5));
7-
let v: Array1<f64> = random(5);
6+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
7+
let a: Array2<f64> = random_using((5, 5), &mut rng);
8+
let v: Array1<f64> = random_using(5, &mut rng);
89
let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9);
910
println!("A = \n{:?}", &a);
1011
println!("Q = \n{:?}", &q);
@@ -18,8 +19,9 @@ fn aq_qh_mgs() {
1819

1920
#[test]
2021
fn aq_qh_householder() {
21-
let a: Array2<f64> = random((5, 5));
22-
let v: Array1<f64> = random(5);
22+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
23+
let a: Array2<f64> = random_using((5, 5), &mut rng);
24+
let v: Array1<f64> = random_using(5, &mut rng);
2325
let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9);
2426
println!("A = \n{:?}", &a);
2527
println!("Q = \n{:?}", &q);
@@ -33,8 +35,9 @@ fn aq_qh_householder() {
3335

3436
#[test]
3537
fn aq_qh_mgs_complex() {
36-
let a: Array2<c64> = random((5, 5));
37-
let v: Array1<c64> = random(5);
38+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
39+
let a: Array2<c64> = random_using((5, 5), &mut rng);
40+
let v: Array1<c64> = random_using(5, &mut rng);
3841
let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9);
3942
println!("A = \n{:?}", &a);
4043
println!("Q = \n{:?}", &q);
@@ -48,8 +51,9 @@ fn aq_qh_mgs_complex() {
4851

4952
#[test]
5053
fn aq_qh_householder_complex() {
51-
let a: Array2<c64> = random((5, 5));
52-
let v: Array1<c64> = random(5);
54+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
55+
let a: Array2<c64> = random_using((5, 5), &mut rng);
56+
let v: Array1<c64> = random_using(5, &mut rng);
5357
let (q, h) = arnoldi_mgs(a.clone(), v, 1e-9);
5458
println!("A = \n{:?}", &a);
5559
println!("Q = \n{:?}", &q);

ndarray-linalg/tests/cholesky.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ macro_rules! cholesky {
66
paste::item! {
77
#[test]
88
fn [<cholesky_ $elem>]() {
9-
let a_orig: Array2<$elem> = random_hpd(3);
9+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
10+
let a_orig: Array2<$elem> = random_hpd_using(3, &mut rng);
1011
println!("a = \n{:?}", a_orig);
1112

1213
let upper = a_orig.cholesky(UPLO::Upper).unwrap();
@@ -79,7 +80,8 @@ macro_rules! cholesky_into_lower_upper {
7980
paste::item! {
8081
#[test]
8182
fn [<cholesky_into_lower_upper_ $elem>]() {
82-
let a: Array2<$elem> = random_hpd(3);
83+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
84+
let a: Array2<$elem> = random_hpd_using(3, &mut rng);
8385
println!("a = \n{:?}", a);
8486
let upper = a.cholesky(UPLO::Upper).unwrap();
8587
let fac_upper = a.factorizec(UPLO::Upper).unwrap();
@@ -106,7 +108,8 @@ macro_rules! cholesky_into_inverse {
106108
paste::item! {
107109
#[test]
108110
fn [<cholesky_inverse_ $elem>]() {
109-
let a: Array2<$elem> = random_hpd(3);
111+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
112+
let a: Array2<$elem> = random_hpd_using(3, &mut rng);
110113
println!("a = \n{:?}", a);
111114
let inv = a.invc().unwrap();
112115
assert_close_l2!(&a.dot(&inv), &Array2::eye(3), $rtol);
@@ -134,7 +137,8 @@ macro_rules! cholesky_det {
134137
paste::item! {
135138
#[test]
136139
fn [<cholesky_det_ $elem>]() {
137-
let a: Array2<$elem> = random_hpd(3);
140+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
141+
let a: Array2<$elem> = random_hpd_using(3, &mut rng);
138142
println!("a = \n{:?}", a);
139143
let ln_det = a
140144
.eigvalsh(UPLO::Upper)
@@ -168,8 +172,9 @@ macro_rules! cholesky_solve {
168172
paste::item! {
169173
#[test]
170174
fn [<cholesky_solve_ $elem>]() {
171-
let a: Array2<$elem> = random_hpd(3);
172-
let x: Array1<$elem> = random(3);
175+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
176+
let a: Array2<$elem> = random_hpd_using(3, &mut rng);
177+
let x: Array1<$elem> = random_using(3, &mut rng);
173178
let b = a.dot(&x);
174179
println!("a = \n{:?}", a);
175180
println!("x = \n{:?}", x);

ndarray-linalg/tests/convert.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use ndarray_linalg::*;
33

44
#[test]
55
fn generalize() {
6-
let a: Array3<f64> = random((3, 2, 4).f());
6+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
7+
let a: Array3<f64> = random_using((3, 2, 4).f(), &mut rng);
78
let ans = a.clone();
89
let a: Array3<f64> = convert::generalize(a);
910
assert_eq!(a, ans);

ndarray-linalg/tests/det.rs

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -136,23 +136,45 @@ fn det() {
136136
assert_rclose!(result.1, ln_det, rtol);
137137
}
138138
}
139+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
139140
for rows in 1..5 {
140-
det_impl(random_regular::<f64>(rows), 1e-9);
141-
det_impl(random_regular::<f32>(rows), 1e-4);
142-
det_impl(random_regular::<c64>(rows), 1e-9);
143-
det_impl(random_regular::<c32>(rows), 1e-4);
144-
det_impl(random_regular::<f64>(rows).t().to_owned(), 1e-9);
145-
det_impl(random_regular::<f32>(rows).t().to_owned(), 1e-4);
146-
det_impl(random_regular::<c64>(rows).t().to_owned(), 1e-9);
147-
det_impl(random_regular::<c32>(rows).t().to_owned(), 1e-4);
141+
det_impl(random_regular_using::<f64, _>(rows, &mut rng), 1e-9);
142+
det_impl(random_regular_using::<f32, _>(rows, &mut rng), 1e-4);
143+
det_impl(random_regular_using::<c64, _>(rows, &mut rng), 1e-9);
144+
det_impl(random_regular_using::<c32, _>(rows, &mut rng), 1e-4);
145+
det_impl(
146+
random_regular_using::<f64, _>(rows, &mut rng)
147+
.t()
148+
.to_owned(),
149+
1e-9,
150+
);
151+
det_impl(
152+
random_regular_using::<f32, _>(rows, &mut rng)
153+
.t()
154+
.to_owned(),
155+
1e-4,
156+
);
157+
det_impl(
158+
random_regular_using::<c64, _>(rows, &mut rng)
159+
.t()
160+
.to_owned(),
161+
1e-9,
162+
);
163+
det_impl(
164+
random_regular_using::<c32, _>(rows, &mut rng)
165+
.t()
166+
.to_owned(),
167+
1e-4,
168+
);
148169
}
149170
}
150171

151172
#[test]
152173
fn det_nonsquare() {
153174
macro_rules! det_nonsquare {
154175
($elem:ty, $shape:expr) => {
155-
let a: Array2<$elem> = random($shape);
176+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
177+
let a: Array2<$elem> = random_using($shape, &mut rng);
156178
assert!(a.factorize().unwrap().det().is_err());
157179
assert!(a.factorize().unwrap().sln_det().is_err());
158180
assert!(a.factorize().unwrap().det_into().is_err());

ndarray-linalg/tests/deth.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ fn deth_zero_nonsquare() {
7272
fn deth() {
7373
macro_rules! deth {
7474
($elem:ty, $rows:expr, $atol:expr) => {
75-
let a: Array2<$elem> = random_hermite($rows);
75+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
76+
let a: Array2<$elem> = random_hermite_using($rows, &mut rng);
7677
println!("a = \n{:?}", a);
7778

7879
// Compute determinant from eigenvalues.

ndarray-linalg/tests/eigh.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ fn fixed_t_lower() {
7979

8080
#[test]
8181
fn ssqrt() {
82-
let a: Array2<f64> = random_hpd(3);
82+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
83+
let a: Array2<f64> = random_hpd_using(3, &mut rng);
8384
let ans = a.clone();
8485
let s = a.ssqrt(UPLO::Upper).unwrap();
8586
println!("a = {:?}", &ans);
@@ -92,7 +93,8 @@ fn ssqrt() {
9293

9394
#[test]
9495
fn ssqrt_t() {
95-
let a: Array2<f64> = random_hpd(3).reversed_axes();
96+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
97+
let a: Array2<f64> = random_hpd_using(3, &mut rng).reversed_axes();
9698
let ans = a.clone();
9799
let s = a.ssqrt(UPLO::Upper).unwrap();
98100
println!("a = {:?}", &ans);
@@ -105,7 +107,8 @@ fn ssqrt_t() {
105107

106108
#[test]
107109
fn ssqrt_lower() {
108-
let a: Array2<f64> = random_hpd(3);
110+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
111+
let a: Array2<f64> = random_hpd_using(3, &mut rng);
109112
let ans = a.clone();
110113
let s = a.ssqrt(UPLO::Lower).unwrap();
111114
println!("a = {:?}", &ans);
@@ -118,7 +121,8 @@ fn ssqrt_lower() {
118121

119122
#[test]
120123
fn ssqrt_t_lower() {
121-
let a: Array2<f64> = random_hpd(3).reversed_axes();
124+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
125+
let a: Array2<f64> = random_hpd_using(3, &mut rng).reversed_axes();
122126
let ans = a.clone();
123127
let s = a.ssqrt(UPLO::Lower).unwrap();
124128
println!("a = {:?}", &ans);

ndarray-linalg/tests/householder.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ use ndarray_linalg::{krylov::*, *};
33

44
fn over<A: Scalar + Lapack>(rtol: A::Real) {
55
const N: usize = 4;
6-
let a: Array2<A> = random((N, N * 2));
6+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
7+
let a: Array2<A> = random_using((N, N * 2), &mut rng);
78

89
// Terminate
910
let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate);
@@ -45,7 +46,8 @@ fn over_c64() {
4546

4647
fn full<A: Scalar + Lapack>(rtol: A::Real) {
4748
const N: usize = 5;
48-
let a: Array2<A> = random((N, N));
49+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
50+
let a: Array2<A> = random_using((N, N), &mut rng);
4951
let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate);
5052
let qc: Array2<A> = conjugate(&q);
5153
assert_close_l2!(&qc.dot(&q), &Array::eye(N), rtol; "Check Q^H Q = I");
@@ -71,7 +73,8 @@ fn full_c64() {
7173

7274
fn half<A: Scalar + Lapack>(rtol: A::Real) {
7375
const N: usize = 4;
74-
let a: Array2<A> = random((N, N / 2));
76+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
77+
let a: Array2<A> = random_using((N, N / 2), &mut rng);
7578
let (q, r) = householder(a.axis_iter(Axis(1)), N, rtol, Strategy::Terminate);
7679
let qc: Array2<A> = conjugate(&q);
7780
assert_close_l2!(&qc.dot(&q), &Array::eye(N / 2), rtol; "Check Q^H Q = I");

ndarray-linalg/tests/inner.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ fn size_longer() {
1919

2020
#[test]
2121
fn abs() {
22-
let a: Array1<c32> = random(1);
22+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
23+
let a: Array1<c32> = random_using(1, &mut rng);
2324
let aa = a.inner(&a);
2425
assert_aclose!(aa.re(), a.norm().powi(2), 1e-5);
2526
assert_aclose!(aa.im(), 0.0, 1e-5);

ndarray-linalg/tests/inv.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ fn test_inv_random<A>(n: usize, set_f: bool, rtol: A::Real)
55
where
66
A: Scalar + Lapack,
77
{
8-
let a: Array2<A> = random([n; 2].set_f(set_f));
8+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
9+
let a: Array2<A> = random_using([n; 2].set_f(set_f), &mut rng);
910
let identity = Array2::eye(n);
1011
assert_close_l2!(&a.inv().unwrap().dot(&a), &identity, rtol);
1112
assert_close_l2!(
@@ -24,7 +25,8 @@ fn test_inv_into_random<A>(n: usize, set_f: bool, rtol: A::Real)
2425
where
2526
A: Scalar + Lapack,
2627
{
27-
let a: Array2<A> = random([n; 2].set_f(set_f));
28+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
29+
let a: Array2<A> = random_using([n; 2].set_f(set_f), &mut rng);
2830
let identity = Array2::eye(n);
2931
assert_close_l2!(&a.clone().inv_into().unwrap().dot(&a), &identity, rtol);
3032
assert_close_l2!(

ndarray-linalg/tests/least_squares.rs

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use ndarray_linalg::*;
55

66
/// A is square. `x = A^{-1} b`, `|b - Ax| = 0`
77
fn test_exact<T: Scalar + Lapack>(a: Array2<T>) {
8-
let b: Array1<T> = random(3);
8+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
9+
let b: Array1<T> = random_using(3, &mut rng);
910
let result = a.least_squares(&b).unwrap();
1011
// unpack result
1112
let x = result.solution;
@@ -27,13 +28,15 @@ macro_rules! impl_exact {
2728
paste::item! {
2829
#[test]
2930
fn [<least_squares_ $scalar _exact>]() {
30-
let a: Array2<$scalar> = random((3, 3));
31+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
32+
let a: Array2<$scalar> = random_using((3, 3), &mut rng);
3133
test_exact(a)
3234
}
3335

3436
#[test]
3537
fn [<least_squares_ $scalar _exact_t>]() {
36-
let a: Array2<$scalar> = random((3, 3).f());
38+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
39+
let a: Array2<$scalar> = random_using((3, 3).f(), &mut rng);
3740
test_exact(a)
3841
}
3942
}
@@ -51,7 +54,8 @@ fn test_overdetermined<T: Scalar + Lapack>(a: Array2<T>)
5154
where
5255
T::Real: AbsDiffEq<Epsilon = T::Real>,
5356
{
54-
let b: Array1<T> = random(4);
57+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
58+
let b: Array1<T> = random_using(4, &mut rng);
5559
let result = a.least_squares(&b).unwrap();
5660
// unpack result
5761
let x = result.solution;
@@ -73,13 +77,15 @@ macro_rules! impl_overdetermined {
7377
paste::item! {
7478
#[test]
7579
fn [<least_squares_ $scalar _overdetermined>]() {
76-
let a: Array2<$scalar> = random((4, 3));
80+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
81+
let a: Array2<$scalar> = random_using((4, 3), &mut rng);
7782
test_overdetermined(a)
7883
}
7984

8085
#[test]
8186
fn [<least_squares_ $scalar _overdetermined_t>]() {
82-
let a: Array2<$scalar> = random((4, 3).f());
87+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
88+
let a: Array2<$scalar> = random_using((4, 3).f(), &mut rng);
8389
test_overdetermined(a)
8490
}
8591
}
@@ -94,7 +100,8 @@ impl_overdetermined!(c64);
94100
/// #column > #row case.
95101
/// Linear problem is underdetermined, `|b - Ax| = 0` and `x` is not unique
96102
fn test_underdetermined<T: Scalar + Lapack>(a: Array2<T>) {
97-
let b: Array1<T> = random(3);
103+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
104+
let b: Array1<T> = random_using(3, &mut rng);
98105
let result = a.least_squares(&b).unwrap();
99106
assert_eq!(result.rank, 3);
100107
assert!(result.residual_sum_of_squares.is_none());
@@ -110,13 +117,15 @@ macro_rules! impl_underdetermined {
110117
paste::item! {
111118
#[test]
112119
fn [<least_squares_ $scalar _underdetermined>]() {
113-
let a: Array2<$scalar> = random((3, 4));
120+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
121+
let a: Array2<$scalar> = random_using((3, 4), &mut rng);
114122
test_underdetermined(a)
115123
}
116124

117125
#[test]
118126
fn [<least_squares_ $scalar _underdetermined_t>]() {
119-
let a: Array2<$scalar> = random((3, 4).f());
127+
let mut rng = rand_pcg::Mcg128Xsl64::new(0xcafef00dd15ea5e5);
128+
let a: Array2<$scalar> = random_using((3, 4).f(), &mut rng);
120129
test_underdetermined(a)
121130
}
122131
}

0 commit comments

Comments
 (0)