From 4049c4e335432b8ff9f201dfb2a759f300b20686 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Thu, 18 Apr 2024 23:49:53 +0530 Subject: [PATCH 1/3] Map imported names to correct parentmodules (#169) --- Project.toml | 2 + src/InfiniteLinearAlgebra.jl | 76 ++++++++++++++++++++++-------------- 2 files changed, 48 insertions(+), 30 deletions(-) diff --git a/Project.toml b/Project.toml index 6f3fe12..90cedde 100644 --- a/Project.toml +++ b/Project.toml @@ -9,6 +9,7 @@ BlockArrays = "8e7c35d0-a365-5155-bbbb-fb81a777f24e" BlockBandedMatrices = "ffab5731-97b5-5995-9138-79e8c1846df0" FillArrays = "1a297f60-69ca-5386-bcde-b61e274b549b" InfiniteArrays = "4858937d-0d70-526a-a4dd-2d5cb5dd786c" +Infinities = "e1ba4f0e-776d-440f-acd9-e1d2e9742647" LazyArrays = "5078a376-72f3-5289-bfd5-ec5146d43c02" LazyBandedMatrices = "d7e5e226-e90b-4449-9968-0f923699bf6f" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" @@ -22,6 +23,7 @@ BandedMatrices = "0.17.19, 1" BlockArrays = "0.16.14" BlockBandedMatrices = "0.12" FillArrays = "1" +Infinities = "0.1" InfiniteArrays = "0.13" LazyArrays = "1.3" LazyBandedMatrices = "0.9" diff --git a/src/InfiniteLinearAlgebra.jl b/src/InfiniteLinearAlgebra.jl index 157a34b..297a44d 100644 --- a/src/InfiniteLinearAlgebra.jl +++ b/src/InfiniteLinearAlgebra.jl @@ -3,38 +3,54 @@ using InfiniteArrays: InfRanges using BlockArrays, BlockBandedMatrices, BandedMatrices, LazyArrays, LazyBandedMatrices, SemiseparableMatrices, FillArrays, InfiniteArrays, MatrixFactorizations, ArrayLayouts, LinearAlgebra -import Base: +, -, *, /, \, ^, OneTo, getindex, promote_op, _unsafe_getindex, size, axes, length, - AbstractMatrix, AbstractArray, Matrix, Array, Vector, AbstractVector, Slice, - show, getproperty, copy, copyto!, map, require_one_based_indexing, similar, inv, - oneto, unitrange +import Base: *, +, -, /, \, ^, AbstractArray, AbstractMatrix, AbstractVector, Array, + Matrix, OneTo, Slice, Vector, _unsafe_getindex, adjoint, + axes, copy, copymutable, copyto!, getindex, getproperty, inv, + length, map, oneto, promote_op, require_one_based_indexing, show, + similar, size, transpose, unitrange, adjoint, copymutable, transpose, + adjoint, copymutable, transpose + import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted -import ArrayLayouts: colsupport, rowsupport, triangularlayout, MatLdivVec, triangulardata, TriangularLayout, TridiagonalLayout, - sublayout, _qr, __qr, MatLmulVec, MatLmulMat, AbstractQLayout, materialize!, diagonaldata, subdiagonaldata, supdiagonaldata, - _bidiag_forwardsub!, mulreduce, RangeCumsum, _factorize, transposelayout, ldiv!, lmul!, mul, CNoPivot -import BandedMatrices: BandedMatrix, _BandedMatrix, AbstractBandedMatrix, bandeddata, bandwidths, BandedColumns, bandedcolumns, BandedLayout, - _default_banded_broadcast, banded_similar -import FillArrays: AbstractFill, getindex_value, axes_print_matrix_row, AbstractFillMatrix, AbstractFillVector -import InfiniteArrays: OneToInf, InfUnitRange, Infinity, PosInfinity, InfiniteCardinal, InfStepRange, AbstractInfUnitRange, InfAxes, InfRanges -import LinearAlgebra: matprod, qr, AbstractTriangular, AbstractQ, adjoint, transpose, AdjOrTrans, copymutable -import LazyArrays: applybroadcaststyle, CachedArray, CachedMatrix, CachedVector, DenseColumnMajor, FillLayout, ApplyMatrix, check_mul_axes, LazyArrayStyle, - resizedata!, MemoryLayout, AbstractLazyLayout, - factorize, sub_materialize, LazyLayout, LazyArrayStyle, layout_getindex, - applylayout, ApplyLayout, PaddedLayout, CachedLayout, AbstractCachedVector, AbstractCachedMatrix, cacheddata, zero!, MulAddStyle, ApplyArray, - LazyArray, LazyMatrix, LazyVector, paddeddata, arguments, resizedata!, simplifiable, simplify, LazyLayouts -import MatrixFactorizations: ul, ul!, ul_layout, ql, ql!, ql_layout, reversecholesky_layout, QLPackedQ, getL, getR, getQ, getU, reflector!, reflectorApply!, QL, QR, QRPackedQ, - QRPackedQLayout, AdjQRPackedQLayout, QLPackedQLayout, AdjQLPackedQLayout, LayoutQ, copymutable_size - -import BlockArrays: AbstractBlockVecOrMat, sizes_from_blocks, _length, BlockedUnitRange, blockcolsupport, BlockLayout, AbstractBlockLayout, BlockSlice - -import BandedMatrices: BandedMatrix, bandwidths, AbstractBandedLayout, _banded_qr!, _banded_qr, _BandedMatrix, banded_chol! - -import LazyBandedMatrices: ApplyBandedLayout, BroadcastBandedLayout, _krontrav_axes, _block_interlace_axes, LazyBandedLayout, AbstractLazyBandedBlockBandedLayout, - AbstractLazyBandedLayout, OneToCumsum, BlockSlice1, KronTravBandedBlockBandedLayout, krontravargs, _broadcast_sub_arguments, BlockVec - -import BlockBandedMatrices: _BlockSkylineMatrix, _BandedMatrix, _BlockSkylineMatrix, blockstart, blockstride, - BlockSkylineSizes, BlockSkylineMatrix, BlockBandedMatrix, _BlockBandedMatrix, BlockTridiagonal, - AbstractBlockBandedLayout, _blockbanded_qr!, BlockBandedLayout +import ArrayLayouts: AbstractBandedLayout, AbstractQLayout, AdjQRPackedQLayout, CNoPivot, DenseColumnMajor, FillLayout, + MatLdivVec, MatLmulMat, MatLmulVec, MemoryLayout, QRPackedQLayout, RangeCumsum, TriangularLayout, + TridiagonalLayout, __qr, _bidiag_forwardsub!, _factorize, _qr, check_mul_axes, colsupport, + diagonaldata, layout_getindex, ldiv!, lmul!, mul, mulreduce, reflector!, reflectorApply!, + rowsupport, sub_materialize, subdiagonaldata, sublayout, supdiagonaldata, transposelayout, + triangulardata, triangularlayout, zero!, materialize! + +import BandedMatrices: AbstractBandedMatrix, BandedColumns, BandedLayout, BandedMatrix, BandedMatrix, _BandedMatrix, + _BandedMatrix, _BandedMatrix, _banded_qr, _banded_qr!, _default_banded_broadcast, banded_chol!, + banded_similar, bandedcolumns, bandeddata, bandwidths, bandwidths + +import BlockArrays: AbstractBlockLayout, AbstractBlockVecOrMat, BlockLayout, BlockSlice, BlockSlice1, BlockedUnitRange, + _length, blockcolsupport, sizes_from_blocks + +import BlockBandedMatrices: AbstractBlockBandedLayout, BlockBandedLayout, BlockBandedMatrix, BlockSkylineMatrix, + BlockSkylineSizes, BlockTridiagonal, _BlockBandedMatrix, _BlockSkylineMatrix, + _blockbanded_qr!, blockstart, blockstride + +import FillArrays: AbstractFill, AbstractFillMatrix, AbstractFillVector, axes_print_matrix_row, getindex_value + +import InfiniteArrays: AbstractInfUnitRange, InfAxes, InfRanges, InfStepRange, InfUnitRange, OneToInf, PosInfinity + +import Infinities: InfiniteCardinal, Infinity + +import LazyArrays: AbstractCachedMatrix, AbstractCachedVector, AbstractLazyLayout, ApplyArray, ApplyLayout, ApplyMatrix, + CachedArray, CachedLayout, CachedMatrix, CachedVector, LazyArray, LazyArrayStyle, LazyLayout, + LazyLayouts, LazyMatrix, LazyVector, MulAddStyle, PaddedLayout, _broadcast_sub_arguments, + applybroadcaststyle, applylayout, arguments, cacheddata, paddeddata, resizedata!, simplifiable, + simplify + +import LazyBandedMatrices: AbstractLazyBandedBlockBandedLayout, AbstractLazyBandedLayout, ApplyBandedLayout, BlockVec, + BroadcastBandedLayout, KronTravBandedBlockBandedLayout, LazyBandedLayout, OneToCumsum, + _block_interlace_axes, _krontrav_axes, krontravargs + +import LinearAlgebra: AbstractQ, AbstractTriangular, AdjOrTrans, factorize, matprod, qr + +import MatrixFactorizations: AdjQLPackedQLayout, LayoutQ, QL, QLPackedQ, QLPackedQLayout, QR, QRPackedQ, + copymutable_size, getL, getQ, getR, getU, ql, ql!, ql_layout, reversecholesky_layout, ul, + ul!, ul_layout import SemiseparableMatrices: AbstractAlmostBandedLayout, _almostbanded_qr! From 49e5d4dfa72a86566fd5ce59e9f61222dab02af6 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 19 Apr 2024 11:40:55 +0530 Subject: [PATCH 2/3] Remove unused imported names (#170) --- src/InfiniteLinearAlgebra.jl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/InfiniteLinearAlgebra.jl b/src/InfiniteLinearAlgebra.jl index 297a44d..85b0696 100644 --- a/src/InfiniteLinearAlgebra.jl +++ b/src/InfiniteLinearAlgebra.jl @@ -4,10 +4,10 @@ using BlockArrays, BlockBandedMatrices, BandedMatrices, LazyArrays, LazyBandedMa FillArrays, InfiniteArrays, MatrixFactorizations, ArrayLayouts, LinearAlgebra import Base: *, +, -, /, \, ^, AbstractArray, AbstractMatrix, AbstractVector, Array, - Matrix, OneTo, Slice, Vector, _unsafe_getindex, adjoint, + Matrix, OneTo, Slice, Vector, adjoint, axes, copy, copymutable, copyto!, getindex, getproperty, inv, length, map, oneto, promote_op, require_one_based_indexing, show, - similar, size, transpose, unitrange, adjoint, copymutable, transpose, + similar, size, transpose, adjoint, copymutable, transpose, adjoint, copymutable, transpose import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted @@ -15,30 +15,30 @@ import Base.Broadcast: BroadcastStyle, Broadcasted, broadcasted import ArrayLayouts: AbstractBandedLayout, AbstractQLayout, AdjQRPackedQLayout, CNoPivot, DenseColumnMajor, FillLayout, MatLdivVec, MatLmulMat, MatLmulVec, MemoryLayout, QRPackedQLayout, RangeCumsum, TriangularLayout, TridiagonalLayout, __qr, _bidiag_forwardsub!, _factorize, _qr, check_mul_axes, colsupport, - diagonaldata, layout_getindex, ldiv!, lmul!, mul, mulreduce, reflector!, reflectorApply!, + diagonaldata, ldiv!, lmul!, mul, mulreduce, reflector!, reflectorApply!, rowsupport, sub_materialize, subdiagonaldata, sublayout, supdiagonaldata, transposelayout, triangulardata, triangularlayout, zero!, materialize! -import BandedMatrices: AbstractBandedMatrix, BandedColumns, BandedLayout, BandedMatrix, BandedMatrix, _BandedMatrix, +import BandedMatrices: BandedColumns, BandedMatrix, BandedMatrix, _BandedMatrix, _BandedMatrix, _BandedMatrix, _banded_qr, _banded_qr!, _default_banded_broadcast, banded_chol!, banded_similar, bandedcolumns, bandeddata, bandwidths, bandwidths -import BlockArrays: AbstractBlockLayout, AbstractBlockVecOrMat, BlockLayout, BlockSlice, BlockSlice1, BlockedUnitRange, - _length, blockcolsupport, sizes_from_blocks +import BlockArrays: AbstractBlockLayout, BlockLayout, BlockSlice, BlockSlice1, BlockedUnitRange, + blockcolsupport, sizes_from_blocks -import BlockBandedMatrices: AbstractBlockBandedLayout, BlockBandedLayout, BlockBandedMatrix, BlockSkylineMatrix, +import BlockBandedMatrices: AbstractBlockBandedLayout, BlockBandedMatrix, BlockSkylineMatrix, BlockSkylineSizes, BlockTridiagonal, _BlockBandedMatrix, _BlockSkylineMatrix, - _blockbanded_qr!, blockstart, blockstride + _blockbanded_qr! -import FillArrays: AbstractFill, AbstractFillMatrix, AbstractFillVector, axes_print_matrix_row, getindex_value +import FillArrays: AbstractFill, AbstractFillMatrix, axes_print_matrix_row, getindex_value import InfiniteArrays: AbstractInfUnitRange, InfAxes, InfRanges, InfStepRange, InfUnitRange, OneToInf, PosInfinity import Infinities: InfiniteCardinal, Infinity import LazyArrays: AbstractCachedMatrix, AbstractCachedVector, AbstractLazyLayout, ApplyArray, ApplyLayout, ApplyMatrix, - CachedArray, CachedLayout, CachedMatrix, CachedVector, LazyArray, LazyArrayStyle, LazyLayout, - LazyLayouts, LazyMatrix, LazyVector, MulAddStyle, PaddedLayout, _broadcast_sub_arguments, + CachedArray, CachedLayout, CachedMatrix, CachedVector, LazyArrayStyle, LazyLayout, + LazyLayouts, LazyMatrix, PaddedLayout, _broadcast_sub_arguments, applybroadcaststyle, applylayout, arguments, cacheddata, paddeddata, resizedata!, simplifiable, simplify @@ -46,7 +46,7 @@ import LazyBandedMatrices: AbstractLazyBandedBlockBandedLayout, AbstractLazyBand BroadcastBandedLayout, KronTravBandedBlockBandedLayout, LazyBandedLayout, OneToCumsum, _block_interlace_axes, _krontrav_axes, krontravargs -import LinearAlgebra: AbstractQ, AbstractTriangular, AdjOrTrans, factorize, matprod, qr +import LinearAlgebra: AbstractQ, AdjOrTrans, factorize, matprod, qr import MatrixFactorizations: AdjQLPackedQLayout, LayoutQ, QL, QLPackedQ, QLPackedQLayout, QR, QRPackedQ, copymutable_size, getL, getQ, getR, getU, ql, ql!, ql_layout, reversecholesky_layout, ul, From 5857c951c8160c49800f8dde02be428d14fdd1ca Mon Sep 17 00:00:00 2001 From: Timon Salar Gutleb Date: Sat, 18 May 2024 02:15:36 -0700 Subject: [PATCH 3/3] Fix cholesky.L and bugs related to copy (#174) * fix cholesky.L * up version * Update src/infcholesky.jl Co-authored-by: Sheehan Olver * use AdjorTrans instead * consistency update --------- Co-authored-by: Sheehan Olver --- Project.toml | 2 +- src/infcholesky.jl | 3 +++ test/test_infcholesky.jl | 26 ++++++++++++++++++++++++-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index 90cedde..e5408cc 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "InfiniteLinearAlgebra" uuid = "cde9dba0-b1de-11e9-2c62-0bab9446c55c" -version = "0.7.5" +version = "0.7.6" [deps] ArrayLayouts = "4c555306-a7a7-4459-81d9-ec55ddd5c99a" diff --git a/src/infcholesky.jl b/src/infcholesky.jl index e4b6a17..b877a62 100644 --- a/src/infcholesky.jl +++ b/src/infcholesky.jl @@ -18,6 +18,9 @@ end AdaptiveCholeskyFactors(A::AbstractMatrix{T}) where T = AdaptiveCholeskyFactors(MemoryLayout(A), A) MemoryLayout(::Type{AdaptiveCholeskyFactors{T,DM,M}}) where {T,DM,M} = AdaptiveLayout{typeof(MemoryLayout(DM))}() +copy(A::AdaptiveCholeskyFactors) = AdaptiveCholeskyFactors(copy(A.data), copy(A.ncols)) +copy(A::Adjoint{T,<:AdaptiveCholeskyFactors}) where T = copy(parent(A))' +copy(A::Transpose{T,<:AdaptiveCholeskyFactors}) where T = transpose(copy(parent(A))) function partialcholesky!(F::AdaptiveCholeskyFactors{T,<:BandedMatrix}, n::Int) where T if n > F.ncols diff --git a/test/test_infcholesky.jl b/test/test_infcholesky.jl index e85e2ab..a0562ce 100644 --- a/test/test_infcholesky.jl +++ b/test/test_infcholesky.jl @@ -1,5 +1,5 @@ using InfiniteLinearAlgebra, LinearAlgebra, BandedMatrices, ArrayLayouts, LazyBandedMatrices, Test -import InfiniteLinearAlgebra: SymmetricBandedLayouts +import InfiniteLinearAlgebra: SymmetricBandedLayouts, AdaptiveCholeskyFactors @testset "infinite-cholesky" begin S = Symmetric(BandedMatrix(0 => 1:∞, 1=> Ones(∞))) @@ -10,6 +10,28 @@ import InfiniteLinearAlgebra: SymmetricBandedLayouts b = [randn(10_000); zeros(∞)] @test cholesky(S) \ b ≈ qr(S) \ b ≈ S \ b + @testset "copying and L factor" begin + z = 10_000; + A = BandedMatrix(0 => -2*(0:∞)/z, 1 => Ones(∞), -1 => Ones(∞)); + M = Symmetric(I-A) + chol = cholesky(M) + + # test consistency + @test copy(chol.factors) isa AdaptiveCholeskyFactors + @test copy(chol.factors') isa Adjoint + @test copy(transpose(chol.factors)) isa Transpose + + # test copy + @test (chol.factors')[1:10,1:10] == copy(chol.factors')[1:10,1:10] + @test transpose(chol.factors)[1:10,1:10] == copy(chol.factors')[1:10,1:10] + @test (chol.factors)[1:10,1:10] == copy(chol.factors)[1:10,1:10] + + # test fetching L factor + L = chol.L + U = chol.U + @test L[1:10,1:10]' == U[1:10,1:10] + end + @testset "singularly perturbed" begin # using Symmetric(BandedMatrix(...)) ε = 0.0001 @@ -45,4 +67,4 @@ import InfiniteLinearAlgebra: SymmetricBandedLayouts @test (F.U * F.U')[1:10,1:10] ≈ F.U[1:10,1:12] * F.U[1:10,1:12]' @test (F.U' * F.U)[1:10,1:10] ≈ S[1:10,1:10] end -end +end \ No newline at end of file