Skip to content

Move enum explanations and health checks from cuda_core to cuda_bindings#1805

Draft
rwgk wants to merge 20 commits intoNVIDIA:mainfrom
rwgk:move_enum_explanations
Draft

Move enum explanations and health checks from cuda_core to cuda_bindings#1805
rwgk wants to merge 20 commits intoNVIDIA:mainfrom
rwgk:move_enum_explanations

Conversation

@rwgk
Copy link
Copy Markdown
Collaborator

@rwgk rwgk commented Mar 23, 2026

Closes #1712

The DRIVER_CU_RESULT_EXPLANATIONS and RUNTIME_CUDA_ERROR_EXPLANATIONS dicts are fundamentally tied to the cuda-bindings release (they must match the enums shipped in that release). Having them live exclusively in cuda_core meant the health-check tests failed whenever cuda_core was tested against a different version of cuda-bindings (nvbug 5932944).

Changes

  • Move the dicts to cuda_bindings/cuda/bindings/_utils/ as the single authoritative source (renamed to _EXPLANATIONS with a _CTK_MAJOR_MINOR_PATCH version tag).
  • Delete the copies from cuda_core. cuda_utils.pyx now imports directly from cuda.bindings._utils, with a ModuleNotFoundError fallback to an empty dict.
  • Move the exhaustive health-check tests to cuda_bindings/tests/test_enum_explanations.py, where they belong alongside the dicts they verify.

Impact on error messages for cuda-core users

When cuda-core raises a CUDAError, it tries to include a human-readable explanation of the error code (e.g. "This indicates that one or more of the parameters passed to the API call is not within an acceptable range of values").

With this change:

  • cuda-bindings >= this PR: Error messages continue to include explanations, exactly as before.
  • cuda-bindings < this PR (older releases that don't ship _utils): Error messages fall back to the driver/runtime error name and description string obtained from cuGetErrorString / cudaGetErrorString. The explanations are a nice-to-have supplement, and the error name + description are still informative. Upgrading to a current cuda-bindings release restores the full explanations.

rwgk added 5 commits March 22, 2026 20:44
…VIDIA#1712)

The explanation dicts are fundamentally tied to the bindings version, so
they belong in cuda_bindings. This copies them (keeping the cuda_core
originals for backward compatibility) and adds the corresponding health
tests under cuda_bindings/tests/.

Made-with: Cursor
These tests now live in cuda_bindings/tests/test_enum_explanations.py,
where they belong alongside the explanation dicts they verify.

Made-with: Cursor
…llback (NVIDIA#1712)

Each explanation module now tries to import the authoritative dict from
cuda.bindings._utils (ModuleNotFoundError-guarded) and falls back to its
own copy for older cuda-bindings that don't ship it yet. Smoke tests
added for both dicts.

Made-with: Cursor
NVIDIA#1712)

Rename explanation dicts to _EXPLANATIONS / _FALLBACK_EXPLANATIONS,
add _CTK_MAJOR_MINOR_PATCH to each module, and enforce that the
cuda_core fallback copy is as new as (and in-sync with) cuda_bindings.
Parametrize the smoke and version-check tests to cover both driver and
runtime without duplication.

Made-with: Cursor
@rwgk rwgk self-assigned this Mar 23, 2026
@copy-pr-bot
Copy link
Copy Markdown
Contributor

copy-pr-bot bot commented Mar 23, 2026

Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually.

Contributors can view more details about this message here.

@rwgk rwgk added bug Something isn't working P0 High priority - Must do! cuda.bindings Everything related to the cuda.bindings module cuda.core Everything related to the cuda.core module labels Mar 23, 2026
@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 23, 2026

/ok to test

@github-actions
Copy link
Copy Markdown

@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 23, 2026

/ok to test

@rwgk rwgk marked this pull request as ready for review March 23, 2026 06:50
@rwgk rwgk requested a review from leofang March 23, 2026 18:43
@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 24, 2026

For easy reference, the CI at commit fb12195 was successful:

(I'm about to push git merge master, which will hide it. Not rerunning the CI for now, waiting for a review.)

@cpcloud
Copy link
Copy Markdown
Contributor

cpcloud commented Mar 25, 2026

What's stopping us from moving this codegen into the code generator and re-exporting it here to avoid breaking stuff?

We can't continue to live with steps like "copy x manually". Let's just do the work to move it to the generator. It doesn't really make sense that we've got tools parsing C headers in Python and producing code from that, and yet we're still copying dictionaries by hand.

RUNTIME_CUDA_ERROR_EXPLANATIONS = {
_FALLBACK_EXPLANATIONS = {
0: (
"The API call returned with no errors. In the case of query calls, this"
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Do we have to duplicate this error text list? Can we hoist it into a central location?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Do we have to duplicate this error text list?

Originally my proposal was to avoid this copy (see the #1712 issue description, Backward compatibility section), but @leofang argued for vendoring (see issue comments).

Can we hoist it into a central location?

Not if we want future cuda-core releases to produce the enhanced error messages even if used in combination with cuda-binding releases made before this PR was merged.

On balance, I still feel the better compromise is to delete this copy, and to change cuda_core/cuda/core/_utils/cuda_utils.pyx to skip enhancing the error messages if the dict is not in cuda-bindings. It's really only a nice-to-have that will be easy to get back by using the latest cuda-bindings.

Copy link
Copy Markdown
Collaborator

@rparolin rparolin left a comment

Choose a reason for hiding this comment

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

Please remove the duplicated error text array.

@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 25, 2026

What's stopping us from moving this codegen into the code generator and re-exporting it here to avoid breaking stuff?

We can't continue to live with steps like "copy x manually". Let's just do the work to move it to the generator. It doesn't really make sense that we've got tools parsing C headers in Python and producing code from that, and yet we're still copying dictionaries by hand.

I totally agree, but this PR is about solving nvbug 5932944, which is related to but different from the code-gen question. I opened cuda-python-private issue 289 to track your suggestion.

rwgk added 2 commits March 25, 2026 16:25
…gs (NVIDIA#1712)

Remove the vendored explanation dicts from cuda_core. cuda_utils.pyx now
imports directly from cuda.bindings._utils with a ModuleNotFoundError
fallback to an empty dict, so error messages gracefully degrade when
paired with older cuda-bindings that don't ship the dicts.

Made-with: Cursor
@rwgk rwgk marked this pull request as draft March 26, 2026 00:10
@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 26, 2026

Please remove the duplicated error text array.

Done, Cursor said this:

  • Committed as 6fc77b7. Net -966 lines -- much cleaner.

I converted this PR back to Draft mode while retesting.

@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 26, 2026

/ok to test

…#1712)

Restore DRIVER_CU_RESULT_EXPLANATIONS / RUNTIME_CUDA_ERROR_EXPLANATIONS
as the dict names in cuda_bindings and remove the _CTK_MAJOR_MINOR_PATCH
/ _EXPLANATIONS indirection that is no longer needed without the
cuda_core fallback copies.

Made-with: Cursor
@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 26, 2026

/ok to test

@leofang
Copy link
Copy Markdown
Member

leofang commented Mar 27, 2026

I am not sure I follow. So what is the behavior after merging this PR, when using cuda-core + non-latest cuda-bindings 12.x or 13.x?

The expectation for the enum dict is the same as what a megaheader would deliver, so once @mdboom concludes the cython-gen merging we might have a path for this. Let's make sure there is no regression introduced by this PR, and then we can merge.

@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 27, 2026

what is the behavior after merging this PR, when using cuda-core + non-latest cuda-bindings 12.x or 13.x?

See PR description, copy-pasting for convenience:

  • cuda-bindings < this PR (older releases that don't ship _utils): Error messages fall back to the driver/runtime error name and description string obtained from cuGetErrorString / cudaGetErrorString.

I.e. technically, maybe it could be viewed as a regression, but for all practical purposes

The explanations are a nice-to-have supplement, and the error name + description are still informative. Upgrading to a current cuda-bindings release restores the full explanations.


The expectation for the enum dict is the same as what a megaheader would deliver,

Before this PR: We've been using the explanations from the latest CTK release for all versions cuda_core.

With this PR: The explanations will match the CTK release we use for generating the cuda-bindings code. — I believe strictly speaking that's more self-consistent, but in practice the differences are probably very minor; from what I've seen in passing, the explanations for released enums do not change in major ways.

@rwgk rwgk marked this pull request as ready for review March 27, 2026 04:12
@rwgk rwgk added this to the cuda.core v0.7.0 milestone Mar 27, 2026
@rwgk rwgk added P0 High priority - Must do! and removed P0 High priority - Must do! labels Mar 27, 2026
rwgk added 8 commits March 31, 2026 13:50
Add test_explanations_dict_matches_enum_member_docstrings, which checks that
each hand-maintained DRIVER_CU_RESULT_EXPLANATIONS and
RUNTIME_CUDA_ERROR_EXPLANATIONS entry matches the corresponding FastEnum
member's __doc__ (cuda-bindings 13.2+ is said to attach the same narrative text
via codegen).

The comparison uses strict string equality. In current releases the dict
text and __doc__ are not byte-identical: generated docstrings include Sphinx
cross-references (:py:obj:...) and manual line breaks where the dicts use raw
CUDA comment style (::symbol()) and single-line concatenation; some deprecated
codes differ in length. So the test is marked xfail(strict=False) so CI stays
green until dicts and generated docstrings share one source of truth; when they
align, XPASS indicates the xfail can be removed.

Skip the compare when cuda-bindings < 13.2 (major.minor). Skip members with
no __doc__ (e.g. cudaErrorApiFailureBase). Helpers: _explanation_text_from_dict_value
to flatten dict tuple fragments.

To inspect all mismatches locally: pytest --runxfail on this test.

Made-with: Cursor
…tion tests

Introduce clean_enum_member_docstring() for turning FastEnum CUresult /
cudaError_t __doc__ strings into plain text: collapse whitespace (newlines to
spaces), strip ends, and best-effort strip common Sphinx inline roles
(:py:obj:, :py:func:, :obj:, etc.) plus simple ** / * markup.

Placed in test_enum_explanations.py for now pending reuse from cuda_core.

Add parametrized examples and a None-input test.

Made-with: Cursor
…ealth test

Add _explanation_dict_text_for_cleaned_doc_compare to normalize dict strings for
parity with clean_enum_member_docstring: strip Doxygen-style :: before name(
and collapse whitespace.

Rename test_explanations_dict_matches_enum_member_docstrings to
test_explanations_dict_matches_cleaned_enum_docstrings; compare normalized dict
text to clean_enum_member_docstring(__doc__) instead of raw __doc__. Update
xfail reason and failure-report labels.

Give explicit pytest.param ids on test_clean_enum_member_docstring_examples for
readable node ids (ruff/pre-commit friendly).

Made-with: Cursor
…precated skips)

Add _strip_doxygen_double_colon_prefixes to remove Doxygen :: before CUDA
identifiers in explanation dict text (not C++ Foo::Bar scope), and use it in
_explanation_dict_text_for_cleaned_doc_compare. Add small unit tests.

Refactor test_explanations_dict_matches_cleaned_enum_docstrings to parametrize
per enum member so pytest can report per-case skips and failures.

Skip comparison when __doc__ is missing, or when strip().endswith('[Deprecated]')
(stub-only or suffix deprecation notes). Drop unused textwrap import.

Made-with: Cursor
…cstring

Add _fix_hyphenation_wordwrap_spacing to remove spurious spaces around hyphens
from reflowed __doc__ text ([a-z]- [a-z] and [a-z] -[a-z]), applied until stable.

Use it in clean_enum_member_docstring after whitespace collapse and in
_explanation_dict_text_for_cleaned_doc_compare for symmetric comparison.

Add examples to test_clean_enum_member_docstring_examples.

Made-with: Cursor
…parity

Replace malformed \n:py:obj: (non-raw string so \n matches a real
newline) with quoted "Interactions " before generic Sphinx stripping.

Strip CUDART_DRIVER from normalized dict text for compare-only parity with
cleaned __doc__ (manpage token vs title-only).

Add a clean_enum_member_docstring example for the broken cross-ref.

Made-with: Cursor
… parity test

Treat cleaned __doc__ as authoritative for cudaErrorLaunchTimeout; the explanation
dict still uses a Doxygen-style cudaDeviceAttr:: fragment we do not normalize.
Document in the test docstring.

Made-with: Cursor
@rwgk rwgk marked this pull request as draft March 31, 2026 22:40
@rwgk
Copy link
Copy Markdown
Collaborator Author

rwgk commented Mar 31, 2026

@mdboom for visibility — Thanks for pointing out that the enums have a __doc__ attribute now!

Validation on this branch, to inform work on a new PR to replace this one

Enum explanations dict vs. __doc__

Commits:

  • ba2f65a cuda_bindings: skip cudaErrorLaunchTimeout in dict vs cleaned doc parity test
  • cbebba0 cuda_bindings: fix Interactions doc workaround and CUDART_DRIVER parity
  • 1ce9bc8 cuda_bindings: collapse wrapped hyphen spaces in clean_enum_member_docstring
  • 4adec22 cuda_bindings: improve dict/doc parity test (Doxygen :: strip, deprecated skips)
  • f4094c5 cuda_bindings: compare explanation dicts to cleaned enum doc in health test
  • 86e9488 cuda_bindings: add clean_enum_member_docstring helper in enum explanation tests
  • 76efdf6 cuda_bindings: compare explanation dicts to CUresult/cudaError_t doc

These commits add a parity check in cuda_bindings/tests/test_enum_explanations.py between the hand-maintained DRIVER_CU_RESULT_EXPLANATIONS / RUNTIME_CUDA_ERROR_EXPLANATIONS entries and the cleaned CUresult / cudaError_t member __doc__ strings (cuda-bindings 13.2.0).

What this shows

  • After normalization on both sides, the dict text and generated __doc__ are largely the same narrative for the same error codes. The dicts remain tied to the toolkit text (Doxygen-style :: refs, etc.); __doc__ comes from codegen (Sphinx roles, line breaks). They converge once those differences are stripped in a predictable way.

How deviations are handled

  1. clean_enum_member_docstring — single place to turn raw __doc__ into plain text for display / comparison: collapse whitespace; strip common Sphinx inline roles (:py:obj:, etc.); light * / ** cleanup; fix hyphenation splits from wrapping ([a-z]- [a-z], [a-z] -[a-z]); plus a targeted workaround for a malformed :py:obj / Interactions / with cross-ref line on cudaErrorIncompatibleDriverContext (remove when codegen is fixed).

  2. Dict-side compare normalization (_explanation_dict_text_for_cleaned_doc_compare) — mirrors the same goals: strip Doxygen :: prefixes (without eating C++ Foo::Bar), collapse whitespace / hyphens, and drop the CUDART_DRIVER manpage token where the dict only adds a section label that cleaned __doc__ omits.

  3. Skips (explicit, documented) — members with no __doc__; __doc__ that is only [Deprecated] or ends with [Deprecated] (stub vs. long paragraph in dict); and cudaErrorLaunchTimeout, where the cleaned __doc__ is treated as good but the dict still carries a cudaDeviceAttr::… style fragment we do not normalize to match.

The per-member parity test is parametrized so each skip shows up with a clear reason in pytest; remaining cases match after the above pipeline.

Takeaway

We can treat cleaned __doc__ as a practical replacement for the explanation dicts for driver/runtime error enums in current bindings, rather than maintaining duplicate prose long-term.


For completeness:

$ ./TestVenv/bin/python -m pytest cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings -ra -v | grep -v 'X
PASS '
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.0.2, pluggy-1.6.0 -- /wrk/forked/cuda-python/TestVenv/bin/python
cachedir: .pytest_cache
benchmark: 5.2.3 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
Using --randomly-seed=2959469064
rootdir: /wrk/forked/cuda-python/cuda_bindings
configfile: pyproject.toml
plugins: repeat-0.9.4, benchmark-5.2.3, rerunfailures-16.1, mock-3.15.1, randomly-4.0.1
collecting ... collected 238 items

cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[CUresult.CUDA_ERROR_PROFILER_ALREADY_STOPPED] SKIPPED [  2%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorNotYetImplemented] SKIPPED [  3%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorTextureFetchFailed] SKIPPED [ 15%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorProfilerAlreadyStopped] SKIPPED [ 18%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorInvalidHostPointer] SKIPPED [ 18%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorSynchronizationError] SKIPPED [ 25%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorApiFailureBase] SKIPPED [ 48%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorProfilerNotInitialized] SKIPPED [ 50%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorTextureNotBound] SKIPPED [ 52%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorLaunchTimeout] SKIPPED [ 52%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[CUresult.CUDA_ERROR_CONTEXT_ALREADY_CURRENT] SKIPPED [ 60%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorAddressOfConstant] SKIPPED [ 61%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorMixedDeviceExecution] SKIPPED [ 69%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorPriorLaunchFailure] SKIPPED [ 75%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[CUresult.CUDA_ERROR_PROFILER_ALREADY_STARTED] SKIPPED [ 76%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorInvalidDevicePointer] SKIPPED [ 81%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorProfilerAlreadyStarted] SKIPPED [ 89%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[cudaError_t.cudaErrorMemoryValueTooLarge] SKIPPED [ 90%]
cuda_bindings/tests/test_enum_explanations.py::test_explanations_dict_matches_cleaned_enum_docstrings[CUresult.CUDA_ERROR_PROFILER_NOT_INITIALIZED] SKIPPED [ 94%]

=================================== XPASSES ====================================
=========================== short test summary info ============================
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: CUDA_ERROR_PROFILER_ALREADY_STOPPED is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorNotYetImplemented is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorTextureFetchFailed is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorProfilerAlreadyStopped is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorInvalidHostPointer is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorSynchronizationError is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:233: SKIPPED: cudaErrorApiFailureBase has no __doc__
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorProfilerNotInitialized is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorTextureNotBound is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:220: Known good __doc__, bad explanations dict value
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: CUDA_ERROR_CONTEXT_ALREADY_CURRENT is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorAddressOfConstant is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorMixedDeviceExecution is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorPriorLaunchFailure is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: CUDA_ERROR_PROFILER_ALREADY_STARTED is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorInvalidDevicePointer is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorProfilerAlreadyStarted is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: cudaErrorMemoryValueTooLarge is deprecated (__doc__ is or ends with [Deprecated])
SKIPPED [1] cuda_bindings/tests/test_enum_explanations.py:230: SKIPPED: CUDA_ERROR_PROFILER_NOT_INITIALIZED is deprecated (__doc__ is or ends with [Deprecated])
======================= 19 skipped, 219 xpassed in 0.66s =======================

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working cuda.bindings Everything related to the cuda.bindings module cuda.core Everything related to the cuda.core module P0 High priority - Must do!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Move enum explanations and health checks from cuda_core to cuda_bindings

4 participants