Remove offline training, refactor train.py and logging/checkpointing (#670)
Co-authored-by: Remi <remi.cadene@huggingface.co>
This commit is contained in:
74
tests/test_io_utils.py
Normal file
74
tests/test_io_utils.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import json
|
||||
from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import pytest
|
||||
|
||||
from lerobot.common.utils.io_utils import deserialize_json_into_object
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def tmp_json_file(tmp_path: Path):
|
||||
"""Writes `data` to a temporary JSON file and returns the file's path."""
|
||||
|
||||
def _write(data: Any) -> Path:
|
||||
file_path = tmp_path / "data.json"
|
||||
with file_path.open("w", encoding="utf-8") as f:
|
||||
json.dump(data, f)
|
||||
return file_path
|
||||
|
||||
return _write
|
||||
|
||||
|
||||
def test_simple_dict(tmp_json_file):
|
||||
data = {"name": "Alice", "age": 30}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"name": "", "age": 0}
|
||||
assert deserialize_json_into_object(json_path, obj) == data
|
||||
|
||||
|
||||
def test_nested_structure(tmp_json_file):
|
||||
data = {"items": [1, 2, 3], "info": {"active": True}}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"items": [0, 0, 0], "info": {"active": False}}
|
||||
assert deserialize_json_into_object(json_path, obj) == data
|
||||
|
||||
|
||||
def test_tuple_conversion(tmp_json_file):
|
||||
data = {"coords": [10.5, 20.5]}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"coords": (0.0, 0.0)}
|
||||
result = deserialize_json_into_object(json_path, obj)
|
||||
assert result["coords"] == (10.5, 20.5)
|
||||
|
||||
|
||||
def test_type_mismatch_raises(tmp_json_file):
|
||||
data = {"numbers": {"bad": "structure"}}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"numbers": [0, 0]}
|
||||
with pytest.raises(TypeError):
|
||||
deserialize_json_into_object(json_path, obj)
|
||||
|
||||
|
||||
def test_missing_key_raises(tmp_json_file):
|
||||
data = {"one": 1}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"one": 0, "two": 0}
|
||||
with pytest.raises(ValueError):
|
||||
deserialize_json_into_object(json_path, obj)
|
||||
|
||||
|
||||
def test_extra_key_raises(tmp_json_file):
|
||||
data = {"one": 1, "two": 2}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"one": 0}
|
||||
with pytest.raises(ValueError):
|
||||
deserialize_json_into_object(json_path, obj)
|
||||
|
||||
|
||||
def test_list_length_mismatch_raises(tmp_json_file):
|
||||
data = {"nums": [1, 2, 3]}
|
||||
json_path = tmp_json_file(data)
|
||||
obj = {"nums": [0, 0]}
|
||||
with pytest.raises(ValueError):
|
||||
deserialize_json_into_object(json_path, obj)
|
||||
Reference in New Issue
Block a user