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

    Parameters
    ----------
    data_y (np.ndarray): 1D array of variable :math:`Y`'s time series data.

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

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

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

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

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