code: def forward(
      self,
      node_states: torch.Tensor,
      adjacency_lists: List[Tuple[torch.Tensor, torch.Tensor]],
      node_to_graph_idx: torch.Tensor,
      reference_node_ids: Dict[str, torch.Tensor],
      reference_node_graph_idx: Dict[str, torch.Tensor],
      edge_features: List[torch.Tensor],
  ) -> torch.Tensor:
      e = ElementsToSummaryRepresentationInput(
          element_embeddings=node_states,
          element_to_sample_map=node_to_graph_idx,
          num_samples=node_to_graph_idx.max() + 1,
      )
      graph_representations = self.__global_graph_representation_module(
          e
      )
      graph_representations = self.__dropout(graph_representations)
      return self._update_node_states(
          node_states, graph_representations[node_to_graph_idx]
      )
  
file_path: ptgnn/ptgnn/neuralmodels/gnn/messagepassing/globalgraphexchange.py
imports: import torch
  from abc import abstractmethod
  from torch import nn
  from typing import Dict, List, Tuple
  from ptgnn.neuralmodels.gnn.messagepassing.abstractmessagepassing import AbstractMessagePassingLayer
  from ptgnn.neuralmodels.reduceops.varsizedsummary import AbstractVarSizedElementReduce, ElementsToSummaryRepresentationInput
label_desc: Use image node_id 3 for calling the AbstractGlobalGraphExchange obj's underlying member method code with example usage: obj.forward(node_states, adjacency_lists, node_to_graph_idx, reference_node_ids, reference_node_graph_idx, edge_features) and returns: self