@@ -14,6 +14,7 @@ use crate::{error::*, layout::MatrixLayout, *};
14
14
use cauchy:: * ;
15
15
use num_traits:: { ToPrimitive , Zero } ;
16
16
17
+ #[ derive( Clone , PartialEq , Eq ) ]
17
18
pub enum GeneralizedEigenvalue < T : Scalar > {
18
19
/// Finite generalized eigenvalue: `Finite(α/β, (α, β))`
19
20
Finite ( T , ( T , T ) ) ,
@@ -22,6 +23,15 @@ pub enum GeneralizedEigenvalue<T: Scalar> {
22
23
Indeterminate ( ( T , T ) ) ,
23
24
}
24
25
26
+ impl < T : Scalar > std:: fmt:: Display for GeneralizedEigenvalue < T > {
27
+ fn fmt ( & self , f : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
28
+ match self {
29
+ Self :: Finite ( e, ( a, b) ) => write ! ( f, "{e:.3e} ({a:.3e}/{b:.3e})" ) ,
30
+ Self :: Indeterminate ( ( a, b) ) => write ! ( f, "∞ ({a:.3e}/{b:.3e})" ) ,
31
+ }
32
+ }
33
+ }
34
+
25
35
#[ non_exhaustive]
26
36
pub struct EigGeneralizedWork < T : Scalar > {
27
37
/// Problem size
@@ -464,13 +474,19 @@ macro_rules! impl_eig_generalized_work_r {
464
474
if beta. abs( ) < thresh {
465
475
GeneralizedEigenvalue :: Indeterminate ( ( alpha. clone( ) , beta. clone( ) ) )
466
476
} else {
467
- GeneralizedEigenvalue :: Finite ( alpha / beta, ( alpha. clone( ) , beta. clone( ) ) )
477
+ GeneralizedEigenvalue :: Finite (
478
+ alpha / beta,
479
+ ( alpha. clone( ) , beta. clone( ) ) ,
480
+ )
468
481
}
469
482
} else {
470
483
if beta. is_zero( ) {
471
484
GeneralizedEigenvalue :: Indeterminate ( ( alpha. clone( ) , beta. clone( ) ) )
472
485
} else {
473
- GeneralizedEigenvalue :: Finite ( alpha / beta, ( alpha. clone( ) , beta. clone( ) ) )
486
+ GeneralizedEigenvalue :: Finite (
487
+ alpha / beta,
488
+ ( alpha. clone( ) , beta. clone( ) ) ,
489
+ )
474
490
}
475
491
}
476
492
} )
0 commit comments