Skip to content

Commit b339abd

Browse files
committed
Refactor similar
1 parent 5390f0c commit b339abd

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

src/abstractsparsearray.jl

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,33 @@ function Base.copy(a::AnyAbstractSparseArray)
1515
return copyto!(similar(a), a)
1616
end
1717

18+
function similar_sparsearray(a::AnyAbstractSparseArray, unstored::Unstored)
19+
return SparseArrayDOK(unstored)
20+
end
21+
function similar_sparsearray(a::AnyAbstractSparseArray, T::Type, ax::Tuple)
22+
return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), T, ax)))
23+
end
24+
function similar_sparsearray(a::AnyAbstractSparseArray, T::Type)
25+
return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), T)))
26+
end
27+
function similar_sparsearray(a::AnyAbstractSparseArray, ax::Tuple)
28+
return similar_sparsearray(a, Unstored(unstoredsimilar(unstored(a), ax)))
29+
end
30+
function similar_sparsearray(a::AnyAbstractSparseArray)
31+
return similar_sparsearray(a, Unstored(unstored(a)))
32+
end
33+
34+
function Base.similar(a::AnyAbstractSparseArray, unstored::Unstored)
35+
return similar_sparsearray(a, unstored)
36+
end
1837
function Base.similar(a::AnyAbstractSparseArray)
19-
return SparseArrayDOK(Unstored(unstored(a)))
38+
return similar_sparsearray(a)
2039
end
2140
function Base.similar(a::AnyAbstractSparseArray, T::Type)
22-
return SparseArrayDOK(Unstored(unstoredsimilar(unstored(a), T)))
41+
return similar_sparsearray(a, T)
2342
end
2443
function Base.similar(a::AnyAbstractSparseArray, ax::Tuple)
25-
return similar(a, eltype(a), ax)
44+
return similar_sparsearray(a, ax)
2645
end
2746
function Base.similar(a::AnyAbstractSparseArray, T::Type, ax::Tuple)
2847
return similar_sparsearray(a, T, ax)
@@ -39,9 +58,6 @@ function Base.similar(
3958
)
4059
return similar_sparsearray(a, T, ax)
4160
end
42-
function similar_sparsearray(a::AnyAbstractSparseArray, T::Type, ax::Tuple)
43-
return SparseArrayDOK(Unstored(unstoredsimilar(unstored(a), T, ax)))
44-
end
4561

4662
using DerivableInterfaces: @derive
4763

src/map.jl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,11 @@ function map_sparsearray(f::ZeroPreserving, A::AbstractArray, Bs::AbstractArray.
7979
T = Base.Broadcast.combine_eltypes(f.f, (A, Bs...))
8080
C = similar(A, T)
8181
# TODO: Instead use:
82+
# ```julia
8283
# U = map(f.f, map(unstored, (A, Bs...))...)
8384
# C = similar(A, Unstored(U))
85+
# ```
86+
# though right now `map` doesn't preserve `Zeros` or `BlockZeros`.
8487
return map_sparsearray!(f, C, A, Bs...)
8588
end
8689

0 commit comments

Comments
 (0)