@@ -5,7 +5,18 @@ A `Block` is simply a wrapper around a set of indices or enums so that it can be
5
5
indexing a `AbstractBlockArray` with a `Block` the a block at that block index will be returned instead of
6
6
a single element.
7
7
8
+ It can be constructed and used to index into `BlockArrays` in the following manner:
9
+
8
10
```jldoctest
11
+ julia> Block(1)
12
+ Block(1)
13
+
14
+ julia> Block(1, 2)
15
+ Block(1, 2)
16
+
17
+ julia> Block((Block(1), Block(2)))
18
+ Block(1, 2)
19
+
9
20
julia> A = BlockArray(ones(2,3), [1, 1], [2, 1])
10
21
2×2-blocked 2×3 BlockMatrix{Float64}:
11
22
1.0 1.0 │ 1.0
119
130
A `BlockIndex` is an index which stores a global index in two parts: the block
120
131
and the offset index into the block.
121
132
122
- It can be used to index into `BlockArrays` in the following manner:
133
+ It can be constructed and used to index into `BlockArrays` in the following manner:
123
134
124
135
```jldoctest
136
+ julia> BlockIndex((1,2), (3,4))
137
+ Block(1, 2)[3, 4]
138
+
139
+ julia> Block(1)[3] === BlockIndex((1), (3))
140
+ true
141
+
142
+ julia> Block(1,2)[3,4] === BlockIndex((1,2), (3,4))
143
+ true
144
+
145
+ julia> BlockIndex((Block(1)[3], Block(2)[4]))
146
+ Block(1, 2)[3, 4]
147
+
125
148
julia> arr = Array(reshape(1:25, (5,5)));
126
149
127
150
julia> a = BlockedArray(arr, [3,2], [1,4])
@@ -133,10 +156,10 @@ julia> a = BlockedArray(arr, [3,2], [1,4])
133
156
4 │ 9 14 19 24
134
157
5 │ 10 15 20 25
135
158
136
- julia> a[BlockIndex(( 1,2), ( 1,2)) ]
159
+ julia> a[Block( 1,2)[ 1,2] ]
137
160
11
138
161
139
- julia> a[BlockIndex(( 2,2), ( 2,3)) ]
162
+ julia> a[Block( 2,2)[ 2,3] ]
140
163
20
141
164
```
142
165
"""
@@ -196,13 +219,54 @@ end
196
219
"""
197
220
BlockIndexRange(block, startind:stopind)
198
221
199
- represents a cartesian range inside a block.
222
+ Represents a cartesian range inside a block.
223
+
224
+ It can be constructed and used to index into `BlockArrays` in the following manner:
225
+
226
+ ```jldoctest
227
+ julia> BlockIndexRange(Block(1,2), (2:3,3:4))
228
+ Block(1, 2)[2:3, 3:4]
229
+
230
+ julia> Block(1)[2:3] === BlockIndexRange(Block(1), 2:3)
231
+ true
232
+
233
+ julia> Block(1,2)[2:3,3:4] === BlockIndexRange(Block(1,2), (2:3,3:4))
234
+ true
235
+
236
+ julia> BlockIndexRange((Block(1)[2:3], Block(2)[3:4]))
237
+ Block(1, 2)[2:3, 3:4]
238
+
239
+ julia> arr = Array(reshape(1:25, (5,5)));
240
+
241
+ julia> a = BlockedArray(arr, [3,2], [1,4])
242
+ 2×2-blocked 5×5 BlockedMatrix{Int64}:
243
+ 1 │ 6 11 16 21
244
+ 2 │ 7 12 17 22
245
+ 3 │ 8 13 18 23
246
+ ───┼────────────────
247
+ 4 │ 9 14 19 24
248
+ 5 │ 10 15 20 25
249
+
250
+ julia> a[Block(1,2)[1:2,2:3]]
251
+ 2×2 Matrix{Int64}:
252
+ 11 16
253
+ 12 17
254
+
255
+ julia> a[Block(2,2)[1:2,3:4]]
256
+ 2×2 Matrix{Int64}:
257
+ 19 24
258
+ 20 25
259
+ ```
200
260
"""
201
261
BlockIndexRange
202
262
203
263
BlockIndexRange (block:: Block{N} , inds:: Vararg{AbstractUnitRange{<:Integer},N} ) where {N} =
204
264
BlockIndexRange (block,inds)
205
265
266
+ function BlockIndexRange (inds:: Tuple{BlockIndexRange{1},Vararg{BlockIndexRange{1}}} )
267
+ BlockIndexRange (Block (block .(inds)), map (ind -> ind. indices[1 ], inds))
268
+ end
269
+
206
270
block (R:: BlockIndexRange ) = R. block
207
271
208
272
copy (R:: BlockIndexRange ) = BlockIndexRange (R. block, map (copy, R. indices))
@@ -359,6 +423,12 @@ julia> BlockRange((2, 2)) |> collect # number of elements, starting at 1
359
423
360
424
julia> Block(1):Block(2)
361
425
BlockRange((1:2,))
426
+
427
+ julia> Block.(1:2)
428
+ BlockRange((1:2,))
429
+
430
+ julia> BlockRange((Block.(1:2), Block.(3:4)))
431
+ BlockRange((1:2, 3:4))
362
432
```
363
433
"""
364
434
BlockRange
0 commit comments