def get_trigger(self, index: int, cache: "PerFrameCache") -> int: radius = self._tsamp wave = self._wave.with_offset(-cache.mean) if not 0 <= index < wave.nsamp: return index if wave[index] < 0: direction = 1 test = lambda a: a >= 0 elif wave[index] > 0: direction = -1 test = lambda a: a <= 0 else: # self._wave[sample] == 0 return index + 1 data = wave[index:index + direction * (radius + 1):direction] # TODO remove unnecessary complexity, since diameter is probably under 10. intercepts = find(data, test) try: (delta, ), value = next(intercepts) return index + (delta * direction) + int(value <= 0) except StopIteration: # No zero-intercepts return index + (direction * radius) # noinspection PyUnreachableCode """
def get_trigger(self, index: int, cache: "PerFrameCache") -> int: # 'cache' is unused. tsamp = self._tsamp if not 0 <= index < self._wave.nsamp: return index if self._wave[index] < 0: direction = 1 test = lambda a: a >= 0 elif self._wave[index] > 0: direction = -1 test = lambda a: a <= 0 else: # self._wave[sample] == 0 return index + 1 data = self._wave[index:index + (direction * tsamp):direction] intercepts = find(data, test) try: (delta, ), value = next(intercepts) return index + (delta * direction) + int(value <= 0) except StopIteration: # No zero-intercepts return index # noinspection PyUnreachableCode """