Commit 52fbf34
committed
Fix add_low_rank to only compute roots when cached roots exist
This fixes a numerical instability bug where add_low_rank would speculatively
compute root decompositions even when no cached roots existed. This caused
SVD failures on ill-conditioned matrices (e.g., when using LinearKernel).
Changes:
- Change early exit condition from 'not generate_roots and not has_roots'
to 'not (generate_roots and has_roots)' - exit early if EITHER
generate_roots=False OR no cached roots exist
- Pass generate_roots parameter through in RootLinearOperator.add_low_rank
(was being silently ignored)
- Add regression test to verify root_decomposition is not called when
no roots are cached
- Update test_cat_rows to first cache roots before expecting them to be
cached after cat_rows (aligns test with new expected behavior)1 parent 0f31521 commit 52fbf34
4 files changed
Lines changed: 62 additions & 7 deletions
File tree
- linear_operator
- operators
- test
- test/operators
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1074 | 1074 | | |
1075 | 1075 | | |
1076 | 1076 | | |
1077 | | - | |
| 1077 | + | |
| 1078 | + | |
1078 | 1079 | | |
1079 | | - | |
| 1080 | + | |
1080 | 1081 | | |
1081 | 1082 | | |
1082 | 1083 | | |
| |||
1253 | 1254 | | |
1254 | 1255 | | |
1255 | 1256 | | |
1256 | | - | |
| 1257 | + | |
| 1258 | + | |
1257 | 1259 | | |
1258 | 1260 | | |
1259 | 1261 | | |
1260 | 1262 | | |
1261 | 1263 | | |
1262 | 1264 | | |
1263 | 1265 | | |
1264 | | - | |
| 1266 | + | |
1265 | 1267 | | |
1266 | 1268 | | |
1267 | 1269 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
95 | 95 | | |
96 | 96 | | |
97 | 97 | | |
98 | | - | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
99 | 103 | | |
100 | 104 | | |
101 | 105 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
733 | 733 | | |
734 | 734 | | |
735 | 735 | | |
736 | | - | |
737 | | - | |
| 736 | + | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
| 742 | + | |
| 743 | + | |
738 | 744 | | |
739 | 745 | | |
740 | 746 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
30 | 31 | | |
31 | 32 | | |
32 | 33 | | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
33 | 76 | | |
34 | 77 | | |
35 | 78 | | |
| |||
0 commit comments