@@ -21,7 +21,7 @@ pub trait QR_: Sized {
2121macro_rules! impl_qr {
2222 ( $scalar: ty, $qrf: path, $lqf: path, $gqr: path, $glq: path) => {
2323 impl QR_ for $scalar {
24- fn householder( l: MatrixLayout , mut a: & mut [ Self ] ) -> Result <Vec <Self >> {
24+ fn householder( l: MatrixLayout , a: & mut [ Self ] ) -> Result <Vec <Self >> {
2525 let m = l. lda( ) ;
2626 let n = l. len( ) ;
2727 let k = m. min( n) ;
@@ -33,41 +33,59 @@ macro_rules! impl_qr {
3333 unsafe {
3434 match l {
3535 MatrixLayout :: F { .. } => {
36- $qrf( m, n, & mut a, m, & mut tau, & mut work_size, -1 , & mut info) ;
36+ $qrf(
37+ & m,
38+ & n,
39+ AsPtr :: as_mut_ptr( a) ,
40+ & m,
41+ AsPtr :: as_mut_ptr( & mut tau) ,
42+ AsPtr :: as_mut_ptr( & mut work_size) ,
43+ & ( -1 ) ,
44+ & mut info,
45+ ) ;
3746 }
3847 MatrixLayout :: C { .. } => {
39- $lqf( m, n, & mut a, m, & mut tau, & mut work_size, -1 , & mut info) ;
48+ $lqf(
49+ & m,
50+ & n,
51+ AsPtr :: as_mut_ptr( a) ,
52+ & m,
53+ AsPtr :: as_mut_ptr( & mut tau) ,
54+ AsPtr :: as_mut_ptr( & mut work_size) ,
55+ & ( -1 ) ,
56+ & mut info,
57+ ) ;
4058 }
4159 }
4260 }
4361 info. as_lapack_result( ) ?;
4462
4563 // calc
4664 let lwork = work_size[ 0 ] . to_usize( ) . unwrap( ) ;
47- let mut work = unsafe { vec_uninit( lwork) } ;
65+ let mut work: Vec < Self > = unsafe { vec_uninit( lwork) } ;
4866 unsafe {
4967 match l {
5068 MatrixLayout :: F { .. } => {
5169 $qrf(
52- m,
53- n,
54- & mut a ,
55- m,
56- & mut tau,
57- & mut work,
58- lwork as i32 ,
70+ & m,
71+ & n,
72+ AsPtr :: as_mut_ptr ( a ) ,
73+ & m,
74+ AsPtr :: as_mut_ptr ( & mut tau) ,
75+ AsPtr :: as_mut_ptr ( & mut work) ,
76+ & ( lwork as i32 ) ,
5977 & mut info,
6078 ) ;
6179 }
6280 MatrixLayout :: C { .. } => {
6381 $lqf(
64- m,
65- n,
66- & mut a ,
67- m,
68- & mut tau,
69- & mut work,
70- lwork as i32 ,
82+ & m,
83+ & n,
84+ AsPtr :: as_mut_ptr ( a ) ,
85+ & m,
86+ AsPtr :: as_mut_ptr ( & mut tau) ,
87+ AsPtr :: as_mut_ptr ( & mut work) ,
88+ & ( lwork as i32 ) ,
7189 & mut info,
7290 ) ;
7391 }
@@ -78,7 +96,7 @@ macro_rules! impl_qr {
7896 Ok ( tau)
7997 }
8098
81- fn q( l: MatrixLayout , mut a: & mut [ Self ] , tau: & [ Self ] ) -> Result <( ) > {
99+ fn q( l: MatrixLayout , a: & mut [ Self ] , tau: & [ Self ] ) -> Result <( ) > {
82100 let m = l. lda( ) ;
83101 let n = l. len( ) ;
84102 let k = m. min( n) ;
@@ -89,26 +107,58 @@ macro_rules! impl_qr {
89107 let mut work_size = [ Self :: zero( ) ] ;
90108 unsafe {
91109 match l {
92- MatrixLayout :: F { .. } => {
93- $gqr( m, k, k, & mut a, m, & tau, & mut work_size, -1 , & mut info)
94- }
95- MatrixLayout :: C { .. } => {
96- $glq( k, n, k, & mut a, m, & tau, & mut work_size, -1 , & mut info)
97- }
110+ MatrixLayout :: F { .. } => $gqr(
111+ & m,
112+ & k,
113+ & k,
114+ AsPtr :: as_mut_ptr( a) ,
115+ & m,
116+ AsPtr :: as_ptr( & tau) ,
117+ AsPtr :: as_mut_ptr( & mut work_size) ,
118+ & ( -1 ) ,
119+ & mut info,
120+ ) ,
121+ MatrixLayout :: C { .. } => $glq(
122+ & k,
123+ & n,
124+ & k,
125+ AsPtr :: as_mut_ptr( a) ,
126+ & m,
127+ AsPtr :: as_ptr( & tau) ,
128+ AsPtr :: as_mut_ptr( & mut work_size) ,
129+ & ( -1 ) ,
130+ & mut info,
131+ ) ,
98132 }
99133 } ;
100134
101135 // calc
102136 let lwork = work_size[ 0 ] . to_usize( ) . unwrap( ) ;
103- let mut work = unsafe { vec_uninit( lwork) } ;
137+ let mut work: Vec < Self > = unsafe { vec_uninit( lwork) } ;
104138 unsafe {
105139 match l {
106- MatrixLayout :: F { .. } => {
107- $gqr( m, k, k, & mut a, m, & tau, & mut work, lwork as i32 , & mut info)
108- }
109- MatrixLayout :: C { .. } => {
110- $glq( k, n, k, & mut a, m, & tau, & mut work, lwork as i32 , & mut info)
111- }
140+ MatrixLayout :: F { .. } => $gqr(
141+ & m,
142+ & k,
143+ & k,
144+ AsPtr :: as_mut_ptr( a) ,
145+ & m,
146+ AsPtr :: as_ptr( & tau) ,
147+ AsPtr :: as_mut_ptr( & mut work) ,
148+ & ( lwork as i32 ) ,
149+ & mut info,
150+ ) ,
151+ MatrixLayout :: C { .. } => $glq(
152+ & k,
153+ & n,
154+ & k,
155+ AsPtr :: as_mut_ptr( a) ,
156+ & m,
157+ AsPtr :: as_ptr( & tau) ,
158+ AsPtr :: as_mut_ptr( & mut work) ,
159+ & ( lwork as i32 ) ,
160+ & mut info,
161+ ) ,
112162 }
113163 }
114164 info. as_lapack_result( ) ?;
@@ -127,29 +177,29 @@ macro_rules! impl_qr {
127177
128178impl_qr ! (
129179 f64 ,
130- lapack :: dgeqrf ,
131- lapack :: dgelqf ,
132- lapack :: dorgqr ,
133- lapack :: dorglq
180+ lapack_sys :: dgeqrf_ ,
181+ lapack_sys :: dgelqf_ ,
182+ lapack_sys :: dorgqr_ ,
183+ lapack_sys :: dorglq_
134184) ;
135185impl_qr ! (
136186 f32 ,
137- lapack :: sgeqrf ,
138- lapack :: sgelqf ,
139- lapack :: sorgqr ,
140- lapack :: sorglq
187+ lapack_sys :: sgeqrf_ ,
188+ lapack_sys :: sgelqf_ ,
189+ lapack_sys :: sorgqr_ ,
190+ lapack_sys :: sorglq_
141191) ;
142192impl_qr ! (
143193 c64,
144- lapack :: zgeqrf ,
145- lapack :: zgelqf ,
146- lapack :: zungqr ,
147- lapack :: zunglq
194+ lapack_sys :: zgeqrf_ ,
195+ lapack_sys :: zgelqf_ ,
196+ lapack_sys :: zungqr_ ,
197+ lapack_sys :: zunglq_
148198) ;
149199impl_qr ! (
150200 c32,
151- lapack :: cgeqrf ,
152- lapack :: cgelqf ,
153- lapack :: cungqr ,
154- lapack :: cunglq
201+ lapack_sys :: cgeqrf_ ,
202+ lapack_sys :: cgelqf_ ,
203+ lapack_sys :: cungqr_ ,
204+ lapack_sys :: cunglq_
155205) ;
0 commit comments