code: def _calculate_metrics(self, output, target, metrics):
      if not len(metrics):
          return
  
      if self.likelihood:
          _metric = metrics(self.likelihood.sample(output), target)
      else:
          # If there's no likelihood, nr_params=1, and we need to squeeze out the
          # last dimension of model output, for properly computing the metric.
          _metric = metrics(output.squeeze(dim=-1), target)
  
      self.log_dict(
          _metric,
          on_epoch=True,
          on_step=False,
          logger=True,
          prog_bar=True,
          sync_dist=True,
      )
  
imports: from abc import ABC, abstractmethod
  from functools import wraps
  from typing import Any, Dict, Optional, Sequence, Tuple, Union
  import pytorch_lightning
  import torch
  import torch.nn
  import torchmetrics
  from joblib import Parallel, delayed
  from darts.logging import get_logger, raise_if, raise_log
  from darts.models.components.layer_norm_variants import RINorm
  from darts.timeseries import TimeSeries
  from darts.utils.likelihood_models import Likelihood
  from darts.utils.timeseries_generation import _build_forecast_series
  from darts.utils.torch import MonteCarloDropout
label_desc: Use image node_id 9 for calling the PLForecastingModule obj's underlying member method code with example usage: obj._calculate_metrics(output, target, metrics) without return types