summaryrefslogtreecommitdiff
path: root/pyspike/python_backend.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyspike/python_backend.py')
-rw-r--r--pyspike/python_backend.py72
1 files changed, 36 insertions, 36 deletions
diff --git a/pyspike/python_backend.py b/pyspike/python_backend.py
index e5b74e9..cf1a92f 100644
--- a/pyspike/python_backend.py
+++ b/pyspike/python_backend.py
@@ -1,6 +1,6 @@
""" python_backend.py
-Collection of python functions that can be used instead of the cython
+Collection of python functions that can be used instead of the cython
implementation.
Copyright 2014, Mario Mulansky <mario.mulansky@gmx.net>
@@ -21,18 +21,18 @@ def isi_distance_python(s1, s2):
""" Plain Python implementation of the isi distance.
"""
# compute the interspike interval
- nu1 = s1[1:]-s1[:-1]
- nu2 = s2[1:]-s2[:-1]
-
+ nu1 = s1[1:] - s1[:-1]
+ nu2 = s2[1:] - s2[:-1]
+
# compute the isi-distance
- spike_events = np.empty(len(nu1)+len(nu2))
+ spike_events = np.empty(len(nu1) + len(nu2))
spike_events[0] = s1[0]
# the values have one entry less - the number of intervals between events
- isi_values = np.empty(len(spike_events)-1)
+ isi_values = np.empty(len(spike_events) - 1)
# add the distance of the first events
# isi_values[0] = nu1[0]/nu2[0] - 1.0 if nu1[0] <= nu2[0] \
# else 1.0 - nu2[0]/nu1[0]
- isi_values[0] = (nu1[0]-nu2[0])/max(nu1[0],nu2[0])
+ isi_values[0] = (nu1[0] - nu2[0]) / max(nu1[0], nu2[0])
index1 = 0
index2 = 0
index = 1
@@ -49,28 +49,28 @@ def isi_distance_python(s1, s2):
if index2 >= len(nu2):
break
spike_events[index] = s2[index2]
- else: # s1[index1+1] == s2[index2+1]
+ else: # s1[index1 + 1] == s2[index2 + 1]
index1 += 1
index2 += 1
if (index1 >= len(nu1)) or (index2 >= len(nu2)):
break
spike_events[index] = s1[index1]
# compute the corresponding isi-distance
- isi_values[index] = (nu1[index1]-nu2[index2]) / \
- max(nu1[index1], nu2[index2])
+ isi_values[index] = (nu1[index1] - nu2[index2]) / \
+ max(nu1[index1], nu2[index2])
index += 1
# the last event is the interval end
spike_events[index] = s1[-1]
- # use only the data added above
+ # use only the data added above
# could be less than original length due to equal spike times
- return PieceWiseConstFunc(spike_events[:index+1], isi_values[:index])
+ return PieceWiseConstFunc(spike_events[:index + 1], isi_values[:index])
############################################################
# get_min_dist
############################################################
def get_min_dist(spike_time, spike_train, start_index=0):
- """ Returns the minimal distance |spike_time - spike_train[i]|
+ """ Returns the minimal distance |spike_time - spike_train[i]|
with i>=start_index.
"""
d = abs(spike_time - spike_train[start_index])
@@ -99,18 +99,18 @@ def spike_distance_python(spikes1, spikes2):
- PieceWiseLinFunc describing the spike-distance.
"""
# check for auxiliary spikes - first and last spikes should be identical
- assert spikes1[0]==spikes2[0], \
+ assert spikes1[0] == spikes2[0], \
"Given spike trains seems not to have auxiliary spikes!"
- assert spikes1[-1]==spikes2[-1], \
+ assert spikes1[-1] == spikes2[-1], \
"Given spike trains seems not to have auxiliary spikes!"
# shorter variables
t1 = spikes1
t2 = spikes2
- spike_events = np.empty(len(t1)+len(t2)-2)
+ spike_events = np.empty(len(t1) + len(t2) - 2)
spike_events[0] = t1[0]
- y_starts = np.empty(len(spike_events)-1)
- y_ends = np.empty(len(spike_events)-1)
+ y_starts = np.empty(len(spike_events) - 1)
+ y_ends = np.empty(len(spike_events) - 1)
index1 = 0
index2 = 0
@@ -133,9 +133,10 @@ def spike_distance_python(spikes1, spikes2):
break
spike_events[index] = t1[index1]
# first calculate the previous interval end value
- dt_p1 = dt_f1 # the previous time now was the following time before
+ dt_p1 = dt_f1 # the previous time was the following time before
s1 = dt_p1
- s2 = (dt_p2*(t2[index2+1]-t1[index1]) + dt_f2*(t1[index1]-t2[index2])) / isi2
+ s2 = (dt_p2*(t2[index2+1]-t1[index1]) +
+ dt_f2*(t1[index1]-t2[index2])) / isi2
y_ends[index-1] = (s1*isi2 + s2*isi1) / ((isi1+isi2)**2/2)
# now the next interval start value
dt_f1 = get_min_dist(t1[index1+1], t2, index2)
@@ -148,8 +149,9 @@ def spike_distance_python(spikes1, spikes2):
break
spike_events[index] = t2[index2]
# first calculate the previous interval end value
- dt_p2 = dt_f2 # the previous time now was the following time before
- s1 = (dt_p1*(t1[index1+1]-t2[index2]) + dt_f1*(t2[index2]-t1[index1])) / isi1
+ dt_p2 = dt_f2 # the previous time was the following time before
+ s1 = (dt_p1*(t1[index1+1]-t2[index2]) +
+ dt_f1*(t2[index2]-t1[index1])) / isi1
s2 = dt_p2
y_ends[index-1] = (s1*isi2 + s2*isi1) / ((isi1+isi2)**2/2)
# now the next interval start value
@@ -158,7 +160,7 @@ def spike_distance_python(spikes1, spikes2):
isi2 = t2[index2+1]-t2[index2]
# s2 is the same as above, thus we can compute y2 immediately
y_starts[index] = (s1*isi2 + s2*isi1) / ((isi1+isi2)**2/2)
- else: # t1[index1+1] == t2[index2+1] - generate only one event
+ else: # t1[index1+1] == t2[index2+1] - generate only one event
index1 += 1
index2 += 1
if (index1+1 >= len(t1)) or (index2+1 >= len(t2)):
@@ -183,9 +185,9 @@ def spike_distance_python(spikes1, spikes2):
s1 = dt_p1*(t1[-1]-t1[-2])/isi1
s2 = dt_p2*(t2[-1]-t2[-2])/isi2
y_ends[index-1] = (s1*isi2 + s2*isi1) / ((isi1+isi2)**2/2)
- # use only the data added above
+ # use only the data added above
# could be less than original length due to equal spike times
- return PieceWiseLinFunc(spike_events[:index+1],
+ return PieceWiseLinFunc(spike_events[:index+1],
y_starts[:index], y_ends[:index])
@@ -209,7 +211,7 @@ def add_piece_wise_const_python(x1, y1, x2, y2):
elif x1[index1+1] > x2[index2+1]:
index2 += 1
x_new[index] = x2[index2]
- else: # x1[index1+1] == x2[index2+1]:
+ else: # x1[index1+1] == x2[index2+1]:
index1 += 1
index2 += 1
x_new[index] = x1[index1]
@@ -217,15 +219,13 @@ def add_piece_wise_const_python(x1, y1, x2, y2):
# one array reached the end -> copy the contents of the other to the end
if index1+1 < len(y1):
x_new[index+1:index+1+len(x1)-index1-1] = x1[index1+1:]
- y_new[index+1:index+1+len(y1)-index1-1] = y1[index1+1:] + \
- y2[-1]
+ y_new[index+1:index+1+len(y1)-index1-1] = y1[index1+1:] + y2[-1]
index += len(x1)-index1-2
elif index2+1 < len(y2):
x_new[index+1:index+1+len(x2)-index2-1] = x2[index2+1:]
- y_new[index+1:index+1+len(y2)-index2-1] = y2[index2+1:] + \
- y1[-1]
+ y_new[index+1:index+1+len(y2)-index2-1] = y2[index2+1:] + y1[-1]
index += len(x2)-index2-2
- else: # both arrays reached the end simultaneously
+ else: # both arrays reached the end simultaneously
# only the last x-value missing
x_new[index+1] = x1[-1]
# the last value is again the end of the interval
@@ -244,9 +244,9 @@ def add_piece_wise_lin_python(x1, y11, y12, x2, y21, y22):
y2_new = np.empty_like(y1_new)
x_new[0] = x1[0]
y1_new[0] = y11[0] + y21[0]
- index1 = 0 # index for self
- index2 = 0 # index for f
- index = 0 # index for new
+ index1 = 0 # index for self
+ index2 = 0 # index for f
+ index = 0 # index for new
while (index1+1 < len(y11)) and (index2+1 < len(y21)):
# print(index1+1, x1[index1+1], self.y[index1+1], x_new[index])
if x1[index1+1] < x2[index2+1]:
@@ -272,7 +272,7 @@ def add_piece_wise_lin_python(x1, y11, y12, x2, y21, y22):
x_new[index] = x2[index2]
# and the starting value for the next interval
y1_new[index] = y21[index2] + y
- else: # x1[index1+1] == x2[index2+1]:
+ else: # x1[index1+1] == x2[index2+1]:
y2_new[index] = y12[index1] + y22[index2]
index1 += 1
index2 += 1
@@ -297,7 +297,7 @@ def add_piece_wise_lin_python(x1, y11, y12, x2, y21, y22):
y1_new[index+1:index+1+len(y21)-index2-1] = y21[index2+1:] + y
y2_new[index:index+len(y22)-index2-1] = y22[index2:-1] + y
index += len(x2)-index2-2
- else: # both arrays reached the end simultaneously
+ else: # both arrays reached the end simultaneously
# only the last x-value missing
x_new[index+1] = x1[-1]
# finally, the end value for the last interval