def test_assignment_of_dynamic_scalar(Simulator, rng): with spa.Network() as model: source = spa.Scalar() sink = spa.Scalar() nengo.Connection(nengo.Node(0.5), source.input) source >> sink p = nengo.Probe(sink.output, synapse=0.03) with Simulator(model) as sim: sim.run(0.5) assert_allclose(sim.data[p][sim.trange() > 0.3], 0.5, atol=0.2)
def test_product_of_scalars(Simulator): with spa.Network() as model: stimulus = nengo.Node(0.5) a = spa.Scalar() b = spa.Scalar() nengo.Connection(stimulus, a.input) nengo.Connection(stimulus, b.input) x = a * b p = nengo.Probe(x.construct(), synapse=0.03) with Simulator(model) as sim: sim.run(0.5) assert_allclose(sim.data[p][sim.trange() > 0.3], 0.25, atol=0.2)
def test_access_thal_and_bg_objects(): with spa.Network() as m: m.a = spa.Scalar() m.b = spa.Scalar() m.c = spa.Scalar() m.d = spa.Scalar() with spa.ActionSelection() as actions: spa.ifmax(m.a, 0 >> m.c) spa.ifmax(m.b, 1 >> m.c) assert isinstance(actions.bg, spa.BasalGanglia) assert isinstance(actions.thalamus, spa.Thalamus)
def model(self): with spa.Network() as model: model.state_a = spa.State(16) model.state_b = spa.State(32) model.state_c = spa.State(32) model.scalar = spa.Scalar() return model
def test_assignment_of_fixed_scalar(Simulator, rng): with spa.Network() as model: sink = spa.Scalar() 0.5 >> sink p = nengo.Probe(sink.output, synapse=0.03) with Simulator(model) as sim: sim.run(0.5) assert_allclose(sim.data[p][sim.trange() > 0.3], 0.5, atol=0.2)
def test_scalar_addition(Simulator): with spa.Network() as model: a = spa.Scalar() b = spa.Scalar() 0.3 >> a 0.2 >> b n1 = (a + b).construct() n2 = nengo.Node(size_in=1) (a + b).connect_to(n2) p1 = nengo.Probe(n1, synapse=0.03) p2 = nengo.Probe(n2, synapse=0.03) with Simulator(model) as sim: sim.run(0.3) assert np.all(np.abs(sim.data[p1][sim.trange() > 0.2] - 0.5) < 0.1) assert np.all(np.abs(sim.data[p2][sim.trange() > 0.2] - 0.5) < 0.1)
def test_action_selection(Simulator, rng): vocab = spa.Vocabulary(64) vocab.populate("A; B; C; D; E; F") with spa.Network() as model: state = spa.Transcode(lambda t: "ABCDEF"[min(5, int(t / 0.5))], output_vocab=vocab) scalar = spa.Scalar() pointer = spa.State(vocab) with ActionSelection(): spa.ifmax(spa.dot(state, PointerSymbol("A")), 0.5 >> scalar) spa.ifmax(spa.dot(state, PointerSymbol("B")), PointerSymbol("B") >> pointer) spa.ifmax(spa.dot(state, PointerSymbol("C")), state >> pointer) d_utility = spa.ifmax(0, PointerSymbol("D") >> pointer) spa.ifmax( spa.dot(state, PointerSymbol("E")), 0.25 >> scalar, PointerSymbol("E") >> pointer, ) nengo.Connection(nengo.Node(lambda t: 1.5 < t <= 2.0), d_utility) p_scalar = nengo.Probe(scalar.output, synapse=0.03) p_pointer = nengo.Probe(pointer.output, synapse=0.03) with Simulator(model) as sim: sim.run(3.0) t = sim.trange() assert_allclose(sim.data[p_scalar][(0.3 < t) & (t <= 0.5)], 0.5, atol=0.2) assert_sp_close(sim.trange(), sim.data[p_pointer], vocab["B"], skip=0.8, duration=0.2) assert_sp_close(sim.trange(), sim.data[p_pointer], vocab["C"], skip=1.3, duration=0.2) assert_sp_close(sim.trange(), sim.data[p_pointer], vocab["D"], skip=1.8, duration=0.2) assert_allclose(sim.data[p_scalar][(2.3 < t) & (t <= 2.5)], 0.25, atol=0.2) assert_sp_close(sim.trange(), sim.data[p_pointer], vocab["E"], skip=2.3, duration=0.2)
def test_assignment_of_nengo_scalar(source, use_ens, Simulator, rng): with spa.Network() as model: source = eval(source) if use_ens: ens = nengo.Ensemble(50, 1) nengo.Connection(source, ens) source = ens sink = spa.Scalar() source >> sink p = nengo.Probe(sink.output, synapse=0.03) with Simulator(model) as sim: sim.run(0.5) assert_allclose(sim.data[p][sim.trange() > 0.3], 0.5, atol=0.2)
def test_dot_product(Simulator, seed, plt): d = 16 with spa.Network(seed=seed) as model: model.state_a = spa.State(d) model.state_b = spa.State(d) model.result = spa.Scalar() model.stimulus = spa.Transcode(lambda t: "A" if t <= 0.3 else "B", output_vocab=d) spa.sym.A >> model.state_a model.stimulus >> model.state_b spa.dot(model.state_a, model.state_b) >> model.result p = nengo.Probe(model.result.output, synapse=0.03) with Simulator(model) as sim: sim.run(0.6) plt.plot(sim.trange(), sim.data[p]) t = sim.trange() assert np.mean(sim.data[p][(t > 0.1) & (t <= 0.3)]) > 0.8 assert np.mean(sim.data[p][t > 0.4]) < 0.15
def test_pointer_symbol_with_dynamic_scalar(Simulator, rng): with spa.Network(): scalar = spa.Scalar() with pytest.raises(SpaTypeError): PointerSymbol("A") * scalar
def test_scalar_product(): with spa.Network() as model: model.scalar = spa.Scalar() with spa.ActionSelection(): spa.ifmax(model.scalar * model.scalar, 1 >> model.scalar)