From d239e11c8058b924d540a2548b36bcbc1a8f1f9e Mon Sep 17 00:00:00 2001 From: Sobhan Mohammadpour Date: Tue, 30 Aug 2022 11:55:33 -0400 Subject: [PATCH 1/3] decremenet should always return a vector --- src/SparseArrays.jl | 7 ++++++- src/readonly.jl | 2 -- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/SparseArrays.jl b/src/SparseArrays.jl index bdd4ab0e..02cf5572 100644 --- a/src/SparseArrays.jl +++ b/src/SparseArrays.jl @@ -49,7 +49,12 @@ function decrement!(A::AbstractArray{T}) where T<:Integer for i in eachindex(A); A[i] -= oneunit(T) end A end -decrement(A::AbstractArray{<:Integer}) = decrement!(copy(A)) +decrement(A::AbstractVector{T}) where T<:Integer = let x = Vector{T}(undef, length(A)) + for (i, j) in zip(eachindex(A), eachindex(x)) + x[j] = A[i] - oneunit(T) + end + x +end include("readonly.jl") diff --git a/src/readonly.jl b/src/readonly.jl index 1e229480..95734131 100644 --- a/src/readonly.jl +++ b/src/readonly.jl @@ -37,5 +37,3 @@ Base.copy(x::ReadOnly) = ReadOnly(copy(parent(x))) (==)(x::ReadOnly, y::ReadOnly) = parent(x) == parent(y) Base.dataids(::ReadOnly) = tuple() -# Convert from 1-based to 0-based indices -decrement(A::ReadOnly) = decrement!(copy(parent(A))) \ No newline at end of file From 5d72ee6b0648901352f3c7d55b548f00be28a2c2 Mon Sep 17 00:00:00 2001 From: Sobhan Mohammadpour Date: Tue, 30 Aug 2022 17:18:21 -0400 Subject: [PATCH 2/3] fix performance --- src/SparseArrays.jl | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/SparseArrays.jl b/src/SparseArrays.jl index 02cf5572..8914415a 100644 --- a/src/SparseArrays.jl +++ b/src/SparseArrays.jl @@ -49,12 +49,7 @@ function decrement!(A::AbstractArray{T}) where T<:Integer for i in eachindex(A); A[i] -= oneunit(T) end A end -decrement(A::AbstractVector{T}) where T<:Integer = let x = Vector{T}(undef, length(A)) - for (i, j) in zip(eachindex(A), eachindex(x)) - x[j] = A[i] - oneunit(T) - end - x -end +decrement(A::AbstractVector) = decrement!(Vector(A)) include("readonly.jl") From fa498403f98a1f5cedc19fac1a30ee4f35ba1dd6 Mon Sep 17 00:00:00 2001 From: Sobhan Mohammadpour Date: Tue, 30 Aug 2022 17:32:46 -0400 Subject: [PATCH 3/3] fix performance issue --- src/SparseArrays.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/SparseArrays.jl b/src/SparseArrays.jl index 8914415a..8d463a8c 100644 --- a/src/SparseArrays.jl +++ b/src/SparseArrays.jl @@ -49,8 +49,9 @@ function decrement!(A::AbstractArray{T}) where T<:Integer for i in eachindex(A); A[i] -= oneunit(T) end A end -decrement(A::AbstractVector) = decrement!(Vector(A)) - +decrement(A::AbstractArray) = let y = Array(A) + y .= y .- oneunit(eltype(A)) +end include("readonly.jl") include("abstractsparse.jl")