UTC=2026-09-08T01:03:52.5109219Z commit=d0cd2c07e3641531c39037223eb98e309f44c4dc command=uv run --no-sync pytest --ignore=tests/test_pgs.py -q .................................................F...................... [ 88%] ......... [100%] ================================== FAILURES =================================== _______________ test_calibration_uses_only_the_configured_grid ________________ tmp_path = WindowsPath('C:/Users/Happy/Documents/projects/rl-locomotion-steering-vectors/.cache/pytest/86916/test_calibration_uses_only_the0') monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x0000022C1C00D5E0> def test_calibration_uses_only_the_configured_grid(tmp_path, monkeypatch): """Local: inspect collected strengths; global: make the frozen grid govern candidate and controls.""" collected = [] # Capture actual rollout requests rather than inspecting implementation text. def collect(*args, **kwargs): """Local: record a condition request; global: avoid consuming real validation seeds in a unit test.""" collected.append(kwargs.get("alpha", 0.0)) # Baseline is separate from the nonzero signed grid. return [] # Other boundaries below supply the irrelevant statistical payload. monkeypatch.setattr(experiment, "collect_episodes", collect) # Keep the calibration loop under test. monkeypatch.setattr(experiment, "summaries", lambda *args: []) # Pure sequencing needs no simulated physical summaries. monkeypatch.setattr(experiment, "paired_effect", lambda *args, **kwargs: {"gate": False}) # A null outcome must not suppress a grid condition. config = Config(strength_grid="-0.02,-0.01,0.01,0.02") # Use a grid with no values shared by the old hard-coded tuple. > rows = calibrate(None, "halfcheetah", tmp_path, {"speed": np.ones(2)}, [5], config) # Real persistence writes the selected protocol's outcomes. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ tests\test_experiment.py:56: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ src\rl_locomotion_steering_vectors\experiment.py:46: in calibrate save_json(run_dir / "validation.json", results) # Persist after every grid point. ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ src\rl_locomotion_steering_vectors\storage.py:42: in save_json temporary.replace(path) # Publish only the completed JSON document. ^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = WindowsPath('C:/Users/Happy/Documents/projects/rl-locomotion-steering-vectors/.cache/pytest/86916/test_calibration_uses_only_the0/validation.json.tmp') target = WindowsPath('C:/Users/Happy/Documents/projects/rl-locomotion-steering-vectors/.cache/pytest/86916/test_calibration_uses_only_the0/validation.json') def replace(self, target): """ Rename this path to the target path, overwriting if that path exists. The target path may be absolute or relative. Relative paths are interpreted relative to the current working directory, *not* the directory of the Path object. Returns the new Path instance pointing to the target path. """ > os.replace(self, target) E PermissionError: [WinError 5] Access is denied: 'C:\\Users\\Happy\\Documents\\projects\\rl-locomotion-steering-vectors\\.cache\\pytest\\86916\\test_calibration_uses_only_the0\\validation.json.tmp' -> 'C:\\Users\\Happy\\Documents\\projects\\rl-locomotion-steering-vectors\\.cache\\pytest\\86916\\test_calibration_uses_only_the0\\validation.json' .cache\python\cpython-3.12-windows-x86_64-none\Lib\pathlib.py:1376: PermissionError =========================== short test summary info =========================== FAILED tests/test_experiment.py::test_calibration_uses_only_the_configured_grid 1 failed, 80 passed in 19.42s