code: def __init__(
      self, hidden_size, num_historic_vars, num_future_vars, dropout
  ):
      super(TemporalCovariateEncoder, self).__init__()
  
      self.history_vsn = VariableSelectionNetwork(
          hidden_size=hidden_size,
          num_inputs=num_historic_vars,
          dropout=dropout,
      )
      self.history_encoder = nn.LSTM(
          input_size=hidden_size,
          hidden_size=hidden_size,
          batch_first=True,
      )
  
      self.future_vsn = VariableSelectionNetwork(
          hidden_size=hidden_size,
          num_inputs=num_future_vars,
          dropout=dropout,
      )
      self.future_encoder = nn.LSTM(
          input_size=hidden_size,
          hidden_size=hidden_size,
          batch_first=True,
      )
  
      # Shared Gated-Skip Connection
      self.input_gate = GLU(hidden_size, hidden_size)
      self.input_gate_ln = LayerNorm(hidden_size, eps=1e-3)
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from torch import Tensor
  from torch.nn import LayerNorm
  import logging
  import warnings
  from typing import Tuple, Optional
  from ..losses.pytorch import MAE
  from ..common._base_windows import BaseWindows
label_desc: Use image node_id 1 to create a new TemporalCovariateEncoder object from inherited base classes: nn with example: obj = TemporalCovariateEncoder(hidden_size, num_historic_vars, num_future_vars, dropout)