Repository navigation
Test the fmm engine guards, string weights, and config key completions; combine repeated indices in csr, csc and GCXS imports - #609
Open
eriknw wants to merge 3 commits into
Conversation
eriknw
marked this pull request as ready for review
August 4, 2026 16:07
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 4, 2026 16:12
fd8075e to
b3592de
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
2 times, most recently
from
August 5, 2026 03:18
1a9ea9e to
4f77daf
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 5, 2026 17:44
4f77daf to
b496504
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 5, 2026 18:03
b496504 to
035b553
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 5, 2026 18:05
035b553 to
91d6d15
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 6, 2026 07:59
91d6d15 to
7ae8528
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 6, 2026 15:39
7ae8528 to
6d95911
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 6, 2026 15:41
6d95911 to
5698b2f
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 6, 2026 20:36
5698b2f to
28e3c0e
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 6, 2026 20:42
28e3c0e to
236b2a3
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 7, 2026 02:48
236b2a3 to
88b96ee
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 7, 2026 05:09
88b96ee to
7da2c6f
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
August 26, 2026 17:30
7da2c6f to
59d6c14
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
September 18, 2026 03:09
59d6c14 to
41b31e4
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
September 25, 2026 03:33
7eb2e5d to
1cf3c44
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
3 times, most recently
from
September 26, 2026 05:25
dcd1088 to
9fdabf2
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
5 times, most recently
from
October 3, 2026 04:57
f023745 to
58a339b
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
October 3, 2026 04:57
58a339b to
2417560
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
October 4, 2026 06:21
2417560 to
bea7d2a
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
October 8, 2026 21:40
bea7d2a to
6d8ad80
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
2 times, most recently
from
October 9, 2026 05:25
a19d2f9 to
f7ca59d
Compare
eriknw
force-pushed
the
29-io-config-coverage
branch
from
October 14, 2026 18:45
f7ca59d to
8fff3a4
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## 20-networkx-ingestion #609 +/- ##
=========================================================
- Coverage 98.79% 98.78% -0.01%
=========================================================
Files 105 105
Lines 30278 30373 +95
Branches 3528 3534 +6
=========================================================
+ Hits 29912 30004 +92
Misses 244 244
- Partials 122 125 +3 🚀 New features to boost your workflow:
|
Three behaviors had no test at all in the fast tier. Asking for the deprecated "fmm"/"fast_matrix_market" Matrix Market engine when fast_matrix_market is not installed must warn about the deprecation before it fails, and then fail with an ImportError naming the engine; neither read nor write had coverage for that, since the existing engine tests skip themselves when the package is missing. String edge weights in from_networkx infer a 1-D <U array, so only the dtype-kind half of the guard sends them down the scipy fallback; the neighboring array-weight test exercises only the shape half. And the config mapping's _ipython_key_completions_ hook, which drives `config[<tab>]` in IPython, was never called. Each test was checked by perturbing the line it covers and confirming it goes red.
Behavior fix. A scipy csr or csc array outside canonical format, and a
pydata GCXS array, may repeat an index within a row (column), and
from_scipy_sparse imported the arrays unchecked. The Matrix was invalid
(GxB_Matrix_fprint: GrB_INVALID_OBJECT), with nvals counting both entries.
Before: from_pydata_sparse of a 2x3 GCXS with indices [1, 1, 0] in row 0
(values 1, 2, 3) and [2] in row 1 gave nvals 4 with two (0, 1) entries
and to_dense 2.0 at (0, 1), where pydata's todense gives 3.0.
from_scipy_sparse of the same csr array did the same.
After: from_scipy_sparse builds such an array through coo, so repeats
need dup_op as they do in coo input (ValueError "Duplicate indices
found" without it). from_pydata_sparse sums them by default (with
scipy's sum_duplicates, on a copy, so any dtype works), as pydata's
todense does and its COO does when built; dup_op combines them
otherwise. Unsorted but distinct indices give the same Matrix as before,
now built from coo. A 1-d GCXS already summed its repeats (through
asformat("coo")).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Three behaviors had no test at all in the fast tier. Asking for the
deprecated "fmm"/"fast_matrix_market" Matrix Market engine when
fast_matrix_market is not installed must warn about the deprecation
before it fails, and then fail with an ImportError naming the engine;
neither read nor write had coverage for that, since the existing engine
tests skip themselves when the package is missing. String edge weights
in from_networkx infer a 1-D <U array, so only the dtype-kind half of
the guard sends them down the scipy fallback; the neighboring
array-weight test exercises only the shape half. And the config
mapping's ipython_key_completions hook, which drives
config[<tab>]in IPython, was never called.
Each test was checked by perturbing the line it covers and confirming
it goes red.
Added in the 2026-10-20 coverage round
Behavior fix: repeated indices in an imported csr, csc or GCXS array
(main too). A scipy csr or csc array outside canonical format, and a
pydata GCXS array, may repeat an index within a row (or column), and
from_scipy_sparse imported the arrays unchecked. The Matrix was invalid
(GxB_Matrix_fprint: GrB_INVALID_OBJECT), with nvals counting both entries.
Before: from_pydata_sparse of a 2x3 GCXS with indices [1, 1, 0] in row 0
(values 1, 2, 3) and [2] in row 1 gave nvals 4 with two (0, 1) entries,
and to_dense 2.0 at (0, 1), where pydata's todense gives 3.0.
from_scipy_sparse of the same csr array did the same.
After:
dup_op, as they already did in coo input. Without it, a csr or csc with
a repeated index now raises ValueError "Duplicate indices found" instead
of building the invalid Matrix.
does (and its COO does when built), with scipy's sum_duplicates on a
copy, so the caller's arrays are unchanged and any dtype works. dup_op
combines them otherwise. A 1-d GCXS already summed them (through
asformat("coo")).
New tests: test_from_scipy_sparse_compressed_duplicates (csr, csc) and
test_from_pydata_sparse_gcxs_duplicates (axis 0 and 1; int64, float64,
bool), which fail without the fix.
Stack created with GitHub Stacks CLI • Give Feedback 💬