class_docstr: An implementation of the Temporal Attention Module( i.e. compute temporal attention scores). For details see this paper:
  `"Attention Based Spatial-Temporal Graph Convolutional Networks for Traffic Flow
  Forecasting." <https://ojs.aaai.org/index.php/AAAI/article/view/3881>`_
  
  Args:
      in_channels (int): Number of input features.
      num_of_vertices (int): Number of vertices in the graph.
      num_of_timesteps (int): Number of time lags.
code: def __init__(
      self,
      in_channels: int,
      num_of_vertices: int,
      num_of_timesteps: int,
  ):
      super(TemporalAttention, self).__init__()
  
      self._U1 = nn.Parameter(
          torch.FloatTensor(num_of_vertices)
      )  # for example 307
      self._U2 = nn.Parameter(
          torch.FloatTensor(in_channels, num_of_vertices)
      )  # for example (1, 307)
      self._U3 = nn.Parameter(
          torch.FloatTensor(in_channels)
      )  # for example (1)
      self._be = nn.Parameter(
          torch.FloatTensor(1, num_of_timesteps, num_of_timesteps)
      )  # for example (1,12,12)
      self._Ve = nn.Parameter(
          torch.FloatTensor(num_of_timesteps, num_of_timesteps)
      )  # for example (12, 12)
  
      self._reset_parameters()
  
imports: import math
  from typing import Optional, List, Union
  import torch
  import torch.nn
  from torch.nn import Parameter
  import torch.nn.functional
  from torch_geometric.data import Data
  from torch_geometric.typing import OptTensor
  from torch_geometric.nn.conv import MessagePassing
  from torch_geometric.transforms import LaplacianLambdaMax
  from torch_geometric.utils import remove_self_loops, add_self_loops, get_laplacian
label_desc: Use image node_id 1 to create a new TemporalAttention object from inherited base classes: nn with example: obj = TemporalAttention(in_channels, num_of_vertices, num_of_timesteps)