def vectorised_correlation_function(data, indices):
    """
    Get correlations between rows of data.

    Note that applying a `correlation_function` to `generic` yields a
    `vectorised_correlation_function`.

    Parameters
    ----------
    data : ArrayLike[float]
        2D array for which to calculate correlations between rows.
    indices
        Indices to derive the subset ``data[indices]`` to compare against. You
        may use any form of numpy indexing.

    Returns
    -------
    correlation_matrix : ArrayLike[float]
        2D array containing all correlations. ``correlation_matrix[i,j]``
        contains ``correlation_function(data[i], data[indices][j]``. Its shape
        is ``(len(data), len(indices))``.
    """
    raise Exception(
        'This is an abstract function intended to be referenced in documentation only, do not call it in code'
        )
