Skip to content

Catch only the factorization's SingularException in sparse cond - #1132

Merged
ViralBShah merged 1 commit into
vs/cond-result-typefrom
vs/cond-narrow-catch
Oct 27, 2026
Merged

ViralBShah merged 1 commit into
vs/cond-result-typefrom
vs/cond-narrow-catch

Conversation

@ViralBShah

Copy link
Copy Markdown
Member

Stacked on #1131.

Since #1126 sparse cond wraps the whole opnormestinv estimator in a try, so a SingularException from anywhere inside it becomes Inf, and a singular triangular or diagonal matrix is only found once the estimator has allocated its blocks and run its first solve. Raised in the post-merge review of #1126.

Before (#1131), cond(A, 1) of a singular A with n = 10^6 and one zero on the diagonal

A time allocated
diagonal 64.6 ms 125.3 MiB
lower bidiagonal 16.1 ms 68.7 MiB

After

A time allocated
diagonal 9.4 ms 56.6 MiB
lower bidiagonal 2.6 ms 0

Both return Inf, before and after. factorize throws a SingularException for a singular LU, and for a singular Hermitian matrix once Cholesky and LDLt have failed and it falls back to the LU (#1116); only the triangular and diagonal factors it returns leave the zero pivot to the solve. So cond now catches around factorize alone and checks the diagonal of those factors with _issingularfactor, which reuses the triangular solve's _trisingular, before it calls the estimator; opnormestinv(A, t) keeps its behaviour and calls the new _opnormestinv(A, F, t) with the factorization. A sweep of cond against dense over Int, Float32, Float64, ComplexF32, ComplexF64, Rational{Int}, BigFloat and Complex{BigFloat}, on general, singular, triangular, diagonal and Hermitian matrices, gives the same results as #1131 with a seeded RNG.

Written by Claude Code.

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov

codecov Bot commented Oct 26, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 85.71429% with 2 lines in your changes missing coverage. Please review.
✅ Project coverage is 94.68%. Comparing base (82a0880) to head (ef013bb).

Files with missing lines Patch % Lines
src/linalg.jl 85.71% 2 Missing ⚠️
Additional details and impacted files
@@                   Coverage Diff                   @@
##           vs/cond-result-type    #1132      +/-   ##
=======================================================
- Coverage                94.70%   94.68%   -0.02%     
=======================================================
  Files                       16       16              
  Lines                    10424    10432       +8     
=======================================================
+ Hits                      9872     9878       +6     
- Misses                     552      554       +2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@ViralBShah
ViralBShah merged commit ae3041d into vs/cond-result-type Oct 27, 2026
12 checks passed
@ViralBShah
ViralBShah deleted the vs/cond-narrow-catch branch October 27, 2026 00:13
@ViralBShah ViralBShah added backport 1.14 backport 1.13 Change should be backported to release-1.13 labels Oct 27, 2026
@ViralBShah ViralBShah mentioned this pull request Oct 27, 2026
30 tasks done
ViralBShah added a commit that referenced this pull request Oct 27, 2026
Backports of the merged PRs labelled `backport 1.14`, cherry-picked with
`-x` in the order they were merged on `main`. `release-1.14` starts at
b0aa455 (#1104), the commit JuliaLang/julia's `release-1.14` pins, and
every PR merged on `main` since then is labelled, so this branch's tree
is identical to `main`'s at 9bfad27.

- [x] #1105
- [x] #1011
- [x] #1107
- [x] #1108
- [x] #1110
- [x] #1111
- [x] #1114
- [x] #1112
- [x] #1115
- [x] #1117
- [x] #1118
- [x] #1109
- [x] #1113
- [x] #1122
- [x] #1123
- [x] #1120
- [x] #1124
- [x] #1125
- [x] #1116
- [x] #1121
- [x] #1126
- [x] #1128
- [x] #1130
- [x] #1131
- [x] #1119
- [x] #1133
- [x] #1127
- [x] #1135
- [x] #1134
- [x] #1137

#1137 removes the first-call compile time that #1128 added, which the
TTFX check flagged on this PR.

#1132 merged into the branch of #1131 and is part of its commit.

Not bug fixes: #1011 adds a deprecation, #1109 changes the `sprand`
value stream for a value function, #1113 changes the result shape of
`SparseMatrixCSC` of a vector view, and #1119, #1133, #1134 and #1135
add methods for views. They are included because they are labelled and
1.14 is not released yet.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Viral B. Shah <ViralBShah@users.noreply.github.com>
@ViralBShah ViralBShah removed the backport 1.13 Change should be backported to release-1.13 label Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant