import pandas as pd
import numpy as np

def interpolate_between_windows(fmri_scan, anomaly_starts, window_radius):
    """
    Все значения сигнала вне временного окна window_radius вокруг аномалий стираются.  
    Значения в промежутках между окнами заменяются значениями вычисленными линейной интерполяцией.
    fmri_scan - многоканальный сигнал формы (ось времени, ось каналов)
    anomaly_starts - массив моментов времени появления аномалий
    window_radius - радиус окна с центром в момент аномалии
    """
    intervals_between = [1] + list(np.ndarray.flatten(np.array(list(zip(anomaly_starts-(window_radius), anomaly_starts+(window_radius)))))) + [fmri_scan.shape[0]-1]
    intervals_between = np.array(intervals_between)
    intervals_between[intervals_between<1] = 1
    last_max = 1
    for i in range(intervals_between.shape[0]):
        intervals_between[i] = max(last_max, intervals_between[i])
        last_max = intervals_between[i]
    intervals_between = intervals_between.reshape(len(intervals_between)//2,2)

    fmri_scan_new = []
    for signal in np.transpose(fmri_scan.copy()):
        ts = pd.Series(signal)
        for x1,x2 in intervals_between:
            ts[x1:x2] = None
        ts = ts.interpolate()
        fmri_scan_new.append(ts)
    fmri_scan = np.transpose(np.array(fmri_scan_new))
    return fmri_scan