@@ -16,8 +16,15 @@ struct BlockSparseArray{
16
16
axes:: Axes
17
17
end
18
18
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
+ }
21
28
22
29
function BlockSparseArray (
23
30
block_data:: Dictionary{<:Block{N},<:AbstractArray{<:Any,N}} ,
@@ -68,10 +75,38 @@ function BlockSparseArray{T,N,A}(
68
75
return BlockSparseArray {T,N,A} (blocks, axes)
69
76
end
70
77
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
+
71
102
function BlockSparseArray {T,N} (axes:: Tuple{Vararg{AbstractUnitRange,N}} ) where {T,N}
72
103
return BlockSparseArray {T,N,default_arraytype(T, axes)} (axes)
73
104
end
74
105
106
+ function BlockSparseArray {T,N} (axes:: Vararg{AbstractUnitRange,N} ) where {T,N}
107
+ return BlockSparseArray {T,N} (axes)
108
+ end
109
+
75
110
function BlockSparseArray {T,0} (axes:: Tuple{} ) where {T}
76
111
return BlockSparseArray {T,0,default_arraytype(T, axes)} (axes)
77
112
end
@@ -80,6 +115,10 @@ function BlockSparseArray{T,N}(dims::Tuple{Vararg{Vector{Int},N}}) where {T,N}
80
115
return BlockSparseArray {T,N} (blockedrange .(dims))
81
116
end
82
117
118
+ function BlockSparseArray {T,N} (dims:: Vararg{Vector{Int},N} ) where {T,N}
119
+ return BlockSparseArray {T,N} (dims)
120
+ end
121
+
83
122
function BlockSparseArray {T} (dims:: Tuple{Vararg{Vector{Int}}} ) where {T}
84
123
return BlockSparseArray {T,length(dims)} (dims)
85
124
end
@@ -104,37 +143,25 @@ function BlockSparseArray{T}() where {T}
104
143
return BlockSparseArray {T} (())
105
144
end
106
145
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
-
113
146
# 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... )
124
151
end
125
152
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 ... )
130
157
end
131
158
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 ... )
134
161
end
135
162
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 ... )
138
165
end
139
166
140
167
# Base `AbstractArray` interface
0 commit comments