diff --git a/Project.toml b/Project.toml index 6aa242a..f09f650 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "SparseArraysBase" uuid = "0d5efcca-f356-4864-8770-e1ed8d78f208" authors = ["ITensor developers and contributors"] -version = "0.7.0" +version = "0.7.1" [deps] Accessors = "7d9f7c33-5ae7-4f3b-8dc6-eff91059b697" diff --git a/src/abstractsparsearray.jl b/src/abstractsparsearray.jl index a7d684f..71e3088 100644 --- a/src/abstractsparsearray.jl +++ b/src/abstractsparsearray.jl @@ -15,40 +15,24 @@ function Base.copy(a::AnyAbstractSparseArray) return copyto!(similar(a), a) end -function similar_sparsearray(a::AnyAbstractSparseArray, unstored::Unstored) - return SparseArrayDOK(unstored) -end -function similar_sparsearray(a::AnyAbstractSparseArray, T::Type, ax::Tuple) - return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), T, ax))) -end -function similar_sparsearray(a::AnyAbstractSparseArray, T::Type) - return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), T))) -end -function similar_sparsearray(a::AnyAbstractSparseArray, ax::Tuple) - return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), ax))) -end -function similar_sparsearray(a::AnyAbstractSparseArray) - return similar_sparsearray(a, Unstored(unstored(a))) -end - function Base.similar(a::AnyAbstractSparseArray, unstored::Unstored) - return similar_sparsearray(a, unstored) + return SparseArrayDOK(undef, unstored) end function Base.similar(a::AnyAbstractSparseArray) - return similar_sparsearray(a) + return similar(a, Unstored(unstored(a))) end function Base.similar(a::AnyAbstractSparseArray, T::Type) - return similar_sparsearray(a, T) + return similar(a, Unstored(unstoredsimilar(unstored(a), T))) end function Base.similar(a::AnyAbstractSparseArray, ax::Tuple) - return similar_sparsearray(a, ax) + return similar(a, Unstored(unstoredsimilar(unstored(a), ax))) end function Base.similar(a::AnyAbstractSparseArray, T::Type, ax::Tuple) - return similar_sparsearray(a, T, ax) + return similar(a, Unstored(unstoredsimilar(unstored(a), T, ax))) end # Fix ambiguity error. function Base.similar(a::AnyAbstractSparseArray, T::Type, ax::Tuple{Int,Vararg{Int}}) - return similar_sparsearray(a, T, ax) + return similar(a, Unstored(unstoredsimilar(unstored(a), T, ax))) end # Fix ambiguity error. function Base.similar( @@ -56,7 +40,7 @@ function Base.similar( T::Type, ax::Tuple{Union{Integer,Base.OneTo},Vararg{Union{Integer,Base.OneTo}}}, ) - return similar_sparsearray(a, T, ax) + return similar(a, Unstored(unstoredsimilar(unstored(a), T, ax))) end using DerivableInterfaces: @derive @@ -155,7 +139,7 @@ sparse(::Union{AbstractDict,AbstractDictionary}, dims...) const AbstractDictOrDictionary = Union{AbstractDict,AbstractDictionary} # checked constructor from data: use `setindex!` to validate/convert input function sparse(storage::AbstractDictOrDictionary, unstored::AbstractArray) - A = SparseArrayDOK(Unstored(unstored)) + A = SparseArrayDOK(undef, Unstored(unstored)) for (i, v) in pairs(storage) A[i] = v end @@ -186,10 +170,10 @@ The optional `T` argument specifies the element type, which defaults to `Float64 """ sparsezeros function sparsezeros(::Type{T}, unstored::AbstractArray{<:Any,N}) where {T,N} - return SparseArrayDOK{T,N}(Unstored(unstored)) + return SparseArrayDOK{T,N}(undef, Unstored(unstored)) end function sparsezeros(unstored::AbstractArray{T,N}) where {T,N} - return SparseArrayDOK{T,N}(Unstored(unstored)) + return SparseArrayDOK{T,N}(undef, Unstored(unstored)) end function sparsezeros(::Type{T}, dims::Dims) where {T} return sparsezeros(T, Zeros{T}(dims)) diff --git a/src/sparsearraydok.jl b/src/sparsearraydok.jl index 949667b..902f267 100644 --- a/src/sparsearraydok.jl +++ b/src/sparsearraydok.jl @@ -26,18 +26,18 @@ unstored(a::SparseArrayDOK) = a.unstored Base.size(a::SparseArrayDOK) = size(unstored(a)) Base.axes(a::SparseArrayDOK) = axes(unstored(a)) -function SparseArrayDOK{T,N}(a::Unstored) where {T,N} +function SparseArrayDOK{T,N}(::UndefInitializer, a::Unstored) where {T,N} storage = DOKStorage{T,N}() return _SparseArrayDOK(storage, parent(a)) end -function SparseArrayDOK{T}(a::Unstored) where {T} - return SparseArrayDOK{T,ndims(a)}(a) +function SparseArrayDOK{T}(::UndefInitializer, a::Unstored) where {T} + return SparseArrayDOK{T,ndims(a)}(undef, a) end -function SparseArrayDOK{<:Any,N}(a::Unstored) where {N} +function SparseArrayDOK{<:Any,N}(::UndefInitializer, a::Unstored) where {N} return SparseArrayDOK{eltype(a),N}(a) end -function SparseArrayDOK(a::Unstored) - return SparseArrayDOK{eltype(a),ndims(a)}(a) +function SparseArrayDOK(::UndefInitializer, a::Unstored) + return SparseArrayDOK{eltype(a),ndims(a)}(undef, a) end # Constructors @@ -53,7 +53,7 @@ the length or number of `dims`. SparseArrayDOK{T,N}(::UndefInitializer, dims...) function SparseArrayDOK{T,N}(::UndefInitializer, ax::Tuple{Vararg{Any,N}}) where {T,N} - return SparseArrayDOK{T,N}(Unstored(Zeros{T}(ax))) + return SparseArrayDOK{T,N}(undef, Unstored(Zeros{T}(ax))) end function SparseArrayDOK{T}(::UndefInitializer, ax::Tuple{Vararg{Any,N}}) where {T,N} return SparseArrayDOK{T,N}(undef, ax)