Skip to content

Commit d719b46

Browse files
authored
Merge branch 'master' into jishnub/adj_diag_mul
2 parents 2190a61 + 5cf41c4 commit d719b46

File tree

3 files changed

+26
-17
lines changed

3 files changed

+26
-17
lines changed

src/diagonal.jl

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -247,9 +247,7 @@ Base._reverse(A::Diagonal, dims) = reverse!(Matrix(A); dims)
247247
Base._reverse(A::Diagonal, ::Colon) = Diagonal(reverse(A.diag))
248248
Base._reverse!(A::Diagonal, ::Colon) = (reverse!(A.diag); A)
249249

250-
ishermitian(D::Diagonal{<:Number}) = isreal(D.diag)
251250
ishermitian(D::Diagonal) = all(ishermitian, D.diag)
252-
issymmetric(D::Diagonal{<:Number}) = true
253251
issymmetric(D::Diagonal) = all(issymmetric, D.diag)
254252
isposdef(D::Diagonal) = all(isposdef, D.diag)
255253

@@ -702,22 +700,24 @@ end
702700
for Tri in (:UpperTriangular, :LowerTriangular)
703701
UTri = Symbol(:Unit, Tri)
704702
# 2 args
705-
for (fun, f) in zip((:*, :rmul!, :rdiv!, :/), (:identity, :identity, :inv, :inv))
706-
@eval $fun(A::$Tri, D::Diagonal) = $Tri($fun(A.data, D))
707-
@eval $fun(A::$UTri, D::Diagonal) = $Tri(_setdiag!($fun(A.data, D), $f, D.diag))
703+
for (fun, f) in zip((:mul, :rmul!, :rdiv!, :/), (:identity, :identity, :inv, :inv))
704+
g = fun == :mul ? :* : fun
705+
@eval $fun(A::$Tri, D::Diagonal) = $Tri($g(A.data, D))
706+
@eval $fun(A::$UTri, D::Diagonal) = $Tri(_setdiag!($g(A.data, D), $f, D.diag))
708707
end
709-
@eval *(A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
710-
@invoke *(A::AbstractMatrix, D::Diagonal)
711-
@eval *(A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
712-
@invoke *(A::AbstractMatrix, D::Diagonal)
713-
for (fun, f) in zip((:*, :lmul!, :ldiv!, :\), (:identity, :identity, :inv, :inv))
714-
@eval $fun(D::Diagonal, A::$Tri) = $Tri($fun(D, A.data))
715-
@eval $fun(D::Diagonal, A::$UTri) = $Tri(_setdiag!($fun(D, A.data), $f, D.diag))
708+
@eval mul(A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
709+
@invoke mul(A::AbstractMatrix, D::Diagonal)
710+
@eval mul(A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}, D::Diagonal) =
711+
@invoke mul(A::AbstractMatrix, D::Diagonal)
712+
for (fun, f) in zip((:mul, :lmul!, :ldiv!, :\), (:identity, :identity, :inv, :inv))
713+
g = fun == :mul ? :* : fun
714+
@eval $fun(D::Diagonal, A::$Tri) = $Tri($g(D, A.data))
715+
@eval $fun(D::Diagonal, A::$UTri) = $Tri(_setdiag!($g(D, A.data), $f, D.diag))
716716
end
717-
@eval *(D::Diagonal, A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}) =
718-
@invoke *(D::Diagonal, A::AbstractMatrix)
719-
@eval *(D::Diagonal, A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}) =
720-
@invoke *(D::Diagonal, A::AbstractMatrix)
717+
@eval mul(D::Diagonal, A::$Tri{<:Any, <:StridedMaybeAdjOrTransMat}) =
718+
@invoke mul(D::Diagonal, A::AbstractMatrix)
719+
@eval mul(D::Diagonal, A::$UTri{<:Any, <:StridedMaybeAdjOrTransMat}) =
720+
@invoke mul(D::Diagonal, A::AbstractMatrix)
721721
# 3-arg ldiv!
722722
@eval ldiv!(C::$Tri, D::Diagonal, A::$Tri) = $Tri(ldiv!(C.data, D, A.data))
723723
@eval ldiv!(C::$Tri, D::Diagonal, A::$UTri) = $Tri(_setdiag!(ldiv!(C.data, D, A.data), inv, D.diag))

src/matmul.jl

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ julia> [1 1; 0 1] * [1 0; 1 1]
111111
1 1
112112
```
113113
"""
114-
function (*)(A::AbstractMatrix, B::AbstractMatrix)
114+
(*)(A::AbstractMatrix, B::AbstractMatrix) = mul(A, B)
115+
# we add an extra level of indirection to avoid ambiguities in *
116+
function mul(A::AbstractMatrix, B::AbstractMatrix)
115117
TS = promote_op(matprod, eltype(A), eltype(B))
116118
mul!(matprod_dest(A, B, TS), A, B)
117119
end

test/diagonal.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1458,4 +1458,11 @@ end
14581458
@test opnorm(D, Inf) == opnorm(A, Inf)
14591459
end
14601460

1461+
@testset "issymmetric with NaN" begin
1462+
D = Diagonal(fill(NaN,3))
1463+
A = Array(D)
1464+
@test issymmetric(D) == issymmetric(A)
1465+
@test ishermitian(D) == ishermitian(A)
1466+
end
1467+
14611468
end # module TestDiagonal

0 commit comments

Comments
 (0)