@@ -130,11 +130,11 @@ impl<A: Scalar> IndexMut<[i32; 2]> for Tridiagonal<A> {
130
130
pub trait Tridiagonal_ : Scalar + Sized {
131
131
/// Computes the LU factorization of a tridiagonal `m x n` matrix `a` using
132
132
/// partial pivoting with row interchanges.
133
- unsafe fn lu_tridiagonal ( a : Tridiagonal < Self > ) -> Result < LUFactorizedTridiagonal < Self > > ;
133
+ fn lu_tridiagonal ( a : Tridiagonal < Self > ) -> Result < LUFactorizedTridiagonal < Self > > ;
134
134
135
- unsafe fn rcond_tridiagonal ( lu : & LUFactorizedTridiagonal < Self > ) -> Result < Self :: Real > ;
135
+ fn rcond_tridiagonal ( lu : & LUFactorizedTridiagonal < Self > ) -> Result < Self :: Real > ;
136
136
137
- unsafe fn solve_tridiagonal (
137
+ fn solve_tridiagonal (
138
138
lu : & LUFactorizedTridiagonal < Self > ,
139
139
bl : MatrixLayout ,
140
140
t : Transpose ,
@@ -151,18 +151,14 @@ macro_rules! impl_tridiagonal {
151
151
} ;
152
152
( @body, $scalar: ty, $gttrf: path, $gtcon: path, $gttrs: path, $( $iwork: ident) * ) => {
153
153
impl Tridiagonal_ for $scalar {
154
- unsafe fn lu_tridiagonal(
155
- mut a: Tridiagonal <Self >,
156
- ) -> Result <LUFactorizedTridiagonal <Self >> {
154
+ fn lu_tridiagonal( mut a: Tridiagonal <Self >) -> Result <LUFactorizedTridiagonal <Self >> {
157
155
let ( n, _) = a. l. size( ) ;
158
156
let mut du2 = vec![ Zero :: zero( ) ; ( n - 2 ) as usize ] ;
159
157
let mut ipiv = vec![ 0 ; n as usize ] ;
160
158
// We have to calc one-norm before LU factorization
161
159
let a_opnorm_one = a. opnorm_one( ) ;
162
160
let mut info = 0 ;
163
- $gttrf(
164
- n, & mut a. dl, & mut a. d, & mut a. du, & mut du2, & mut ipiv, & mut info,
165
- ) ;
161
+ unsafe { $gttrf( n, & mut a. dl, & mut a. d, & mut a. du, & mut du2, & mut ipiv, & mut info, ) } ;
166
162
info. as_lapack_result( ) ?;
167
163
Ok ( LUFactorizedTridiagonal {
168
164
a,
@@ -172,7 +168,7 @@ macro_rules! impl_tridiagonal {
172
168
} )
173
169
}
174
170
175
- unsafe fn rcond_tridiagonal( lu: & LUFactorizedTridiagonal <Self >) -> Result <Self :: Real > {
171
+ fn rcond_tridiagonal( lu: & LUFactorizedTridiagonal <Self >) -> Result <Self :: Real > {
176
172
let ( n, _) = lu. a. l. size( ) ;
177
173
let ipiv = & lu. ipiv;
178
174
let mut work = vec![ Self :: zero( ) ; 2 * n as usize ] ;
@@ -181,25 +177,27 @@ macro_rules! impl_tridiagonal {
181
177
) *
182
178
let mut rcond = Self :: Real :: zero( ) ;
183
179
let mut info = 0 ;
184
- $gtcon(
185
- NormType :: One as u8 ,
186
- n,
187
- & lu. a. dl,
188
- & lu. a. d,
189
- & lu. a. du,
190
- & lu. du2,
191
- ipiv,
192
- lu. a_opnorm_one,
193
- & mut rcond,
194
- & mut work,
195
- $( & mut $iwork, ) *
196
- & mut info,
197
- ) ;
180
+ unsafe {
181
+ $gtcon(
182
+ NormType :: One as u8 ,
183
+ n,
184
+ & lu. a. dl,
185
+ & lu. a. d,
186
+ & lu. a. du,
187
+ & lu. du2,
188
+ ipiv,
189
+ lu. a_opnorm_one,
190
+ & mut rcond,
191
+ & mut work,
192
+ $( & mut $iwork, ) *
193
+ & mut info,
194
+ ) ;
195
+ }
198
196
info. as_lapack_result( ) ?;
199
197
Ok ( rcond)
200
198
}
201
199
202
- unsafe fn solve_tridiagonal(
200
+ fn solve_tridiagonal(
203
201
lu: & LUFactorizedTridiagonal <Self >,
204
202
b_layout: MatrixLayout ,
205
203
t: Transpose ,
@@ -218,19 +216,21 @@ macro_rules! impl_tridiagonal {
218
216
} ;
219
217
let ( ldb, nrhs) = b_layout. size( ) ;
220
218
let mut info = 0 ;
221
- $gttrs(
222
- t as u8 ,
223
- n,
224
- nrhs,
225
- & lu. a. dl,
226
- & lu. a. d,
227
- & lu. a. du,
228
- & lu. du2,
229
- ipiv,
230
- b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
231
- ldb,
232
- & mut info,
233
- ) ;
219
+ unsafe {
220
+ $gttrs(
221
+ t as u8 ,
222
+ n,
223
+ nrhs,
224
+ & lu. a. dl,
225
+ & lu. a. d,
226
+ & lu. a. du,
227
+ & lu. du2,
228
+ ipiv,
229
+ b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
230
+ ldb,
231
+ & mut info,
232
+ ) ;
233
+ }
234
234
info. as_lapack_result( ) ?;
235
235
if let Some ( b_t) = b_t {
236
236
transpose( b_layout, & b_t, b) ;
0 commit comments