Skip to content

Commit 55d92b1

Browse files
authored
Move pad here from ClassicalOrthogonalPolynomials.jl (#133)
* Move pad here from ClassicalOrthogonalPolynomials.jl * test paddedness * change to ApplyVector * Update Project.toml
1 parent 1142e1f commit 55d92b1

File tree

3 files changed

+35
-7
lines changed

3 files changed

+35
-7
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name = "InfiniteLinearAlgebra"
22
uuid = "cde9dba0-b1de-11e9-2c62-0bab9446c55c"
3-
version = "0.6.15"
3+
version = "0.6.16"
44

55
[deps]
66
ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a"
@@ -26,7 +26,7 @@ DSP = "0.7"
2626
FillArrays = "0.13"
2727
InfiniteArrays = "0.12"
2828
LazyArrays = "0.22"
29-
LazyBandedMatrices = "0.8.4"
29+
LazyBandedMatrices = "0.8.7"
3030
MatrixFactorizations = "0.9.6"
3131
SemiseparableMatrices = "0.3"
3232
julia = "1.6"

src/InfiniteLinearAlgebra.jl

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import BlockArrays: AbstractBlockVecOrMat, sizes_from_blocks, _length, BlockedUn
3030
import BandedMatrices: BandedMatrix, bandwidths, AbstractBandedLayout, _banded_qr!, _banded_qr, _BandedMatrix, banded_chol!
3131

3232
import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes, LazyBandedLayout, AbstractLazyBandedBlockBandedLayout,
33-
AbstractLazyBandedLayout, OneToCumsum, BlockSlice1, KronTravBandedBlockBandedLayout, krontravargs, _broadcast_sub_arguments
33+
AbstractLazyBandedLayout, OneToCumsum, BlockSlice1, KronTravBandedBlockBandedLayout, krontravargs, _broadcast_sub_arguments, BlockVec
3434

3535
import BlockBandedMatrices: _BlockSkylineMatrix, _BandedMatrix, _BlockSkylineMatrix, blockstart, blockstride,
3636
BlockSkylineSizes, BlockSkylineMatrix, BlockBandedMatrix, _BlockBandedMatrix, BlockTridiagonal,
@@ -73,6 +73,12 @@ function choplength(c::AbstractVector, tol)
7373
end
7474

7575
# resize! to nearest block
76+
"""
77+
compatible_resize!(c::AbstractVector, n)
78+
79+
resizes a vector `c` but in a way that block sizes are not changed when `c` has blocked axes.
80+
It may allocate a new vector in some settings.
81+
"""
7682
compatible_resize!(_, c::AbstractVector, n) = resize!(c, n)
7783
compatible_resize!(ax::BlockedUnitRange, c::AbstractVector, n) = resize!(c, iszero(n) ? Block(0) : findblock(ax, n))
7884
compatible_resize!(c, n) = compatible_resize!(axes(c,1), c, n)
@@ -94,6 +100,13 @@ function chop(A::AbstractMatrix{T}, tol::Real=zero(real(T))) where T
94100
return A
95101
end
96102

103+
pad(c::AbstractVector{T}, ax::Union{OneTo,OneToInf}) where T = [c; Zeros{T}(length(ax)-length(c))]
104+
pad(c, ax...) = PaddedArray(c, ax)
105+
106+
pad(c::Transpose, ax, bx) = transpose(pad(parent(c), bx, ax))
107+
pad(c::Adjoint, ax, bx) = adjoint(pad(parent(c), bx, ax))
108+
pad(c::BlockVec, ax::BlockedUnitRange{<:InfStepRange}) = BlockVec(pad(c.args[1], size(c.args[1],1), ∞))
109+
97110
export Vcat, Fill, ql, ql!, ∞, ContinuousSpectrumError, BlockTridiagonal
98111

99112
include("infconv.jl")

test/runtests.jl

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ using InfiniteLinearAlgebra, BlockBandedMatrices, BlockArrays, BandedMatrices, I
22
MatrixFactorizations, ArrayLayouts, LinearAlgebra, Random, LazyBandedMatrices, StaticArrays
33
import InfiniteLinearAlgebra: qltail, toeptail, tailiterate, tailiterate!, tail_de, ql_X!,
44
InfToeplitz, PertToeplitz, TriToeplitz, InfBandedMatrix, InfBandCartesianIndices,
5-
rightasymptotics, QLHessenberg, ConstRows, PertConstRows, chop, chop!,
5+
rightasymptotics, QLHessenberg, ConstRows, PertConstRows, chop, chop!, pad,
66
BandedToeplitzLayout, PertToeplitzLayout, TridiagonalToeplitzLayout, BidiagonalToeplitzLayout
7-
import Base: BroadcastStyle
7+
import Base: BroadcastStyle, oneto
88
import BlockArrays: _BlockArray, blockcolsupport
99
import BlockBandedMatrices: isblockbanded, _BlockBandedMatrix
1010
import MatrixFactorizations: QLPackedQ
1111
import BandedMatrices: bandeddata, _BandedMatrix, BandedStyle
12-
import LazyArrays: colsupport, MemoryLayout, ApplyLayout, LazyArrayStyle, arguments
12+
import LazyArrays: colsupport, MemoryLayout, ApplyLayout, LazyArrayStyle, arguments, paddeddata, PaddedLayout
1313
import InfiniteArrays: OneToInf, oneto, RealInfinity
14-
import LazyBandedMatrices: BroadcastBandedBlockBandedLayout, BroadcastBandedLayout, LazyBandedLayout
14+
import LazyBandedMatrices: BroadcastBandedBlockBandedLayout, BroadcastBandedLayout, LazyBandedLayout, BlockVec
1515

1616
using Aqua
1717
@testset "Project quality" begin
@@ -32,6 +32,21 @@ end
3232
c = PseudoBlockArray([randn(5); zeros(10)], (blockedrange(1:5),))
3333
d = chop!(c, 0)
3434
@test length(d) == 6
35+
36+
@test pad(1:3, 5) == [1:3; 0; 0]
37+
@test pad(1:3, oneto(∞)) isa Vcat
38+
X = Matrix(reshape(1:6, 3, 2))
39+
P = pad(X, oneto(3), oneto(∞))
40+
@test P isa PaddedArray
41+
P = pad(BlockVec(X), blockedrange(Fill(3,∞)))
42+
@test P isa BlockVec
43+
@test MemoryLayout(P) isa PaddedLayout
44+
@test paddeddata(P) isa BlockVec
45+
@test colsupport(P) == 1:6
46+
P = pad(BlockVec(X'), blockedrange(Fill(3,∞)))
47+
@test P isa BlockVec{Int,<:Adjoint}
48+
@test MemoryLayout(P) isa PaddedLayout
49+
@test pad(BlockVec(transpose(X)), blockedrange(Fill(3,∞))) isa BlockVec{Int,<:Transpose}
3550
end
3651

3752
include("test_infconv.jl")

0 commit comments

Comments
 (0)