Skip to content

Commit 760147a

Browse files
committed
move out blockarrays
1 parent fa0f389 commit 760147a

File tree

4 files changed

+3
-124
lines changed

4 files changed

+3
-124
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ FillArrays = "1.0"
2626
InfiniteArrays = "0.15"
2727
InfiniteRandomArrays = "0.2"
2828
Infinities = "0.1"
29-
LazyArrays = "2.0"
29+
LazyArrays = "2.2.5"
3030
LazyBandedMatrices = "0.10"
3131
LinearAlgebra = "1"
3232
MatrixFactorizations = "3.0"

src/InfiniteLinearAlgebra.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted
1414

1515
import ArrayLayouts: AbstractBandedLayout, AbstractQLayout, AdjQRPackedQLayout, CNoPivot, DenseColumnMajor, FillLayout,
1616
MatLdivVec, MatLmulMat, MatLmulVec, MemoryLayout, QRPackedQLayout, RangeCumsum, TriangularLayout,
17-
TridiagonalLayout, __qr, _bidiag_forwardsub!, _factorize, _qr, check_mul_axes, colsupport,
17+
TridiagonalLayout, __qr, _factorize, _qr, check_mul_axes, colsupport,
1818
diagonaldata, ldiv!, lmul!, mul, mulreduce, reflector!, reflectorApply!,
1919
rowsupport, sub_materialize, subdiagonaldata, sublayout, supdiagonaldata, transposelayout,
2020
triangulardata, triangularlayout, zero!, materialize!
@@ -24,7 +24,7 @@ import BandedMatrices: BandedColumns, BandedMatrix, BandedMatrix, _BandedMatrix,
2424
banded_similar, bandedcolumns, bandeddata, bandwidths
2525

2626
import BlockArrays: AbstractBlockLayout, BlockLayout, BlockSlice, BlockSlice1, BlockedOneTo,
27-
blockcolsupport, sizes_from_blocks, OneToCumsum, AbstractBlockedUnitRange
27+
blockcolsupport, sizes_from_blocks, AbstractBlockedUnitRange
2828

2929
import BlockBandedMatrices: AbstractBlockBandedLayout, BlockBandedMatrix, BlockSkylineMatrix,
3030
BlockSkylineSizes, BlockTridiagonal, _BlockBandedMatrix, _BlockSkylineMatrix,

src/blockbanded/blockbanded.jl

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -1,92 +1,9 @@
1-
const OneToInfCumsum = RangeCumsum{Int,OneToInf{Int}}
2-
3-
BlockArrays.sortedunion(::AbstractVector{<:PosInfinity}, ::AbstractVector{<:PosInfinity}) = [∞]
4-
function BlockArrays.sortedunion(::AbstractVector{<:PosInfinity}, b)
5-
@assert isinf(length(b))
6-
b
7-
end
8-
9-
function BlockArrays.sortedunion(b, ::AbstractVector{<:PosInfinity})
10-
@assert isinf(length(b))
11-
b
12-
end
13-
BlockArrays.sortedunion(a::OneToInfCumsum, ::OneToInfCumsum) = a
141

152
BlockBandedMatrices.blockbanded_colstop(A, x::InfiniteCardinal{0}) = x
163
BlockBandedMatrices.blockbanded_rowstop(A, x::InfiniteCardinal{0}) = x
174

18-
BlockArrays.blocklasts(a::InfRanges) = Fill(length(a),1)
19-
20-
BlockArrays.findblock(::BlockedOneTo, ::RealInfinity) = Block(ℵ₀)
21-
22-
function BlockArrays.sortedunion(a::Vcat{Int,1,<:Tuple{Union{Int,AbstractVector{Int}},<:AbstractRange}},
23-
b::Vcat{Int,1,<:Tuple{Union{Int,AbstractVector{Int}},<:AbstractRange}})
24-
@assert a == b # TODO: generailse? Not sure how to do so in a type stable fashion
25-
a
26-
end
27-
28-
sizes_from_blocks(A::AbstractVector, ::Tuple{OneToInf{Int}}) = (map(length,A),)
29-
length(::BlockedOneTo{Int,<:InfRanges}) = ℵ₀
30-
31-
const OneToInfBlocks = BlockedOneTo{Int,OneToInfCumsum}
32-
const OneToBlocks = BlockedOneTo{Int,OneToCumsum}
33-
34-
axes(a::OneToInfBlocks) = (a,)
35-
axes(a::OneToBlocks) = (a,)
36-
37-
LazyBandedMatrices.unitblocks(a::OneToInf) = blockedrange(Ones{Int}(length(a)))
38-
39-
BlockArrays.dimlength(start, ::Infinity) = ℵ₀
40-
41-
function copy(bc::Broadcasted{<:BroadcastStyle,<:Any,typeof(*),<:Tuple{Ones{T,1,Tuple{OneToInfBlocks}},AbstractArray{V,N}}}) where {N,T,V}
42-
a,b = bc.args
43-
@assert bc.axes == axes(b)
44-
convert(AbstractArray{promote_type(T,V),N}, b)
45-
end
46-
47-
function copy(bc::Broadcasted{<:BroadcastStyle,<:Any,typeof(*),<:Tuple{AbstractArray{T,N},Ones{V,1,Tuple{OneToInfBlocks}}}}) where {N,T,V}
48-
a,b = bc.args
49-
@assert bc.axes == axes(a)
50-
convert(AbstractArray{promote_type(T,V),N}, a)
51-
end
52-
53-
_block_interlace_axes(::Int, ax::Tuple{BlockedOneTo{Int,OneToInf{Int}}}...) = (blockedrange(Fill(length(ax), ∞)),)
54-
55-
_block_interlace_axes(nbc::Int, ax::NTuple{2,BlockedOneTo{Int,OneToInf{Int}}}...) =
56-
(blockedrange(Fill(length(ax) ÷ nbc, ∞)),blockedrange(Fill(mod1(length(ax),nbc), ∞)))
575

586

597
include("infblocktridiagonal.jl")
608

619

62-
#######
63-
# block broadcasted
64-
######
65-
66-
67-
BroadcastStyle(::Type{<:SubArray{T,N,Arr,<:NTuple{N,BlockSlice{BlockRange{1,Tuple{II}}}},false}}) where {T,N,Arr<:BlockArray,II<:InfRanges} =
68-
LazyArrayStyle{N}()
69-
70-
# TODO: generalise following
71-
BroadcastStyle(::Type{<:BlockArray{T,N,<:AbstractArray{<:AbstractArray{T,N},N},<:NTuple{N,BlockedOneTo{Int,<:InfRanges}}}}) where {T,N} = LazyArrayStyle{N}()
72-
# BroadcastStyle(::Type{<:BlockedArray{T,N,<:AbstractArray{T,N},<:NTuple{N,BlockedOneTo{Int,<:InfRanges}}}}) where {T,N} = LazyArrayStyle{N}()
73-
BroadcastStyle(::Type{<:BlockArray{T,N,<:AbstractArray{<:AbstractArray{T,N},N},<:NTuple{N,BlockedOneTo{Int,<:RangeCumsum{Int,<:InfRanges}}}}}) where {T,N} = LazyArrayStyle{N}()
74-
# BroadcastStyle(::Type{<:BlockedArray{T,N,<:AbstractArray{T,N},<:NTuple{N,BlockedOneTo{Int,<:RangeCumsum{Int,<:InfRanges}}}}}) where {T,N} = LazyArrayStyle{N}()
75-
76-
77-
###
78-
# KronTrav
79-
###
80-
81-
_krontrav_axes(A::OneToInf{Int}, B::OneToInf{Int}) = blockedrange(oneto(length(A)))
82-
83-
84-
struct InfKronTravBandedBlockBandedLayout <: AbstractLazyBandedBlockBandedLayout end
85-
MemoryLayout(::Type{<:KronTrav{<:Any,2,<:Any,NTuple{2,BlockedOneTo{Int,OneToInfCumsum}}}}) = InfKronTravBandedBlockBandedLayout()
86-
87-
sublayout(::InfKronTravBandedBlockBandedLayout, ::Type{<:NTuple{2,BlockSlice1}}) = BroadcastBandedLayout{typeof(*)}()
88-
sublayout(::InfKronTravBandedBlockBandedLayout, ::Type{<:NTuple{2,BlockSlice{BlockRange{1,Tuple{OneTo{Int}}}}}}) = KronTravBandedBlockBandedLayout()
89-
90-
copy(M::Mul{InfKronTravBandedBlockBandedLayout, InfKronTravBandedBlockBandedLayout}) = KronTrav((krontravargs(M.A) .* krontravargs(M.B))...)
91-
92-
_broadcast_sub_arguments(::InfKronTravBandedBlockBandedLayout, M, V) = _broadcast_sub_arguments(KronTravBandedBlockBandedLayout(), M, V)

src/blockbanded/infblocktridiagonal.jl

Lines changed: 0 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,4 @@
1-
const BlockTriPertToeplitz{T} = BlockMatrix{T,Tridiagonal{Matrix{T},Vcat{Matrix{T},1,Tuple{Vector{Matrix{T}},Fill{Matrix{T},1,Tuple{OneToInf{Int}}}}}},
2-
NTuple{2,BlockedOneTo{Int,Vcat{Int,1,Tuple{Vector{Int},InfStepRange{Int,Int}}}}}}
31

4-
const BlockTridiagonalToeplitzLayout = BlockLayout{TridiagonalToeplitzLayout,DenseColumnMajor}
5-
6-
function BlockTridiagonal(adjA::Adjoint{T,BlockTriPertToeplitz{T}}) where T
7-
A = parent(adjA)
8-
BlockTridiagonal(Matrix.(adjoint.(A.blocks.du)),
9-
Matrix.(adjoint.(A.blocks.d)),
10-
Matrix.(adjoint.(A.blocks.dl)))
11-
end
12-
13-
for op in (:-, :+)
14-
@eval begin
15-
function $op(A::BlockTriPertToeplitz{T}, λ::UniformScaling) where T
16-
TV = promote_type(T,eltype(λ))
17-
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.dl.args)...),
18-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.d, Ref(λ)).args)...),
19-
Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.du.args)...))
20-
end
21-
function $op::UniformScaling, A::BlockTriPertToeplitz{V}) where V
22-
TV = promote_type(eltype(λ),V)
23-
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.dl.args))...),
24-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, Ref(λ), A.blocks.d).args)...),
25-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.du.args))...))
26-
end
27-
$op(adjA::Adjoint{T,BlockTriPertToeplitz{T}}, λ::UniformScaling) where T = $op(BlockTridiagonal(adjA), λ)
28-
$op::UniformScaling, adjA::Adjoint{T,BlockTriPertToeplitz{T}}) where T = $op(λ, BlockTridiagonal(adjA))
29-
end
30-
end
31-
32-
sizes_from_blocks(A::Diagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.diag, 1), size.(A.diag,2)
33-
sizes_from_blocks(A::Tridiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.d, 1), size.(A.d,2)
34-
sizes_from_blocks(A::LazyBandedMatrices.Tridiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.d, 1), size.(A.d,2)
35-
sizes_from_blocks(A::Bidiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.dv, 1), size.(A.dv,2)
36-
sizes_from_blocks(A::LazyBandedMatrices.Bidiagonal, ::NTuple{2,OneToInf{Int}}) = size.(A.dv, 1), size.(A.dv,2)
37-
38-
axes_print_matrix_row(_, io, X, A, i, ::AbstractVector{<:PosInfinity}, sep) = nothing
39-
axes_print_matrix_row(::NTuple{2,AbstractBlockedUnitRange}, io, X, A, i, ::AbstractVector{<:PosInfinity}, sep) = nothing
402

413

424
function BlockSkylineSizes(A::BlockTriPertToeplitz, (l,u)::NTuple{2,Int})

0 commit comments

Comments
 (0)