def test_add_sub(): a = SemanticPointer(10) b = SemanticPointer(10) c = a.copy() d = b.copy() c += b d -= -a assert np.allclose((a + b).v, a.v + b.v) assert np.allclose((a + b).v, c.v) assert np.allclose((a + b).v, d.v) assert np.allclose((a + b).v, (a - (-b)).v)
def test_convolution(rng): a = SemanticPointer(64, rng=rng) b = SemanticPointer(64, rng=rng) identity = SemanticPointer(np.eye(64)[0]) c = a.copy() c *= b ans = np.fft.ifft(np.fft.fft(a.v) * np.fft.fft(b.v)).real assert np.allclose((a * b).v, ans) assert np.allclose(a.convolve(b).v, ans) assert np.allclose(c.v, ans) assert np.allclose((a * identity).v, a.v) assert (a * b * ~b).compare(a) > 0.65
def test_convolution(): rng = np.random.RandomState(3) a = SemanticPointer(50, rng=rng) b = SemanticPointer(50, rng=rng) identity = SemanticPointer(np.eye(50)[0]) c = a.copy() c *= b ans = np.fft.ifft(np.fft.fft(a.v) * np.fft.fft(b.v)).real assert np.allclose((a * b).v, ans) assert np.allclose(a.convolve(b).v, ans) assert np.allclose(c.v, ans) assert np.allclose((a * identity).v, a.v) assert (a * b * ~b).compare(a) > 0.7
def test_copy(): a = SemanticPointer(5) b = a.copy() assert a is not b assert a.v is not b.v assert np.allclose(a.v, b.v)