GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Support SuiteSparse:GraphBLAS 10.5.2 by eriknw · Pull Request #658 · python-graphblas/python-graphblas

Conversation

@eriknw

@eriknw eriknw commented Oct 28, 2026 •
edited
Loading

Uh oh!

There was an error while loading. Please reload this page.

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.

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
eriknw added 2 commits October 28, 2026 10:39
@eriknw
Support SuiteSparse:GraphBLAS 10.5.2
b9e04fd
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.
@eriknw
Cap an unpinned pandas below 3.1 in CI
f2404c1
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

Uh oh!

There was an error while loading. Please reload this page.

@eriknw
eriknw deleted the ss-10.5.2-support branch October 29, 2026 01:18
This was referenced Oct 29, 2026
Type UDT ops like built-in ops; fix UDT literals, casts and comparisons #591
Merged
Add Python 3.15; routine maintenance; zizmor in pre-commit and CI #636
Merged
Render rich reprs without pandas, byte-identical to pandas output #605
Open
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

No reviews

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

1 participant

@eriknw
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.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.