From 4910f761dddc7205efb81d1e5fdb7b749cf24363 Mon Sep 17 00:00:00 2001 From: raghav9-97 Date: Tue, 18 Dec 2018 10:44:21 +0530 Subject: [PATCH 1/2] Implemented strides for AbstractArray subtypes --- stdlib/LinearAlgebra/src/adjtrans.jl | 3 +++ stdlib/LinearAlgebra/src/diagonal.jl | 2 ++ stdlib/LinearAlgebra/test/adjtrans.jl | 9 +++++++++ stdlib/LinearAlgebra/test/diagonal.jl | 8 ++++++++ 4 files changed, 22 insertions(+) diff --git a/stdlib/LinearAlgebra/src/adjtrans.jl b/stdlib/LinearAlgebra/src/adjtrans.jl index 8ded77a7eda74..3452f407ddcab 100644 --- a/stdlib/LinearAlgebra/src/adjtrans.jl +++ b/stdlib/LinearAlgebra/src/adjtrans.jl @@ -118,6 +118,9 @@ const AdjOrTransAbsMat{T} = AdjOrTrans{T,<:AbstractMatrix} wrapperop(A::Adjoint) = adjoint wrapperop(A::Transpose) = transpose +strides(a::AdjOrTrans) = size_to_strides(1, size(a)...) +stride(a::AdjOrTrans, i::Integer) = strides(a)[i] + # AbstractArray interface, basic definitions length(A::AdjOrTrans) = length(A.parent) size(v::AdjOrTransAbsVec) = (1, length(v.parent)) diff --git a/stdlib/LinearAlgebra/src/diagonal.jl b/stdlib/LinearAlgebra/src/diagonal.jl index b73279abb2878..4ee32afb4e79d 100644 --- a/stdlib/LinearAlgebra/src/diagonal.jl +++ b/stdlib/LinearAlgebra/src/diagonal.jl @@ -103,6 +103,8 @@ function setindex!(D::Diagonal, v, i::Int, j::Int) return v end +strides(a::Diagonal) = size_to_strides(1, size(a)...) +stride(a::Diagonal, i::Integer) = strides(a)[i] ## structured matrix methods ## function Base.replace_in_print_matrix(A::Diagonal,i::Integer,j::Integer,s::AbstractString) diff --git a/stdlib/LinearAlgebra/test/adjtrans.jl b/stdlib/LinearAlgebra/test/adjtrans.jl index d0e82aafa78bf..0803ed35d6d85 100644 --- a/stdlib/LinearAlgebra/test/adjtrans.jl +++ b/stdlib/LinearAlgebra/test/adjtrans.jl @@ -340,6 +340,15 @@ end @test broadcast(+, Transpose(sparsevec), 1.0, Transpose(sparsevec)) isa Transpose{Float64,SparseVector{Float64,Int}} end +@testset "Strides AdjOrTrans Issue#29705" begin + @test strides(rand(3,5)') == (1, 5) + @test strides([1 2 3; 4 5 6]') == (1, 3) + @test strides(transpose(rand(3,4))) == (1, 4) + @test strides(transpose([1 2 3; 4 5 6])) == (1, 3) + @test stride(rand(3,5)', 1) == 1 + @test stride(rand(3,5)', 2) == 5 +end + @testset "Adjoint/Transpose-wrapped vector multiplication" begin realvec, realmat = [1, 2, 3], [1 2 3; 4 5 6; 7 8 9] complexvec, complexmat = [1im, 2, -3im], [1im 2 3; 4 5 -6im; 7im 8 9] diff --git a/stdlib/LinearAlgebra/test/diagonal.jl b/stdlib/LinearAlgebra/test/diagonal.jl index 2f7f2a698a61f..87f0ad8fbc709 100644 --- a/stdlib/LinearAlgebra/test/diagonal.jl +++ b/stdlib/LinearAlgebra/test/diagonal.jl @@ -311,6 +311,14 @@ end end end +@testset "Strides Diagonal Issue#29705" begin + @test strides(Diagonal([1 2 3 4; 5 6 7 8; 1 3 5 7])) == (1, 3) + @test strides(Diagonal(rand(5, 10))) == (1, 5) + @test strides(Diagonal(rand(5, 10)')) == (1, 5) + @test strides(Diagonal(rand(5, 10)), 1) == 1 + @test strides(Diagonal(rand(5, 10)), 2) == 5 +end + @testset "isposdef" begin @test isposdef(Diagonal(1.0 .+ rand(n))) @test !isposdef(Diagonal(-1.0 * rand(n))) From f1900a9635e66abbf48a63673022b90964709a98 Mon Sep 17 00:00:00 2001 From: raghav9-97 Date: Tue, 18 Dec 2018 12:47:52 +0530 Subject: [PATCH 2/2] Removed strides for Diagonal --- stdlib/LinearAlgebra/src/diagonal.jl | 3 --- stdlib/LinearAlgebra/test/diagonal.jl | 8 -------- 2 files changed, 11 deletions(-) diff --git a/stdlib/LinearAlgebra/src/diagonal.jl b/stdlib/LinearAlgebra/src/diagonal.jl index 4ee32afb4e79d..8e3f7bd244560 100644 --- a/stdlib/LinearAlgebra/src/diagonal.jl +++ b/stdlib/LinearAlgebra/src/diagonal.jl @@ -103,9 +103,6 @@ function setindex!(D::Diagonal, v, i::Int, j::Int) return v end -strides(a::Diagonal) = size_to_strides(1, size(a)...) -stride(a::Diagonal, i::Integer) = strides(a)[i] - ## structured matrix methods ## function Base.replace_in_print_matrix(A::Diagonal,i::Integer,j::Integer,s::AbstractString) i==j ? s : Base.replace_with_centered_mark(s) diff --git a/stdlib/LinearAlgebra/test/diagonal.jl b/stdlib/LinearAlgebra/test/diagonal.jl index 87f0ad8fbc709..2f7f2a698a61f 100644 --- a/stdlib/LinearAlgebra/test/diagonal.jl +++ b/stdlib/LinearAlgebra/test/diagonal.jl @@ -311,14 +311,6 @@ end end end -@testset "Strides Diagonal Issue#29705" begin - @test strides(Diagonal([1 2 3 4; 5 6 7 8; 1 3 5 7])) == (1, 3) - @test strides(Diagonal(rand(5, 10))) == (1, 5) - @test strides(Diagonal(rand(5, 10)')) == (1, 5) - @test strides(Diagonal(rand(5, 10)), 1) == 1 - @test strides(Diagonal(rand(5, 10)), 2) == 5 -end - @testset "isposdef" begin @test isposdef(Diagonal(1.0 .+ rand(n))) @test !isposdef(Diagonal(-1.0 * rand(n)))