From 83f639bcb735e90de8893bffbbcd6e03e95ec2b3 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Tue, 26 Oct 2021 22:03:30 +0200 Subject: [PATCH] Support missing values in `dot` This is more consistent with matrix product, which propagates `missing` automatically since `*` and `+` are defined for it. --- stdlib/LinearAlgebra/src/generic.jl | 3 +++ stdlib/LinearAlgebra/test/matmul.jl | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/stdlib/LinearAlgebra/src/generic.jl b/stdlib/LinearAlgebra/src/generic.jl index 7ab9b6412cb5b..dd0541505896e 100644 --- a/stdlib/LinearAlgebra/src/generic.jl +++ b/stdlib/LinearAlgebra/src/generic.jl @@ -904,6 +904,9 @@ function dot(x, y) # arbitrary iterables end dot(x::Number, y::Number) = conj(x) * y +dot(::Missing, ::Number) = missing +dot(::Number, ::Missing) = missing +dot(::Missing, ::Missing) = missing function dot(x::AbstractArray, y::AbstractArray) lx = length(x) diff --git a/stdlib/LinearAlgebra/test/matmul.jl b/stdlib/LinearAlgebra/test/matmul.jl index 1017134f2f6d4..8f2a2581ab37f 100644 --- a/stdlib/LinearAlgebra/test/matmul.jl +++ b/stdlib/LinearAlgebra/test/matmul.jl @@ -456,6 +456,11 @@ dot2(x,y) = invoke(dot, Tuple{AbstractArray,AbstractArray}, x,y) end end +@testset "dot with missings" begin + @test dot(1, missing) === dot(missing, 1) === dot(missing, missing) === missing + @test dot([1, missing], [1, 2]) === dot([1, 2], [1, missing]) === missing +end + @testset "Issue 11978" begin A = Matrix{Matrix{Float64}}(undef, 2, 2) A[1,1] = Matrix(1.0I, 3, 3)