Resolve tests/sh/test_torch_constraint.sh by keeping main's invariant
based structure from #7503 and restating it against this branch's
composed ceiling variables.
Both sides rewrote the same assertions in the same spirit. #7503
replaced brittle occurrence counts with invariants after #7354's gfx906
branch pushed three counts up by one and left Backend CI red. This
branch had independently rewritten them because the default torch range
is no longer a literal, it is composed from _TORCH_CEILING="2.12.0".
The resolution keeps both:
- The column 0 anchor for the default assignment now reads the composed
form TORCH_CONSTRAINT="torch>=2.4,<${_TORCH_CEILING}", so an indented
per branch pin still cannot satisfy it. _TORCH_CEILING="2.12.0" is
asserted separately so the anchor keeps its teeth.
- The tightened macOS py3.13 assignment is an existence check rather
than a count, per #7503.
- Both stray literal checks are kept. They are complementary: #7503's
sees through shell escaped quotes on an install or echoed command
line, this branch's catches the two default ranges copied onto any
assignment that is not TORCH_CONSTRAINT=.
- The gfx906 sub 2.11 cap assertion is kept, converted from a count to
an indented existence check so a second hardware branch adding its own
sub 2.11 cap is not a test edit.
- #7503's every assignment upper bound checks for torchvision and
torchaudio are kept, widened to accept the composed ceiling alongside
a literal bound.
install.sh, install.ps1, studio/setup.ps1 and studio/install_python_stack.py
are untouched by this merge. The gfx906 literal cap and the three ROCm
2.11 floors stay literal, and the test permits them without forcing them
to track the ceiling.
tests/sh/test_torch_constraint.sh: 49 pass, 0 fail.