@@ -34,7 +34,7 @@ sub_materialize(_, V::SubArray{<:Any,1,<:AbstractMatrix,Tuple{InfBandCartesianIn
34
34
_inf_banded_sub_materialize (MemoryLayout (parent (V)), V)
35
35
36
36
const TriToeplitz{T} = Tridiagonal{T,Fill{T,1 ,Tuple{OneToInf{Int}}}}
37
- const ConstRowMatrix{T} = ApplyMatrix{T,typeof (* ),<: Tuple {<: AbstractVector ,<: AbstractFill {<:Any,2 ,Tuple{OneTo{Int},OneToInf{Int}}} }}
37
+ const ConstRowMatrix{T} = ApplyMatrix{T,typeof (* ),<: Tuple {<: AbstractVector ,<: AbstractFillMatrix {<:Any,Tuple{OneTo{Int},OneToInf{Int}}} }}
38
38
const PertConstRowMatrix{T} = Hcat{T,<: Tuple{Array{T},<:ConstRowMatrix{T}} }
39
39
const InfToeplitz{T} = BandedMatrix{T,<: ConstRowMatrix{T} ,OneToInf{Int}}
40
40
const PertToeplitz{T} = BandedMatrix{T,<: PertConstRowMatrix{T} ,OneToInf{Int}}
@@ -337,10 +337,26 @@ for Typ in (:ConstRows, :PertConstRows)
337
337
end
338
338
end
339
339
340
+ """
341
+ TridiagonalToeplitzLayout
342
+
343
+ represents a matrix which is tridiagonal and toeplitz. Must support
344
+ `subdiagonalconstant`, `diagonalconstant`, `supdiagonalconstant`.
345
+ """
340
346
struct TridiagonalToeplitzLayout <: AbstractLazyBandedLayout end
341
347
const BandedToeplitzLayout = BandedColumns{ConstRows}
342
348
const PertToeplitzLayout = BandedColumns{PertConstRows}
343
349
const PertTriangularToeplitzLayout{UPLO,UNIT} = TriangularLayout{UPLO,UNIT,BandedColumns{PertConstRows}}
350
+ struct BidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
351
+ struct PertBidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
352
+ struct PertTridiagonalToeplitzLayout <: AbstractLazyBandedLayout end
353
+
354
+ const InfToeplitzLayouts = Union{TridiagonalToeplitzLayout, BandedToeplitzLayout, BidiagonalToeplitzLayout,
355
+ PertToeplitzLayout, PertTriangularToeplitzLayout, PertBidiagonalToeplitzLayout, PertTridiagonalToeplitzLayout}
356
+
357
+ subdiagonalconstant (A) = getindex_value (subdiagonaldata (A))
358
+ diagonalconstant (A) = getindex_value (diagonaldata (A))
359
+ supdiagonalconstant (A) = getindex_value (supdiagonaldata (A))
344
360
345
361
346
362
_BandedMatrix (:: BandedToeplitzLayout , A:: AbstractMatrix ) =
@@ -428,18 +444,13 @@ _bandedfill_mul(M::MulAdd, ::Tuple{Any,InfAxes}, ::Tuple{InfAxes,InfAxes}) = App
428
444
_bandedfill_mul (M:: MulAdd , :: Tuple{InfAxes,InfAxes} , :: Tuple{InfAxes,Any} ) = ApplyArray (* , M. A, M. B)
429
445
_bandedfill_mul (M:: MulAdd , :: Tuple{Any,InfAxes} , :: Tuple{InfAxes,Any} ) = ApplyArray (* , M. A, M. B)
430
446
431
- mulreduce (M:: Mul{BandedToeplitzLayout, BandedToeplitzLayout} ) = ApplyArray (M)
432
- mulreduce (M:: Mul{BandedToeplitzLayout} ) = ApplyArray (M)
433
- mulreduce (M:: Mul{BandedToeplitzLayout,<:PaddedLayout} ) = MulAdd (M)
434
- mulreduce (M:: Mul{<:Any, BandedToeplitzLayout} ) = ApplyArray (M)
435
- mulreduce (M:: Mul{<:BandedColumns{<:AbstractFillLayout}, PertToeplitzLayout} ) = ApplyArray (M)
436
- mulreduce (M:: Mul{<:PertToeplitzLayout, <:BandedColumns{<:AbstractFillLayout}} ) = ApplyArray (M)
437
- mulreduce (M:: Mul{<:BandedColumns{<:AbstractFillLayout}, BandedToeplitzLayout} ) = ApplyArray (M)
438
- mulreduce (M:: Mul{BandedToeplitzLayout, <:BandedColumns{<:AbstractFillLayout}} ) = ApplyArray (M)
439
- mulreduce (M:: Mul{<:AbstractQLayout, BandedToeplitzLayout} ) = ApplyArray (M)
440
- mulreduce (M:: Mul{<:AbstractQLayout, PertToeplitzLayout} ) = ApplyArray (M)
441
- mulreduce (M:: Mul{<:DiagonalLayout, BandedToeplitzLayout} ) = Lmul (M)
442
- mulreduce (M:: Mul{BandedToeplitzLayout, <:DiagonalLayout} ) = Rmul (M)
447
+ mulreduce (M:: Mul{<:InfToeplitzLayouts, <:InfToeplitzLayouts} ) = ApplyArray (M)
448
+ mulreduce (M:: Mul{<:InfToeplitzLayouts} ) = ApplyArray (M)
449
+ mulreduce (M:: Mul{<:InfToeplitzLayouts,<:PaddedLayout} ) = MulAdd (M)
450
+ mulreduce (M:: Mul{<:Any, <:InfToeplitzLayouts} ) = ApplyArray (M)
451
+ mulreduce (M:: Mul{<:AbstractQLayout, <:InfToeplitzLayouts} ) = ApplyArray (M)
452
+ mulreduce (M:: Mul{<:DiagonalLayout, <:InfToeplitzLayouts} ) = Lmul (M)
453
+ mulreduce (M:: Mul{<:InfToeplitzLayouts, <:DiagonalLayout} ) = Rmul (M)
443
454
444
455
445
456
function _bidiag_forwardsub! (M:: Ldiv{<:Any,<:PaddedLayout} )
@@ -491,8 +502,6 @@ for Typ in (:(LinearAlgebra.Tridiagonal{<:Any,<:InfFill}),
491
502
end
492
503
end
493
504
494
- struct BidiagonalToeplitzLayout <: AbstractLazyBandedLayout end
495
-
496
505
for Typ in (:(LinearAlgebra. Bidiagonal{<: Any ,<: InfFill }),
497
506
:(LazyBandedMatrices. Bidiagonal{<: Any ,<: InfFill ,<: InfFill }))
498
507
@eval begin
@@ -501,6 +510,9 @@ for Typ in (:(LinearAlgebra.Bidiagonal{<:Any,<:InfFill}),
501
510
end
502
511
end
503
512
513
+ * (A:: LinearAlgebra.Bidiagonal{<:Any,<:InfFill} , B:: LinearAlgebra.Bidiagonal{<:Any,<:InfFill} ) =
514
+ mul (A, B)
515
+
504
516
# fall back for Ldiv
505
517
triangularlayout (:: Type{<:TriangularLayout{UPLO,'N'}} , :: TridiagonalToeplitzLayout ) where UPLO = BidiagonalToeplitzLayout ()
506
518
materialize! (L:: MatLdivVec{BidiagonalToeplitzLayout,Lay} ) where Lay = materialize! (Ldiv {BidiagonalLayout{FillLayout,FillLayout},Lay} (L. A, L. B))
@@ -518,3 +530,10 @@ copy(A::Transpose{T,<:BandedMatrix{T,<:Any,OneToInf{Int}}}) where T = transpose(
518
530
519
531
Base. typed_hcat (:: Type{T} , A:: BandedMatrix{<:Any,<:Any,OneToInf{Int}} , B:: AbstractVecOrMat... ) where T = Hcat {T} (A, B... )
520
532
533
+
534
+
535
+ # ##
536
+ # SymTriPertToeplitz
537
+ # ##
538
+
539
+ MemoryLayout (:: Type{<:SymTriPertToeplitz} ) = PertTridiagonalToeplitzLayout ()
0 commit comments