@@ -16,8 +16,15 @@ struct BlockSparseArray{
1616 axes:: Axes
1717end
1818
19- const BlockSparseMatrix{T,A,Blocks,Axes} = BlockSparseArray{T,2 ,A,Blocks,Axes}
20- const BlockSparseVector{T,A,Blocks,Axes} = BlockSparseArray{T,1 ,A,Blocks,Axes}
19+ # TODO : Can this definition be shortened?
20+ const BlockSparseMatrix{T,A<: AbstractMatrix{T} ,Blocks<: AbstractMatrix{A} ,Axes<: Tuple{AbstractUnitRange,AbstractUnitRange} } = BlockSparseArray{
21+ T,2 ,A,Blocks,Axes
22+ }
23+
24+ # TODO : Can this definition be shortened?
25+ const BlockSparseVector{T,A<: AbstractVector{T} ,Blocks<: AbstractVector{A} ,Axes<: Tuple{AbstractUnitRange} } = BlockSparseArray{
26+ T,1 ,A,Blocks,Axes
27+ }
2128
2229function BlockSparseArray (
2330 block_data:: Dictionary{<:Block{N},<:AbstractArray{<:Any,N}} ,
@@ -68,10 +75,38 @@ function BlockSparseArray{T,N,A}(
6875 return BlockSparseArray {T,N,A} (blocks, axes)
6976end
7077
78+ function BlockSparseArray {T,N,A} (
79+ axes:: Vararg{AbstractUnitRange,N}
80+ ) where {T,N,A<: AbstractArray{T,N} }
81+ return BlockSparseArray {T,N,A} (axes)
82+ end
83+
84+ function BlockSparseArray {T,N,A} (
85+ dims:: Tuple{Vararg{Vector{Int},N}}
86+ ) where {T,N,A<: AbstractArray{T,N} }
87+ return BlockSparseArray {T,N,A} (blockedrange .(dims))
88+ end
89+
90+ # Fix ambiguity error.
91+ function BlockSparseArray {T,0,A} (axes:: Tuple{} ) where {T,A<: AbstractArray{T,0} }
92+ blocks = default_blocks (A, axes)
93+ return BlockSparseArray {T,0,A} (blocks, axes)
94+ end
95+
96+ function BlockSparseArray {T,N,A} (
97+ dims:: Vararg{Vector{Int},N}
98+ ) where {T,N,A<: AbstractArray{T,N} }
99+ return BlockSparseArray {T,N,A} (dims)
100+ end
101+
71102function BlockSparseArray {T,N} (axes:: Tuple{Vararg{AbstractUnitRange,N}} ) where {T,N}
72103 return BlockSparseArray {T,N,default_arraytype(T, axes)} (axes)
73104end
74105
106+ function BlockSparseArray {T,N} (axes:: Vararg{AbstractUnitRange,N} ) where {T,N}
107+ return BlockSparseArray {T,N} (axes)
108+ end
109+
75110function BlockSparseArray {T,0} (axes:: Tuple{} ) where {T}
76111 return BlockSparseArray {T,0,default_arraytype(T, axes)} (axes)
77112end
@@ -80,6 +115,10 @@ function BlockSparseArray{T,N}(dims::Tuple{Vararg{Vector{Int},N}}) where {T,N}
80115 return BlockSparseArray {T,N} (blockedrange .(dims))
81116end
82117
118+ function BlockSparseArray {T,N} (dims:: Vararg{Vector{Int},N} ) where {T,N}
119+ return BlockSparseArray {T,N} (dims)
120+ end
121+
83122function BlockSparseArray {T} (dims:: Tuple{Vararg{Vector{Int}}} ) where {T}
84123 return BlockSparseArray {T,length(dims)} (dims)
85124end
@@ -104,37 +143,25 @@ function BlockSparseArray{T}() where {T}
104143 return BlockSparseArray {T} (())
105144end
106145
107- function BlockSparseArray {T,N,A} (
108- :: UndefInitializer , dims:: Tuple
109- ) where {T,N,A<: AbstractArray{T,N} }
110- return BlockSparseArray {T,N,A} (dims)
111- end
112-
113146# undef
114- function BlockSparseArray {T,N} (
115- :: UndefInitializer , axes:: Tuple{Vararg{AbstractUnitRange,N}}
116- ) where {T,N}
117- return BlockSparseArray {T,N} (axes)
118- end
119-
120- function BlockSparseArray {T,N} (
121- :: UndefInitializer , dims:: Tuple{Vararg{Vector{Int},N}}
122- ) where {T,N}
123- return BlockSparseArray {T,N} (dims)
147+ function BlockSparseArray {T,N,A,Blocks} (
148+ :: UndefInitializer , args...
149+ ) where {T,N,A<: AbstractArray{T,N} ,Blocks<: AbstractArray{A,N} }
150+ return BlockSparseArray {T,N,A,Blocks} (args... )
124151end
125152
126- function BlockSparseArray {T} (
127- :: UndefInitializer , axes :: Tuple{Vararg{AbstractUnitRange}}
128- ) where {T}
129- return BlockSparseArray {T} (axes )
153+ function BlockSparseArray {T,N,A } (
154+ :: UndefInitializer , args ...
155+ ) where {T,N,A <: AbstractArray{T,N} }
156+ return BlockSparseArray {T,N,A} (args ... )
130157end
131158
132- function BlockSparseArray {T} (:: UndefInitializer , dims :: Tuple{Vararg{Vector{Int}}} ) where {T}
133- return BlockSparseArray {T} (dims )
159+ function BlockSparseArray {T,N } (:: UndefInitializer , args ... ) where {T,N }
160+ return BlockSparseArray {T,N} (args ... )
134161end
135162
136- function BlockSparseArray {T} (:: UndefInitializer , dims :: Vararg{Vector{Int}} ) where {T}
137- return BlockSparseArray {T} (dims ... )
163+ function BlockSparseArray {T} (:: UndefInitializer , args ... ) where {T}
164+ return BlockSparseArray {T} (args ... )
138165end
139166
140167# Base `AbstractArray` interface
0 commit comments