Skip to content

Support SuiteSparse:GraphBLAS 10.5.2 - #658

Merged
eriknw merged 2 commits into
mainfrom
ss-10.5.2-support
Oct 29, 2026
Merged

eriknw merged 2 commits into
mainfrom
ss-10.5.2-support

Conversation

@eriknw

@eriknw eriknw commented Oct 28, 2026 •

Copy link
Copy Markdown
Member

SuiteSparse:GraphBLAS 10.5.2 turned GxB_NONBLOCKING_GPU and GxB_BLOCKING_GPU from GrB_Mode values of their own (7099 and 7098) into #defines of GrB_NONBLOCKING and GrB_BLOCKING, so python-suitesparse-graphblas 10.5.2.0 no longer has them. With it, graphblas.ss (gb.ss.about, gb.ss.config, gb.ss.concat, ...) and from graphblas import * fail to import:

AttributeError: cffi library 'suitesparse_graphblas._graphblas' has
no function, constant or global variable named 'GxB_NONBLOCKING_GPU'

CI's "upstream" draws, which build psg from git, hit this now.

  • About._modes adds the GPU modes only when the library has them, with setdefault, so a library that exposes them as aliases cannot relabel "nonblocking" as "nonblocking_gpu". gb.ss.about["mode"] reads as before on 10.5.2, 10.5.1 and 8.2.1, and test_about now checks it.
  • 10.5.2 also checks that imported values are long enough (older versions compared the values' byte size with the number of entries). test_ss_import_export imported a 14 x 7 bitmap with values for 7 x 7, which 10.5.2 rejects with InvalidValue and older versions filled from past the end of the values; it now gives values for the whole bitmap.

Of the names graphblas uses, only these two are missing from the 10.5.2 build (psg 10.5.1.1 and 10.5.2 builds compared name by name). Checked locally: the full suite with --runslow on 10.5.2 (both backends, blocking and non-blocking), 10.5.1 and 8.2.1.

Second commit: CI caps an unpinned pandas below 3.1 (the stack's commit of the same name, picked from #591). conda-forge now has pandas 3.1.0, and three test_formatting.py tests fail with it on main; #605 removes the repr's dependence on pandas.

This is a standalone PR against main, not part of stack #657, so it can merge first; the stack picks it up when it is next rebased onto main. Adding psg 10.5.2.0 to CI's version pools waits for its wheels and conda-forge package.

Behavior fix. SuiteSparse:GraphBLAS 10.5.2 turned GxB_NONBLOCKING_GPU
and GxB_BLOCKING_GPU from GrB_Mode values of their own (7099 and 7098)
into #defines of GrB_NONBLOCKING and GrB_BLOCKING, and
python-suitesparse-graphblas built against it no longer has them.
Before, graphblas.ss (gb.ss.about, gb.ss.config, gb.ss.concat, and so
on, and `from graphblas import *`) failed to import with that build:

    AttributeError: cffi library 'suitesparse_graphblas._graphblas' has
    no function, constant or global variable named 'GxB_NONBLOCKING_GPU'

After, it imports, and gb.ss.about["mode"] reads "blocking" or
"nonblocking" as before. The GPU modes go into About._modes only when
the library has them, with setdefault, so a library that exposes them
as aliases cannot turn "nonblocking" into "nonblocking_gpu".
test_about now checks the mode against the one graphblas was
initialized with.

10.5.2 also checks that imported values are long enough, which older
versions got wrong (they compared the byte size of the values with the
number of entries). test_ss_import_export imported a 14 x 7 bitmap with
values for 7 x 7, which 10.5.2 rejects with InvalidValue and older
versions filled from past the end of the values; it now gives values
for the whole bitmap.
pandas 3.1.0 came out on 2026-10-22, on PyPI so far, and three
test_formatting.py tests fail with it, on main and here:

* test_sparse_vector_repr and test_sparse_matrix_repr: the pandas-based
  repr renderer appends its "..." row with ``df.loc["..."] = ...`` to
  integer columns, and pandas 3.1 warns ("Pandas4Warning: Setting an item
  of incompatible dtype is deprecated"), which ``filterwarnings = error``
  turns into a failure.
* test_autocompute: under pandas' default display.max_columns=0, pandas 3.1
  fits one column fewer on each side of a wide repr's "..." than 3.0 did,
  and the test pins 3.0's output.

conda-forge has pandas 3.1.0 now, so every CI draw of the newest pandas
hits these. #605 renders reprs without pandas, which makes both moot, so rather
than change the renderer it replaces, CI stays below pandas 3.1 until #605
is on main.

The pools keep "" for the newest release. A new LATEST_CEILINGS table caps
it when the pick is written out, so an unpinned pandas becomes
``pdver='<3.1'`` and the log's summary reads ``pd=latest<3.1``. Pins and
rules are unchanged; an unpinned draw now gets the newest 3.0.x. A MAINT note says when to remove the cap, and check_versions.sh
points to it.

Only test_and_build.yml installs pandas to run the tests. imports.yml (pip,
``.[default]``) and debug.yml (conda) also install the newest pandas, but
they only import graphblas, which pandas 3.1 does not affect.

Checked: ``--validate`` passes (160000 combos). Dry-run solves with the cap
land on pandas 3.0.6 for Python 3.15 on linux-64 and for 3.13 with numpy
2.2 on win-64, and on 2.3.3 for 3.11 with numpy 1.24 on osx-arm64. Locally,
the three tests fail with pandas 3.1.0 and pass with 3.0.6.
@eriknw
eriknw merged commit b07a405 into main Oct 29, 2026
18 checks passed
@eriknw
eriknw deleted the ss-10.5.2-support branch October 29, 2026 01:18
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