def time_series_estimates(data_y, nei_x, wei_x):
    """Return estimates of variable $Y$ from variable $X$'s shadow data cloud.

    Params
    ------
    data_y (np.ndarray): 1D array of variable $Y$'s time series data.

    nei_x (np.ndarray): $M \times (N+1)$ array of time indices of nearest
                        neighbors in $X$'s shadow data cloud, where $M$ is the
                        number of points in the shadow data cloud.

    wei_x (np.ndarray): Array of corresponding weights of the nearest
                        neighbors in $X$'s shadow data cloud.

    Returns
    -------
    ests (np.ndarray): Length-$M$ 1D array of estimates of $Y$'s time series.

    Notes
    -----
    Let $t_1, t_2, ..., t_{N+1}$ be the time indices of nearest neighbor of
    point $t$ in $X$'s shadow data cloud. Its corresponding estimates of $Y$
    is $\hat{Y}(t) = \sum_{k=1}^{N+1} w(t_k) Y(t_k)$, where $w$s are weights of
    nearest neighbors.

    """
    ests = (data_y[nei_x] * wei_x).sum(axis=1)

    return ests