code: def loss(
      self,
      target: torch.Tensor,
      distr_args: Tuple[torch.Tensor, ...],
      loc: Optional[torch.Tensor] = None,
      scale: Optional[torch.Tensor] = None,
  ) -> torch.Tensor:
      (quantile_preds,) = distr_args
      if scale is not None:
          quantile_preds = quantile_preds * scale.unsqueeze(-1)
      if loc is not None:
          quantile_preds = quantile_preds + loc.unsqueeze(-1)
  
      target = target.unsqueeze(-1)
      quantiles = torch.as_tensor(
          self.quantiles,
          device=quantile_preds.device,
          dtype=quantile_preds.dtype,
      )
      return 2 * (
          (target - quantile_preds)
          * ((target <= quantile_preds).float() - quantiles)
      ).abs().mean(dim=-1)
  
file_path: gluonts/src/gluonts/torch/distributions/quantile_output.py
imports: from typing import List, Optional, Tuple
  import torch
  from gluonts.core.component import validated
  from gluonts.model.forecast_generator import ForecastGenerator, QuantileForecastGenerator
  from .distribution_output import Output
label_desc: Use image node_id 5 for calling the QuantileOutput obj's underlying member method code with example usage: obj.loss(target, distr_args, loc, scale) and returns: unknown