@@ -2,17 +2,17 @@ module InfiniteLinearAlgebra
2
2
using BlockArrays, BlockBandedMatrices, BandedMatrices, LazyArrays, LazyBandedMatrices, SemiseparableMatrices,
3
3
FillArrays, InfiniteArrays, MatrixFactorizations, ArrayLayouts, LinearAlgebra
4
4
5
- import Base: + , - , * , / , \ , ^ , OneTo, getindex, promote_op, _unsafe_getindex, print_matrix_row, size, axes,
5
+ import Base: + , - , * , / , \ , ^ , OneTo, getindex, promote_op, _unsafe_getindex, size, axes,
6
6
AbstractMatrix, AbstractArray, Matrix, Array, Vector, AbstractVector, Slice,
7
7
show, getproperty, copy, map, require_one_based_indexing, similar
8
8
import Base. Broadcast: BroadcastStyle, Broadcasted, broadcasted
9
9
10
- import ArrayLayouts: colsupport, rowsupport, triangularlayout, MatLdivVec, triangulardata, TriangularLayout, sublayout, _qr,
10
+ import ArrayLayouts: colsupport, rowsupport, triangularlayout, MatLdivVec, triangulardata, TriangularLayout, sublayout, _qr,
11
11
MatLmulVec, MatLmulMat, AbstractQLayout, materialize!
12
12
import BandedMatrices: BandedMatrix, _BandedMatrix, AbstractBandedMatrix, bandeddata, bandwidths, BandedColumns, bandedcolumns,
13
13
_default_banded_broadcast
14
- import FillArrays: AbstractFill, getindex_value
15
- import InfiniteArrays: OneToInf, InfUnitRange, Infinity, InfStepRange, AbstractInfUnitRange, InfAxes
14
+ import FillArrays: AbstractFill, getindex_value, axes_print_matrix_row
15
+ import InfiniteArrays: OneToInf, InfUnitRange, Infinity, InfStepRange, AbstractInfUnitRange, InfAxes
16
16
import LinearAlgebra: lmul!, ldiv!, matprod, qr, AbstractTriangular, AbstractQ, adjoint, transpose
17
17
import LazyArrays: applybroadcaststyle, CachedArray, CachedMatrix, CachedVector, DenseColumnMajor, FillLayout, ApplyMatrix, check_mul_axes, ApplyStyle, LazyArrayApplyStyle, LazyArrayStyle,
18
18
resizedata!, MemoryLayout, mulapplystyle, LmulStyle, RmulStyle,
@@ -26,7 +26,7 @@ import BlockArrays: AbstractBlockVecOrMat, sizes_from_blocks, _length, BlockedUn
26
26
27
27
import BandedMatrices: BandedMatrix, bandwidths, AbstractBandedLayout, _banded_qr!, _banded_qr, _BandedMatrix
28
28
29
- import LazyBandedMatrices: MulBandedLayout , BroadcastBandedLayout, _krontrav_axes
29
+ import LazyBandedMatrices: ApplyBandedLayout , BroadcastBandedLayout, _krontrav_axes
30
30
31
31
import BlockBandedMatrices: _BlockSkylineMatrix, _BandedMatrix, _BlockSkylineMatrix, blockstart, blockstride,
32
32
BlockSkylineSizes, BlockSkylineMatrix, BlockBandedMatrix, _BlockBandedMatrix, BlockTridiagonal,
@@ -41,7 +41,7 @@ LazyArrays.@lazymul BandedMatrix{<:Any,<:Any,<:OneToInf}
41
41
# BroadcastStyle(::Type{<:BandedMatrix{<:Any,<:Any,<:OneToInf}}) = LazyArrayStyle{2}()
42
42
43
43
function ^ (A:: BandedMatrix{T,<:Any,<:OneToInf} , p:: Integer ) where T
44
- if p < 0
44
+ if p < 0
45
45
inv (A)^ (- p)
46
46
elseif p == 0
47
47
Eye {T} (∞)
@@ -66,18 +66,24 @@ include("infqr.jl")
66
66
# block broadcasted
67
67
# #####
68
68
69
- const CumsumOneToInf2 = BroadcastArray{Int64 ,1 ,typeof (div),Tuple{BroadcastArray{Int64, 1 , typeof ( * ),Tuple{InfiniteArrays . OneToInf{Int64},InfiniteArrays . InfUnitRange{Int64}}},Int64} }
69
+ const CumsumOneToInf2 = Cumsum{ <: Any ,1 ,<: OneToInf }
70
70
BlockArrays. sortedunion (a:: CumsumOneToInf2 , :: CumsumOneToInf2 ) = a
71
71
72
+ function BlockArrays. sortedunion (a:: Vcat{Int,1,<:Tuple{<:AbstractVector{Int},InfStepRange{Int,Int}}} ,
73
+ b:: Vcat{Int,1,<:Tuple{<:AbstractVector{Int},InfStepRange{Int,Int}}} )
74
+ @assert a == b
75
+ a
76
+ end
77
+
72
78
73
79
map (:: typeof (length), A:: BroadcastArray{OneTo{Int},1,Type{OneTo}} ) = A. args[1 ]
74
- map (:: typeof (length), A:: BroadcastArray{<:Fill,1,Type{Fill}} ) = A. args[2 ]
75
- map (:: typeof (length), A:: BroadcastArray{<:Zeros,1,Type{Zeros}} ) = A. args[1 ]
80
+ map (:: typeof (length), A:: BroadcastArray{<:Fill,1,Type{Fill}} ) = A. args[2 ]
81
+ map (:: typeof (length), A:: BroadcastArray{<:Zeros,1,Type{Zeros}} ) = A. args[1 ]
76
82
map (:: typeof (length), A:: BroadcastArray{<:Vcat,1,Type{Vcat}} ) = broadcast (+ ,map .(length,A. args)... )
77
83
broadcasted (:: LazyArrayStyle{1} , :: typeof (length), A:: BroadcastArray{OneTo{Int},1,Type{OneTo}} ) =
78
84
A. args[1 ]
79
85
broadcasted (:: LazyArrayStyle{1} , :: typeof (length), A:: BroadcastArray{<:Fill,1,Type{Fill}} ) =
80
- A. args[2 ]
86
+ A. args[2 ]
81
87
82
88
BlockArrays. _length (:: BlockedUnitRange , :: OneToInf ) = ∞
83
89
BlockArrays. _last (:: BlockedUnitRange , :: OneToInf ) = ∞
@@ -86,8 +92,8 @@ BlockArrays._last(::BlockedUnitRange, ::OneToInf) = ∞
86
92
# KronTrav
87
93
# ##
88
94
89
- _krontrav_axes (A:: NTuple{N,OneToInf{Int}} , B:: NTuple{N,OneToInf{Int}} ) where N =
95
+ _krontrav_axes (A:: NTuple{N,OneToInf{Int}} , B:: NTuple{N,OneToInf{Int}} ) where N =
90
96
@. blockedrange (OneTo (length (A)))
91
97
92
-
98
+
93
99
end # module
0 commit comments