code: def forward(
      self, target_inp, stat_exog=None, futr_exog=None, hist_exog=None
  ):
      # temporal/static categorical/continuous known/observed input
      # tries to get input, if fails returns None
  
      # Static inputs are expected to be equal for all timesteps
      # For memory efficiency there is no assert statement
      stat_exog = stat_exog[:, :] if stat_exog is not None else None
  
      s_inp = self._apply_embedding(
          cont=stat_exog,
          cont_emb=self.stat_exog_embedding_vectors,
          cont_bias=self.stat_exog_embedding_bias,
      )
      k_inp = self._apply_embedding(
          cont=futr_exog,
          cont_emb=self.futr_exog_embedding_vectors,
          cont_bias=self.futr_exog_embedding_bias,
      )
      o_inp = self._apply_embedding(
          cont=hist_exog,
          cont_emb=self.hist_exog_embedding_vectors,
          cont_bias=self.hist_exog_embedding_bias,
      )
  
      # Temporal observed targets
      # t_observed_tgt = torch.einsum('btf,fh->btfh',
      #                               target_inp, self.tgt_embedding_vectors)
      target_inp = torch.matmul(
          target_inp.unsqueeze(3).unsqueeze(4),
          self.tgt_embedding_vectors.unsqueeze(1),
      ).squeeze(3)
      target_inp = target_inp + self.tgt_embedding_bias
  
      return s_inp, k_inp, o_inp, target_inp
  
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 3 for calling the TFTEmbedding obj's underlying member method code with example usage: obj.forward(target_inp, stat_exog, futr_exog, hist_exog) and returns: s_inp,  k_inp,  o_inp,  target_inp