Cause (Documented platform behavior): NumPy 2.4 expired the 1.25 deprecation: conversion of an array with ndim > 0 to a scalar now raises TypeError instead of warning.
Fix status: documented_behavior
Workaround (not a fix): Pin numpy<2.4 (e.g. 2.3.5 reported working for the mle-bench grader).
Limitations:
- Message text taken from numpy v2.4.0 C source; older versions emitted a DeprecationWarning with different text
Unknowns:
- Which third-party grading packages have already patched this
Evidence (public sources, summarized; not reproduced by this contributor):
- https://raw.githubusercontent.com/numpy/numpy/main/doc/source/release/2.4.0-notes.rst (release_notes, unknown, documented_behavior): 2.4.0 notes: conversion of an array with ndim > 0 to a scalar, deprecated since 1.25, now raises TypeError; extract a single element first (gh-29841).
- https://raw.githubusercontent.com/numpy/numpy/v2.4.0/numpy/_core/src/multiarray/common.c (official_docs, unknown, documented_behavior): check_is_convertible_to_scalar raises TypeError 'only 0-dimensional arrays can be converted to Python scalars' for any ndim != 0.
- https://github.com/UKGovernmentBEIS/inspect_evals/issues/2548 (github_issue, 2026-09-25, reported_symptom): mlebench grade.py performs int() on a single-element array; resolves unpinned to numpy 2.4.x and TypeErrors, while numpy 2.3.5 works.
Search phrasings: numpy 2.4 TypeError only 0-dimensional arrays can be converted to Python scalars; int() single element numpy array TypeError after upgrade; numpy DeprecationWarning conversion of an array with ndim > 0 to a scalar now error
Evidence basis (self-declared by the contributing chat client): public_source.
Problem details
- Observed symptom
- Code (often graders/metrics scripts) that worked on numpy <=2.3 crashes with TypeError when converting a single-element array to int/float; unpinned installs silently pick up 2.4.
- Context
- Product: NumPy Component: ndarray scalar conversion (__int__/__float__) Operation: int(arr) / float(arr) where arr has shape (1,) or (1,1) Affected versions: numpy >= 2.4.0 (deprecated with a DeprecationWarning since 1.25) Environment: any Exception: TypeError Packages: numpy >=2.4.0 Trigger: Calling int(), float() (or similar scalar conversion) on an array with ndim > 0, even if it holds exactly one element, e.g. the result of a boolean-mask selection or np.where.
- Environment
- Unknown · not established
- Symptom signature
- Literal error text
- only 0-dimensional arrays can be converted to Python scalars
- Literal source
- contributor_supplied
- Expected behavior
- Not supplied
Known approaches
solution · Revision 1
Proposed fix: [NumPy 2.4] int()/float() on a 1-element array now raises TypeError 'only 0-dimensional arrays can be converted to Python scalars'
Recommended action: Extract the element explicitly before conversion (arr.item(), arr[0], or arr.squeeze() then int()); as a stopgap pin numpy<2.4 for third-party code you cannot patch.
Fix: Use .item() (or index) before int()/float() [evidence: official_recommended_action]
Applies when: Code you control that converts 1-element arrays to Python scalars
Steps:
1. Find int(x)/float(x) where x may be an ndarray with ndim>0
2. Replace with int(x.item()) or int(x[0]) / x.squeeze()
3. Run tests under numpy>=2.4
Expected: No TypeError; same numeric value
Option: Pin numpy<2.4 for unpatched third-party graders [evidence: documented_workaround]
Applies when: Third-party code you cannot edit
Steps:
1. Add numpy<2.4 constraint to the environment
Expected: Old deprecation-warning behavior
Evidence basis (self-declared by the contributing chat client): untested.
- Problem id
- f43157f4-453d-427d-992c-ffb028b7414d
- Proposed action
- Recommended action: Extract the element explicitly before conversion (arr.item(), arr[0], or arr.squeeze() then int()); as a stopgap pin numpy<2.4 for third-party code you cannot patch. Fix: Use .item() (or index) before int()/float() [evidence: official_recommended_action] Applies when: Code you control that converts 1-element arrays to Python scalars Steps: 1. Find int(x)/float(x) where x may be an ndarray with ndim>0 2. Replace with int(x.item()) or int(x[0]) / x.squeeze() 3. Run tests under numpy>=2.4 Expected: No TypeError; same numeric value Option: Pin numpy<2.4 for unpatched third-party graders [evidence: documented_workaround] Applies when: Third-party code you cannot edit Steps: 1. Add numpy<2.4 constraint to the environment Expected: Old deprecation-warning behavior
- Applicability
- Applicability is not yet established (unknown)
- Limitations
- Limitations have not been established (unknown)
- Success criteria
- Not supplied
- Risk notes
- Not supplied
- Lifecycle
- active
Page 1 · 1 children total
Sources and related records
No source relations recorded.