class_docstr: A batch-mode version of XENetConv.
  
  **Mode**: batch.
  
  **This layer expects a dense adjacency matrix.**
class_docstr_tok: ["A","batch-mode","version","of","XENetConv",".","*","*","Mode","*","*",":","batch",".","*","*","This","layer","expects","a","dense","adjacency","matrix",".","*","*"]
code: def build(self, input_shape):
      assert len(input_shape) == 3  # X, A, E, right?
      layer_kwargs = dict(
          kernel_initializer=self.kernel_initializer,
          bias_initializer=self.bias_initializer,
          kernel_regularizer=self.kernel_regularizer,
          bias_regularizer=self.bias_regularizer,
          kernel_constraint=self.kernel_constraint,
          bias_constraint=self.bias_constraint,
          dtype=self.dtype,
      )
      channels = input_shape[0][-1]  # last dim of X
  
      self.stack_models = []
      self.stack_model_acts = []
  
      if isinstance(self.stack_channels, Iterable):
          assert len(self.stack_channels) > 0
  
          for count, value in enumerate(self.stack_channels):
              self.stack_models.append(Dense(value, **layer_kwargs))
              if count != len(self.stack_channels) - 1:
                  self.stack_model_acts.append(ReLU())
              else:
                  self.stack_model_acts.append(
                      PReLU(shared_axes=[1, 2])
                  )
      else:
          self.stack_models.append(
              Dense(self.stack_channels, **layer_kwargs)
          )
          self.stack_model_acts.append(PReLU(shared_axes=[1, 2]))
  
      self.node_model = Dense(
          self.node_channels,
          activation=self.node_activation,
          **layer_kwargs,
      )
      self.edge_model = Dense(
          self.edge_channels,
          activation=self.edge_activation,
          **layer_kwargs,
      )
  
      if self.attention:
          self.incoming_att_sigmoid = Dense(1, activation="sigmoid")
          self.incoming_att_multiply = Multiply()
          self.outgoing_att_sigmoid = Dense(1, activation="sigmoid")
          self.outgoing_att_multiply = Multiply()
  
      self.built = True
  
imports: from collections.abc import Iterable
  import tensorflow
  from tensorflow.keras.layers import Concatenate, Dense, Multiply, PReLU, ReLU
  from tensorflow.python.ops import gen_sparse_ops
  from spektral.layers.convolutional.conv import Conv
  from spektral.layers.convolutional.message_passing import MessagePassing
label_desc: Use image node_id 2 for calling the XENetConvBatch obj's underlying member method code with example usage: obj.build(input_shape) without return types