Skip to content

Commit 7ad19e6

Browse files
committed
Merge __muldiag! methods
1 parent a6557e2 commit 7ad19e6

File tree

1 file changed

+16
-29
lines changed

1 file changed

+16
-29
lines changed

stdlib/LinearAlgebra/src/diagonal.jl

Lines changed: 16 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -442,16 +442,6 @@ function __muldiag_nonzeroalpha!(out, D::Diagonal, B::UpperOrLowerTriangular, _a
442442
end
443443
out
444444
end
445-
function __muldiag!(out, D::Diagonal, B, _add::MulAddMul)
446-
require_one_based_indexing(out, B)
447-
alpha, beta = _add.alpha, _add.beta
448-
if iszero(alpha)
449-
_rmul_or_fill!(out, beta)
450-
else
451-
__muldiag_nonzeroalpha!(out, D, B, _add)
452-
end
453-
return out
454-
end
455445

456446
@inline function __muldiag_nonzeroalpha!(out, A, D::Diagonal, _add::MulAddMul{ais1,bis0}) where {ais1,bis0}
457447
beta = _add.beta
@@ -495,16 +485,6 @@ function __muldiag_nonzeroalpha!(out, A::UpperOrLowerTriangular, D::Diagonal, _a
495485
end
496486
out
497487
end
498-
function __muldiag!(out, A, D::Diagonal, _add::MulAddMul)
499-
require_one_based_indexing(out, A)
500-
alpha, beta = _add.alpha, _add.beta
501-
if iszero(alpha)
502-
_rmul_or_fill!(out, beta)
503-
else
504-
__muldiag_nonzeroalpha!(out, A, D, _add)
505-
end
506-
return out
507-
end
508488

509489
@inline function __muldiag_nonzeroalpha!(out::Diagonal, D1::Diagonal, D2::Diagonal, _add::MulAddMul)
510490
d1 = D1.diag
@@ -515,15 +495,7 @@ end
515495
end
516496
out
517497
end
518-
function __muldiag!(out::Diagonal, D1::Diagonal, D2::Diagonal, _add::MulAddMul)
519-
alpha, beta = _add.alpha, _add.beta
520-
if iszero(alpha)
521-
_rmul_or_fill!(out.diag, beta)
522-
else
523-
__muldiag_nonzeroalpha!(out, D1, D2, _add)
524-
end
525-
return out
526-
end
498+
527499
@inline function __muldiag_nonzeroalpha!(out, D1::Diagonal, D2::Diagonal, _add::MulAddMul)
528500
d1 = D1.diag
529501
d2 = D2.diag
@@ -532,11 +504,26 @@ end
532504
end
533505
out
534506
end
507+
508+
# muldiag mainly handles the zero-alpha case, so that we need only
509+
# specialize the non-trivial case
510+
function __muldiag!(out, A, B, _add::MulAddMul)
511+
require_one_based_indexing(out, A, B)
512+
alpha, beta = _add.alpha, _add.beta
513+
if iszero(alpha)
514+
_rmul_or_fill!(out, beta)
515+
else
516+
__muldiag_nonzeroalpha!(out, A, B, _add)
517+
end
518+
return out
519+
end
520+
535521
function __muldiag!(out, D1::Diagonal, D2::Diagonal, _add::MulAddMul{ais1}) where {ais1}
536522
require_one_based_indexing(out)
537523
alpha, beta = _add.alpha, _add.beta
538524
_rmul_or_fill!(out, beta)
539525
if !iszero(alpha)
526+
# we ony update the diagonal
540527
_add_bis1 = MulAddMul{ais1,false,typeof(alpha),Bool}(alpha,true)
541528
__muldiag_nonzeroalpha!(out, D1, D2, _add_bis1)
542529
end

0 commit comments

Comments
 (0)