def test_associativememory_edge_cases(seed, rng): """Tests that edge case code runs without error TODO: In the future, these features should be tested in an integration test. """ vocab = make_vocab(4, 64, rng) out_vectors = rng.uniform(-1, 1, size=(4, 3)) with nengo.Network(seed=seed): # test that an iterable threshold works am = AssociativeMemory(vocab, threshold=[0.1, 0.2, 0.3, 0.4]) am.add_threshold_to_outputs() # test add_output_mapping works when `thresh_ens is not None` am.add_output_mapping("test", out_vectors) inp, out = am.thresh_ens.output, am.test conn = [c for c in am.out_conns if c.pre is inp and c.post is out][0] assert np.allclose(conn.transform.init, out_vectors.T) # test add_default_output_vector works when `thresh_ens is not None` am.add_default_output_vector(np.ones(64)) assert len(am.default_vector_inhibit_conns) == 1 conn = am.default_vector_inhibit_conns[0] assert conn.pre is am.thresh_ens.output
def test_add_output_mapping(rng): """tests add_output_mapping edge cases and errors""" vocab = make_vocab(4, 64, rng) with nengo.Network(): test_am = AssociativeMemory(vocab) output_vectors = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) test_am.add_output_mapping("test", output_vectors) assert isinstance(test_am.test, nengo.Node) with pytest.raises(ValidationError, match="Name .* already exists as a node"): test_am.add_output_mapping("test", output_vectors)