Skip to content

Commit ae2df42

Browse files
committed
Stricter BlockRange constructors
1 parent b167ede commit ae2df42

File tree

6 files changed

+16
-19
lines changed

6 files changed

+16
-19
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "BlockArrays"
22
uuid = "8e7c35d0-a365-5155-bbbb-fb81a777f24e"
3-
version = "1.6.3"
3+
version = "1.7.0"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"

src/abstractblockarray.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ end
9292

9393
# linear block indexing
9494
@inline function blockcheckbounds(::Type{Bool}, A::AbstractArray, i)
95-
blockcheckindex(Bool, BlockRange(blocklength(A)), i)
95+
blockcheckindex(Bool, BlockRange((blocklength(A),)), i)
9696
end
9797
# cartesian block indexing
9898
@inline function blockcheckbounds(::Type{Bool}, A::AbstractArray, i...)

src/blockindices.jl

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -338,11 +338,8 @@ end
338338

339339
BlockRange(inds::Tuple{Vararg{AbstractUnitRange{<:Integer}}}) =
340340
BlockRange{length(inds),typeof(inds)}(inds)
341-
BlockRange(inds::Vararg{AbstractUnitRange{<:Integer}}) = BlockRange(inds)
342341

343-
BlockRange() = BlockRange(())
344342
BlockRange(sizes::Tuple{Integer, Vararg{Integer}}) = BlockRange(map(oneto, sizes))
345-
BlockRange(sizes::Vararg{Integer}) = BlockRange(sizes)
346343

347344
BlockRange(B::AbstractArray) = BlockRange(blockaxes(B))
348345

@@ -411,13 +408,13 @@ _in(b, ::Tuple{}, ::Tuple{}, ::Tuple{}) = b
411408
@inline _in(b, i, start, stop) = _in(b & (start[1] <= i[1] <= stop[1]), tail(i), tail(start), tail(stop))
412409

413410
# We sometimes need intersection of BlockRange to return a BlockRange
414-
intersect(a::BlockRange{1}, b::BlockRange{1}) = BlockRange(intersect(a.indices[1], b.indices[1]))
411+
intersect(a::BlockRange{1}, b::BlockRange{1}) = BlockRange((intersect(a.indices[1], b.indices[1]),))
415412

416413
# needed for scalar-like broadcasting
417414

418415
BlockSlice{Block{1,BT},T,RT}(a::Base.OneTo) where {BT,T,RT<:AbstractUnitRange} =
419416
BlockSlice(Block(convert(BT, 1)), convert(RT, a))::BlockSlice{Block{1,BT},T,RT}
420417
BlockSlice{BlockRange{1,Tuple{BT}},T,RT}(a::Base.OneTo) where {BT<:AbstractUnitRange,T,RT<:AbstractUnitRange} =
421-
BlockSlice(BlockRange(convert(BT, Base.OneTo(1))), convert(RT, a))::BlockSlice{BlockRange{1,Tuple{BT}},T,RT}
418+
BlockSlice(BlockRange((convert(BT, Base.OneTo(1)),)), convert(RT, a))::BlockSlice{BlockRange{1,Tuple{BT}},T,RT}
422419
BlockSlice{BlockIndexRange{1,Tuple{BT},I,BI},T,RT}(a::Base.OneTo) where {BT<:AbstractUnitRange,T,RT<:AbstractUnitRange,I,BI} =
423420
BlockSlice(BlockIndexRange(Block(BI(1)), convert(BT, Base.OneTo(1))), convert(RT, a))::BlockSlice{BlockIndexRange{1,Tuple{BT},I,BI},T,RT}

src/views.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ end
123123
# this is loosely based on Slice reindex in subarray.jl
124124
@propagate_inbounds reindex(idxs::Tuple{BlockSlice{<:BlockRange}, Vararg{Any}},
125125
subidxs::Tuple{BlockSlice{<:BlockRange}, Vararg{Any}}) =
126-
(BlockSlice(BlockRange(idxs[1].block.indices[1][Int.(subidxs[1].block)]),
126+
(BlockSlice(BlockRange((idxs[1].block.indices[1][Int.(subidxs[1].block)],)),
127127
idxs[1].indices[subidxs[1].block]),
128128
reindex(tail(idxs), tail(subidxs))...)
129129

test/test_blockindices.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -157,10 +157,10 @@ import BlockArrays: BlockIndex, BlockIndexRange, BlockSlice
157157
@test sprint(show, "text/plain", BlockIndex((1,2), (3,4))) == "Block(1, 2)[3, 4]"
158158
@test sprint(show, "text/plain", BlockArrays.BlockIndexRange(Block(1), 3:4)) == "Block(1)[3:4]"
159159

160-
@test sprint(show, "text/plain", BlockRange()) == "BlockRange()"
161-
@test sprint(show, "text/plain", BlockRange(1:2)) == "BlockRange(1:2)"
162-
@test sprint(show, "text/plain", BlockRange(1:2, 2:3)) == "BlockRange(1:2, 2:3)"
163-
@test sprint(show, BlockRange(1:2, 2:3)) == "BlockRange(1:2, 2:3)"
160+
@test sprint(show, "text/plain", BlockRange(())) == "BlockRange()"
161+
@test sprint(show, "text/plain", BlockRange((1:2,))) == "BlockRange(1:2)"
162+
@test sprint(show, "text/plain", BlockRange((1:2, 2:3,))) == "BlockRange(1:2, 2:3)"
163+
@test sprint(show, BlockRange((1:2, 2:3))) == "BlockRange(1:2, 2:3)"
164164
end
165165
end
166166

@@ -218,7 +218,7 @@ end
218218
b = BlockRange(OffsetArrays.IdOffsetRange.((2:4, 3:5), 2))
219219
@test b[axes(b)...] === b
220220

221-
b = BlockRange(3)
221+
b = BlockRange((3,))
222222
for i in 1:3
223223
@test b[i] == Block(i)
224224
end
@@ -463,7 +463,7 @@ end
463463
b = BlockRange(OffsetArrays.IdOffsetRange.((2:4, 3:5), 2))
464464
@test b[axes(b)...] === b
465465

466-
b = BlockRange(3)
466+
b = BlockRange((3,))
467467
for i in 1:3
468468
@test b[i] == Block(i)
469469
end

test/test_blockrange.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ using BlockArrays, Test
44

55
@testset "block range" begin
66
# test backend code
7-
@test BlockRange((1:3),) == BlockRange{1,Tuple{UnitRange{Int}}}((1:3,))
8-
@test BlockRange(1:3) == BlockRange((1:3),)
7+
@test BlockRange((1:3,)) == BlockRange{1,Tuple{UnitRange{Int}}}((1:3,))
8+
@test BlockRange(1:3) === BlockRange(Base.OneTo(1))
99
@test_throws ArgumentError Block(1,1):Block(2,2)
1010

1111
@test eltype(Block.(1:2)) == Block{1,Int}
@@ -69,9 +69,9 @@ using BlockArrays, Test
6969
@test V == A[Block.(1:2), Block.(2:3)]
7070

7171
@testset "iterator" begin
72-
@test BlockRange()[] == collect(BlockRange())[] == Block()
73-
@test BlockRange(1:3) == collect(BlockRange(1:3)) == [Block(1),Block(2),Block(3)]
74-
@test BlockRange(1:3,1:2) == collect(BlockRange(1:3,1:2))
72+
@test BlockRange(())[] == collect(BlockRange(()))[] == Block()
73+
@test BlockRange((1:3,)) == collect(BlockRange((1:3,))) == [Block(1),Block(2),Block(3)]
74+
@test BlockRange((1:3,1:2)) == collect(BlockRange((1:3,1:2)))
7575
end
7676

7777
# non Int64 range

0 commit comments

Comments
 (0)