Skip to content

fix(deps): scope numpy<2 upper bound to aarch64 (Jetson) only#143

Merged
rylinjames merged 1 commit into
mainfrom
fix/numpy-pin-jetson-only
May 20, 2026
Merged

fix(deps): scope numpy<2 upper bound to aarch64 (Jetson) only#143
rylinjames merged 1 commit into
mainfrom
fix/numpy-pin-jetson-only

Conversation

@rylinjames
Copy link
Copy Markdown
Collaborator

Summary

The Jetson commit (f9811d2) pinned numpy>=1.24.0,<2.0 globally to protect JetPack-bundled CUDA libs. That cap was correct for Jetson (aarch64) but unintentionally extended to x86_64 + Mac arm64 where:

  • numpy 2.x works fine
  • lerobot==0.5.1 (pinned in [monolithic] + [native] extras) REQUIRES numpy>=2.0

Result: pip install reflex-vla[monolithic] is UNRESOLVABLE on Modal A100. All reflex+lerobot Modal experiments have been silently blocked since f9811d2 landed.

How it surfaced

Caught while firing a 1-task / 1-episode smoke against scripts/modal_libero_pi05_decomposed.py to validate behavior preservation through the rollout-helper refactor (PR #139). The image build failed at pip install with ResolutionImpossible.

Fix

Split the numpy constraint via PEP 508 platform marker:

"numpy>=1.24.0,<2.0; platform_machine == 'aarch64'",  # Jetson preserved
"numpy>=1.24.0; platform_machine != 'aarch64'",       # x86 + arm64 freed

Verified locally: on arm64 (Mac), constraint 2 evaluates true, constraint 1 evaluates false. On aarch64, inverse. pip resolves cleanly.

🤖 Generated with Claude Code

The Jetson commit f9811d2 pinned `numpy>=1.24.0,<2.0` globally to protect
JetPack-bundled CUDA libs (which are compiled against numpy 1.x ABI and
break under numpy 2.x). That cap was correct for Jetson (aarch64) but
unintentionally extended to x86_64 + Mac arm64, where:

- numpy 2.x works fine
- `lerobot==0.5.1` (pinned in [monolithic] + [native] extras) REQUIRES
  numpy>=2.0

Result: `pip install reflex-vla[monolithic]` was UNRESOLVABLE on Modal
A100 (x86_64 Python 3.12). All reflex+lerobot Modal experiments were
silently blocked. Caught when the lift #4 PR-review-pass fired a 1-task
1-episode LIBERO smoke against modal_libero_pi05_decomposed.py to
validate behavior preservation through the rollout-helper refactor.

Fix: split the numpy constraint via PEP 508 platform marker.

- aarch64 (Jetson): numpy>=1.24.0,<2.0  ← preserves f9811d2's protection
- everything else (x86_64, arm64): numpy>=1.24.0  ← allows lerobot 0.5.1

Verified locally: on arm64 (Mac), constraint 2 evaluates true, constraint
1 evaluates false. On aarch64, the inverse. pip resolves cleanly.

Real fix not a band-aid (per CLAUDE.md). The original Jetson protection
stays exactly as it was for aarch64; x86/arm64 hosts get the freedom
they always should have had.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@rylinjames rylinjames merged commit a72d054 into main May 20, 2026
6 checks passed
@rylinjames rylinjames deleted the fix/numpy-pin-jetson-only branch May 20, 2026 11:41
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