def METHOD_NAME(self, X, sample_weight=None):
    """Predicts the chainladder ultimate on a new triangle **X**
    Parameters
    ----------
    X : Triangle
        The data used to compute the mean and standard deviation
        used for later scaling along the features axis.
    sample_weight : Triangle
        For exposure-based methods, the exposure to be used for predictions
    Returns
    -------
    X_new: Triangle
    """
    X_new = X.val_to_dev()
    if sum(X_new.ddims > self.ldf_.ddims.max()) > 0:
        raise ValueError("X has ages that exceed those available in model.")
    X_new = X_new + (self.X_.val_to_dev().iloc[0,0].sum(2) * 0)
    self.validate_weight(X_new, sample_weight)
    if sample_weight:
        sample_weight = sample_weight.set_backend(X_new.array_backend)
    X_new.ldf_ = self.ldf_
    X_new, X_new.ldf_ = self.intersection(X_new, X_new.ldf_)
    return X_new