NEUROGRAFT / tests /test_navigation_controllers_eval.py
Kai9987kai's picture
Release NEUROGRAFT v0.10.0: matched learned-navigation study with all-source residual readout and symmetry augmentation
9563b12 verified
Raw History Blame Contribute Delete
2.85 kB
import copy
import json
import pytest
import torch
def session():
from neurograft.fixtures import make_fixture_bundle
from neurograft.live import LiveConfig, LiveSession
return LiveSession(make_fixture_bundle(nodes_per_source=3), LiveConfig(hidden_dim=4, unroll=2))
def test_extended_trials_isolate_masking_memory_and_policy_prior():
from neurograft.navigation_evaluation import NavigationEvalConfig, frozen_navigation_evaluation
from neurograft.live import _checkpoint_digest
live = session()
before = _checkpoint_digest(live._payload())
report = frozen_navigation_evaluation(live, NavigationEvalConfig(
seeds=(10000, 10001), size=5, max_steps=32, include_controllers=True))
assert set(report['variants']) == {'policy', 'no_graft', 'no_recurrence', 'random',
'shortest_path', 'masked_policy', 'observed_map', 'map_without_policy'}
assert report['schema_version'] == 2
assert report['variants']['masked_policy']['summary']['collision_rate'] == 0
for key in ('observed_map', 'map_without_policy'):
item = report['variants'][key]
assert item['summary']['success_rate'] == 1 and item['summary']['collision_rate'] == 0
for episode in item['episodes']:
assert len(episode['controller_trace']) == episode['steps']
assert episode['controller_trace'][-1]['known_free'] <= 9
assert episode['policy_prior_used'] is (key == 'observed_map')
hashes = [episode['initial_world_hash'] for episode in report['variants']['policy']['episodes']]
assert all([episode['initial_world_hash'] for episode in value['episodes']] == hashes
for value in report['variants'].values())
assert _checkpoint_digest(live._payload()) == before
assert frozen_navigation_evaluation(live, NavigationEvalConfig(
seeds=(10000, 10001), size=5, max_steps=32, include_controllers=True)) == report
json.dumps(report, allow_nan=False)
def test_legacy_trial_protocol_and_config_stay_unchanged():
from neurograft.navigation_evaluation import NavigationEvalConfig, navigation_protocol, frozen_navigation_evaluation
config = NavigationEvalConfig(seeds=(17,), size=5, max_steps=2)
protocol = navigation_protocol(config, 2)
assert protocol['schema_version'] == 1
assert 'include_controllers' not in protocol['config']
report = frozen_navigation_evaluation(session(), config)
assert report['schema_version'] == 1 and len(report['variants']) == 5
assert 'controller_trace' not in report['variants']['policy']['episodes'][0]
@pytest.mark.parametrize('value', [None, 1, 'true', []])
def test_controller_suite_flag_is_strict_boolean(value):
from neurograft.navigation_evaluation import NavigationEvalConfig
with pytest.raises(ValueError):
NavigationEvalConfig(include_controllers=value)