def test_custom_events(): G = NeuronGroup(2, '''event_time1 : second event_time2 : second''', events={'event1': 't>=i*ms and t<i*ms+dt', 'event2': 't>=(i+1)*ms and t<(i+1)*ms+dt'}) G.run_on_event('event1', 'event_time1 = t') G.run_on_event('event2', 'event_time2 = t') net = Network(G) net.run(2.1*ms) assert_allclose(G.event_time1[:], [0, 1]*ms) assert_allclose(G.event_time2[:], [1, 2]*ms)
def test_custom_events_schedule(): # In the same time step: event2 will be checked and its code executed # before event1 is checked and its code executed G = NeuronGroup(2, '''x : 1 event_time : second''', events={'event1': 'x>0', 'event2': 't>=(i+1)*ms and t<(i+1)*ms+dt'}) G.set_event_schedule('event1', when='after_resets') G.run_on_event('event2', 'x = 1', when='resets') G.run_on_event('event1', '''event_time = t x = 0''', when='after_resets', order=1) net = Network(G) net.run(2.1*ms) assert_allclose(G.event_time[:], [1, 2]*ms)
def test_incorrect_custom_event_definition(): # Incorrect event name assert_raises(TypeError, lambda: NeuronGroup(1, '', events={'1event': 'True'})) # duplicate definition of 'spike' event assert_raises(ValueError, lambda: NeuronGroup(1, '', threshold='True', events={'spike': 'False'})) # not a threshold G = NeuronGroup(1, '', events={'my_event': 10*mV}) assert_raises(TypeError, lambda: Network(G).run(0*ms)) # schedule for a non-existing event G = NeuronGroup(1, '', threshold='False', events={'my_event': 'True'}) assert_raises(ValueError, lambda: G.set_event_schedule('another_event')) # code for a non-existing event assert_raises(ValueError, lambda: G.run_on_event('another_event', ''))