From 0bb589be197e5d0e314443e1a9742444d7433382 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Fri, 25 Apr 2025 07:53:01 +0100 Subject: [PATCH 1/4] Fix split examples to use new syntax --- .../split/balanced_random_split.py | 35 +++++-------------- balanced_random/split/spynnaker.cfg | 2 -- examples/split_examples/pynnBrunnelSplit.py | 20 +++-------- examples/split_examples/spynnaker.cfg | 2 -- .../stdp_neuromodulated_example_split.py | 14 +++----- ...ral_plasticity_with_stdp_neuromodulated.py | 13 +++---- examples/split_examples/va_benchmark_split.py | 16 +++------ 7 files changed, 25 insertions(+), 77 deletions(-) delete mode 100644 balanced_random/split/spynnaker.cfg delete mode 100644 examples/split_examples/spynnaker.cfg diff --git a/balanced_random/split/balanced_random_split.py b/balanced_random/split/balanced_random_split.py index 5e1bdb6a..830c7357 100755 --- a/balanced_random/split/balanced_random_split.py +++ b/balanced_random/split/balanced_random_split.py @@ -17,10 +17,8 @@ from pyNN.random import RandomDistribution from pyNN.utility.plotting import Figure, Panel import pyNN.spiNNaker as p -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPoissonDelegate, SplitterPopulationVertexNeuronsSynapses) -p.setup(timestep=0.1, time_scale_factor=1) +p.setup(timestep=0.1) p.set_number_of_neurons_per_core(p.IF_curr_exp, 64) p.set_number_of_neurons_per_core(p.SpikeSourcePoisson, 64) n_neurons = 500 @@ -30,32 +28,15 @@ weight_inh = -5.0 * weight_exc weight_input = 0.001 -pop_input_splitter = SplitterPoissonDelegate() -pop_input = p.Population(100, p.SpikeSourcePoisson(rate=0.0), - additional_parameters={ - "max_rate": 50.0, - "seed": 0, - "splitter": pop_input_splitter}, - label="Input") - -pop_exc_splitter = \ - SplitterPopulationVertexNeuronsSynapses(1, 128, False) -pop_exc = p.Population(n_exc, p.IF_curr_exp, label="Excitatory", - additional_parameters={"splitter": pop_exc_splitter, - "seed": 1}) -pop_inh_splitter = \ - SplitterPopulationVertexNeuronsSynapses(1, 128, False) -pop_inh = p.Population(n_inh, p.IF_curr_exp, label="Inhibitory", - additional_parameters={"splitter": pop_inh_splitter, - "seed": 2}) -stim_exc_splitter = SplitterPoissonDelegate() +pop_input = p.Population( + 100, p.SpikeSourcePoisson(rate=0.0), label="Input", seed=0, max_rate=50.0) + +pop_exc = p.Population(n_exc, p.IF_curr_exp, label="Excitatory", seed=1) +pop_inh = p.Population(n_inh, p.IF_curr_exp, label="Inhibitory", seed=2) stim_exc = p.Population( - n_exc, p.SpikeSourcePoisson(rate=1000.0), label="Stim_Exc", - additional_parameters={"seed": 3, "splitter": stim_exc_splitter}) -stim_inh_splitter = SplitterPoissonDelegate() + n_exc, p.SpikeSourcePoisson(rate=1000.0), label="Stim_Exc", seed=3) stim_inh = p.Population( - n_inh, p.SpikeSourcePoisson(rate=1000.0), label="Stim_Inh", - additional_parameters={"seed": 4, "splitter": stim_inh_splitter}) + n_inh, p.SpikeSourcePoisson(rate=1000.0), label="Stim_Inh", seed=4) delays_exc = RandomDistribution( "normal_clipped", mu=1.5, sigma=0.75, low=1.0, high=1.6) diff --git a/balanced_random/split/spynnaker.cfg b/balanced_random/split/spynnaker.cfg deleted file mode 100644 index 3ef3dab9..00000000 --- a/balanced_random/split/spynnaker.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[Mode] -violate_1ms_wall_clock_restriction = True diff --git a/examples/split_examples/pynnBrunnelSplit.py b/examples/split_examples/pynnBrunnelSplit.py index d2c9eee2..31ecd106 100755 --- a/examples/split_examples/pynnBrunnelSplit.py +++ b/examples/split_examples/pynnBrunnelSplit.py @@ -18,8 +18,6 @@ import matplotlib.pyplot as plt from pyNN.random import RandomDistribution from pyNN.utility.plotting import Figure, Panel -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses, SplitterPoissonDelegate) simulator_Name = 'spiNNaker' # exec('import pyNN.%s as pynn' % simulator_Name) @@ -164,26 +162,16 @@ def poisson_generator(rate, rng, t_start=0.0, t_stop=1000.0, array=True, } # Set-up pynn Populations -E_pop_splitter = SplitterPopulationVertexNeuronsSynapses(3, 128, False) E_pop = pynn.Population( - N_E, pynn.IF_curr_exp(**exc_cell_params), label="E_pop", - additional_parameters={"splitter": E_pop_splitter}, seed=1) + N_E, pynn.IF_curr_exp(**exc_cell_params), label="E_pop", seed=1) -I_pop_splitter = SplitterPopulationVertexNeuronsSynapses(3, 128, False) I_pop = pynn.Population( - N_I, pynn.IF_curr_exp(**inh_cell_params), label="I_pop", - additional_parameters={"splitter": I_pop_splitter}, seed=2) + N_I, pynn.IF_curr_exp(**inh_cell_params), label="I_pop", seed=2) -Poiss_ext_E_splitter = SplitterPoissonDelegate() Poiss_ext_E = pynn.Population( - N_E, pynn.SpikeSourcePoisson(rate=10.0), label="Poisson_pop_E", - additional_parameters={"seed": 3, - "splitter": Poiss_ext_E_splitter}) -Poiss_ext_I_splitter = SplitterPoissonDelegate() + N_E, pynn.SpikeSourcePoisson(rate=10.0), label="Poisson_pop_E", seed=3) Poiss_ext_I = pynn.Population( - N_I, pynn.SpikeSourcePoisson(rate=10.0), label="Poisson_pop_I", - additional_parameters={"seed": 4, - "splitter": Poiss_ext_I_splitter}) + N_I, pynn.SpikeSourcePoisson(rate=10.0), label="Poisson_pop_I", seed=4) # Connectors E_conn = pynn.FixedProbabilityConnector(epsilon) diff --git a/examples/split_examples/spynnaker.cfg b/examples/split_examples/spynnaker.cfg deleted file mode 100644 index 3ef3dab9..00000000 --- a/examples/split_examples/spynnaker.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[Mode] -violate_1ms_wall_clock_restriction = True diff --git a/examples/split_examples/stdp_neuromodulated_example_split.py b/examples/split_examples/stdp_neuromodulated_example_split.py index a3322518..aaca979a 100644 --- a/examples/split_examples/stdp_neuromodulated_example_split.py +++ b/examples/split_examples/stdp_neuromodulated_example_split.py @@ -26,9 +26,6 @@ post-synaptic neurons to the same stimuli. """ -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses) - import pyNN.spiNNaker as sim import pylab @@ -59,6 +56,7 @@ } sim.setup(timestep=timestep) +sim.set_number_of_synapse_cores(sim.IF_curr_exp, 1) # Create a population of dopaminergic neurons for reward and punishment reward_pop = sim.Population(n_neurons, sim.SpikeSourceArray, @@ -70,7 +68,6 @@ pre_pops = [] stimulation = [] post_pops = [] -post_splitters = [] reward_projections = [] punishment_projections = [] plastic_projections = [] @@ -85,12 +82,11 @@ weight=plastic_weights) for i in range(n_pops): - stimulation.append(sim.Population(n_neurons, sim.SpikeSourcePoisson, - {'rate': stim_rate, 'duration': duration}, label="pre")) - post_splitters.append(SplitterPopulationVertexNeuronsSynapses(2)) + stimulation.append(sim.Population( + n_neurons, sim.SpikeSourcePoisson(rate=stim_rate, duration=duration), + label="pre")) post_pops.append(sim.Population( - n_neurons, sim.IF_curr_exp, cell_params, label='post', - additional_parameters={"splitter": post_splitters[i]})) + n_neurons, sim.IF_curr_exp, cell_params, label='post')) plastic_projections.append( sim.Projection(stimulation[i], post_pops[i], sim.OneToOneConnector(), diff --git a/examples/split_examples/structural_plasticity_with_stdp_neuromodulated.py b/examples/split_examples/structural_plasticity_with_stdp_neuromodulated.py index 789f71a6..9a504584 100644 --- a/examples/split_examples/structural_plasticity_with_stdp_neuromodulated.py +++ b/examples/split_examples/structural_plasticity_with_stdp_neuromodulated.py @@ -31,9 +31,6 @@ STDP, structural plasticity and neuron instructions would not fit on one core """ -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses) - import pyNN.spiNNaker as sim import pylab import numpy as np @@ -76,7 +73,6 @@ pre_pops = [] stimulation = [] post_pops = [] -post_splitters = [] reward_projections = [] punishment_projections = [] plastic_projections = [] @@ -118,12 +114,11 @@ weight_dependence=sim.AdditiveWeightDependence(w_min=0, w_max=5.0)) for i in range(n_pops): - stimulation.append(sim.Population(n_neurons, sim.SpikeSourcePoisson, - {'rate': stim_rate, 'duration': duration}, label="pre")) - post_splitters.append(SplitterPopulationVertexNeuronsSynapses(1)) + stimulation.append(sim.Population( + n_neurons, sim.SpikeSourcePoisson(rate=stim_rate, duration=duration), + label="pre")) post_pops.append(sim.Population( - n_neurons, sim.IF_curr_exp, cell_params, label='post', - additional_parameters={"splitter": post_splitters[i]})) + n_neurons, sim.IF_curr_exp, cell_params, label='post')) plastic_projections.append( sim.Projection(stimulation[i], post_pops[i], sim.FixedProbabilityConnector(0.), # no initial conns diff --git a/examples/split_examples/va_benchmark_split.py b/examples/split_examples/va_benchmark_split.py index b43dae21..1e2ab753 100755 --- a/examples/split_examples/va_benchmark_split.py +++ b/examples/split_examples/va_benchmark_split.py @@ -32,8 +32,6 @@ from pyNN.utility import Timer from pyNN.utility.plotting import Figure, Panel import matplotlib.pyplot as plt -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses) simulator_name = 'spiNNaker' @@ -126,10 +124,8 @@ timestep=dt, min_delay=delay, db_name='va_benchmark.sqlite', **extra) if simulator_name == 'spiNNaker': - p.set_number_of_neurons_per_core(p.IF_curr_exp, 100) # this will set - # 100 neurons per core - p.set_number_of_neurons_per_core(p.IF_cond_exp, 50) # this will set - # 50 neurons per core + p.set_number_of_neurons_per_core(p.IF_curr_exp, 100) + p.set_number_of_neurons_per_core(p.IF_cond_exp, 50) np = 1 host_name = socket.gethostname() @@ -158,14 +154,10 @@ timer.start() print("%s Creating cell populations..." % node_id) -exc_cells_splitter = SplitterPopulationVertexNeuronsSynapses(2) exc_cells = p.Population( - n_exc, celltype(**cell_params), label="Excitatory_Cells", - additional_parameters={"splitter": exc_cells_splitter}, seed=1) -inh_cells_splitter = SplitterPopulationVertexNeuronsSynapses(3) + n_exc, celltype(**cell_params), label="Excitatory_Cells", seed=1) inh_cells = p.Population( - n_inh, celltype(**cell_params), label="Inhibitory_Cells", - additional_parameters={"splitter": inh_cells_splitter}, seed=2) + n_inh, celltype(**cell_params), label="Inhibitory_Cells", seed=2) exc_conn = None ext_stim = None if benchmark == "COBA": From 1a3858803861bd3ec4fa56bbb6646ffcd7639600 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Fri, 25 Apr 2025 08:08:45 +0100 Subject: [PATCH 2/4] Fix more split examples --- learning/split/spynnaker.cfg | 2 -- learning/split/stdp_split.py | 23 +++++++---------------- learning/split/struct_pl_split.py | 23 +++++++---------------- learning/split/struct_pl_stdp_split.py | 23 +++++++---------------- 4 files changed, 21 insertions(+), 50 deletions(-) delete mode 100644 learning/split/spynnaker.cfg diff --git a/learning/split/spynnaker.cfg b/learning/split/spynnaker.cfg deleted file mode 100644 index 3ef3dab9..00000000 --- a/learning/split/spynnaker.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[Mode] -violate_1ms_wall_clock_restriction = True diff --git a/learning/split/stdp_split.py b/learning/split/stdp_split.py index b194fd32..163c81e9 100755 --- a/learning/split/stdp_split.py +++ b/learning/split/stdp_split.py @@ -15,29 +15,21 @@ import pyNN.utility.plotting as plot import matplotlib.pyplot as plt import pyNN.spiNNaker as sim -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses, SplitterPoissonDelegate) n_neurons = 192 simtime = 5000 sim.setup(timestep=1.0) sim.set_number_of_neurons_per_core(sim.IF_curr_exp, 64) +sim.set_number_of_synapse_cores(sim.IF_curr_exp, 1) +sim.set_allow_delay_extensions(sim.IF_curr_exp, False) -pre_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -pre_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Pre", additional_parameters={ - "splitter": pre_splitter}) -post_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -post_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Post", additional_parameters={ - "splitter": post_splitter}) +pre_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Pre") +post_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Post") pre_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre") post_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post") pre_pop.record("spikes") post_pop.record("spikes") @@ -45,8 +37,7 @@ training = sim.Population( n_neurons, sim.SpikeSourcePoisson(rate=10.0, start=1500.0, duration=1500.0), - label="Training", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + label="Training") sim.Projection(pre_noise, pre_pop, sim.OneToOneConnector(), synapse_type=sim.StaticSynapse(weight=2.0)) diff --git a/learning/split/struct_pl_split.py b/learning/split/struct_pl_split.py index 1dd99cc5..fd26ef89 100755 --- a/learning/split/struct_pl_split.py +++ b/learning/split/struct_pl_split.py @@ -16,28 +16,20 @@ import numpy import pyNN.utility.plotting as plot import pyNN.spiNNaker as sim -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses, SplitterPoissonDelegate) n_neurons = 64 simtime = 5000 sim.setup(timestep=1.0) +sim.set_number_of_synapse_cores(sim.IF_curr_exp, 1) +sim.set_allow_delay_extensions(sim.IF_curr_exp, False) -pre_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -pre_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Pre", additional_parameters={ - "splitter": pre_splitter}) -post_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -post_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Post", additional_parameters={ - "splitter": post_splitter}) +pre_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Pre") +post_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Post") pre_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre") post_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post") pre_pop.record("spikes") post_pop.record("spikes") @@ -45,8 +37,7 @@ training = sim.Population( n_neurons, sim.SpikeSourcePoisson(rate=10.0, start=1500.0, duration=1500.0), - label="Training", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + label="Training") sim.Projection(pre_noise, pre_pop, sim.OneToOneConnector(), synapse_type=sim.StaticSynapse(weight=2.0)) diff --git a/learning/split/struct_pl_stdp_split.py b/learning/split/struct_pl_stdp_split.py index 1e09868c..7b0ae51c 100755 --- a/learning/split/struct_pl_stdp_split.py +++ b/learning/split/struct_pl_stdp_split.py @@ -16,29 +16,21 @@ import numpy import pyNN.spiNNaker as sim import pyNN.utility.plotting as plot -from spynnaker.pyNN.extra_algorithms.splitter_components import ( - SplitterPopulationVertexNeuronsSynapses, SplitterPoissonDelegate) n_neurons = 192 simtime = 5000 sim.setup(timestep=1.0) +sim.set_number_of_synapse_cores(sim.IF_curr_exp, 1) +sim.set_allow_delay_extensions(sim.IF_curr_exp, False) sim.set_number_of_neurons_per_core(sim.IF_curr_exp, 64) -pre_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -pre_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Pre", additional_parameters={ - "splitter": pre_splitter}) -post_splitter = SplitterPopulationVertexNeuronsSynapses(1, 128, False) -post_pop = sim.Population( - n_neurons, sim.IF_curr_exp(), label="Post", additional_parameters={ - "splitter": post_splitter}) +pre_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Pre") +post_pop = sim.Population(n_neurons, sim.IF_curr_exp(), label="Post") pre_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Pre") post_noise = sim.Population( - n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + n_neurons, sim.SpikeSourcePoisson(rate=10.0), label="Noise_Post") pre_pop.record("spikes") post_pop.record("spikes") @@ -46,8 +38,7 @@ training = sim.Population( n_neurons, sim.SpikeSourcePoisson(rate=10.0, start=1500.0, duration=1500.0), - label="Training", - additional_parameters={"splitter": SplitterPoissonDelegate()}) + label="Training") sim.Projection(pre_noise, pre_pop, sim.OneToOneConnector(), synapse_type=sim.StaticSynapse(weight=2.0)) From d633245cdf8c5fe0a581d30b1b40de369bfa8ed5 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Fri, 2 May 2025 11:47:43 +0100 Subject: [PATCH 3/4] Add scaling here --- .../live_examples/balanced_random_live_rate.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/examples/external_devices_examples/live_examples/balanced_random_live_rate.py b/examples/external_devices_examples/live_examples/balanced_random_live_rate.py index 7ab9aaae..80956809 100644 --- a/examples/external_devices_examples/live_examples/balanced_random_live_rate.py +++ b/examples/external_devices_examples/live_examples/balanced_random_live_rate.py @@ -19,7 +19,9 @@ from pyNN.random import RandomDistribution from pyNN.utility.plotting import Figure, Panel -p.setup(timestep=0.1) +# We need a time scale factor here as we are interacting live, so too fast +# otherwise! +p.setup(timestep=0.1, time_scale_factor=1.0) p.set_number_of_neurons_per_core(p.SpikeSourcePoisson, 50) n_neurons = 500 n_exc = int(round(n_neurons * 0.8)) From d42c72cac7fcf58157c8b18ee2c81028450da132 Mon Sep 17 00:00:00 2001 From: Andrew Rowley Date: Fri, 2 May 2025 11:48:59 +0100 Subject: [PATCH 4/4] Really, we need to scale time! --- .../live_examples/balanced_random_live_rate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/external_devices_examples/live_examples/balanced_random_live_rate.py b/examples/external_devices_examples/live_examples/balanced_random_live_rate.py index 80956809..c13b06c0 100644 --- a/examples/external_devices_examples/live_examples/balanced_random_live_rate.py +++ b/examples/external_devices_examples/live_examples/balanced_random_live_rate.py @@ -21,7 +21,7 @@ # We need a time scale factor here as we are interacting live, so too fast # otherwise! -p.setup(timestep=0.1, time_scale_factor=1.0) +p.setup(timestep=0.1, time_scale_factor=10.0) p.set_number_of_neurons_per_core(p.SpikeSourcePoisson, 50) n_neurons = 500 n_exc = int(round(n_neurons * 0.8))