From 1afdee2d48c43b3f0017a738b38e6549dcefdeaa Mon Sep 17 00:00:00 2001 From: brilhana Date: Sat, 5 May 2018 07:49:04 -0400 Subject: [PATCH 1/2] RowVector issue #24590 --- stdlib/LinearAlgebra/src/rowvector.jl | 3 +++ stdlib/LinearAlgebra/test/rowvector.jl | 14 ++++++++++++++ stdlib/LinearAlgebra/test/testgroups | 1 + 3 files changed, 18 insertions(+) create mode 100644 stdlib/LinearAlgebra/test/rowvector.jl diff --git a/stdlib/LinearAlgebra/src/rowvector.jl b/stdlib/LinearAlgebra/src/rowvector.jl index 1b63a35d70625..36a3d617326f8 100644 --- a/stdlib/LinearAlgebra/src/rowvector.jl +++ b/stdlib/LinearAlgebra/src/rowvector.jl @@ -60,3 +60,6 @@ struct RowVector{T,V<:AbstractVector} <: AbstractMatrix{T} end end const ConjRowVector{T,CV<:ConjVector} = RowVector{T,CV} + +# Issue #24590: an inner product on a vector space induces an inner product on the dual space. +dot(x::RowVector, y::RowVector) = dot(transpose(x), transpose(y)) diff --git a/stdlib/LinearAlgebra/test/rowvector.jl b/stdlib/LinearAlgebra/test/rowvector.jl new file mode 100644 index 0000000000000..62f24c742bee9 --- /dev/null +++ b/stdlib/LinearAlgebra/test/rowvector.jl @@ -0,0 +1,14 @@ +# This file is a part of Julia. License is MIT: https://julialang.org/license + +module TestRowVector + +using Test, LinearAlgebra, Random +using LinearAlgebra: dot + +@testset "Issue 24590" begin + a = RowVector([1; 2; 3; 4]) + b = RowVector([2; 3; 6; 10]) + @test dot(a, b) == 66 +end + +end # module TestRowVector diff --git a/stdlib/LinearAlgebra/test/testgroups b/stdlib/LinearAlgebra/test/testgroups index 836d9c77b9204..f7b7290d7d9f4 100644 --- a/stdlib/LinearAlgebra/test/testgroups +++ b/stdlib/LinearAlgebra/test/testgroups @@ -20,3 +20,4 @@ lq hessenberg blas adjtrans +rowvector From 0b09fc2c15dafc70418b7d498807fa7788b02a59 Mon Sep 17 00:00:00 2001 From: brilhana Date: Thu, 14 Jun 2018 16:16:40 -0400 Subject: [PATCH 2/2] Reviewed changes for dot. --- stdlib/LinearAlgebra/src/rowvector.jl | 3 ++- stdlib/LinearAlgebra/test/adjtrans.jl | 8 ++++++++ stdlib/LinearAlgebra/test/rowvector.jl | 14 -------------- stdlib/LinearAlgebra/test/testgroups | 1 - 4 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 stdlib/LinearAlgebra/test/rowvector.jl diff --git a/stdlib/LinearAlgebra/src/rowvector.jl b/stdlib/LinearAlgebra/src/rowvector.jl index 36a3d617326f8..493e19b8f46d0 100644 --- a/stdlib/LinearAlgebra/src/rowvector.jl +++ b/stdlib/LinearAlgebra/src/rowvector.jl @@ -62,4 +62,5 @@ end const ConjRowVector{T,CV<:ConjVector} = RowVector{T,CV} # Issue #24590: an inner product on a vector space induces an inner product on the dual space. -dot(x::RowVector, y::RowVector) = dot(transpose(x), transpose(y)) +dot(x::Transpose{<:AbstractVector{<:Number}}, y::Transpose{<:AbstractVector{<:Number}}) = dot(transpose(x), transpose(y)) +dot(x::Adjoint{<:AbstractVector{<:Number}}, y::Adjoint{<:AbstractVector{<:Number}}) = dot(adjoint(y), adjoint(x)) # note order (y,x): this is to get the correct conjugation \ No newline at end of file diff --git a/stdlib/LinearAlgebra/test/adjtrans.jl b/stdlib/LinearAlgebra/test/adjtrans.jl index 9dd5b068a5dcd..5fc73ac47e576 100644 --- a/stdlib/LinearAlgebra/test/adjtrans.jl +++ b/stdlib/LinearAlgebra/test/adjtrans.jl @@ -460,4 +460,12 @@ end @test B == A .* A' end +@testset "Issue #24590" begin + for T in (Transpose, Adjoint) + @test dot(T([1, 2, 3, 4]), T([2, 3, 6, 10])) == 66 + @test dot(T([1, 2, 3, 4]), (1+2im)*T([2, 3, 6, 10])) == (1+2im)*66 + @test dot((1+2im)*T([1, 2, 3, 4]), T([2, 3, 6, 10])) == (1-2im)*66 + end +end + end # module TestAdjointTranspose diff --git a/stdlib/LinearAlgebra/test/rowvector.jl b/stdlib/LinearAlgebra/test/rowvector.jl deleted file mode 100644 index 62f24c742bee9..0000000000000 --- a/stdlib/LinearAlgebra/test/rowvector.jl +++ /dev/null @@ -1,14 +0,0 @@ -# This file is a part of Julia. License is MIT: https://julialang.org/license - -module TestRowVector - -using Test, LinearAlgebra, Random -using LinearAlgebra: dot - -@testset "Issue 24590" begin - a = RowVector([1; 2; 3; 4]) - b = RowVector([2; 3; 6; 10]) - @test dot(a, b) == 66 -end - -end # module TestRowVector diff --git a/stdlib/LinearAlgebra/test/testgroups b/stdlib/LinearAlgebra/test/testgroups index f7b7290d7d9f4..836d9c77b9204 100644 --- a/stdlib/LinearAlgebra/test/testgroups +++ b/stdlib/LinearAlgebra/test/testgroups @@ -20,4 +20,3 @@ lq hessenberg blas adjtrans -rowvector