code: def __init__(
      self,
      gnn_model: GraphNeuralNetworkModel,
      decoder: GruCopyingDecoderModel,
      num_summarization_heads: int = 8,
  ):
      super().__init__()
      self.__gnn_model = gnn_model
      self.__decoder_model = decoder
      self.num_summarization_heads: Final = num_summarization_heads
  
imports: from typing_extensions import Final, TypedDict
  import torch
  from typing import Any, Dict, List, NamedTuple, Optional, Tuple, Union
  from ptgnn.baseneuralmodel import AbstractNeuralModel, ModuleWithMetrics
  from ptgnn.baseneuralmodel.utils.data import enforce_not_None
  from ptgnn.neuralmodels.gnn.graphneuralnetwork import GraphNeuralNetwork, GraphNeuralNetworkModel
  from ptgnn.neuralmodels.gnn.structs import GnnOutput, GraphData, TensorizedGraphData
  from ptgnn.neuralmodels.reduceops import AbstractVarSizedElementReduce, ElementsToSummaryRepresentationInput, MultiheadSelfAttentionVarSizedElementReduce, SimpleVarSizedElementReduce
  from ptgnn.neuralmodels.sequence.grucopydecoder import DecoderData, GruCopyingDecoder, GruCopyingDecoderModel, TokenizedOutput
label_desc: Use image node_id 1 to create a new Graph2Seq object from inherited base classes: AbstractNeuralModel with example: obj = Graph2Seq(gnn_model, decoder, num_summarization_heads)