class_docstr: The node encoder module from the `"Do We Really Need Complicated
  Model Architectures for Temporal Networks?"
  <https://openreview.net/forum?id=ayPPc0SyLv1>`_ paper.
  :class:`NodeEncoder` captures the 1-hop temporal neighborhood information
  via mean pooling.
  
  .. math::
      \mathbf{x}_v^{\prime}(t_0) = \mathbf{x}_v + \textrm{mean} \left\{
      \mathbf{x}_w : w \in \mathcal{N}(v, t_0 - T, t_0) \right\}
  
  Args:
      time_window (int): The temporal window size :math:`T` to define the
          1-hop temporal neighborhood.
code: def __repr__(self) -> str:
      return (
          f"{self.__class__.__name__}(time_window={self.time_window})"
      )
  
imports: import numpy
  import torch
  import torch.nn.functional
  from torch import Tensor
  from torch.nn import LayerNorm, Linear
  from torch_geometric.nn import TemporalEncoding
  from torch_geometric.utils import scatter, to_dense_batch
label_desc: Use image node_id 4 for calling the NodeEncoder obj's underlying member method code with example usage: obj.__repr__() and returns: self, str, self, str