class_docstr: Temporal Fusion Transformer neural network.
  
  Partially based on the implementation in github.com/kashif/pytorch-transformer-ts.
  
  Inputs feat_static_real, feat_static_cat and feat_dynamic_real are mandatory.
  Inputs feat_dynamic_cat, past_feat_dynamic_real and past_feat_dynamic_cat are optional.
class_docstr_tok: ["Temporal","Fusion","Transformer","neural","network",".","Partially","based","on","the","implementation","in","github.com\/kashif\/pytorch-transformer-ts",".","Inputs","feat_static_real",",","feat_static_cat","and","feat_dynamic_real","are","mandatory",".","Inputs","feat_dynamic_cat",",","past_feat_dynamic_real","and","past_feat_dynamic_cat","are","optional","."]
code: def describe_inputs(self, batch_size=1) -> InputSpec:
      return InputSpec(
          {
              "past_target": Input(
                  shape=(batch_size, self.context_length),
                  dtype=torch.float,
              ),
              "past_observed_values": Input(
                  shape=(batch_size, self.context_length),
                  dtype=torch.float,
              ),
              "feat_static_real": Input(
                  shape=(batch_size, sum(self.d_feat_static_real)),
                  dtype=torch.float,
              ),
              "feat_static_cat": Input(
                  shape=(batch_size, len(self.c_feat_static_cat)),
                  dtype=torch.long,
              ),
              "feat_dynamic_real": Input(
                  shape=(
                      batch_size,
                      self.context_length + self.prediction_length,
                      sum(self.d_feat_dynamic_real),
                  ),
                  dtype=torch.float,
              ),
              "feat_dynamic_cat": Input(
                  shape=(
                      batch_size,
                      self.context_length + self.prediction_length,
                      len(self.c_feat_dynamic_cat),
                  ),
                  dtype=torch.long,
              ),
              "past_feat_dynamic_real": Input(
                  shape=(
                      batch_size,
                      self.context_length,
                      sum(self.d_past_feat_dynamic_real),
                  ),
                  dtype=torch.float,
              ),
              "past_feat_dynamic_cat": Input(
                  shape=(
                      batch_size,
                      self.context_length,
                      len(self.c_past_feat_dynamic_cat),
                  ),
                  dtype=torch.long,
              ),
          },
          torch.zeros,
      )
  
file_path: gluonts/src/gluonts/torch/model/tft/module.py
imports: import logging
  from typing import Dict, List, Optional, Tuple
  import torch
  import torch.nn
  from gluonts.core.component import validated
  from gluonts.model import Input, InputSpec
  from gluonts.torch.distributions import Output
  from gluonts.torch.distributions.quantile_output import QuantileOutput
  from gluonts.torch.scaler import StdScaler
  from gluonts.torch.util import weighted_average
  from .layers import FeatureEmbedder, FeatureProjector, GatedResidualNetwork, TemporalFusionDecoder, TemporalFusionEncoder, VariableSelectionNetwork
label_desc: Use image node_id 2 for calling the TemporalFusionTransformerModel obj's underlying member method code with example usage: obj.describe_inputs(batch_size) and returns: InputSpec