def METHOD_NAME(self, df, times=None, conditional_after=None) -> pd.DataFrame:
    """
    Return the cumulative hazard rate of subjects in X at time points.
    Parameters
    ----------
    X: numpy array or DataFrame
        a (n,d) covariate numpy array or DataFrame. If a DataFrame, columns
        can be in any order. If a numpy array, columns must be in the
        same order as the training data.
    times: iterable, optional
        an iterable of increasing times to predict the cumulative hazard at. Default
        is the set of all durations (observed and unobserved). Uses a linear interpolation if
        points in time are not in the index.
    Returns
    -------
    cumulative_hazard_ : DataFrame
        the cumulative hazard of individuals over the timeline
    """
    if isinstance(df, pd.Series):
        return self.METHOD_NAME(df.to_frame().T)
    if conditional_after is not None:
        raise NotImplementedError()
    times = np.atleast_1d(coalesce(times, self.timeline)).astype(float)
    n = times.shape[0]
    times = times.reshape((n, 1))
    lambdas_ = self._prep_inputs_for_prediction_and_return_parameters(df)
    bp = np.append(self.breakpoints, [np.inf])
    M = np.minimum(np.tile(bp, (n, 1)), times)
    M = np.hstack([M[:, tuple([0])], np.diff(M, axis=1)])
    return pd.DataFrame(np.dot(M, (1 / lambdas_)), columns=_get_index(df), index=times[:, 0])