class_docstr: Estimator class for the model MQF2 proposed in the paper
  ``Multivariate Quantile Function Forecaster``
  by Kan, Aubet, Januschowski, Park, Benidis, Ruthotto, Gasthaus
  
  This is the multi-horizon (multivariate in time step) variant of MQF2
  
  This class is based on gluonts.torch.model.deepar.estimator.DeepAREstimator
  
  Parameters
  ----------
  freq
      Frequency of the data to train on and predict
  prediction_length
      Length of the prediction horizon
  context_length
      Number of steps to unroll the RNN for before computing predictions
      (default: None, in which case context_length = prediction_length)
  num_layers
      Number of RNN layers
  hidden_size
      Hidden state size of RNN
  lr
      Learning rate (default: ``1e-3``).
  weight_decay
      Weight decay regularization parameter (default: ``1e-8``).
  dropout_rate
      Dropout regularization parameter
  num_feat_dynamic_real
      Number of dynamic real-valued features
  num_feat_static_cat
      Number of static categorial features
  num_feat_static_real
      Number of static real-valued features
  cardinality
      Number of values of each categorical feature
  embedding_dimension
      Dimension of the embeddings for categorical features
  scaling
      Whether to automatically scale the target values (default: true)
  lags_seq
      Indices of the lagged target values to use as inputs of the RNN
      (default: None, in which case these are automatically determined
      based on freq)
  time_features
      Time features to use as inputs of the RNN (default: None, in which
      case these are automatically determined based on freq)
  num_parallel_samples
      Number of evaluation samples per time series to increase parallelism
      during inference. This is a model optimization that does not affect
      the accuracy (default: 100)
  icnn_hidden_size
      Hidden layer size of the input convex neural network (icnn)
  icnn_num_layers
      Number of layers of the input convex neural network (icnn)
  is_energy_score
      If True, use energy score as objective function
      otherwise use maximum likelihood
      as objective function (normalizing flows)
  es_num_samples
      Number of samples drawn to approximate the energy score
  beta
      Hyperparameter of the energy score (power of the two terms)
  threshold_input
      Clamping threshold of the (scaled) input when maximum likelihood
      is used as objective function
      this is used to make the forecaster more robust
      to outliers in training samples
  estimate_logdet
      When maximum likelihood is used as the objective function,
      specify whether to use the logdet estimator
      introduced in the paper
      ``Convex potential flows: Universal probability distributions
      with optimal transport and convex optimization``
      If True, the logdet estimator (can be numerically unstable) is used
      otherwise, the logdet is directly computed
code: def create_lightning_module(self) -> MQF2MultiHorizonLightningModule:  # type: ignore
      return MQF2MultiHorizonLightningModule(
          lr=self.lr,
          weight_decay=self.weight_decay,
          model_kwargs={
              "freq": self.freq,
              "context_length": self.context_length,
              "prediction_length": self.prediction_length,
              "num_feat_dynamic_real": (
                  1
                  + self.num_feat_dynamic_real
                  + len(self.time_features)
              ),
              "num_feat_static_real": max(1, self.num_feat_static_real),
              "num_feat_static_cat": max(1, self.num_feat_static_cat),
              "cardinality": self.cardinality,
              "embedding_dimension": self.embedding_dimension,
              "num_layers": self.num_layers,
              "hidden_size": self.hidden_size,
              "distr_output": self.distr_output,
              "dropout_rate": self.dropout_rate,
              "lags_seq": self.lags_seq,
              "scaling": self.scaling,
              "num_parallel_samples": self.num_parallel_samples,
              "icnn_num_layers": self.icnn_num_layers,
              "icnn_hidden_size": self.icnn_hidden_size,
              "is_energy_score": self.is_energy_score,
              "threshold_input": self.threshold_input,
              "es_num_samples": self.es_num_samples,
              "estimate_logdet": self.estimate_logdet,
          },
      )
  
file_path: gluonts/src/gluonts/torch/model/mqf2/estimator.py
imports: from typing import List, Optional, Dict, Any
  from gluonts.core.component import validated
  from gluonts.time_feature import TimeFeature
  from gluonts.torch.model.deepar.estimator import DeepAREstimator
  from .lightning_module import MQF2MultiHorizonLightningModule
  from .distribution import MQF2DistributionOutput
label_desc: Use image node_id 2 for calling the MQF2MultiHorizonEstimator obj's underlying member method code with example usage: obj.create_lightning_module() and returns: MQF2MultiHorizonLightningModule