class_docstr: Module implementing the DeepAR model, see [SFG17]_.
  
  *Note:* the code of this model is unrelated to the implementation behind
  `SageMaker's DeepAR Forecasting Algorithm
  <https://docs.aws.amazon.com/sagemaker/latest/dg/deepar.html>`_.
  
  Parameters
  ----------
  freq
      String indicating the sampling frequency of the data to be processed.
  context_length
      Length of the RNN unrolling prior to the forecast date.
  prediction_length
      Number of time points to predict.
  num_feat_dynamic_real
      Number of dynamic real features that will be provided to ``forward``.
  num_feat_static_real
      Number of static real features that will be provided to ``forward``.
  num_feat_static_cat
      Number of static categorical features that will be provided to
      ``forward``.
  cardinality
      List of cardinalities, one for each static categorical feature.
  embedding_dimension
      Dimension of the embedding space, one for each static categorical
      feature.
  num_layers
      Number of layers in the RNN.
  hidden_size
      Size of the hidden layers in the RNN.
  dropout_rate
      Dropout rate to be applied at training time.
  distr_output
      Type of distribution to be output by the model at each time step
  lags_seq
      Indices of the lagged observations that the RNN takes as input. For
      example, ``[1]`` indicates that the RNN only takes the observation at
      time ``t-1`` to produce the output for time ``t``; instead,
      ``[1, 25]`` indicates that the RNN takes observations at times ``t-1``
      and ``t-25`` as input.
  scaling
      Whether to apply mean scaling to the observations (target).
  default_scale
      Default scale that is applied if the context length window is
      completely unobserved. If not set, the scale in this case will be
      the mean scale in the batch.
  num_parallel_samples
      Number of samples to produce when unrolling the RNN in the prediction
      time range.
  nonnegative_pred_samples
      Should final prediction samples be non-negative? If yes, an activation
      function is applied to ensure non-negative. Observe that this is applied
      only to the final samples and this is not applied during training.
class_docstr_tok: ["Module","implementing","the","DeepAR","model",",","see","[","SFG17","]","_",".","*","Note",":","*","the","code","of","this","model","is","unrelated","to","the","implementation","behind","`","SageMaker","'s","DeepAR","Forecasting","Algorithm","<","https",":","\/\/docs.aws.amazon.com\/sagemaker\/latest\/dg\/deepar.html",">","`","_",".","Parameters","--","--","--","--","--","freq","String","indicating","the","sampling","frequency","of","the","data","to","be","processed",".","context_length","Length","of","the","RNN","unrolling","prior","to","the","forecast","date",".","prediction_length","Number","of","time","points","to","predict",".","num_feat_dynamic_real","Number","of","dynamic","real","features","that","will","be","provided","to","``","forward","``",".","num_feat_static_real","Number","of","static","real","features","that","will","be","provided","to","``","forward","``",".","num_feat_static_cat","Number","of","static","categorical","features","that","will","be","provided","to","``","forward","``",".","cardinality","List","of","cardinalities",",","one","for","each","static","categorical","feature",".","embedding_dimension","Dimension","of","the","embedding","space",",","one","for","each","static","categorical","feature",".","num_layers","Number","of","layers","in","the","RNN",".","hidden_size","Size","of","the","hidden","layers","in","the","RNN",".","dropout_rate","Dropout","rate","to","be","applied","at","training","time",".","distr_output","Type","of","distribution","to","be","output","by","the","model","at","each","time","step","lags_seq","Indices","of","the","lagged","observations","that","the","RNN","takes","as","input",".","For","example",",","``","[","1","]","``","indicates","that","the","RNN","only","takes","the","observation","at","time","``","t-1","``","to","produce","the","output","for","time","``","t","``",";","instead",",","``","[","1",",","25","]","``","indicates","that","the","RNN","takes","observations","at","times","``","t-1","``","and","``","t-25","``","as","input",".","scaling","Whether","to","apply","mean","scaling","to","the","observations","(","target",")",".","default_scale","Default","scale","that","is","applied","if","the","context","length","window","is","completely","unobserved",".","If","not","set",",","the","scale","in","this","case","will","be","the","mean","scale","in","the","batch",".","num_parallel_samples","Number","of","samples","to","produce","when","unrolling","the","RNN","in","the","prediction","time","range",".","nonnegative_pred_samples","Should","final","prediction","samples","be","non-negative","?","If","yes",",","an","activation","function","is","applied","to","ensure","non-negative",".","Observe","that","this","is","applied","only","to","the","final","samples","and","this","is","not","applied","during","training","."]
code: def loss(
      self,
      feat_static_cat: torch.Tensor,
      feat_static_real: torch.Tensor,
      past_time_feat: torch.Tensor,
      past_target: torch.Tensor,
      past_observed_values: torch.Tensor,
      future_time_feat: torch.Tensor,
      future_target: torch.Tensor,
      future_observed_values: torch.Tensor,
      future_only: bool = False,
      aggregate_by=torch.mean,
  ) -> torch.Tensor:
      extra_dims = len(future_target.shape) - len(past_target.shape)
      extra_shape = future_target.shape[:extra_dims]
      batch_shape = future_target.shape[: extra_dims + 1]
  
      repeats = prod(extra_shape)
      feat_static_cat = repeat_along_dim(feat_static_cat, 0, repeats)
      feat_static_real = repeat_along_dim(feat_static_real, 0, repeats)
      past_time_feat = repeat_along_dim(past_time_feat, 0, repeats)
      past_target = repeat_along_dim(past_target, 0, repeats)
      past_observed_values = repeat_along_dim(
          past_observed_values, 0, repeats
      )
      future_time_feat = repeat_along_dim(future_time_feat, 0, repeats)
  
      future_target_reshaped = future_target.reshape(
          -1,
          *future_target.shape[extra_dims + 1 :],
      )
      future_observed_reshaped = future_observed_values.reshape(
          -1,
          *future_observed_values.shape[extra_dims + 1 :],
      )
  
      params, scale, _, _, _ = self.unroll_lagged_rnn(
          feat_static_cat,
          feat_static_real,
          past_time_feat,
          past_target,
          past_observed_values,
          future_time_feat,
          future_target_reshaped,
      )
  
      if future_only:
          sliced_params = tuple(
              [p[:, -self.prediction_length :] for p in params]
          )
          loss_values = self.distr_output.loss(
              target=future_target_reshaped,
              distr_args=sliced_params,
              scale=scale,
          )
          loss_values = loss_values * future_observed_reshaped
      else:
          context_target = take_last(
              past_target, dim=-1, num=self.context_length - 1
          )
          target = torch.cat(
              (context_target, future_target_reshaped),
              dim=1,
          )
          context_observed = take_last(
              past_observed_values, dim=-1, num=self.context_length - 1
          )
          observed_values = torch.cat(
              (context_observed, future_observed_reshaped), dim=1
          )
          loss_values = self.distr_output.loss(
              target=target, distr_args=params, scale=scale
          )
          loss_values = loss_values * observed_values
  
      loss_values = loss_values.reshape(
          *batch_shape, *loss_values.shape[1:]
      )
  
      return aggregate_by(
          loss_values,
          dim=tuple(range(extra_dims + 1, len(future_target.shape))),
      )
  
imports: from typing import List, Optional, Tuple
  import torch
  import torch.nn
  from gluonts.core.component import validated
  from gluonts.time_feature import get_lags_for_frequency
  from gluonts.torch.distributions import DistributionOutput, StudentTOutput
  from gluonts.torch.scaler import Scaler, MeanScaler, NOPScaler
  from gluonts.torch.modules.feature import FeatureEmbedder
  from gluonts.torch.util import lagged_sequence_values, repeat_along_dim, take_last, unsqueeze_expand
  from gluonts.itertools import prod
  from gluonts.model import Input, InputSpec
label_desc: Use image node_id 11 for calling the DeepARModel obj's underlying member method code with example usage: obj.loss(feat_static_cat, feat_static_real, past_time_feat, past_target, past_observed_values, future_time_feat, future_target, future_observed_values, future_only, aggregate_by) and returns: aggregate_by