File size: 2,316 Bytes
09be84b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import pytest
from synapse.agent import IntegratedAgent
from synapse.config import SynapseConfig
from synapse.auto_programmer import (
    run_diagnostic_episodes,
    diagnose_failures,
    synthesize_weight_patch,
    execute_closed_loop_repair,
)
from synapse.patches import preview_patch

def test_run_diagnostic_episodes():
    config = SynapseConfig(seed=42, nodes_per_source=20)
    agent = IntegratedAgent(config)
    diag = run_diagnostic_episodes(agent, task='forage', num_episodes=2, max_steps_per_episode=10, seed=42)
    assert diag['task'] == 'forage'
    assert diag['num_episodes'] == 2
    assert len(diag['returns']) == 2
    assert len(diag['lengths']) == 2
    assert 'mean_graph_activity' in diag
    assert 'mean_approach_valence' in diag
    assert 'mean_avoid_valence' in diag

def test_diagnose_failures():
    dummy_diag = {
        'mean_return': 0.1,
        'mean_approach_valence': -0.2,
        'mean_avoid_valence': 0.5,
        'mean_graph_activity': 0.02,
        'action_mean': [0.01, 0.0, 0.0, 0.0, 0.0],
    }
    hyp = diagnose_failures(dummy_diag)
    assert 'primary_surface' in hyp
    assert 'suggested_fix' in hyp
    assert len(hyp['hypotheses']) > 0

def test_synthesize_weight_patch():
    config = SynapseConfig(seed=42, nodes_per_source=20)
    agent = IntegratedAgent(config)
    diagnosis = {
        'primary_surface': 'mb.w_mbon',
        'suggested_fix': 'reinforce_approach',
        'mean_return': 0.0,
    }
    packet = synthesize_weight_patch(agent, diagnosis)
    assert packet['schema'] == 'synapse-weight-program-v1'
    assert packet['writes'] > 0
    preview = preview_patch(agent, packet)
    assert preview['ok'] is True

def test_execute_closed_loop_repair():
    config = SynapseConfig(seed=42, nodes_per_source=20)
    agent = IntegratedAgent(config)
    report = execute_closed_loop_repair(
        agent,
        task='forage',
        num_diagnostic_episodes=1,
        num_eval_episodes=1,
        min_gain=-1.0,  # permissive to test successful execution and commit
        seed=42,
    )
    assert report['status'] == 'ok'
    assert 'accepted' in report
    assert 'baseline_return' in report
    assert 'diagnosis' in report
    assert 'provenance' in report
    assert report['provenance']['writer_disconnected_for_confirmation'] is True