Skip to content

test: validate riscv64 wheel build with RISE personal runners - #3

Open
gounthar wants to merge 339 commits into
mainfrom
add-riscv64-wheels
Open

test: validate riscv64 wheel build with RISE personal runners#3
gounthar wants to merge 339 commits into
mainfrom
add-riscv64-wheels

Conversation

@gounthar

Copy link
Copy Markdown
Owner

Testing on personal RISE runners instead of riseproject-dev.

@coderabbitai

coderabbitai Bot commented Mar 19, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 295 files, which is 145 over the limit of 150.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 695ffe14-4d73-4ac2-8311-ebff9c036d8c

📥 Commits

Reviewing files that changed from the base of the PR and between bfc1e31 and 8aba946.

⛔ Files ignored due to path filters (5)
  • doc/source/_static/favicon/apple-touch-icon.png is excluded by !**/*.png
  • doc/source/_static/index-images/api.svg is excluded by !**/*.svg
  • doc/source/_static/index-images/contributor.svg is excluded by !**/*.svg
  • doc/source/_static/index-images/getting_started.svg is excluded by !**/*.svg
  • doc/source/_static/index-images/user_guide.svg is excluded by !**/*.svg
📒 Files selected for processing (295)
  • .cirrus.star
  • .github/PULL_REQUEST_TEMPLATE.md
  • .github/dependabot.yml
  • .github/windows_arm64_steps/action.yml
  • .github/workflows/codeql.yml
  • .github/workflows/cygwin.yml
  • .github/workflows/dependency-review.yml
  • .github/workflows/emscripten.yml
  • .github/workflows/labeler.yml
  • .github/workflows/linux-ibm.yml
  • .github/workflows/linux.yml
  • .github/workflows/linux_blas.yml
  • .github/workflows/linux_qemu.yml
  • .github/workflows/macos.yml
  • .github/workflows/mypy_primer.yml
  • .github/workflows/mypy_primer_comment.yml
  • .github/workflows/pixi-packages.yml
  • .github/workflows/scorecards.yml
  • .github/workflows/stubtest.yml
  • .github/workflows/typecheck.yml
  • .github/workflows/wheels.yml
  • .github/workflows/windows.yml
  • .gitignore
  • .spin/cmds.py
  • benchmarks/benchmarks/bench_alloc_cache.py
  • benchmarks/benchmarks/bench_io.py
  • benchmarks/benchmarks/bench_linalg.py
  • benchmarks/benchmarks/bench_reduce.py
  • doc/changelog/2.4.4-changelog.rst
  • doc/neps/index.rst
  • doc/neps/nep-0025-missing-data-3.rst
  • doc/neps/nep-0027-zero-rank-arrays.rst
  • doc/neps/nep-0040-legacy-datatype-impl.rst
  • doc/neps/nep-0043-extensible-ufuncs.rst
  • doc/neps/nep-0053-c-abi-evolution.rst
  • doc/neps/nep-0057-numpy-platform-support.rst
  • doc/release/upcoming_changes/29244.deprecation.rst
  • doc/release/upcoming_changes/29270.change.rst
  • doc/release/upcoming_changes/29619.deprecation.rst
  • doc/release/upcoming_changes/30615.deprecation.rst
  • doc/release/upcoming_changes/30857.new_feature.rst
  • doc/release/upcoming_changes/30937.compatibility.rst
  • doc/release/upcoming_changes/30965.improvement.rst
  • doc/release/upcoming_changes/30984.capi.rst
  • doc/release/upcoming_changes/30984.change.rst
  • doc/release/upcoming_changes/30994.c_api.rst
  • doc/release/upcoming_changes/31067.c_api.rst
  • doc/release/upcoming_changes/31091.c_api.rst
  • doc/release/upcoming_changes/31172.typing.rst
  • doc/release/upcoming_changes/31226.typing.rst
  • doc/release/upcoming_changes/31238.compatibility.rst
  • doc/release/upcoming_changes/31256.new_feature.rst
  • doc/release/upcoming_changes/31274.performance.rst
  • doc/release/upcoming_changes/31293.deprecation.rst
  • doc/release/upcoming_changes/31378.compatibility.rst
  • doc/source/_static/numpy.css
  • doc/source/building/index.rst
  • doc/source/conf.py
  • doc/source/dev/development_workflow.rst
  • doc/source/doxyfile
  • doc/source/f2py/buildtools/index.rst
  • doc/source/f2py/buildtools/meson-python.rst
  • doc/source/f2py/code/fib_mesonpy.f90
  • doc/source/f2py/code/meson_mesonpy.build
  • doc/source/f2py/code/pyproj_mesonpy.toml
  • doc/source/f2py/windows/conda.rst
  • doc/source/f2py/windows/index.rst
  • doc/source/reference/arrays.datetime.rst
  • doc/source/reference/c-api/array.rst
  • doc/source/reference/c-api/generalized-ufuncs.rst
  • doc/source/reference/c-api/types-and-structures.rst
  • doc/source/reference/routines.dtypes.rst
  • doc/source/release.rst
  • doc/source/release/2.4.4-notes.rst
  • doc/source/user/basics.interoperability.rst
  • doc/source/user/quickstart.rst
  • environment.yml
  • meson_cpu/meson.build
  • numpy/__init__.cython-30.pxd
  • numpy/__init__.py
  • numpy/__init__.pyi
  • numpy/_array_api_info.py
  • numpy/_core/_add_newdocs.py
  • numpy/_core/_dtype.py
  • numpy/_core/_internal.py
  • numpy/_core/_type_aliases.py
  • numpy/_core/_umath_tests.pyi
  • numpy/_core/arrayprint.py
  • numpy/_core/code_generators/cversions.txt
  • numpy/_core/code_generators/genapi.py
  • numpy/_core/code_generators/generate_numpy_api.py
  • numpy/_core/code_generators/generate_umath.py
  • numpy/_core/code_generators/numpy_api.py
  • numpy/_core/code_generators/ufunc_docstrings.py
  • numpy/_core/config.h.in
  • numpy/_core/defchararray.pyi
  • numpy/_core/einsumfunc.py
  • numpy/_core/feature_detection_cmath.h
  • numpy/_core/feature_detection_math.h
  • numpy/_core/fromnumeric.py
  • numpy/_core/fromnumeric.pyi
  • numpy/_core/getlimits.py
  • numpy/_core/include/numpy/_neighborhood_iterator_imp.h
  • numpy/_core/include/numpy/arrayscalars.h
  • numpy/_core/include/numpy/dtype_api.h
  • numpy/_core/include/numpy/ndarrayobject.h
  • numpy/_core/include/numpy/ndarraytypes.h
  • numpy/_core/include/numpy/npy_2_compat.h
  • numpy/_core/include/numpy/npy_common.h
  • numpy/_core/include/numpy/numpyconfig.h
  • numpy/_core/include/numpy/ufuncobject.h
  • numpy/_core/meson.build
  • numpy/_core/multiarray.pyi
  • numpy/_core/overrides.py
  • numpy/_core/records.py
  • numpy/_core/shape_base.pyi
  • numpy/_core/src/_simd/_simd_inc.h.src
  • numpy/_core/src/common/lowlevel_strided_loops.h
  • numpy/_core/src/common/npy_cpu_dispatch.h
  • numpy/_core/src/common/npy_cpu_features.c
  • numpy/_core/src/common/npy_dlpack.h
  • numpy/_core/src/common/npy_extint128.h
  • numpy/_core/src/common/npy_import.h
  • numpy/_core/src/common/numpy_tag.h
  • numpy/_core/src/common/simd/lsx/memory.h
  • numpy/_core/src/common/simd/simd.hpp
  • numpy/_core/src/common/simd/vec/arithmetic.h
  • numpy/_core/src/multiarray/_datetime.h
  • numpy/_core/src/multiarray/abstractdtypes.h
  • numpy/_core/src/multiarray/alloc.c
  • numpy/_core/src/multiarray/alloc.h
  • numpy/_core/src/multiarray/array_coercion.c
  • numpy/_core/src/multiarray/array_converter.c
  • numpy/_core/src/multiarray/array_method.c
  • numpy/_core/src/multiarray/arrayobject.c
  • numpy/_core/src/multiarray/arraytypes.c.src
  • numpy/_core/src/multiarray/buffer.c
  • numpy/_core/src/multiarray/calculation.c
  • numpy/_core/src/multiarray/common.c
  • numpy/_core/src/multiarray/common.h
  • numpy/_core/src/multiarray/compiled_base.c
  • numpy/_core/src/multiarray/convert.c
  • numpy/_core/src/multiarray/convert_datatype.c
  • numpy/_core/src/multiarray/ctors.c
  • numpy/_core/src/multiarray/ctors.h
  • numpy/_core/src/multiarray/datetime.c
  • numpy/_core/src/multiarray/datetime_busday.c
  • numpy/_core/src/multiarray/datetime_busdaycal.c
  • numpy/_core/src/multiarray/descriptor.c
  • numpy/_core/src/multiarray/descriptor.h
  • numpy/_core/src/multiarray/dlpack.c
  • numpy/_core/src/multiarray/dtype_transfer.c
  • numpy/_core/src/multiarray/dtypemeta.c
  • numpy/_core/src/multiarray/dtypemeta.h
  • numpy/_core/src/multiarray/flagsobject.c
  • numpy/_core/src/multiarray/fnv.c
  • numpy/_core/src/multiarray/getset.c
  • numpy/_core/src/multiarray/getset.h
  • numpy/_core/src/multiarray/item_selection.c
  • numpy/_core/src/multiarray/iterators.c
  • numpy/_core/src/multiarray/mapping.c
  • numpy/_core/src/multiarray/methods.c
  • numpy/_core/src/multiarray/multiarraymodule.c
  • numpy/_core/src/multiarray/multiarraymodule.h
  • numpy/_core/src/multiarray/nditer_api.c
  • numpy/_core/src/multiarray/nditer_constr.c
  • numpy/_core/src/multiarray/nditer_pywrap.c
  • numpy/_core/src/multiarray/npy_static_data.c
  • numpy/_core/src/multiarray/npy_static_data.h
  • numpy/_core/src/multiarray/number.c
  • numpy/_core/src/multiarray/number.h
  • numpy/_core/src/multiarray/scalarapi.c
  • numpy/_core/src/multiarray/scalartypes.c.src
  • numpy/_core/src/multiarray/shape.c
  • numpy/_core/src/multiarray/stringdtype/dtype.c
  • numpy/_core/src/multiarray/stringdtype/static_string.c
  • numpy/_core/src/multiarray/stringdtype/static_string.h
  • numpy/_core/src/multiarray/textreading/field_types.c
  • numpy/_core/src/multiarray/textreading/rows.c
  • numpy/_core/src/npymath/npy_math_internal.h.src
  • numpy/_core/src/npysort/binsearch.cpp
  • numpy/_core/src/npysort/npysort_common.h
  • numpy/_core/src/umath/_scaled_float_dtype.c
  • numpy/_core/src/umath/_umath_tests.c.src
  • numpy/_core/src/umath/dispatching.cpp
  • numpy/_core/src/umath/legacy_array_method.c
  • numpy/_core/src/umath/loops.c.src
  • numpy/_core/src/umath/loops_half.dispatch.c.src
  • numpy/_core/src/umath/matmul.c.src
  • numpy/_core/src/umath/real_imag_ufuncs.cpp
  • numpy/_core/src/umath/real_imag_ufuncs.h
  • numpy/_core/src/umath/reduction.c
  • numpy/_core/src/umath/scalarmath.c.src
  • numpy/_core/src/umath/special_integer_comparisons.cpp
  • numpy/_core/src/umath/stringdtype_ufuncs.cpp
  • numpy/_core/src/umath/ufunc_object.c
  • numpy/_core/src/umath/ufunc_type_resolution.c
  • numpy/_core/src/umath/umathmodule.c
  • numpy/_core/src/umath/wrapping_array_method.c
  • numpy/_core/strings.pyi
  • numpy/_core/tests/examples/cython/checks.pyx
  • numpy/_core/tests/examples/limited_api/limited_api_opaque.c
  • numpy/_core/tests/examples/limited_api/meson.build
  • numpy/_core/tests/test_api.py
  • numpy/_core/tests/test_array_api_info.py
  • numpy/_core/tests/test_array_coercion.py
  • numpy/_core/tests/test_arrayobject.py
  • numpy/_core/tests/test_arrayprint.py
  • numpy/_core/tests/test_casting_unittests.py
  • numpy/_core/tests/test_cpu_features.py
  • numpy/_core/tests/test_custom_dtypes.py
  • numpy/_core/tests/test_cython.py
  • numpy/_core/tests/test_datetime.py
  • numpy/_core/tests/test_deprecations.py
  • numpy/_core/tests/test_dlpack.py
  • numpy/_core/tests/test_dtype.py
  • numpy/_core/tests/test_einsum.py
  • numpy/_core/tests/test_half.py
  • numpy/_core/tests/test_item_selection.py
  • numpy/_core/tests/test_limited_api.py
  • numpy/_core/tests/test_multiarray.py
  • numpy/_core/tests/test_nditer.py
  • numpy/_core/tests/test_numeric.py
  • numpy/_core/tests/test_numerictypes.py
  • numpy/_core/tests/test_print.py
  • numpy/_core/tests/test_records.py
  • numpy/_core/tests/test_regression.py
  • numpy/_core/tests/test_scalarbuffer.py
  • numpy/_core/tests/test_scalarmath.py
  • numpy/_core/tests/test_simd.py
  • numpy/_core/tests/test_stringdtype.py
  • numpy/_core/tests/test_strings.py
  • numpy/_core/tests/test_ufunc.py
  • numpy/_core/tests/test_umath.py
  • numpy/_core/tests/test_umath_accuracy.py
  • numpy/_core/tests/test_umath_complex.py
  • numpy/_globals.py
  • numpy/_typing/_nested_sequence.py
  • numpy/_utils/__init__.py
  • numpy/_utils/__init__.pyi
  • numpy/_utils/_conversions.py
  • numpy/_utils/_conversions.pyi
  • numpy/conftest.py
  • numpy/ctypeslib/_ctypeslib.py
  • numpy/dtypes.py
  • numpy/dtypes.pyi
  • numpy/f2py/_backends/meson.build.template
  • numpy/f2py/capi_maps.py
  • numpy/f2py/cfuncs.py
  • numpy/f2py/crackfortran.py
  • numpy/f2py/f2py2e.py
  • numpy/f2py/src/fortranobject.c
  • numpy/f2py/src/fortranobject.h
  • numpy/f2py/tests/test_array_from_pyobj.py
  • numpy/f2py/tests/test_capi_maps.py
  • numpy/f2py/tests/test_crackfortran.py
  • numpy/f2py/tests/test_f2py2e.py
  • numpy/f2py/tests/test_modules.py
  • numpy/f2py/tests/test_regression.py
  • numpy/fft/_helper.pyi
  • numpy/fft/_pocketfft.pyi
  • numpy/lib/_arraypad_impl.pyi
  • numpy/lib/_function_base_impl.py
  • numpy/lib/_index_tricks_impl.pyi
  • numpy/lib/_npyio_impl.py
  • numpy/lib/_npyio_impl.pyi
  • numpy/lib/_shape_base_impl.pyi
  • numpy/lib/_stride_tricks_impl.py
  • numpy/lib/_stride_tricks_impl.pyi
  • numpy/lib/_type_check_impl.py
  • numpy/lib/_type_check_impl.pyi
  • numpy/lib/_version.pyi
  • numpy/lib/tests/test_arraysetops.py
  • numpy/lib/tests/test_format.py
  • numpy/lib/tests/test_function_base.py
  • numpy/lib/tests/test_io.py
  • numpy/lib/tests/test_loadtxt.py
  • numpy/lib/tests/test_nanfunctions.py
  • numpy/linalg/_linalg.py
  • numpy/linalg/lapack_lite/fortran.py
  • numpy/linalg/tests/test_linalg.py
  • numpy/linalg/tests/test_regression.py
  • numpy/ma/core.py
  • numpy/ma/core.pyi
  • numpy/ma/mrecords.py
  • numpy/ma/tests/test_core.py
  • numpy/ma/tests/test_deprecations.py
  • numpy/ma/tests/test_extras.py
  • numpy/matlib.pyi
  • numpy/matrixlib/tests/test_defmatrix.py
  • numpy/meson.build
  • numpy/polynomial/_polytypes.pyi
  • numpy/polynomial/chebyshev.py
  • numpy/polynomial/chebyshev.pyi
  • numpy/polynomial/hermite.py

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch add-riscv64-wheels

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request primarily focuses on enabling and validating riscv64 wheel builds within the CI/CD pipeline, shifting testing to personal RISE runners. Alongside this crucial infrastructure update, the PR significantly enhances documentation, particularly for f2py users looking to distribute extensions with meson-python. It also includes several internal API simplifications and typing improvements, contributing to overall code clarity and maintainability.

Highlights

  • CI/CD Infrastructure: Configured cibuildwheel to support riscv64 Linux builds using manylinux_2_39, enabling validation of riscv64 wheels on personal RISE runners.
  • F2PY Enhancements and Documentation: Added comprehensive documentation for distributing f2py extensions using meson-python, including practical examples. Additionally, f2py modules now correctly display allocatable arrays in dir() output.
  • Documentation Improvements: Simplified Windows build instructions, clarified DLPack usage with GPU tensors, and updated the pull request template with new sections for PR summary, first-time committer introduction, and AI disclosure.
  • Internal API Refinement: Simplified several PyArray macros in ndarrayobject.h and dtypemeta.h for improved consistency and maintainability.
  • Typing Updates: Refined type stubs for numpy.char and numpy.strings modules, removing redundant overloads and adjusting type assertions for string operations.
Ignored Files
  • Ignored by pattern: .github/workflows/** (5)
    • .github/workflows/codeql.yml
    • .github/workflows/dependency-review.yml
    • .github/workflows/emscripten.yml
    • .github/workflows/scorecards.yml
    • .github/workflows/wheels.yml
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request introduces several valuable improvements across the codebase. Key updates include enhancing the f2py module with a __dir__ implementation for better discoverability of allocatable arrays, which is a significant step forward for user experience. Documentation has been refined in multiple areas, such as clarifying GPU tensor interoperability with DLPack and updating build instructions for Windows, making the information more accurate and easier to follow. Type hinting definitions have been refactored for string operations, aligning them with direct numpy imports. Additionally, the build system now supports riscv64 wheels, expanding platform compatibility, and meson-python documentation has been added, providing clear guidance for distributing F2PY extensions. Overall, these changes contribute positively to the project's functionality, documentation, and maintainability.

mattip and others added 27 commits March 29, 2026 22:54
Signed-off-by: aaronzuo <anarionzuo@outlook.com>
The value has been set to 50 for more than 20 years.  Computers
generally have much more memory now than they did 20 years ago,
so we should be able to let `re` use the default.

Closes numpygh-31104.
MAINT: f2py: Stop setting re._MAXCACHE to 50.
Bumps [pytest-cov](https://github.com/pytest-dev/pytest-cov) from 7.0.0 to 7.1.0.
- [Changelog](https://github.com/pytest-dev/pytest-cov/blob/master/CHANGELOG.rst)
- [Commits](pytest-dev/pytest-cov@v7.0.0...v7.1.0)

---
updated-dependencies:
- dependency-name: pytest-cov
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…/pytest-cov-7.1.0

MAINT: Bump pytest-cov from 7.0.0 to 7.1.0 in /requirements
…plex-long-double-dtype

BUG: f2py map complex_long_double to NPY_CLONGDOUBLE
…overflow

BUG: fix heap buffer overflow in timedelta to string casts
Bumps [pyrefly](https://github.com/facebook/pyrefly) from 0.57.1 to 0.58.0.
- [Release notes](https://github.com/facebook/pyrefly/releases)
- [Commits](facebook/pyrefly@0.57.1...0.58.0)

---
updated-dependencies:
- dependency-name: pyrefly
  dependency-version: 0.58.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
This only covers cursor and claude, copilot has other options.

Grok (xAI) generated the list of files to ignore.

[skip azp] [skip cirrus] [skip actions]
MAINT: Gitignore personal AI config files.
dependabot Bot and others added 28 commits May 5, 2026 17:59
Updates the requirements on [gitpython](https://github.com/gitpython-developers/GitPython) and [pyrefly](https://github.com/facebook/pyrefly) to permit the latest version.

Updates `gitpython` to 3.1.48
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](gitpython-developers/GitPython@3.1.47...3.1.48)

Updates `pyrefly` from 0.62.0 to 0.63.0
- [Release notes](https://github.com/facebook/pyrefly/releases)
- [Commits](facebook/pyrefly@0.62.0...0.63.0)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.48
  dependency-type: direct:production
  dependency-group: python-deps
- dependency-name: pyrefly
  dependency-version: 0.63.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: python-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
…/python-deps-b50f3cc0a5

MAINT: Bump the python-deps group in /requirements with 2 updates
Updates the requirements on [gitpython](https://github.com/gitpython-developers/GitPython) and [pyrefly](https://github.com/facebook/pyrefly) to permit the latest version.

Updates `gitpython` to 3.1.49
- [Release notes](https://github.com/gitpython-developers/GitPython/releases)
- [Changelog](https://github.com/gitpython-developers/GitPython/blob/main/CHANGES)
- [Commits](gitpython-developers/GitPython@3.1.48...3.1.49)

Updates `pyrefly` from 0.63.0 to 0.63.1
- [Release notes](https://github.com/facebook/pyrefly/releases)
- [Commits](facebook/pyrefly@0.63.0...0.63.1)

---
updated-dependencies:
- dependency-name: gitpython
  dependency-version: 3.1.49
  dependency-type: direct:production
  dependency-group: python-deps
- dependency-name: pyrefly
  dependency-version: 0.63.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: python-deps
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [github/codeql-action](https://github.com/github/codeql-action) from 4.35.2 to 4.35.3.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](github/codeql-action@95e58e9...e46ed2c)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 4.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [int128/hide-comment-action](https://github.com/int128/hide-comment-action) from 1.57.0 to 1.58.0.
- [Release notes](https://github.com/int128/hide-comment-action/releases)
- [Commits](int128/hide-comment-action@d38cf59...392bc21)

---
updated-dependencies:
- dependency-name: int128/hide-comment-action
  dependency-version: 1.58.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
…ithub/codeql-action-4.35.3

MAINT: Bump github/codeql-action from 4.35.2 to 4.35.3
…nt128/hide-comment-action-1.58.0

MAINT: Bump int128/hide-comment-action from 1.57.0 to 1.58.0
This allows downstream packages (mostly ml_dtypes) to register their dtype with something like:

    np.dtypes.register_dlpack_dtype((4, 16), np.dtype("bfloat16"))

which will map it for dlpack use (in both directions).  The function is idempotent if the dtypes are
identical.
It may raise an error if another dtype is already mappend _from_ a DLPack code, in which case
the path for exporting (to the code) is still registered as it still makes sense (the other reason is that
this just simplifies thread-safety a lot).

Co-authored-by: Tyler Reddy <tyler.je.reddy@gmail.com>
numpy#31378)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
As described in numpy#31254, non-ASCII strings are not handled
safely by arrayflags_setitem and PyArray_ToFile.

What to do with Unicode strings elsewhere upstream / downstream
is a complicated question that has design consequences, so
Warren Weckesser suggested reasonable error handling in the bug
report comments to provide the user with useful, non-segfaulting
execptions.

This PR simply implements those recommendations and adds coverage
to ensure KeyError / ValueError are properly raised when
ecnountered.
[skip azp] [skip cirrus] [skip actions]
DOC: Add forgotten ``register_dlpack_dtype`` to docs
The incomplete sorting before turning sets into lists caused issues
with `pytest-xdist` not seeing the same test splits and therefore
erroring out immediately (see numpygh-31414).

While this seems to happen only on RISC-V, the problem isn't actually RISC-V
specific beyond it materializing there, possibly due to different
implementation of sorting behavior when tie-breaking on the first sort key.
That shouldn't be relied on though, this should be considered a (minor)
bug in NumPy.

Closes numpygh-31414
MAINT: ensure `_core.sctypes` lists are deterministically ordered
Add manylinux_riscv64 to the wheel build matrix using native riscv64
runners (ubuntu-24.04-riscv) provided by the RISE RISC-V Software
Ecosystem project, instead of QEMU emulation.

Build time: ~3.5 minutes on native hardware vs ~38 minutes under QEMU.

Changes:
- Add [ubuntu-24.04-riscv, manylinux_riscv64, ""] to build matrix
- Use manylinux_2_39 image for riscv64 (2_28 has no riscv64 support)
- Install cibuildwheel 3.4.0 directly (actions/setup-python lacks
  riscv64 pre-built binaries, cibuildwheel action calls it internally)
- Use smoke test for riscv64 (full pytest-xdist has a known test
  collection ordering issue unrelated to riscv64)

Tested on riseproject-dev/numpy fork with RISE runners:
riseproject-dev#1

Thanks to Ludovic Henry and the RISE project for providing native
riscv64 CI runners.

Signed-off-by: Bruno Verachten <gounthar@gmail.com>
/opt/python-3.12/bin no longer exists on the RISE runner after the
2026-04-22 image rebuild. Replace the manual pip install of cibuildwheel
with actions/setup-python@v5 and the pypa/cibuildwheel action directly.

Signed-off-by: Bruno Verachten <gounthar@gmail.com>
Drop the separate Setup Python step, the split Build wheels / Build
wheels (riscv64) steps, and the riscv64-only CIBW_TEST_COMMAND.
cibuildwheel handles riscv64 the same as other Linux targets now.

Only additions remaining: matrix entry and manylinux-riscv64-image in
pyproject.toml.

Signed-off-by: Bruno Verachten <gounthar@gmail.com>
pytest-xdist collects bytes_ and str_ in non-deterministic order across
workers, causing collection to abort before any test runs. This is not
riscv64-specific but surfaces reliably here. A separate fix will address
the ordering issue in test_scalar_methods.py.
Signed-off-by: Bruno Verachten <gounthar@gmail.com>
Signed-off-by: Bruno Verachten <gounthar@gmail.com>
Signed-off-by: Bruno Verachten <gounthar@gmail.com>
@gounthar
gounthar force-pushed the add-riscv64-wheels branch from 3b5c296 to 83b0f83 Compare May 12, 2026 15:25
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.