@@ -24,113 +24,114 @@ fn test1d<A, Sa, Sb, Tol>(uplo: UPLO, a: ArrayBase<Sa, Ix2>, b: ArrayBase<Sb, Ix
24
24
fn test2d < A , Sa , Sb , Tol > ( uplo : UPLO , a : ArrayBase < Sa , Ix2 > , b : ArrayBase < Sb , Ix2 > , tol : Tol )
25
25
where A : Field + Absolute < Output = Tol > ,
26
26
Sa : Data < Elem = A > ,
27
- Sb : DataMut < Elem = A > + DataOwned ,
27
+ Sb : DataMut < Elem = A > + DataOwned + DataClone ,
28
28
Tol : RealField
29
29
{
30
30
println ! ( "a = {:?}" , & a) ;
31
31
println ! ( "b = {:?}" , & b) ;
32
- let x = a. solve_triangular ( uplo, Diag :: NonUnit , & b) . unwrap ( ) ;
32
+ let ans = b. clone ( ) ;
33
+ let x = a. solve_triangular ( uplo, Diag :: NonUnit , b) . unwrap ( ) ;
33
34
println ! ( "x = {:?}" , & x) ;
34
35
let b_ = a. dot ( & x) ;
35
36
println ! ( "Ax = {:?}" , & b_) ;
36
37
println ! ( "A^Tx = {:?}" , a. t( ) . dot( & x) ) ;
37
38
println ! ( "Ax^T = {:?}" , a. dot( & x. t( ) ) ) ;
38
39
println ! ( "(Ax^T)^T = {:?}" , a. dot( & x. t( ) ) . t( ) ) ;
39
- assert_close_l2 ! ( & b_, & b , tol) ;
40
+ assert_close_l2 ! ( & b_, & ans , tol) ;
40
41
}
41
42
42
43
#[ test]
43
44
fn triangular_1d_upper ( ) {
44
45
let n = 3 ;
45
46
let b: Array1 < f64 > = random_vector ( n) ;
46
47
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) ;
47
- test1d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
48
+ test1d ( UPLO :: Upper , a, b, 1e-7 ) ;
48
49
}
49
50
50
51
#[ test]
51
52
fn triangular_1d_lower ( ) {
52
53
let n = 3 ;
53
54
let b: Array1 < f64 > = random_vector ( n) ;
54
55
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) ;
55
- test1d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
56
+ test1d ( UPLO :: Lower , a, b, 1e-7 ) ;
56
57
}
57
58
58
59
#[ test]
59
60
fn triangular_1d_lower_t ( ) {
60
61
let n = 3 ;
61
62
let b: Array1 < f64 > = random_vector ( n) ;
62
63
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) . reversed_axes ( ) ;
63
- test1d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
64
+ test1d ( UPLO :: Upper , a, b, 1e-7 ) ;
64
65
}
65
66
66
67
#[ test]
67
68
fn triangular_1d_upper_t ( ) {
68
69
let n = 3 ;
69
70
let b: Array1 < f64 > = random_vector ( n) ;
70
71
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) . reversed_axes ( ) ;
71
- test1d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
72
+ test1d ( UPLO :: Lower , a, b, 1e-7 ) ;
72
73
}
73
74
74
75
#[ test]
75
76
fn triangular_2d_upper ( ) {
76
77
let n = 3 ;
77
78
let b: Array2 < f64 > = random_square ( n) ;
78
79
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) ;
79
- test2d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
80
+ test2d ( UPLO :: Upper , a, b, 1e-7 ) ;
80
81
}
81
82
82
83
#[ test]
83
84
fn triangular_2d_lower ( ) {
84
85
let n = 3 ;
85
86
let b: Array2 < f64 > = random_square ( n) ;
86
87
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) ;
87
- test2d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
88
+ test2d ( UPLO :: Lower , a, b, 1e-7 ) ;
88
89
}
89
90
90
91
#[ test]
91
92
fn triangular_2d_lower_t ( ) {
92
93
let n = 3 ;
93
94
let b: Array2 < f64 > = random_square ( n) ;
94
95
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) . reversed_axes ( ) ;
95
- test2d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
96
+ test2d ( UPLO :: Upper , a, b, 1e-7 ) ;
96
97
}
97
98
98
99
#[ test]
99
100
fn triangular_2d_upper_t ( ) {
100
101
let n = 3 ;
101
102
let b: Array2 < f64 > = random_square ( n) ;
102
103
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) . reversed_axes ( ) ;
103
- test2d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
104
+ test2d ( UPLO :: Lower , a, b, 1e-7 ) ;
104
105
}
105
106
106
107
#[ test]
107
108
fn triangular_2d_upper_bt ( ) {
108
109
let n = 3 ;
109
110
let b: Array2 < f64 > = random_square ( n) . reversed_axes ( ) ;
110
111
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) ;
111
- test2d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
112
+ test2d ( UPLO :: Upper , a, b, 1e-7 ) ;
112
113
}
113
114
114
115
#[ test]
115
116
fn triangular_2d_lower_bt ( ) {
116
117
let n = 3 ;
117
118
let b: Array2 < f64 > = random_square ( n) . reversed_axes ( ) ;
118
119
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) ;
119
- test2d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
120
+ test2d ( UPLO :: Lower , a, b, 1e-7 ) ;
120
121
}
121
122
122
123
#[ test]
123
124
fn triangular_2d_lower_t_bt ( ) {
124
125
let n = 3 ;
125
126
let b: Array2 < f64 > = random_square ( n) . reversed_axes ( ) ;
126
127
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Lower ) . reversed_axes ( ) ;
127
- test2d ( UPLO :: Upper , a, b. clone ( ) , 1e-7 ) ;
128
+ test2d ( UPLO :: Upper , a, b, 1e-7 ) ;
128
129
}
129
130
130
131
#[ test]
131
132
fn triangular_2d_upper_t_bt ( ) {
132
133
let n = 3 ;
133
134
let b: Array2 < f64 > = random_square ( n) . reversed_axes ( ) ;
134
135
let a: Array2 < f64 > = random_square ( n) . into_triangular ( UPLO :: Upper ) . reversed_axes ( ) ;
135
- test2d ( UPLO :: Lower , a, b. clone ( ) , 1e-7 ) ;
136
+ test2d ( UPLO :: Lower , a, b, 1e-7 ) ;
136
137
}
0 commit comments