From 88d8ceb8d1b8419e74b4e2f47b26b096bc7254be Mon Sep 17 00:00:00 2001 From: Chris Geoga Date: Tue, 20 May 2025 17:26:42 -0500 Subject: [PATCH 1/4] Error fixes for #81 --- src/compressor.jl | 10 +++++++--- src/multiplication.jl | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/compressor.jl b/src/compressor.jl index c89c3b5..856798a 100644 --- a/src/compressor.jl +++ b/src/compressor.jl @@ -137,9 +137,13 @@ function _aca_partial(K, irange, jrange, atol, rmax, rtol, istart, buffer_ = not if isnothing(i) # ran out of candidate rows. Good case: the matrix is zero. Bad # case: aca failed - all(j -> iszero(K[first(irange), j]), jrange) && - all(i -> iszero(K[i, first(jrange)]), irange) || - @warn "aca possibly failed on $irange × $jrange" + try + all(j -> iszero(K[first(irange), j]), jrange) && + all(i -> iszero(K[i, first(jrange)]), irange) || + @warn "aca possibly failed on $irange × $jrange" + catch + @warn "aca possibly failed on $irange × $jrange" + end break end else # δ != 0 diff --git a/src/multiplication.jl b/src/multiplication.jl index ce861f1..f29730c 100644 --- a/src/multiplication.jl +++ b/src/multiplication.jl @@ -221,7 +221,7 @@ Multiplication when the target is a dense matrix. The numbering system in the fo function _mul_dense!(C::Base.Matrix, A, B, a) Adata = isleaf(A) ? data(A) : A Bdata = isleaf(B) ? data(B) : B - if Adata isa HMatrix + if Adata isa HMatrix || Adata isa Adjoint{Float64, H} where H <: HMatrix if Bdata isa Matrix _mul131!(C, Adata, Bdata, a) elseif Bdata isa RkMatrix @@ -235,7 +235,7 @@ function _mul_dense!(C::Base.Matrix, A, B, a) elseif Bdata isa HMatrix _mul113!(C, Adata, Bdata, a) end - elseif Adata isa RkMatrix + elseif Adata isa RkMatrix || Adata isa Adjoint{Float64, H} where H <: RkMatrix if Bdata isa Matrix _mul121!(C, Adata, Bdata, a) elseif Bdata isa RkMatrix From 6b4cea0161d605e3508b8c55a04b6f993b6ef613 Mon Sep 17 00:00:00 2001 From: Chris Geoga Date: Sun, 24 Aug 2025 16:56:53 -0500 Subject: [PATCH 2/4] AdjointHMatrix type --- src/multiplication.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/multiplication.jl b/src/multiplication.jl index f29730c..5c3afec 100644 --- a/src/multiplication.jl +++ b/src/multiplication.jl @@ -221,7 +221,7 @@ Multiplication when the target is a dense matrix. The numbering system in the fo function _mul_dense!(C::Base.Matrix, A, B, a) Adata = isleaf(A) ? data(A) : A Bdata = isleaf(B) ? data(B) : B - if Adata isa HMatrix || Adata isa Adjoint{Float64, H} where H <: HMatrix + if Adata isa HMatrix || Adata isa AdjointHMatrix if Bdata isa Matrix _mul131!(C, Adata, Bdata, a) elseif Bdata isa RkMatrix @@ -235,7 +235,7 @@ function _mul_dense!(C::Base.Matrix, A, B, a) elseif Bdata isa HMatrix _mul113!(C, Adata, Bdata, a) end - elseif Adata isa RkMatrix || Adata isa Adjoint{Float64, H} where H <: RkMatrix + elseif Adata isa RkMatrix || Adata isa AdjointHMatrix if Bdata isa Matrix _mul121!(C, Adata, Bdata, a) elseif Bdata isa RkMatrix From 69c3b6557a7231ab587ccb0f0a2c3751395765fc Mon Sep 17 00:00:00 2001 From: Chris Geoga Date: Sun, 24 Aug 2025 16:59:03 -0500 Subject: [PATCH 3/4] Change try-catch to type if --- src/compressor.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compressor.jl b/src/compressor.jl index 856798a..199d2fa 100644 --- a/src/compressor.jl +++ b/src/compressor.jl @@ -137,11 +137,11 @@ function _aca_partial(K, irange, jrange, atol, rmax, rtol, istart, buffer_ = not if isnothing(i) # ran out of candidate rows. Good case: the matrix is zero. Bad # case: aca failed - try + if K isa KernelMatrix all(j -> iszero(K[first(irange), j]), jrange) && all(i -> iszero(K[i, first(jrange)]), irange) || @warn "aca possibly failed on $irange × $jrange" - catch + else @warn "aca possibly failed on $irange × $jrange" end break From d654f9d60c46855271341af783479e7aae0c69b1 Mon Sep 17 00:00:00 2001 From: Chris Geoga Date: Wed, 27 Aug 2025 10:36:31 -0500 Subject: [PATCH 4/4] maxlog on the ACA potential failure warnings. --- Project.toml | 2 +- src/compressor.jl | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Project.toml b/Project.toml index 134e85d..0533e29 100644 --- a/Project.toml +++ b/Project.toml @@ -1,6 +1,6 @@ name = "HMatrices" uuid = "8646bddf-ab1c-4fa7-9c51-ba187d647618" -version = "0.2.12" +version = "0.2.13" [deps] Distributed = "8ba89e20-285c-5b6f-9357-94700520ee1b" diff --git a/src/compressor.jl b/src/compressor.jl index 199d2fa..1822fa4 100644 --- a/src/compressor.jl +++ b/src/compressor.jl @@ -140,9 +140,9 @@ function _aca_partial(K, irange, jrange, atol, rmax, rtol, istart, buffer_ = not if K isa KernelMatrix all(j -> iszero(K[first(irange), j]), jrange) && all(i -> iszero(K[i, first(jrange)]), irange) || - @warn "aca possibly failed on $irange × $jrange" + @warn "aca possibly failed on $irange × $jrange" maxlog=1 else - @warn "aca possibly failed on $irange × $jrange" + @warn "aca possibly failed on $irange × $jrange" maxlog=1 end break end