@@ -14,13 +14,13 @@ pub struct LeastSquaresOutput<A: Scalar> {
14
14
15
15
/// Wraps `*gelsd`
16
16
pub trait LeastSquaresSvdDivideConquer_ : Scalar {
17
- unsafe fn least_squares (
17
+ fn least_squares (
18
18
a_layout : MatrixLayout ,
19
19
a : & mut [ Self ] ,
20
20
b : & mut [ Self ] ,
21
21
) -> Result < LeastSquaresOutput < Self > > ;
22
22
23
- unsafe fn least_squares_nrhs (
23
+ fn least_squares_nrhs (
24
24
a_layout : MatrixLayout ,
25
25
a : & mut [ Self ] ,
26
26
b_layout : MatrixLayout ,
@@ -38,7 +38,7 @@ macro_rules! impl_least_squares {
38
38
39
39
( @body, $scalar: ty, $gelsd: path, $( $rwork: ident) ,* ) => {
40
40
impl LeastSquaresSvdDivideConquer_ for $scalar {
41
- unsafe fn least_squares(
41
+ fn least_squares(
42
42
l: MatrixLayout ,
43
43
a: & mut [ Self ] ,
44
44
b: & mut [ Self ] ,
@@ -47,7 +47,7 @@ macro_rules! impl_least_squares {
47
47
Self :: least_squares_nrhs( l, a, b_layout, b)
48
48
}
49
49
50
- unsafe fn least_squares_nrhs(
50
+ fn least_squares_nrhs(
51
51
a_layout: MatrixLayout ,
52
52
a: & mut [ Self ] ,
53
53
b_layout: MatrixLayout ,
@@ -95,23 +95,25 @@ macro_rules! impl_least_squares {
95
95
$(
96
96
let mut $rwork = [ Self :: Real :: zero( ) ] ;
97
97
) *
98
- $gelsd(
99
- m,
100
- n,
101
- nrhs,
102
- a_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( a) ,
103
- a_layout. lda( ) ,
104
- b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
105
- b_layout. lda( ) ,
106
- & mut singular_values,
107
- rcond,
108
- & mut rank,
109
- & mut work_size,
110
- -1 ,
111
- $( & mut $rwork, ) *
112
- & mut iwork_size,
113
- & mut info,
114
- ) ;
98
+ unsafe {
99
+ $gelsd(
100
+ m,
101
+ n,
102
+ nrhs,
103
+ a_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( a) ,
104
+ a_layout. lda( ) ,
105
+ b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
106
+ b_layout. lda( ) ,
107
+ & mut singular_values,
108
+ rcond,
109
+ & mut rank,
110
+ & mut work_size,
111
+ -1 ,
112
+ $( & mut $rwork, ) *
113
+ & mut iwork_size,
114
+ & mut info,
115
+ )
116
+ } ;
115
117
info. as_lapack_result( ) ?;
116
118
117
119
// calc
@@ -123,23 +125,25 @@ macro_rules! impl_least_squares {
123
125
let lrwork = $rwork[ 0 ] . to_usize( ) . unwrap( ) ;
124
126
let mut $rwork = vec![ Self :: Real :: zero( ) ; lrwork] ;
125
127
) *
126
- $gelsd(
127
- m,
128
- n,
129
- nrhs,
130
- a_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( a) ,
131
- a_layout. lda( ) ,
132
- b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
133
- b_layout. lda( ) ,
134
- & mut singular_values,
135
- rcond,
136
- & mut rank,
137
- & mut work,
138
- lwork as i32 ,
139
- $( & mut $rwork, ) *
140
- & mut iwork,
141
- & mut info,
142
- ) ;
128
+ unsafe {
129
+ $gelsd(
130
+ m,
131
+ n,
132
+ nrhs,
133
+ a_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( a) ,
134
+ a_layout. lda( ) ,
135
+ b_t. as_mut( ) . map( |v| v. as_mut_slice( ) ) . unwrap_or( b) ,
136
+ b_layout. lda( ) ,
137
+ & mut singular_values,
138
+ rcond,
139
+ & mut rank,
140
+ & mut work,
141
+ lwork as i32 ,
142
+ $( & mut $rwork, ) *
143
+ & mut iwork,
144
+ & mut info,
145
+ ) ;
146
+ }
143
147
info. as_lapack_result( ) ?;
144
148
145
149
// Skip a_t -> a transpose because A has been destroyed
0 commit comments