def METHOD_NAME(self, model, sample, reduce=True):
    """Compute the loss for the given sample.
    Returns a tuple with three elements:
    1) the loss
    2) the sample size, which is used as the denominator for the gradient
    3) logging outputs to display while training
    """
    net_output = model(**sample["net_input"])
    loss, nll_loss = self.compute_loss(model, net_output, sample, reduce=reduce)
    sample_size = (
        sample["target"].size(0) if self.sentence_avg else sample["ntokens"]
    )
    logging_output = {
        "loss": utils.item(loss.data) if reduce else loss.data,
        "nll_loss": utils.item(nll_loss.data) if reduce else nll_loss.data,
        "ntokens": sample["ntokens"],
        "nsentences": sample["target"].size(0),
        "sample_size": sample_size,
    }
    alignment_loss = None
    # Compute alignment loss only for training set and non dummy batches.
    if "alignments" in sample and sample["alignments"] is not None:
        alignment_loss = self.compute_alignment_loss(sample, net_output)
    if alignment_loss is not None:
        logging_output["alignment_loss"] = utils.item(alignment_loss.data)
        loss += self.alignment_lambda * alignment_loss
    return loss, sample_size, logging_output