@@ -4,7 +4,7 @@ using InfiniteArrays.LazyArrays, InfiniteArrays.ArrayLayouts, InfiniteArrays.Fil
44
55import Base: BroadcastStyle, size, getindex, similar, copy, * , + , - , / , \ , materialize!, copyto!, OneTo
66import Base. Broadcast: Broadcasted
7- import InfiniteArrays: InfIndexRanges, Infinity, PosInfinity, OneToInf, InfAxes, AbstractInfUnitRange, InfRanges
7+ import InfiniteArrays: InfIndexRanges, Infinity, PosInfinity, OneToInf, InfAxes, AbstractInfUnitRange, InfRanges, InfBaseToeplitzLayouts
88import ArrayLayouts: sub_materialize, MemoryLayout, sublayout, mulreduce, triangularlayout, MatLdivVec, subdiagonaldata, diagonaldata, supdiagonaldata
99import LazyArrays: applybroadcaststyle, applylayout, islazy, islazy_layout, simplifiable, AbstractLazyLayout, PaddedColumns, LazyArrayStyle, ApplyLayout, AbstractLazyBandedLayout, ApplyBandedLayout, BroadcastBandedLayout
1010import BandedMatrices: _BandedMatrix, AbstractBandedMatrix, banded_similar, BandedMatrix, bandedcolumns, BandedColumns, bandeddata
@@ -355,29 +355,17 @@ for Typ in (:ConstRows, :PertConstRows)
355355 end
356356end
357357
358- """
359- TridiagonalToeplitzLayout
360358
361- represents a matrix which is tridiagonal and toeplitz. Must support
362- `subdiagonalconstant`, `diagonalconstant`, `supdiagonalconstant`.
363- """
364- struct TridiagonalToeplitzLayout <: AbstractLazyBandedLayout end
365359const BandedToeplitzLayout = BandedColumns{ConstRows}
366360const PertToeplitzLayout = BandedColumns{PertConstRows}
367361const PertTriangularToeplitzLayout{UPLO,UNIT} = TriangularLayout{UPLO,UNIT,BandedColumns{PertConstRows}}
368- struct BidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
369- struct PertBidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
370- struct PertTridiagonalToeplitzLayout <: AbstractLazyBandedLayout end
371362
372- const InfToeplitzLayouts = Union{TridiagonalToeplitzLayout, BandedToeplitzLayout, BidiagonalToeplitzLayout,
373- PertToeplitzLayout, PertTriangularToeplitzLayout, PertBidiagonalToeplitzLayout, PertTridiagonalToeplitzLayout }
363+ const InfBandedToeplitzLayouts = Union{BandedToeplitzLayout, PertToeplitzLayout, PertTriangularToeplitzLayout}
364+ const InfToeplitzLayouts = Union{InfBaseToeplitzLayouts, InfBandedToeplitzLayouts }
374365
375- subdiagonalconstant (A) = getindex_value (subdiagonaldata (A))
376- diagonalconstant (A) = getindex_value (diagonaldata (A))
377- supdiagonalconstant (A) = getindex_value (supdiagonaldata (A))
378366
379367
380- islazy_layout (:: InfToeplitzLayouts ) = Val (true )
368+ islazy_layout (:: InfBandedToeplitzLayouts ) = Val (true )
381369islazy (:: BandedMatrix{<:Any,<:Any,OneToInf{Int}} ) = Val (true )
382370
383371
@@ -399,8 +387,6 @@ _BandedMatrix(::PertToeplitzLayout, A::AbstractMatrix) =
399387# end
400388
401389
402- @inline sub_materialize (:: ApplyBandedLayout{typeof(*)} , V, :: Tuple{InfAxes,InfAxes} ) = V
403- @inline sub_materialize (:: BroadcastBandedLayout , V, :: Tuple{InfAxes,InfAxes} ) = V
404390@inline sub_materialize (:: BandedColumns , V, :: Tuple{InfAxes,InfAxes} ) = BandedMatrix (V)
405391@inline sub_materialize (:: BandedColumns , V, :: Tuple{InfAxes,OneTo{Int}} ) = BandedMatrix (V)
406392
@@ -473,33 +459,6 @@ mulreduce(M::Mul{<:InfToeplitzLayouts, <:DiagonalLayout}) = Rmul(M)
473459
474460
475461
476- # ##
477- # Inf-Toeplitz layout
478- # this could possibly be avoided via an InfFillLayout
479- # ##
480-
481- const InfFill = AbstractFill{<: Any ,1 ,<: Tuple{OneToInf} }
482-
483- for Typ in (:(Tridiagonal{<: Any ,<: InfFill }),
484- :(SymTridiagonal{<: Any ,<: InfFill }))
485- @eval begin
486- MemoryLayout (:: Type{<:$Typ} ) = TridiagonalToeplitzLayout ()
487- BroadcastStyle (:: Type{<:$Typ} ) = LazyArrayStyle {2} ()
488- end
489- end
490-
491- MemoryLayout (:: Type{<:Bidiagonal{<:Any,<:InfFill}} ) = BidiagonalToeplitzLayout ()
492- BroadcastStyle (:: Type{<:Bidiagonal{<:Any,<:InfFill}} ) = LazyArrayStyle {2} ()
493-
494- * (A:: Bidiagonal{<:Any,<:InfFill} , B:: Bidiagonal{<:Any,<:InfFill} ) =
495- mul (A, B)
496-
497- # fall back for Ldiv
498- triangularlayout (:: Type{<:TriangularLayout{UPLO,'N'}} , :: TridiagonalToeplitzLayout ) where UPLO = BidiagonalToeplitzLayout ()
499- materialize! (L:: MatLdivVec{BidiagonalToeplitzLayout,Lay} ) where Lay = materialize! (Ldiv {BidiagonalLayout{FillLayout,FillLayout},Lay} (L. A, L. B))
500- copyto! (dest:: AbstractArray , L:: Ldiv{BidiagonalToeplitzLayout,Lay} ) where Lay = copyto! (dest, Ldiv {BidiagonalLayout{FillLayout,FillLayout},Lay} (L. A, L. B))
501-
502-
503462# copy for AdjOrTrans
504463copy (A:: Adjoint{T,<:BandedMatrix{T,<:Any,OneToInf{Int}}} ) where T = copy (parent (A))'
505464copy (A:: Transpose{T,<:BandedMatrix{T,<:Any,OneToInf{Int}}} ) where T = transpose (copy (parent (A)))
0 commit comments