Esempio n. 1
0
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
Esempio n. 2
0
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)