@@ -3,9 +3,6 @@ using DerivableInterfaces: @interface
33using Dictionaries: Dictionary
44using SparseArraysBase: SparseArrayDOK
55
6- # TODO : Delete this.
7- # # using BlockArrays: blocks
8-
96struct BlockSparseArray{
107 T,
118 N,
@@ -27,40 +24,48 @@ const BlockSparseVector{T,A<:AbstractVector{T},Blocks<:AbstractVector{A},Axes<:T
2724 T,1 ,A,Blocks,Axes
2825}
2926
27+ # TODO : Rename to `sparsemortar`.
3028function BlockSparseArray (
3129 block_data:: Dictionary{<:Block{N},<:AbstractArray{<:Any,N}} ,
3230 axes:: Tuple{Vararg{AbstractUnitRange,N}} ,
3331) where {N}
3432 blocks = default_blocks (block_data, axes)
33+ # TODO : Rename to `sparsemortar`.
3534 return BlockSparseArray (blocks, axes)
3635end
3736
37+ # TODO : Rename to `sparsemortar`.
3838function BlockSparseArray (
3939 block_indices:: Vector{<:Block{N}} ,
4040 block_data:: Vector{<:AbstractArray{<:Any,N}} ,
4141 axes:: Tuple{Vararg{AbstractUnitRange,N}} ,
4242) where {N}
43+ # TODO : Rename to `sparsemortar`.
4344 return BlockSparseArray (Dictionary (block_indices, block_data), axes)
4445end
4546
47+ # TODO : Rename to `sparsemortar`.
4648function BlockSparseArray {T,N,A,Blocks} (
4749 blocks:: AbstractArray{<:AbstractArray{T,N},N} , axes:: Tuple{Vararg{AbstractUnitRange,N}}
4850) where {T,N,A<: AbstractArray{T,N} ,Blocks<: AbstractArray{A,N} }
4951 return BlockSparseArray {T,N,A,Blocks,typeof(axes)} (blocks, axes)
5052end
5153
54+ # TODO : Rename to `sparsemortar`.
5255function BlockSparseArray {T,N,A} (
5356 blocks:: AbstractArray{<:AbstractArray{T,N},N} , axes:: Tuple{Vararg{AbstractUnitRange,N}}
5457) where {T,N,A<: AbstractArray{T,N} }
5558 return BlockSparseArray {T,N,A,typeof(blocks)} (blocks, axes)
5659end
5760
61+ # TODO : Rename to `sparsemortar`.
5862function BlockSparseArray {T,N} (
5963 blocks:: AbstractArray{<:AbstractArray{T,N},N} , axes:: Tuple{Vararg{AbstractUnitRange,N}}
6064) where {T,N}
6165 return BlockSparseArray {T,N,eltype(blocks),typeof(blocks),typeof(axes)} (blocks, axes)
6266end
6367
68+ # TODO : Rename to `sparsemortar`.
6469function BlockSparseArray {T,N} (
6570 block_data:: Dictionary{Block{N,Int},<:AbstractArray{T,N}} ,
6671 axes:: Tuple{Vararg{AbstractUnitRange,N}} ,
@@ -70,99 +75,88 @@ function BlockSparseArray{T,N}(
7075end
7176
7277function BlockSparseArray {T,N,A} (
73- axes:: Tuple{Vararg{AbstractUnitRange,N}}
78+ :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange,N}}
7479) where {T,N,A<: AbstractArray{T,N} }
7580 blocks = default_blocks (A, axes)
7681 return BlockSparseArray {T,N,A} (blocks, axes)
7782end
7883
7984function BlockSparseArray {T,N,A} (
80- axes:: Vararg{AbstractUnitRange,N}
85+ :: UndefInitializer , axes:: Vararg{AbstractUnitRange,N}
8186) where {T,N,A<: AbstractArray{T,N} }
82- return BlockSparseArray {T,N,A} (axes)
87+ return BlockSparseArray {T,N,A} (undef, axes)
8388end
8489
8590function BlockSparseArray {T,N,A} (
86- dims:: Tuple{Vararg{Vector{Int},N}}
91+ :: UndefInitializer , dims:: Tuple{Vararg{Vector{Int},N}}
8792) where {T,N,A<: AbstractArray{T,N} }
88- return BlockSparseArray {T,N,A} (blockedrange .(dims))
93+ return BlockSparseArray {T,N,A} (undef, blockedrange .(dims))
8994end
9095
9196# Fix ambiguity error.
92- function BlockSparseArray {T,0,A} (axes:: Tuple{} ) where {T,A<: AbstractArray{T,0} }
97+ function BlockSparseArray {T,0,A} (
98+ :: UndefInitializer , axes:: Tuple{}
99+ ) where {T,A<: AbstractArray{T,0} }
93100 blocks = default_blocks (A, axes)
94101 return BlockSparseArray {T,0,A} (blocks, axes)
95102end
96103
97104function BlockSparseArray {T,N,A} (
98- dims:: Vararg{Vector{Int},N}
105+ :: UndefInitializer , dims:: Vararg{Vector{Int},N}
99106) where {T,N,A<: AbstractArray{T,N} }
100- return BlockSparseArray {T,N,A} (dims)
101- end
102-
103- function BlockSparseArray {T,N} (axes:: Tuple{Vararg{AbstractUnitRange,N}} ) where {T,N}
104- return BlockSparseArray {T,N,default_arraytype(T, axes)} (axes)
105- end
106-
107- function BlockSparseArray {T,N} (axes:: Vararg{AbstractUnitRange,N} ) where {T,N}
108- return BlockSparseArray {T,N} (axes)
107+ return BlockSparseArray {T,N,A} (undef, dims)
109108end
110109
111- function BlockSparseArray {T,0} (axes:: Tuple{} ) where {T}
112- return BlockSparseArray {T,0,default_arraytype(T, axes)} (axes)
113- end
114-
115- function BlockSparseArray {T,N} (dims:: Tuple{Vararg{Vector{Int},N}} ) where {T,N}
116- return BlockSparseArray {T,N} (blockedrange .(dims))
117- end
118-
119- function BlockSparseArray {T,N} (dims:: Vararg{Vector{Int},N} ) where {T,N}
120- return BlockSparseArray {T,N} (dims)
110+ function BlockSparseArray {T,N} (
111+ :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange,N}}
112+ ) where {T,N}
113+ return BlockSparseArray {T,N,default_arraytype(T, axes)} (undef, axes)
121114end
122115
123- function BlockSparseArray {T} (dims:: Tuple{Vararg{Vector{Int}}} ) where {T}
124- return BlockSparseArray {T,length(dims)} (dims)
116+ function BlockSparseArray {T,N} (
117+ :: UndefInitializer , axes:: Vararg{AbstractUnitRange,N}
118+ ) where {T,N}
119+ return BlockSparseArray {T,N} (undef, axes)
125120end
126121
127- function BlockSparseArray {T} ( axes:: Tuple{Vararg{AbstractUnitRange} } ) where {T}
128- return BlockSparseArray {T,length( axes)} (axes)
122+ function BlockSparseArray {T,0} ( :: UndefInitializer , axes:: Tuple{} ) where {T}
123+ return BlockSparseArray {T,0,default_arraytype(T, axes)} (undef, axes)
129124end
130125
131- function BlockSparseArray {T} (axes:: Tuple{} ) where {T}
132- return BlockSparseArray {T,length(axes)} (axes)
126+ function BlockSparseArray {T,N} (
127+ :: UndefInitializer , dims:: Tuple{Vararg{Vector{Int},N}}
128+ ) where {T,N}
129+ return BlockSparseArray {T,N} (undef, blockedrange .(dims))
133130end
134131
135- function BlockSparseArray {T} ( dims:: Vararg{Vector{Int}} ) where {T}
136- return BlockSparseArray {T} ( dims)
132+ function BlockSparseArray {T,N} ( :: UndefInitializer , dims:: Vararg{Vector{Int},N } ) where {T,N }
133+ return BlockSparseArray {T,N} (undef, dims)
137134end
138135
139- function BlockSparseArray {T} (axes :: Vararg{AbstractUnitRange } ) where {T}
140- return BlockSparseArray {T} (axes )
136+ function BlockSparseArray {T} (:: UndefInitializer , dims :: Tuple{ Vararg{Vector{Int}} } ) where {T}
137+ return BlockSparseArray {T,length(dims)} (undef, dims )
141138end
142139
143- function BlockSparseArray {T} () where {T}
144- return BlockSparseArray {T} (())
140+ function BlockSparseArray {T} (
141+ :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange}}
142+ ) where {T}
143+ return BlockSparseArray {T,length(axes)} (undef, axes)
145144end
146145
147- # undef
148- function BlockSparseArray {T,N,A,Blocks} (
149- :: UndefInitializer , args...
150- ) where {T,N,A<: AbstractArray{T,N} ,Blocks<: AbstractArray{A,N} }
151- return BlockSparseArray {T,N,A,Blocks} (args... )
146+ function BlockSparseArray {T} (:: UndefInitializer , axes:: Tuple{} ) where {T}
147+ return BlockSparseArray {T,length(axes)} (undef, axes)
152148end
153149
154- function BlockSparseArray {T,N,A} (
155- :: UndefInitializer , args...
156- ) where {T,N,A<: AbstractArray{T,N} }
157- return BlockSparseArray {T,N,A} (args... )
150+ function BlockSparseArray {T} (:: UndefInitializer , dims:: Vararg{Vector{Int}} ) where {T}
151+ return BlockSparseArray {T} (undef, dims)
158152end
159153
160- function BlockSparseArray {T,N } (:: UndefInitializer , args ... ) where {T,N }
161- return BlockSparseArray {T,N} (args ... )
154+ function BlockSparseArray {T} (:: UndefInitializer , axes :: Vararg{AbstractUnitRange} ) where {T}
155+ return BlockSparseArray {T} (undef, axes )
162156end
163157
164- function BlockSparseArray {T} (:: UndefInitializer , args ... ) where {T}
165- return BlockSparseArray {T} (args ... )
158+ function BlockSparseArray {T} (:: UndefInitializer ) where {T}
159+ return BlockSparseArray {T} (undef, () )
166160end
167161
168162# Base `AbstractArray` interface
0 commit comments