def merge_short_lines_into_groups(events, chapter_times, max_ts_duration, max_ts_distance): search_groups = [] chapter_times = iter(chapter_times[1:] + [100000000]) next_chapter = next(chapter_times) events = ensure_static_collection(events) processed = set() for idx, event in enumerate(events): if idx in processed: continue while event.end > next_chapter: next_chapter = next(chapter_times) if event.duration > max_ts_duration: search_groups.append([event]) processed.add(idx) else: group = [event] group_end = event.end i = idx+1 while i < len(events) and abs(group_end - events[i].start) < max_ts_distance: if events[i].end < next_chapter and events[i].duration <= max_ts_duration: processed.add(i) group.append(events[i]) group_end = max(group_end, events[i].end) i += 1 search_groups.append(group) return search_groups
def merge_short_lines_into_groups(events, chapter_times, max_ts_duration, max_ts_distance): search_groups = [] chapter_times = iter(chapter_times[1:] + [100000000]) next_chapter = next(chapter_times) events = ensure_static_collection(events) processed = set() for idx, event in enumerate(events): if idx in processed: continue while event.end > next_chapter: next_chapter = next(chapter_times) if event.duration > max_ts_duration: search_groups.append([event]) processed.add(idx) else: group = [event] group_end = event.end i = idx + 1 while i < len(events) and abs(group_end - events[i].start) < max_ts_distance: if events[i].end < next_chapter and events[ i].duration <= max_ts_duration: processed.add(i) group.append(events[i]) group_end = max(group_end, events[i].end) i += 1 search_groups.append(group) return search_groups
def interpolate_nones(data, points): data = ensure_static_collection(data) data_idx = [point for point, value in izip(points, data) if value is not None] if not data_idx: return [] zero_idx = [point for point, value in izip(points, data) if value is None] if not zero_idx: return data data_values = [value for value in data if value is not None] out = iter(np.interp(zero_idx, data_idx, data_values)) for point, value in enumerate(data): if value is None: data[point] = next(out, None) return data
def interpolate_nones(data, points): data = ensure_static_collection(data) values_lookup = {p: v for p, v in izip(points, data) if v is not None} if not values_lookup: return [] zero_points = {p for p, v in izip(points, data) if v is None} if not zero_points: return data data_list = sorted(values_lookup.iteritems()) zero_points = sorted(x for x in zero_points if x not in values_lookup) out = np.interp(x=zero_points, xp=map(operator.itemgetter(0), data_list), fp=map(operator.itemgetter(1), data_list)) values_lookup.update(izip(zero_points, out)) return [ values_lookup[point] if value is None else value for point, value in izip(points, data) ]