@@ -23,7 +23,7 @@ const AbstractBlockVecOrMat{T} = Union{AbstractBlockMatrix{T}, AbstractBlockVect
23
23
24
24
block2string (b, s) = string (join (map (string,b), ' ×' ), " -blocked " , Base. dims2string (s))
25
25
Base. summary (a:: AbstractBlockArray ) = string (block2string (nblocks (a), size (a)), " " , typeof (a))
26
- Base. similar {T} (block_array:: AbstractBlockArray{T} ) = similar (block_array, T)
26
+ Base. similar (block_array:: AbstractBlockArray{T} ) where {T} = similar (block_array, T)
27
27
Base. IndexStyle (:: Type{<:AbstractBlockArray} ) = IndexCartesian ()
28
28
29
29
"""
@@ -47,12 +47,12 @@ julia> nblocks(A, 3, 2)
47
47
"""
48
48
nblocks (block_array:: AbstractBlockArray , i:: Int ) = nblocks (block_array)[i]
49
49
50
- function nblocks {N} (block_array:: AbstractBlockArray , i:: Vararg{Int, N} )
50
+ function nblocks (block_array:: AbstractBlockArray , i:: Vararg{Int, N} ) where {N}
51
51
if N == 0
52
52
throw (error (" nblocks(A) not implemented" ))
53
53
end
54
54
b = nblocks (block_array)
55
- return ntuple (k-> b[i[k]], Val{N} )
55
+ return ntuple (k-> b[i[k]], Val (N) )
56
56
end
57
57
58
58
@@ -71,7 +71,7 @@ julia> blocksize(A, 2, 1, 3)
71
71
(4, 1, 2)
72
72
```
73
73
"""
74
- function blocksize {T, N} (X, A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} )
74
+ function blocksize (X, A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} ) where {T,N}
75
75
throw (error (" blocksize for " , typeof (A), " is not implemented" ))
76
76
end
77
77
@@ -94,14 +94,14 @@ julia> A[Block(1, 1)]
94
94
1.0 1.0
95
95
```
96
96
"""
97
- immutable Block{N, T}
97
+ struct Block{N, T}
98
98
n:: NTuple{N, T}
99
99
end
100
100
101
- Block {N, T} (n:: Vararg{T, N} ) = Block {N, T} (n)
101
+ Block (n:: Vararg{T, N} ) where {N,T} = Block {N, T} (n)
102
102
103
- @inline function Block {N, T} (blocks:: NTuple{N, Block{1, T}} )
104
- Block {N, T} (ntuple (i -> blocks[i]. n[1 ], Val{N} ))
103
+ @inline function Block (blocks:: NTuple{N, Block{1, T}} ) where {N,T}
104
+ Block {N, T} (ntuple (i -> blocks[i]. n[1 ], Val (N) ))
105
105
end
106
106
107
107
"""
@@ -131,7 +131,7 @@ julia> A[Block(1, 2)]
131
131
5
132
132
```
133
133
"""
134
- function getblock {T, N} (A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} )
134
+ function getblock (A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} ) where {T,N}
135
135
throw (" getblock for " , typeof (A), " is not implemented" )
136
136
end
137
137
@@ -158,11 +158,11 @@ julia> x
158
158
1.0 1.0
159
159
```
160
160
"""
161
- getblock! {T, N} (X, A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} ) = throw (" getblock! for " , typeof (A), " is not implemented" )
161
+ getblock! (X, A:: AbstractBlockArray{T,N} , :: Vararg{Int, N} ) where {T,N} = throw (" getblock! for " , typeof (A), " is not implemented" )
162
162
163
- @inline getblock! {T, N} (X, A:: AbstractBlockArray{T,N} , block:: Block{N} ) = getblock! (X, A, block. n... )
163
+ @inline getblock! (X, A:: AbstractBlockArray{T,N} , block:: Block{N} ) where {T,N} = getblock! (X, A, block. n... )
164
164
@inline getblock! (X, A:: AbstractBlockVector , block:: Block{1} ) = getblock! (X, A, block. n[1 ])
165
- @inline getblock! {T, N} (X, A:: AbstractBlockArray{T, N} , block:: Vararg{Block{1}, N} ) = getblock! (X, A, (Block (block). n). .. )
165
+ @inline getblock! (X, A:: AbstractBlockArray{T, N} , block:: Vararg{Block{1}, N} ) where {T,N} = getblock! (X, A, (Block (block). n). .. )
166
166
167
167
"""
168
168
setblock!(A, v, inds...)
@@ -184,24 +184,24 @@ julia> A
184
184
3.0 4.0 │ 0.0
185
185
```
186
186
"""
187
- setblock! {T, N} (A:: AbstractBlockArray{T,N} , v, :: Vararg{Int, N} ) = throw (" setblock! for " , typeof (A), " is not implemented" )
187
+ setblock! (A:: AbstractBlockArray{T,N} , v, :: Vararg{Int, N} ) where {T,N} = throw (" setblock! for " , typeof (A), " is not implemented" )
188
188
189
- @inline setblock! {T, N} (A:: AbstractBlockArray{T, N} , v, block:: Block{N} ) = setblock! (A, v, block. n... )
189
+ @inline setblock! (A:: AbstractBlockArray{T, N} , v, block:: Block{N} ) where {T,N} = setblock! (A, v, block. n... )
190
190
@inline setblock! (A:: AbstractBlockVector , v, block:: Block{1} ) = setblock! (A, v, block. n[1 ])
191
- @inline setblock! {T, N} (A:: AbstractBlockArray{T, N} , v, block:: Vararg{Block{1}, N} ) = setblock! (A, v, (Block (blockindex ). n). .. )
191
+ @inline setblock! (A:: AbstractBlockArray{T, N} , v, block:: Vararg{Block{1}, N} ) where {T,N} = setblock! (A, v, (Block (block ). n). .. )
192
192
193
193
194
194
"""
195
195
BlockBoundsError([A], [inds...])
196
196
197
197
Thrown when a block indexing operation into a block array, `A`, tried to access an out-of-bounds block, `inds`.
198
198
"""
199
- immutable BlockBoundsError <: Exception
199
+ struct BlockBoundsError <: Exception
200
200
a:: Any
201
201
i:: Any
202
202
BlockBoundsError () = new ()
203
203
BlockBoundsError (a:: AbstractBlockArray ) = new (a)
204
- BlockBoundsError (a:: AbstractBlockArray , i :: ANY ) = new (a,i)
204
+ BlockBoundsError (a:: AbstractBlockArray , @nospecialize (i) ) = new (a,i)
205
205
end
206
206
207
207
function Base. showerror (io:: IO , ex:: BlockBoundsError )
@@ -232,15 +232,15 @@ ERROR: BlockBoundsError: attempt to access 2×2-blocked 2×3 BlockArrays.BlockAr
232
232
[...]
233
233
```
234
234
"""
235
- @inline function blockcheckbounds {T, N} (A:: AbstractBlockArray{T, N} , i:: Vararg{Int, N} )
235
+ @inline function blockcheckbounds (A:: AbstractBlockArray{T, N} , i:: Vararg{Int, N} ) where {T,N}
236
236
if blockcheckbounds (Bool, A, i... )
237
237
return
238
238
else
239
239
throw (BlockBoundsError (A, i))
240
240
end
241
241
end
242
242
243
- @inline function blockcheckbounds {T, N} (:: Type{Bool} , A:: AbstractBlockArray{T, N} , i:: Vararg{Int, N} )
243
+ @inline function blockcheckbounds (:: Type{Bool} , A:: AbstractBlockArray{T, N} , i:: Vararg{Int, N} ) where {T,N}
244
244
n = nblocks (A)
245
245
k = 0
246
246
for idx in 1 : N # using enumerate here will allocate
@@ -275,9 +275,9 @@ julia> Array(A)
275
275
function Base. Array (A:: AbstractBlockArray ) end
276
276
277
277
# Convert to @generated...
278
- @propagate_inbounds Base. getindex {T, N} ( block_arr:: AbstractBlockArray{T, N} , block:: Block{N} ) = getblock (block_arr, block. n... )
279
- @propagate_inbounds Base. setindex! {T, N} (block_arr:: AbstractBlockArray{T, N} , v, block:: Block{N} ) = setblock! (block_arr, v, block. n... )
278
+ @propagate_inbounds Base. getindex ( block_arr:: AbstractBlockArray{T, N} , block:: Block{N} ) where {T,N} = getblock (block_arr, block. n... )
279
+ @propagate_inbounds Base. setindex! (block_arr:: AbstractBlockArray{T, N} , v, block:: Block{N} ) where {T,N} = setblock! (block_arr, v, block. n... )
280
280
@propagate_inbounds Base. getindex ( block_arr:: AbstractBlockVector , block:: Block{1} ) = getblock (block_arr, block. n[1 ])
281
281
@propagate_inbounds Base. setindex! (block_arr:: AbstractBlockVector , v, block:: Block{1} ) = setblock! (block_arr, v, block. n[1 ])
282
- @inline Base. getindex {T, N} (block_arr:: AbstractBlockArray{T,N} , block:: Vararg{Block{1}, N} ) = getblock (block_arr, (Block (block). n). .. )
283
- @inline Base. setindex! {T, N} (block_arr:: AbstractBlockArray{T,N} , v, block:: Vararg{Block{1}, N} ) = setblock! (block_arr, v, (Block (block). n). .. )
282
+ @inline Base. getindex (block_arr:: AbstractBlockArray{T,N} , block:: Vararg{Block{1}, N} ) where {T,N} = getblock (block_arr, (Block (block). n). .. )
283
+ @inline Base. setindex! (block_arr:: AbstractBlockArray{T,N} , v, block:: Vararg{Block{1}, N} ) where {T,N} = setblock! (block_arr, v, (Block (block). n). .. )
0 commit comments