def test_global_inhibition_sink(self): """Test that sinks are correctly determined for connections which are global inhibition connections. """ # Create a model with a global inhibition connection with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(200, 4) a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]]*200) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens decs = mock.Mock() evals = mock.Mock() si = mock.Mock() model.params[a_b] = builder.BuiltConnection(decs, evals, a_b.transform, si) # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.global_inhibition assert model.params[a_b].decoders is decs assert model.params[a_b].eval_points is evals assert model.params[a_b].solver_info is si assert np.all(model.params[a_b].transform == np.array([[1.0, 0.5]])) assert model.params[a_b].transform.shape == (1, 2)
def test_arbitrary_neuron_sink(self, source): """Test that standard connections to neurons return an appropriate sink. We have no plan to support arbitrary connections to neurons, but we allow them at this stage because they may later become global inhibition connections when we optimise out passthrough Nodes. """ with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(100, 4) if source == "neurons": a_b = nengo.Connection(a.neurons, b.neurons, transform=np.eye(100)) else: a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]] * 99 + [[0.5, 1.0]]) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.neurons
def test_arbitrary_neuron_sink(self, source): """Test that standard connections to neurons return an appropriate sink. We have no plan to support arbitrary connections to neurons, but we allow them at this stage because they may later become global inhibition connections when we optimise out passthrough Nodes. """ with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(100, 4) if source == "neurons": a_b = nengo.Connection(a.neurons, b.neurons, transform=np.eye(100)) else: a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]]*99 + [[0.5, 1.0]]) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.neurons
def test_arbitrary_neuron_sink(self): """We have no plan to support arbitrary connections to neurons.""" with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(200, 4) a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]]*199 + [[0.5, 1.0]]) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens # This should fail with pytest.raises(NotImplementedError): ensemble.get_neurons_sink(model, a_b)
def test_neuron_sink(self): """Test that standard connections to neurons return an appropriate sink. """ with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(100, 4) a_b = nengo.Connection(a.neurons, b.neurons, transform=np.eye(100)) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.neurons
def test_global_inhibition_sink(self): """Test that sinks are correctly determined for connections which are global inhibition connections. """ # Create a model with a global inhibition connection with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(200, 4) a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]] * 200) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens decs = mock.Mock() evals = mock.Mock() si = mock.Mock() # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.global_inhibition
def test_global_inhibition_sink(self): """Test that sinks are correctly determined for connections which are global inhibition connections. """ # Create a model with a global inhibition connection with nengo.Network(): a = nengo.Ensemble(100, 2) b = nengo.Ensemble(200, 4) a_b = nengo.Connection(a, b.neurons, transform=[[1.0, 0.5]]*200) # Create a model with the Ensemble for b in it model = builder.Model() b_ens = operators.EnsembleLIF(b) model.object_operators[b] = b_ens decs = mock.Mock() evals = mock.Mock() si = mock.Mock() # Get the sink, check that an appropriate target is return sink = ensemble.get_neurons_sink(model, a_b) assert sink.target.obj is b_ens assert sink.target.port is ensemble.EnsembleInputPort.global_inhibition