Skip to content

Commit 5f1b00a

Browse files
committed
mgeigenx use new_or_inplace
1 parent b1fd236 commit 5f1b00a

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

lib/PDL/LinearAlgebra.pm

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2779,17 +2779,16 @@ sub PDL::mgeigenx {
27792779
my $di = $_[0]->dims_internal;
27802780
my ($a, $b, %opt) = @_;
27812781
my @adims = $a->dims;
2782+
$_ = $_->new_or_inplace->t for $a, $b;
27822783
my (%result);
27832784
$_ = $a->_similar_null for my ($vl, $vr, $beta);
2784-
$a = $a->copy;
2785-
$b = $b->t->copy;
27862785
my @w = map $a->_similar_null, $a->_is_complex ? 1 : 1..2;
27872786
$_ = null for my ($rconde, $rcondv, $info, $ilo, $ihi, $rscale, $lscale, $abnrm, $bbnrm);
27882787
my $jobvl = $vector2jobvl{$opt{vector}} || $opt{rcondition} ? 1 : 0;
27892788
my $jobvr = $vector2jobvr{$opt{vector}} || $opt{rcondition} ? 1 : 0;
27902789
my $sense = $rcondition2sense{$opt{rcondition}} || 0;
2791-
my $balanc = ($opt{'scale'}?2:0) | ($opt{permute}?1:0);
2792-
$a->t->_call_method('ggevx', $balanc, $jobvl, $jobvr, $sense, $b, @w,
2790+
my $balanc = ($opt{scale}?2:0) | ($opt{permute}?1:0);
2791+
$a->_call_method('ggevx', $balanc, $jobvl, $jobvr, $sense, $b, @w,
27932792
$beta, $vl, $vr, $ilo, $ihi, $lscale, $rscale,
27942793
$abnrm, $bbnrm, $rconde, $rcondv, $info);
27952794
(my $w, $vl, $vr) = _eigen_extract($jobvl, $jobvr, $vl, $vr, @w);
@@ -2799,21 +2798,20 @@ sub PDL::mgeigenx {
27992798
} elsif ($info) {
28002799
laerror("mgeigenx: Error from hgeqz or tgevc");
28012800
}
2802-
$result{'aschur'} = $a if $opt{'schur'};
2803-
$result{'bschur'} = $b->t->sever if $opt{'schur'};
2804-
$result{'balance'} = cat $ilo, $ihi if $opt{'permute'};
2801+
$result{qw(aschur bschur)} = map $_->t, $a, $b if $opt{schur};
2802+
$result{balance} = cat $ilo, $ihi if $opt{permute};
28052803
@result{qw(info anorm bnorm)} = ($info, $abnrm, $bbnrm);
2806-
@result{qw(lscale rscale)} = ($lscale, $rscale) if $opt{'scale'};
2804+
@result{qw(lscale rscale)} = ($lscale, $rscale) if $opt{scale};
28072805
# Doesn't use lacpy2 =(sqrt **2 , **2) without unnecessary overflow
28082806
if ($sense & 2) {
2809-
$result{'rcondv'} = $rcondv;
2810-
$result{'verror'} = lamch(0) * sqrt($abnrm->pow(2) + $bbnrm->pow(2)) /$rcondv if $opt{'error'};
2807+
$result{rcondv} = $rcondv;
2808+
$result{verror} = lamch(0) * sqrt($abnrm->pow(2) + $bbnrm->pow(2)) /$rcondv if $opt{error};
28112809
}
28122810
if ($sense & 1) {
2813-
$result{'rconde'} = $rconde;
2814-
$result{'eerror'} = lamch(0) * sqrt($abnrm->pow(2) + $bbnrm->pow(2)) /$rconde if $opt{'error'};
2811+
$result{rconde} = $rconde;
2812+
$result{eerror} = lamch(0) * sqrt($abnrm->pow(2) + $bbnrm->pow(2)) /$rconde if $opt{error};
28152813
}
2816-
($w, $beta, ($vector2jobvl{$opt{vector}}?$vl->t->sever:()), ($vector2jobvr{$opt{vector}}?$vr->t->sever:()), %result);
2814+
($w, $beta, ($vector2jobvl{$opt{vector}}?$vl->t:()), ($vector2jobvr{$opt{vector}}?$vr->t:()), %result);
28172815
}
28182816
28192817
=head2 msymeigen

0 commit comments

Comments
 (0)