Skip to content

Commit 23e678e

Browse files
committed
Tests pass with latest LazyArrays
1 parent 61cde93 commit 23e678e

File tree

9 files changed

+77
-77
lines changed

9 files changed

+77
-77
lines changed

Project.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ BlockArrays = "0.9"
1919
BlockBandedMatrices = "0.4"
2020
FillArrays = "0.7"
2121
InfiniteArrays = "0.1"
22-
LazyArrays = "0.10.1"
22+
LazyArrays = "0.11"
2323
MatrixFactorizations = "0.1"
2424
julia = "1"
2525

examples/toeplitz.jl

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ end
2323

2424
function symbolplot!(A::BandedMatrix; kwds...)
2525
l,u = bandwidths(A)
26-
a = rightasymptotics(A.data).applied.args[1]
26+
a = rightasymptotics(A.data).args[1]
2727
θ = range(0,2π; length=1000)
2828
i = Vector{ComplexF64}()
2929
for t in θ
@@ -83,7 +83,7 @@ a = z -> 4z^10 + 1/z
8383
plot!(a.(exp.(im.*θ)); linewidth=2.0, linecolor=:blue, legend=false)
8484

8585
import InfiniteLinearAlgebra: tail_de
86-
a = reverse(A.data.applied.args[1]) .+ 0im
86+
a = reverse(A.data.args[1]) .+ 0im
8787

8888
a = randn(10) .+ im*randn(10); a[1] += 10; a[end] = 1;
8989
de = tail_de(a)
@@ -116,8 +116,8 @@ function reduceband(A)
116116
D = Q1[1:l+u+1,1:1]'A[1:l+u+1,1:u-1]
117117
D, Q1, L1
118118
end
119-
_Lrightasymptotics(D::Vcat) = D.arrays[2]
120-
_Lrightasymptotics(D::ApplyArray) = D.applied.args[1][2:end] * Ones{ComplexF64}(1,∞)
119+
_Lrightasymptotics(D::Vcat) = D.args[2]
120+
_Lrightasymptotics(D::ApplyArray) = D.args[1][2:end] * Ones{ComplexF64}(1,∞)
121121
Lrightasymptotics(L) = _Lrightasymptotics(rightasymptotics(parent(L).data))
122122

123123
function qdL(A)
@@ -227,7 +227,7 @@ function Toep_L11(T)
227227
Q1,L1 = ql(H)
228228

229229
d = Q1[1:3,1]'T[1:1+l,1]
230-
= Q1.factors.data.arrays[2].applied.args[1][2:end] # new L
230+
= Q1.factors.data.args[2].args[1][2:end] # new L
231231
T2 = _BandedMatrix(Hcat([[zero(d); d; ℓ[3:end]] L1[1:5,1]], ℓ*Ones{eltype(T)}(1,∞)), ∞, 3, 1)
232232
Q2,L2 = ql(T2)
233233
D = (Q2')[1:5,1:4] * (Q1')[1:4,1:3] * T[3:5,1:3]

src/InfiniteLinearAlgebra.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import FillArrays: AbstractFill
99
import BandedMatrices: BandedMatrix, _BandedMatrix, bandeddata
1010
import LinearAlgebra: lmul!, ldiv!, matprod, qr, QRPackedQ, AbstractTriangular, AbstractQ, adjoint, transpose,
1111
QR
12-
import LazyArrays: CachedArray, DenseColumnMajor, FillLayout, ApplyMatrix
12+
import LazyArrays: CachedArray, DenseColumnMajor, FillLayout, ApplyMatrix, check_mul_axes
1313
import MatrixFactorizations: ql, ql!, QLPackedQ, getL, reflector!, reflectorApply!,
1414
QL
1515

src/banded/infbanded.jl

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,11 @@ function BandedMatrix{T}(kv::Tuple{Vararg{Pair{<:Integer,<:Vcat{<:Any,1,<:Tuple{
3030
m,n = mn
3131
@assert isinf(n)
3232
l,u = lu
33-
M = mapreduce(x -> length(x.second.arrays[1]) + max(0,x.first), max, kv) # number of data rows
33+
M = mapreduce(x -> length(x.second.args[1]) + max(0,x.first), max, kv) # number of data rows
3434
data = zeros(T, u+l+1, M)
3535
t = zeros(T, u+l+1)
3636
for (k,v) in kv
37-
a,b = v.arrays
37+
a,b = v.args
3838
p = length(a)
3939
t[u-k+1] = b.value
4040
if k 0
@@ -53,40 +53,40 @@ end
5353
function BandedMatrix(Ac::Adjoint{T,<:InfToeplitz}) where T
5454
A = parent(Ac)
5555
l,u = bandwidths(A)
56-
a = A.data.applied.args[1]
56+
a = A.data.args[1]
5757
_BandedMatrix(reverse(conj(a)) * Ones{T}(1,∞), ∞, u, l)
5858
end
5959

6060
function BandedMatrix(Ac::Transpose{T,<:InfToeplitz}) where T
6161
A = parent(Ac)
6262
l,u = bandwidths(A)
63-
a = A.data.applied.args[1]
63+
a = A.data.args[1]
6464
_BandedMatrix(reverse(a) * Ones{T}(1,∞), ∞, u, l)
6565
end
6666

6767
function BandedMatrix(Ac::Adjoint{T,<:PertToeplitz}) where T
6868
A = parent(Ac)
6969
l,u = bandwidths(A)
70-
a,b = A.data.arrays
70+
a,b = A.data.args
7171
Ac_fd = BandedMatrix(_BandedMatrix(Hcat(a, b[:,1:l+1]), size(a,2)+l, l, u)')
72-
_BandedMatrix(Hcat(Ac_fd.data, reverse(conj(b.applied.args[1])) * Ones{T}(1,∞)), ∞, u, l)
72+
_BandedMatrix(Hcat(Ac_fd.data, reverse(conj(b.args[1])) * Ones{T}(1,∞)), ∞, u, l)
7373
end
7474

7575
function BandedMatrix(Ac::Transpose{T,<:PertToeplitz}) where T
7676
A = parent(Ac)
7777
l,u = bandwidths(A)
78-
a,b = A.data.arrays
78+
a,b = A.data.args
7979
Ac_fd = BandedMatrix(transpose(_BandedMatrix(Hcat(a, b[:,1:l+1]), size(a,2)+l, l, u)))
80-
_BandedMatrix(Hcat(Ac_fd.data, reverse(b.applied.args[1]) * Ones{T}(1,∞)), ∞, u, l)
80+
_BandedMatrix(Hcat(Ac_fd.data, reverse(b.args[1]) * Ones{T}(1,∞)), ∞, u, l)
8181
end
8282

8383

8484
for op in (:-, :+)
8585
@eval begin
8686
function $op(A::SymTriPertToeplitz{T}, λ::UniformScaling) where T
8787
TV = promote_type(T,eltype(λ))
88-
dv = Vcat(convert.(AbstractVector{TV}, A.dv.arrays)...)
89-
ev = Vcat(convert.(AbstractVector{TV}, A.ev.arrays)...)
88+
dv = Vcat(convert.(AbstractVector{TV}, A.dv.args)...)
89+
ev = Vcat(convert.(AbstractVector{TV}, A.ev.args)...)
9090
SymTridiagonal(broadcast($op, dv, Ref.λ)), ev)
9191
end
9292
function $op::UniformScaling, A::SymTriPertToeplitz{V}) where V
@@ -102,52 +102,52 @@ for op in (:-, :+)
102102

103103
function $op(A::TriPertToeplitz{T}, λ::UniformScaling) where T
104104
TV = promote_type(T,eltype(λ))
105-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.dl.arrays)...),
106-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).arrays)...),
107-
Vcat(convert.(AbstractVector{TV}, A.du.arrays)...))
105+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.dl.args)...),
106+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
107+
Vcat(convert.(AbstractVector{TV}, A.du.args)...))
108108
end
109109
function $op::UniformScaling, A::TriPertToeplitz{V}) where V
110110
TV = promote_type(eltype(λ),V)
111-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.arrays))...),
112-
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).arrays)...),
113-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.arrays))...))
111+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...),
112+
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
113+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.args))...))
114114
end
115115
function $op(adjA::AdjTriPertToeplitz{T}, λ::UniformScaling) where T
116116
A = parent(adjA)
117117
TV = promote_type(T,eltype(λ))
118-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.du.arrays)...),
119-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).arrays)...),
120-
Vcat(convert.(AbstractVector{TV}, A.dl.arrays)...))
118+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, A.du.args)...),
119+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.d, λ.λ).args)...),
120+
Vcat(convert.(AbstractVector{TV}, A.dl.args)...))
121121
end
122122
function $op::UniformScaling, adjA::AdjTriPertToeplitz{V}) where V
123123
A = parent(adjA)
124124
TV = promote_type(eltype(λ),V)
125-
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.arrays))...),
126-
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).arrays)...),
127-
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.arrays))...))
125+
Tridiagonal(Vcat(convert.(AbstractVector{TV}, broadcast($op, A.du.args))...),
126+
Vcat(convert.(AbstractVector{TV}, broadcast($op, λ.λ, A.d).args)...),
127+
Vcat(convert.(AbstractVector{TV}, broadcast($op, A.dl.args))...))
128128
end
129129

130130
function $op::UniformScaling, A::InfToeplitz{V}) where V
131131
l,u = bandwidths(A)
132132
TV = promote_type(eltype(λ),V)
133-
a = convert(AbstractVector{TV}, $op.(A.data.applied.args[1]))
133+
a = convert(AbstractVector{TV}, $op.(A.data.args[1]))
134134
a[u+1] += λ.λ
135135
_BandedMatrix(a*Ones{TV}(1,∞), ∞, l, u)
136136
end
137137

138138
function $op(A::InfToeplitz{T}, λ::UniformScaling) where T
139139
l,u = bandwidths(A)
140140
TV = promote_type(T,eltype(λ))
141-
a = AbstractVector{TV}(A.data.applied.args[1])
141+
a = AbstractVector{TV}(A.data.args[1])
142142
a[u+1] = $op(a[u+1], λ.λ)
143143
_BandedMatrix(a*Ones{TV}(1,∞), ∞, l, u)
144144
end
145145

146146
function $op::UniformScaling, A::PertToeplitz{V}) where V
147147
l,u = bandwidths(A)
148148
TV = promote_type(eltype(λ),V)
149-
a, t = convert.(AbstractVector{TV}, A.data.arrays)
150-
b = $op.(t.applied.args[1])
149+
a, t = convert.(AbstractVector{TV}, A.data.args)
150+
b = $op.(t.args[1])
151151
a[u+1,:] += λ.λ
152152
b[u+1] += λ.λ
153153
_BandedMatrix(Hcat(a, b*Ones{TV}(1,∞)), ∞, l, u)
@@ -156,9 +156,9 @@ for op in (:-, :+)
156156
function $op(A::PertToeplitz{T}, λ::UniformScaling) where T
157157
l,u = bandwidths(A)
158158
TV = promote_type(T,eltype(λ))
159-
ã, t = A.data.arrays
159+
ã, t = A.data.args
160160
a = AbstractArray{TV}(ã)
161-
b = AbstractVector{TV}(t.applied.args[1])
161+
b = AbstractVector{TV}(t.args[1])
162162
a[u+1,:] .= $op.(a[u+1,:],λ.λ)
163163
b[u+1] = $op(b[u+1], λ.λ)
164164
_BandedMatrix(Hcat(a, b*Ones{TV}(1,∞)), ∞, l, u)
@@ -174,16 +174,16 @@ end
174174

175175
function BandedMatrix(A::PertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
176176
@assert A.u == u # Not implemented
177-
a, b = A.data.arrays
178-
t = b.applied.args[1] # topelitz part
177+
a, b = A.data.args
178+
t = b.args[1] # topelitz part
179179
t_pad = vcat(t,Zeros(l-A.l))
180180
data = Hcat([vcat(a,Zeros{T}(l-A.l,size(a,2))) repeat(t_pad,1,l)], t_pad * Ones{T}(1,∞))
181181
_BandedMatrix(data, ∞, l, u)
182182
end
183183

184184
function BandedMatrix(A::SymTriPertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
185-
a,a∞ = A.dv.arrays
186-
b,b∞ = A.ev.arrays
185+
a,a∞ = A.dv.args
186+
b,b∞ = A.ev.args
187187
n = max(length(a), length(b)+1) + 1
188188
data = zeros(T, l+u+1, n)
189189
data[u,2:length(b)+1] .= b
@@ -207,9 +207,9 @@ function BandedMatrix(A::SymTridiagonal{T,Fill{T,1,Tuple{OneToInf{Int}}}}, (l,u)
207207
end
208208

209209
function BandedMatrix(A::TriPertToeplitz{T}, (l,u)::Tuple{Int,Int}) where T
210-
a,a∞ = A.d.arrays
211-
b,b∞ = A.du.arrays
212-
c,c∞ = A.dl.arrays
210+
a,a∞ = A.d.args
211+
b,b∞ = A.du.args
212+
c,c∞ = A.dl.args
213213
n = max(length(a), length(b)+1, length(c)-1) + 1
214214
data = zeros(T, l+u+1, n)
215215
data[u,2:length(b)+1] .= b

src/banded/infqltoeplitz.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ ql(Op::TriToeplitz{T}) where T = ql(InfToeplitz(Op))
5555
function ql(A::InfToeplitz{T}; kwds...) where T
5656
l,u = bandwidths(A)
5757
@assert u == 1
58-
a = reverse(A.data.applied.args[1])
58+
a = reverse(A.data.args[1])
5959
de = tail_de(a; kwds...)
6060
X = [transpose(a); zero(T) transpose(de)]::Matrix{T}
6161
F = ql_X!(X) # calculate data for fixed point

src/blockbanded/infblocktridiagonal.jl

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@ for op in (:-, :+)
1313
@eval begin
1414
function $op(A::BlockTriPertToeplitz{T}, λ::UniformScaling) where T
1515
TV = promote_type(T,eltype(λ))
16-
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.dl.arrays)...),
17-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.d, Ref(λ)).arrays)...),
18-
Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.du.arrays)...))
16+
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.dl.args)...),
17+
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.d, Ref(λ)).args)...),
18+
Vcat(convert.(AbstractVector{Matrix{TV}}, A.blocks.du.args)...))
1919
end
2020
function $op::UniformScaling, A::BlockTriPertToeplitz{V}) where V
2121
TV = promote_type(eltype(λ),V)
22-
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.dl.arrays))...),
23-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, Ref(λ), A.blocks.d).arrays)...),
24-
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.du.arrays))...))
22+
BlockTridiagonal(Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.dl.args))...),
23+
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, Ref(λ), A.blocks.d).args)...),
24+
Vcat(convert.(AbstractVector{Matrix{TV}}, broadcast($op, A.blocks.du.args))...))
2525
end
2626
$op(adjA::Adjoint{T,BlockTriPertToeplitz{T}}, λ::UniformScaling) where T = $op(BlockTridiagonal(adjA), λ)
2727
$op::UniformScaling, adjA::Adjoint{T,BlockTriPertToeplitz{T}}) where T = $op(λ, BlockTridiagonal(adjA))
@@ -47,7 +47,7 @@ end
4747
_find_block(cs::Number, i::Integer) = i  cs ? 1 : 0
4848
function _find_block(cs::Vcat, i::Integer)
4949
n = 0
50-
for a in cs.arrays
50+
for a in cs.args
5151
i < first(a) && return n
5252
if i  last(a)
5353
return _find_block(a, i) + n
@@ -68,7 +68,7 @@ print_matrix_row(io::IO,
6868
i::Integer, cols::AbstractVector{<:Infinity}, sep::AbstractString) = nothing
6969

7070
function BlockSkylineSizes(A::BlockTriPertToeplitz, (l,u)::NTuple{2,Int})
71-
N = max(length(A.blocks.du.arrays[1])+1,length(A.blocks.d.arrays[1]),length(A.blocks.dl.arrays[1]))
71+
N = max(length(A.blocks.du.args[1])+1,length(A.blocks.d.args[1]),length(A.blocks.dl.args[1]))
7272
block_sizes = Vector{Int}(undef, N) # assume square
7373
block_starts = BandedMatrix{Int}(undef, (N+l,N), (l,u))
7474
block_strides = Vector{Int}(undef, N)
@@ -103,7 +103,7 @@ end
103103
function BlockBandedMatrix(A::BlockTriPertToeplitz{T}, (l,u)::NTuple{2,Int}) where T
104104
data = T[]
105105
append!(data,vec(A[Block.(1:1+l),Block(1)]))
106-
N = max(length(A.blocks.du.arrays[1])+1,length(A.blocks.d.arrays[1]),length(A.blocks.dl.arrays[1]))
106+
N = max(length(A.blocks.du.args[1])+1,length(A.blocks.d.args[1]),length(A.blocks.dl.args[1]))
107107
for J=2:N
108108
append!(data, vec(A[Block.(max(1,J-u):J+l),Block(J)]))
109109
end

src/infql.jl

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ ql(A::TriPertToeplitz{T}; kwds...) where T = ql!(BandedMatrix(A, (bandwidth(A,1)
6464
ql(A::InfBandedMatrix{T}; kwds...) where T = ql!(BandedMatrix(A, (bandwidth(A,1)+bandwidth(A,2),bandwidth(A,2))); kwds...)
6565

6666
toeptail(B::BandedMatrix{T}) where T =
67-
_BandedMatrix(B.data.arrays[end].applied.args[1][1:end-B.u]*Ones{T}(1,∞), size(B,1), B.l-B.u, B.u)
67+
_BandedMatrix(B.data.args[end].args[1][1:end-B.u]*Ones{T}(1,∞), size(B,1), B.l-B.u, B.u)
6868

6969
# asymptotics of A[:,j:end] as j -> ∞
70-
rightasymptotics(d::Hcat) = last(d.arrays)
71-
rightasymptotics(d::Vcat) = Vcat(rightasymptotics.(d.arrays)...)
70+
rightasymptotics(d::Hcat) = last(d.args)
71+
rightasymptotics(d::Vcat) = Vcat(rightasymptotics.(d.args)...)
7272
rightasymptotics(d) = d
7373

7474
function ql!(B::InfBandedMatrix{TT}; kwds...) where TT
@@ -80,7 +80,7 @@ function ql!(B::InfBandedMatrix{TT}; kwds...) where TT
8080
Q∞, L∞ = F∞
8181

8282
# populate finite data and do ql!
83-
data = bandeddata(B).arrays[1]
83+
data = bandeddata(B).args[1]
8484
= _BandedMatrix(data, size(data,2), l,u)
8585
B̃[end,end] = L∞[1,1]
8686
B̃[end:end,end-l+1:end-1] = adjoint(Q∞)[1:1,1:l-1]*T[l:2(l-1),1:l-1]
@@ -105,7 +105,7 @@ getL(Q::QLHessenberg, ::Tuple{OneToInf{Int},OneToInf{Int}}) where T = LowerTrian
105105
# number of structural non-zeros in axis k
106106
nzzeros(A::AbstractArray, k) = size(A,k)
107107
nzzeros(::Zeros, k) = 0
108-
nzzeros(B::Vcat, k) = sum(size.(B.arrays[1:end-1],k))
108+
nzzeros(B::Vcat, k) = sum(size.(B.args[1:end-1],k))
109109
nzzeros(B::CachedArray, k) = max(size(B.data,k), nzzeros(B.array,k))
110110
function nzzeros(B::AbstractMatrix, k)
111111
l,u = bandwidths(B)
@@ -209,13 +209,13 @@ end
209209
####
210210

211211
function _ql(A::BlockTriPertToeplitz, d, e)
212-
N = max(length(A.blocks.du.arrays[1])+1,length(A.blocks.d.arrays[1]),length(A.blocks.dl.arrays[1]))
212+
N = max(length(A.blocks.du.args[1])+1,length(A.blocks.d.args[1]),length(A.blocks.dl.args[1]))
213213
c,a,b = A[Block(N+1,N)],A[Block(N,N)],A[Block(N-1,N)]
214214
P,τ = blocktailiterate(c,a,b,d,e)
215215
B = BlockBandedMatrix(A,(2,1))
216216

217217

218-
BB = _BlockBandedMatrix(B.data.arrays[1], (fill(2,N+2), fill(2,N)), (2,1))
218+
BB = _BlockBandedMatrix(B.data.args[1], (fill(2,N+2), fill(2,N)), (2,1))
219219
BB[Block(N),Block.(N-1:N)] .= P[Block(1), Block.(1:2)]
220220
F = ql!(view(BB, Block.(1:N), Block.(1:N)))
221221
BB[Block(N+1),Block.(N-1:N)] .= P[Block(2), Block.(1:2)]

test/test_hessenbergq.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ end
6767
@testset "Toeplitz QLHessenberg" begin
6868
@testset "Derivation" begin
6969
A = BandedMatrix(-1 => Fill(2,∞), 0 => Fill(5,∞), 1 => Fill(0.5,∞))
70-
a = reverse(A.data.applied.args[1])
70+
a = reverse(A.data.args[1])
7171
d,e = tail_de(a)
7272
X = [transpose(a); 0 d e]
7373
Q = LowerHessenbergQ(Fill(ql!(X).Q,∞))
@@ -77,7 +77,7 @@ end
7777
@test (Q'A)[1:10,1:10] Ln[1:10,1:10] L[1:10,1:10]
7878

7979
A = BandedMatrix(-1 => Fill(2,∞), 0 => Fill(5+im,∞), 1 => Fill(0.5,∞))
80-
a = reverse(A.data.applied.args[1])
80+
a = reverse(A.data.args[1])
8181
d,e = tail_de(a)
8282
X = [transpose(a); 0 d e]
8383
q = ql!(X).Q

0 commit comments

Comments
 (0)