Skip to content

Commit 089374f

Browse files
authored
UniformScaling constructors (#112)
1 parent 8785f64 commit 089374f

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
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 = "0.12.5"
3+
version = "0.12.6"
44

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

src/blockarray.jl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,15 @@ BlockVector(blocks::AbstractVector, block_sizes::AbstractVector{Int}) = BlockArr
203203
BlockMatrix(blocks::AbstractMatrix, baxes::NTuple{2,AbstractUnitRange{Int}}) = BlockArray(blocks, baxes)
204204
BlockMatrix(blocks::AbstractMatrix, block_sizes::Vararg{AbstractVector{Int},2}) = BlockArray(blocks, block_sizes...)
205205

206+
BlockArray{T}::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = BlockArray{T}(Matrix(λ, map(length,baxes)...), baxes)
207+
BlockArray{T}::UniformScaling, block_sizes::Vararg{AbstractVector{Int}, 2}) where T = BlockArray{T}(λ, map(blockedrange,block_sizes))
208+
BlockArray::UniformScaling{T}, block_sizes::Vararg{AbstractVector{Int}, 2}) where T = BlockArray{T}(λ, block_sizes...)
209+
BlockArray::UniformScaling{T}, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = BlockArray{T}(λ, baxes)
210+
BlockMatrix::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) = BlockArray(λ, baxes)
211+
BlockMatrix::UniformScaling, block_sizes::Vararg{AbstractVector{Int},2}) = BlockArray(λ, block_sizes...)
212+
BlockMatrix{T}::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = BlockArray{T}(λ, baxes)
213+
BlockMatrix{T}::UniformScaling, block_sizes::Vararg{AbstractVector{Int},2}) where T = BlockArray{T}(λ, block_sizes...)
214+
206215
"""
207216
mortar(blocks::AbstractArray)
208217
mortar(blocks::AbstractArray{R, N}, sizes_1, sizes_2, ..., sizes_N)

src/pseudo_blockarray.jl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,16 @@ PseudoBlockVector(blocks::AbstractVector, block_sizes::AbstractVector{Int}) = Ps
100100
PseudoBlockMatrix(blocks::AbstractMatrix, baxes::NTuple{2,AbstractUnitRange{Int}}) = PseudoBlockArray(blocks, baxes)
101101
PseudoBlockMatrix(blocks::AbstractMatrix, block_sizes::Vararg{AbstractVector{Int},2}) = PseudoBlockArray(blocks, block_sizes...)
102102

103+
PseudoBlockArray{T}::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = PseudoBlockArray{T}(Matrix(λ, map(length,baxes)...), baxes)
104+
PseudoBlockArray{T}::UniformScaling, block_sizes::Vararg{AbstractVector{Int}, 2}) where T = PseudoBlockArray{T}(λ, map(blockedrange,block_sizes))
105+
PseudoBlockArray::UniformScaling{T}, block_sizes::Vararg{AbstractVector{Int}, 2}) where T = PseudoBlockArray{T}(λ, block_sizes...)
106+
PseudoBlockArray::UniformScaling{T}, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = PseudoBlockArray{T}(λ, baxes)
107+
PseudoBlockMatrix::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) = PseudoBlockArray(λ, baxes)
108+
PseudoBlockMatrix::UniformScaling, block_sizes::Vararg{AbstractVector{Int},2}) = PseudoBlockArray(λ, block_sizes...)
109+
PseudoBlockMatrix{T}::UniformScaling, baxes::NTuple{2,AbstractUnitRange{Int}}) where T = PseudoBlockArray{T}(λ, baxes)
110+
PseudoBlockMatrix{T}::UniformScaling, block_sizes::Vararg{AbstractVector{Int},2}) where T = PseudoBlockArray{T}(λ, block_sizes...)
111+
112+
103113
# Convert AbstractArrays that conform to block array interface
104114
convert(::Type{PseudoBlockArray{T,N,R,BS}}, A::PseudoBlockArray{T,N,R,BS}) where {T,N,R,BS} = A
105115
convert(::Type{PseudoBlockArray{T,N,R}}, A::PseudoBlockArray{T,N,R}) where {T,N,R} = A

test/test_blockarrays.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ end
7474
BlockArray(A, (blockedrange(1:3),)) == BlockArray{Int}(A, (blockedrange(1:3),)) ==
7575
BlockArray{Float64}(A, 1:3)
7676
end
77+
7778
@testset "PseudoBlockArray constructors" begin
7879
ret = PseudoBlockArray{Float64}(undef, 1:3)
7980
fill!(ret, 0)
@@ -171,6 +172,7 @@ end
171172
@test a == [3,2,3]
172173
@test a_data == [3,2,3]
173174
end
175+
174176
@testset "BlockMatrix" begin
175177
a_data = [1 2; 3 4]
176178
a = BlockMatrix(a_data,[1,1],[2])
@@ -190,6 +192,36 @@ end
190192
@test a == [3 2; 3 4]
191193
@test a_data == [3 2; 3 4]
192194
end
195+
196+
@testset "UniformScaling" begin
197+
B = BlockArray(I, fill(2,4), fill(2,5))
198+
@test B isa BlockMatrix{Bool}
199+
@test B == BlockMatrix(I, fill(2,4), fill(2,5)) ==
200+
BlockArray(I, blockedrange.((fill(2,4), fill(2,5)))) ==
201+
BlockMatrix(I, blockedrange.((fill(2,4), fill(2,5)))) ==
202+
Matrix(I, 8, 10)
203+
204+
B = BlockArray{Float64}(I, fill(2,4), fill(2,5))
205+
@test B isa BlockMatrix{Float64}
206+
@test B == BlockMatrix{Float64}(I, fill(2,4), fill(2,5)) ==
207+
BlockArray{Float64}(I, blockedrange.((fill(2,4), fill(2,5)))) ==
208+
BlockMatrix{Float64}(I, blockedrange.((fill(2,4), fill(2,5)))) ==
209+
Matrix(I, 8, 10)
210+
211+
B = PseudoBlockArray(I, fill(2,4), fill(2,5))
212+
@test B isa PseudoBlockMatrix{Bool}
213+
@test B == PseudoBlockMatrix(I, fill(2,4), fill(2,5)) ==
214+
PseudoBlockArray(I, blockedrange.((fill(2,4), fill(2,5)))) ==
215+
PseudoBlockMatrix(I, blockedrange.((fill(2,4), fill(2,5)))) ==
216+
Matrix(I, 8, 10)
217+
218+
B = PseudoBlockArray{Float64}(I, fill(2,4), fill(2,5))
219+
@test B isa PseudoBlockMatrix{Float64}
220+
@test B == PseudoBlockMatrix{Float64}(I, fill(2,4), fill(2,5)) ==
221+
PseudoBlockArray{Float64}(I, blockedrange.((fill(2,4), fill(2,5)))) ==
222+
PseudoBlockMatrix{Float64}(I, blockedrange.((fill(2,4), fill(2,5)))) ==
223+
Matrix(I, 8, 10)
224+
end
193225
end
194226

195227
@testset "block indexing" begin

0 commit comments

Comments
 (0)