Beispiel #1
0
def test_eval_points_scaling(Simulator, sample, radius, seed, rng, scale):
    eval_points = UniformHypersphere()
    if sample:
        eval_points = eval_points.sample(500, 3, rng=rng)

    model = nengo.Network(seed=seed)
    with model:
        a = nengo.Ensemble(
            1,
            3,
            encoders=np.ones((1, 3)),
            intercepts=nengo.dists.Choice([-1]),
            radius=radius,
        )
        b = nengo.Ensemble(1, 3)
        con = nengo.Connection(a,
                               b,
                               eval_points=eval_points,
                               scale_eval_points=scale)

    with Simulator(model) as sim:
        dists = npext.norm(sim.data[con].eval_points, axis=1)
    limit = radius if scale else 1.0
    assert np.all(dists <= limit)
    assert np.any(dists >= 0.9 * limit)
Beispiel #2
0
def test_hypersphere_surface(dimensions, rng):
    n = 150 * dimensions
    dist = UniformHypersphere(surface=True)
    samples = dist.sample(n, dimensions, rng=rng)
    assert samples.shape == (n, dimensions)
    assert np.allclose(npext.norm(samples, axis=1), 1)
    assert np.allclose(np.mean(samples, axis=0), 0, atol=0.25 / dimensions)
Beispiel #3
0
def test_hypersphere_volume(min_magnitude, d, rng):
    n = 150 * d
    dist = UniformHypersphere(min_magnitude=min_magnitude)
    samples = dist.sample(n, d, rng=rng)
    assert samples.shape == (n, d)
    assert np.allclose(np.mean(samples, axis=0), 0, atol=0.1)
    assert np.all(npext.norm(samples, axis=1) >= min_magnitude)
Beispiel #4
0
 def sample(self):
     unif_dist = UniformHypersphere()
     pt = unif_dist.sample(1, self.nbasis) * (
         self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0]
     sample = spa.SemanticPointer(data=np.fft.ifft(
         np.fft.fft(self.basis[0], axis=0)**pt[0, 0], axis=0).real)
     for i in np.arange(1, self.nbasis):
         nextS = spa.SemanticPointer(data=np.fft.ifft(
             np.fft.fft(self.basis[i], axis=0)**pt[0, i], axis=0).real)
         sample = sample * nextS
     return sample.v
Beispiel #5
0
def test_eval_points_scaling(Simulator, sample, radius, seed, rng):
    eval_points = UniformHypersphere()
    if sample:
        eval_points = eval_points.sample(500, 3, rng=rng)

    model = nengo.Network(seed=seed)
    with model:
        a = nengo.Ensemble(1, 3, eval_points=eval_points, radius=radius)

    sim = Simulator(model)
    dists = np.linalg.norm(sim.data[a].eval_points, axis=1)
    assert np.all(dists <= radius)
    assert np.any(dists >= 0.9 * radius)
Beispiel #6
0
def test_eval_points_scaling(Simulator, sample, radius, seed, rng):
    eval_points = UniformHypersphere()
    if sample:
        eval_points = eval_points.sample(500, 3, rng=rng)

    model = nengo.Network(seed=seed)
    with model:
        a = nengo.Ensemble(1, 3, eval_points=eval_points, radius=radius)

    with Simulator(model) as sim:
        dists = npext.norm(sim.data[a].eval_points, axis=1)
        assert np.all(dists <= radius)
        assert np.any(dists >= 0.9 * radius)
Beispiel #7
0
def test_cosine_intercept(d, p, rng, allclose):
    """Tests CosineSimilarity inverse cdf for finding intercepts."""
    pytest.importorskip("scipy")  # betaincinv

    num_samples = 500

    exp_dist = UniformHypersphere(surface=True)
    act_dist = CosineSimilarity(d)

    dots = exp_dist.sample(num_samples, d, rng=rng)[:, 0]

    # Find the desired intercept so that dots >= c with probability p
    c = act_dist.ppf(1 - p)
    assert allclose(np.sum(dots >= c) / float(num_samples), p, atol=0.05)
Beispiel #8
0
 def samples(self, n):
     unif_dist = UniformHypersphere()
     pt = unif_dist.sample(n, self.nbasis) * (
         self.bounds[:, 1] - self.bounds[:, 0]) + self.bounds[:, 0]
     samples = np.zeros((n, self.dim))
     for j in np.arange(n):
         sample = spa.SemanticPointer(data=np.fft.ifft(
             np.fft.fft(self.basis[0], axis=0)**pt[j, 0], axis=0).real)
         for i in np.arange(1, self.nbasis):
             nextS = spa.SemanticPointer(data=np.fft.ifft(
                 np.fft.fft(self.basis[i], axis=0)**pt[j, i], axis=0).real)
             sample = sample * nextS
         samples[j, :] = sample.v
     return samples
    def sample(self, n, d=None, rng=np.random):

        unif_dist = UniformHypersphere()
        xy = unif_dist.sample(n, 2)

        samples = np.zeros((n, d))
        for i in np.arange(n):
            samples[i, :] = ssp(self.X,
                                self.Y,
                                xy[i, 0],
                                xy[i, 1],
                                alg=self.alg).v.real

        return samples.real * self.radius
Beispiel #10
0
def test_cosine_similarity(d, rng):
    """Tests CosineSimilarity sampling."""
    num_samples = 2500
    num_bins = 8

    # Check that it gives a single dimension from UniformHypersphere
    exp_dist = UniformHypersphere(surface=True)
    act_dist = CosineSimilarity(d)

    exp = exp_dist.sample(num_samples, d, rng=rng)[:, 0]
    act = act_dist.sample(num_samples, rng=rng)

    exp_hist, _ = np.histogram(exp, bins=num_bins)
    act_hist, _ = np.histogram(act, bins=num_bins)

    assert np.all(np.abs(np.asfarray(exp_hist - act_hist) / num_samples) < 0.15)
Beispiel #11
0
def test_eval_points_scaling(Simulator, sample, radius, seed, rng, scale):
    eval_points = UniformHypersphere()
    if sample:
        eval_points = eval_points.sample(500, 3, rng=rng)

    model = nengo.Network(seed=seed)
    with model:
        a = nengo.Ensemble(1, 3, radius=radius)
        b = nengo.Ensemble(1, 3)
        con = nengo.Connection(a, b, eval_points=eval_points,
                               scale_eval_points=scale)

    sim = Simulator(model)
    dists = npext.norm(sim.data[con].eval_points, axis=1)
    limit = radius if scale else 1.0
    assert np.all(dists <= limit)
    assert np.any(dists >= 0.9 * limit)
Beispiel #12
0
def test_eval_points_scaling(Simulator, sample, radius, seed, rng, scale):
    eval_points = UniformHypersphere()
    if sample:
        eval_points = eval_points.sample(500, 3, rng=rng)

    model = nengo.Network(seed=seed)
    with model:
        a = nengo.Ensemble(1, 3, radius=radius)
        b = nengo.Ensemble(1, 3)
        con = nengo.Connection(a,
                               b,
                               eval_points=eval_points,
                               scale_eval_points=scale)

    sim = Simulator(model)
    dists = np.linalg.norm(sim.data[con].eval_points, axis=1)
    limit = radius if scale else 1.0
    assert np.all(dists <= limit)
    assert np.any(dists >= 0.9 * limit)