Drives every supported hardware profile from a single test host by
spoofing platform, torch.cuda, torch.xpu, torch.version.hip, and
sys.modules['mlx'] so we can exercise the CUDA, ROCm, XPU, MLX, and CPU
dispatch paths deterministically without owning the actual hardware.
Profiles covered (parametrized; add a row to PROFILES to extend):
nvidia_cuda Linux x86_64 + cuda available, hip=None
amd_rocm Linux x86_64 + cuda available, hip="6.1"
(PyTorch ROCm aliases torch.cuda over HIP)
intel_xpu Linux x86_64 + cuda off, xpu available
apple_silicon_mlx Darwin arm64 + cuda/xpu off + mlx in sys.modules
apple_silicon_no_mlx Darwin arm64 + everything off (Mac chat-only fallback)
linux_arm64_with_mlx Linux arm64 + mlx in sys.modules -- canary that the
system check still guards against accidental hijack
cpu_only Linux x86_64 + nothing -- pure CPU fallback
For each profile the suite asserts:
1. unsloth._IS_MLX (re-evaluated under the spoof) matches expectation.
2. utils.hardware.detect_hardware() returns the right DeviceType and
IS_ROCM flag.
3. utils.hardware.is_apple_silicon() agrees with the platform spoof.
Plus two negative-space canaries:
test_cuda_takes_priority_over_mlx_when_both_available
With CUDA AND MLX both present, dispatch must pick CUDA.
Protects existing GPU users from a future refactor that
reorders the dispatch.
test_xpu_takes_priority_over_mlx_when_both_available
Same canary for Intel/XPU vs MLX.
All 23 tests pass on Linux+CUDA in 1.8s with no real hardware required.
Future regressions in either the unsloth _IS_MLX gate or Studio's
detect_hardware priority order will fail loudly here.