@@ -214,105 +214,3 @@ macro_rules! impl_eigh_generalized_work_r {
214
214
}
215
215
impl_eigh_generalized_work_r ! ( f64 , lapack_sys:: dsygv_) ;
216
216
impl_eigh_generalized_work_r ! ( f32 , lapack_sys:: ssygv_) ;
217
-
218
- #[ cfg_attr( doc, katexit:: katexit) ]
219
- /// Eigenvalue problem for symmetric/hermite matrix
220
- pub trait EighGeneralized_ : Scalar {
221
- /// Compute generalized right eigenvalue and eigenvectors $Ax = \lambda B x$
222
- ///
223
- /// LAPACK correspondance
224
- /// ----------------------
225
- ///
226
- /// | f32 | f64 | c32 | c64 |
227
- /// |:------|:------|:------|:------|
228
- /// | ssygv | dsygv | chegv | zhegv |
229
- ///
230
- fn eigh_generalized (
231
- calc_eigenvec : bool ,
232
- layout : MatrixLayout ,
233
- uplo : UPLO ,
234
- a : & mut [ Self ] ,
235
- b : & mut [ Self ] ,
236
- ) -> Result < Vec < Self :: Real > > ;
237
- }
238
-
239
- macro_rules! impl_eigh {
240
- ( @real, $scalar: ty, $evg: path) => {
241
- impl_eigh!( @body, $scalar, $evg, ) ;
242
- } ;
243
- ( @complex, $scalar: ty, $evg: path) => {
244
- impl_eigh!( @body, $scalar, $evg, rwork) ;
245
- } ;
246
- ( @body, $scalar: ty, $evg: path, $( $rwork_ident: ident) ,* ) => {
247
- impl EighGeneralized_ for $scalar {
248
- fn eigh_generalized(
249
- calc_v: bool ,
250
- layout: MatrixLayout ,
251
- uplo: UPLO ,
252
- a: & mut [ Self ] ,
253
- b: & mut [ Self ] ,
254
- ) -> Result <Vec <Self :: Real >> {
255
- assert_eq!( layout. len( ) , layout. lda( ) ) ;
256
- let n = layout. len( ) ;
257
- let jobz = if calc_v { JobEv :: All } else { JobEv :: None } ;
258
- let mut eigs: Vec <MaybeUninit <Self :: Real >> = vec_uninit( n as usize ) ;
259
-
260
- $(
261
- let mut $rwork_ident: Vec <MaybeUninit <Self :: Real >> = vec_uninit( 3 * n as usize - 2 ) ;
262
- ) *
263
-
264
- // calc work size
265
- let mut info = 0 ;
266
- let mut work_size = [ Self :: zero( ) ] ;
267
- unsafe {
268
- $evg(
269
- & 1 , // ITYPE A*x = (lambda)*B*x
270
- jobz. as_ptr( ) ,
271
- uplo. as_ptr( ) ,
272
- & n,
273
- AsPtr :: as_mut_ptr( a) ,
274
- & n,
275
- AsPtr :: as_mut_ptr( b) ,
276
- & n,
277
- AsPtr :: as_mut_ptr( & mut eigs) ,
278
- AsPtr :: as_mut_ptr( & mut work_size) ,
279
- & ( -1 ) ,
280
- $( AsPtr :: as_mut_ptr( & mut $rwork_ident) , ) *
281
- & mut info,
282
- ) ;
283
- }
284
- info. as_lapack_result( ) ?;
285
-
286
- // actual evg
287
- let lwork = work_size[ 0 ] . to_usize( ) . unwrap( ) ;
288
- let mut work: Vec <MaybeUninit <Self >> = vec_uninit( lwork) ;
289
- let lwork = lwork as i32 ;
290
- unsafe {
291
- $evg(
292
- & 1 , // ITYPE A*x = (lambda)*B*x
293
- jobz. as_ptr( ) ,
294
- uplo. as_ptr( ) ,
295
- & n,
296
- AsPtr :: as_mut_ptr( a) ,
297
- & n,
298
- AsPtr :: as_mut_ptr( b) ,
299
- & n,
300
- AsPtr :: as_mut_ptr( & mut eigs) ,
301
- AsPtr :: as_mut_ptr( & mut work) ,
302
- & lwork,
303
- $( AsPtr :: as_mut_ptr( & mut $rwork_ident) , ) *
304
- & mut info,
305
- ) ;
306
- }
307
- info. as_lapack_result( ) ?;
308
- let eigs = unsafe { eigs. assume_init( ) } ;
309
- Ok ( eigs)
310
- }
311
- }
312
- } ;
313
- } // impl_eigh!
314
-
315
- impl_eigh ! ( @real, f64 , lapack_sys:: dsygv_) ;
316
- impl_eigh ! ( @real, f32 , lapack_sys:: ssygv_) ;
317
- impl_eigh ! ( @complex, c64, lapack_sys:: zhegv_) ;
318
- impl_eigh ! ( @complex, c32, lapack_sys:: chegv_) ;
0 commit comments