1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
""" test_generic_interface.py
Tests the generic interfaces of the profile and distance functions
Copyright 2016, Mario Mulansky <mario.mulansky@gmx.net>
Distributed under the BSD License
"""
from __future__ import print_function
from numpy.testing import assert_allclose
import pyspike as spk
from pyspike import SpikeTrain
class dist_from_prof:
""" Simple functor that turns profile function into distance function by
calling profile.avrg().
"""
def __init__(self, prof_func):
self.prof_func = prof_func
def __call__(self, *args, **kwargs):
if "interval" in kwargs:
# forward interval arg into avrg function
interval = kwargs.pop("interval")
return self.prof_func(*args, **kwargs).avrg(interval=interval)
else:
return self.prof_func(*args, **kwargs).avrg()
def check_func(dist_func):
""" generic checker that tests the given distance function.
"""
# generate spike trains:
t1 = SpikeTrain([0.2, 0.4, 0.6, 0.7], 1.0)
t2 = SpikeTrain([0.3, 0.45, 0.8, 0.9, 0.95], 1.0)
t3 = SpikeTrain([0.2, 0.4, 0.6], 1.0)
t4 = SpikeTrain([0.1, 0.4, 0.5, 0.6], 1.0)
spike_trains = [t1, t2, t3, t4]
isi12 = dist_func(t1, t2)
isi12_ = dist_func([t1, t2])
assert_allclose(isi12, isi12_)
isi12_ = dist_func(spike_trains, indices=[0, 1])
assert_allclose(isi12, isi12_)
isi123 = dist_func(t1, t2, t3)
isi123_ = dist_func([t1, t2, t3])
assert_allclose(isi123, isi123_)
isi123_ = dist_func(spike_trains, indices=[0, 1, 2])
assert_allclose(isi123, isi123_)
# run the same test with an additional interval parameter
isi12 = dist_func(t1, t2, interval=[0.0, 0.5])
isi12_ = dist_func([t1, t2], interval=[0.0, 0.5])
assert_allclose(isi12, isi12_)
isi12_ = dist_func(spike_trains, indices=[0, 1], interval=[0.0, 0.5])
assert_allclose(isi12, isi12_)
isi123 = dist_func(t1, t2, t3, interval=[0.0, 0.5])
isi123_ = dist_func([t1, t2, t3], interval=[0.0, 0.5])
assert_allclose(isi123, isi123_)
isi123_ = dist_func(spike_trains, indices=[0, 1, 2], interval=[0.0, 0.5])
assert_allclose(isi123, isi123_)
def test_isi_profile():
check_func(dist_from_prof(spk.isi_profile))
def test_isi_distance():
check_func(spk.isi_distance)
def test_spike_profile():
check_func(dist_from_prof(spk.spike_profile))
def test_spike_distance():
check_func(spk.spike_distance)
def test_spike_sync_profile():
check_func(dist_from_prof(spk.spike_sync_profile))
def test_spike_sync():
check_func(spk.spike_sync)
if __name__ == "__main__":
test_isi_profile()
test_isi_distance()
test_spike_profile()
test_spike_distance()
test_spike_sync_profile()
test_spike_sync()
|