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
    """
    nsentences, ntokens = sample["nsentences"], sample["ntokens"]
    # B x T
    src_tokens, src_lengths = (
        sample["net_input"]["src_tokens"],
        sample["net_input"]["src_lengths"],
    )
    tgt_tokens, prev_output_tokens = sample["target"], sample["prev_target"]
    outputs = model(src_tokens, src_lengths, prev_output_tokens, tgt_tokens)
    losses, nll_loss = [], []
    for obj in outputs:
        if outputs[obj].get("loss", None) is None:
            _losses = self._compute_loss(
                outputs[obj].get("out"),
                outputs[obj].get("tgt"),
                outputs[obj].get("mask", None),
                outputs[obj].get("ls", 0.0),
                name=obj + "-loss",
                factor=outputs[obj].get("factor", 1.0),
            )
        else:
            _losses = self._custom_loss(
                outputs[obj].get("loss"),
                name=obj + "-loss",
                factor=outputs[obj].get("factor", 1.0),
            )
        losses += [_losses]
        if outputs[obj].get("nll_loss", False):
            nll_loss += [_losses.get("nll_loss", 0.0)]
    loss = sum(l["loss"] for l in losses)
    nll_loss = sum(l for l in nll_loss) if len(nll_loss) > 0 else loss.new_tensor(0)
    # NOTE:
    # we don't need to use sample_size as denominator for the gradient
    # here sample_size is just used for logging
    sample_size = 1
    logging_output = {
        "loss": loss.data,
        "nll_loss": nll_loss.data,
        "ntokens": ntokens,
        "nsentences": nsentences,
        "sample_size": sample_size,
    }
    for l in losses:
        logging_output[l["name"]] = (
            utils.item(l["loss"].data / l["factor"])
            if reduce
            else l[["loss"]].data / l["factor"]
        )
    return loss, sample_size, logging_output