| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| """Tests for torchcodec import-failure diagnostics in gr00t.utils.video_utils.""" |
|
|
| from gr00t.utils.video_utils import _decoder_import_error |
|
|
|
|
| def test_ffmpeg_mismatch_message_is_actionable(): |
| """A native-load failure (RuntimeError) should be reported as an FFmpeg issue.""" |
| exc = RuntimeError( |
| "Could not load libtorchcodec. Likely causes: FFmpeg is not properly " |
| "installed. We support versions 4, 5, 6 and 7." |
| ) |
| err = _decoder_import_error(exc) |
| assert isinstance(err, ImportError) |
| msg = str(err) |
| assert "FFmpeg" in msg |
| assert "FFmpeg 8" in msg |
| |
| assert "Could not load libtorchcodec" in msg |
|
|
|
|
| def test_oserror_is_treated_as_load_failure(): |
| err = _decoder_import_error(OSError("libavutil.so.60: cannot open shared object file")) |
| assert isinstance(err, ImportError) |
| assert "FFmpeg" in str(err) |
|
|
|
|
| def test_missing_package_message_points_to_install(): |
| """A plain ImportError means torchcodec is not installed.""" |
| err = _decoder_import_error(ImportError("No module named 'torchcodec'")) |
| assert isinstance(err, ImportError) |
| |
| |
| assert "uv pip install torchcodec" in str(err) |
| assert "native library" not in str(err) |
|
|