class_docstr: An Auto-Regressive Moving Average convolutional layer (ARMA) from the paper
  
  > [Graph Neural Networks with convolutional ARMA filters](https://arxiv.org/abs/1901.01343)<br>
  > Filippo Maria Bianchi et al.
  
  **Mode**: single, disjoint, mixed, batch.
  
  This layer computes:
  $$
      \X' = \frac{1}{K} \sum\limits_{k=1}^K \bar\X_k^{(T)},
  $$
  where \(K\) is the order of the ARMA\(_K\) filter, and where:
  $$
      \bar \X_k^{(t + 1)} =
      \sigma \left(\tilde \A \bar \X^{(t)} \W^{(t)} + \X \V^{(t)} \right)
  $$
  is a recursive approximation of an ARMA\(_1\) filter, where
  \( \bar \X^{(0)} = \X \)
  and
  $$
      \tilde \A =  \D^{-1/2} \A \D^{-1/2}.
  $$
  
  **Input**
  
  - Node features of shape `([batch], n_nodes, n_node_features)`;
  - Normalized and rescaled Laplacian of shape `([batch], n_nodes, n_nodes)`; can be
  computed with `spektral.utils.convolution.normalized_laplacian` and
  `spektral.utils.convolution.rescale_laplacian`.
  
  **Output**
  
  - Node features with the same shape as the input, but with the last
  dimension changed to `channels`.
  
  **Arguments**
  
  - `channels`: number of output channels;
  - `order`: order of the full ARMA\(_K\) filter, i.e., the number of parallel
  stacks in the layer;
  - `iterations`: number of iterations to compute each ARMA\(_1\) approximation;
  - `share_weights`: share the weights in each ARMA\(_1\) stack.
  - `gcn_activation`: activation function to compute each ARMA\(_1\)
  stack;
  - `dropout_rate`: dropout rate for skip connection;
  - `activation`: activation function;
  - `use_bias`: bool, add a bias vector to the output;
  - `kernel_initializer`: initializer for the weights;
  - `bias_initializer`: initializer for the bias vector;
  - `kernel_regularizer`: regularization applied to the weights;
  - `bias_regularizer`: regularization applied to the bias vector;
  - `activity_regularizer`: regularization applied to the output;
  - `kernel_constraint`: constraint applied to the weights;
  - `bias_constraint`: constraint applied to the bias vector.
class_docstr_tok: ["An","Auto-Regressive","Moving","Average","convolutional","layer","(","ARMA",")","from","the","paper",">","[","Graph","Neural","Networks","with","convolutional","ARMA","filters","]","(","https",":","\/\/arxiv.org\/abs\/1901.01343",")","<","br",">",">","Filippo","Maria","Bianchi","et","al",".","*","*","Mode","*","*",":","single",",","disjoint",",","mixed",",","batch",".","This","layer","computes",":","$","$","\\X","'","=","\\frac","{","1","}","{","K","}","\\sum\\limits_","{","k=1","}","^K","\\bar\\X_k^","{","(","T",")","}",",","$","$","where","\\","(","K\\",")","is","the","order","of","the","ARMA\\","(","_K\\",")","filter",",","and","where",":","$","$","\\bar","\\X_k^","{","(","t","+","1",")","}","=","\\sigma","\\left","(","\\tilde","\\A","\\bar","\\X^","{","(","t",")","}","\\W^","{","(","t",")","}","+","\\X","\\V^","{","(","t",")","}","\\right",")","$","$","is","a","recursive","approximation","of","an","ARMA\\","(","_1\\",")","filter",",","where","\\","(","\\bar","\\X^","{","(","0",")","}","=","\\X","\\",")","and","$","$","\\tilde","\\A","=","\\D^","{","-1\/2","}","\\A","\\D^","{","-1\/2","}",".","$","$","*","*","Input","*","*","-","Node","features","of","shape","`","(","[","batch","]",",","n_nodes",",","n_node_features",")","`",";","-","Normalized","and","rescaled","Laplacian","of","shape","`","(","[","batch","]",",","n_nodes",",","n_nodes",")","`",";","can","be","computed","with","`","spektral.utils.convolution.normalized_laplacian","`","and","`","spektral.utils.convolution.rescale_laplacian","`",".","*","*","Output","*","*","-","Node","features","with","the","same","shape","as","the","input",",","but","with","the","last","dimension","changed","to","`","channels","`",".","*","*","Arguments","*","*","-","`","channels","`",":","number","of","output","channels",";","-","`","order","`",":","order","of","the","full","ARMA\\","(","_K\\",")","filter",",","i.e.",",","the","number","of","parallel","stacks","in","the","layer",";","-","`","iterations","`",":","number","of","iterations","to","compute","each","ARMA\\","(","_1\\",")","approximation",";","-","`","share_weights","`",":","share","the","weights","in","each","ARMA\\","(","_1\\",")","stack",".","-","`","gcn_activation","`",":","activation","function","to","compute","each","ARMA\\","(","_1\\",")","stack",";","-","`","dropout_rate","`",":","dropout","rate","for","skip","connection",";","-","`","activation","`",":","activation","function",";","-","`","use_bias","`",":","bool",",","add","a","bias","vector","to","the","output",";","-","`","kernel_initializer","`",":","initializer","for","the","weights",";","-","`","bias_initializer","`",":","initializer","for","the","bias","vector",";","-","`","kernel_regularizer","`",":","regularization","applied","to","the","weights",";","-","`","bias_regularizer","`",":","regularization","applied","to","the","bias","vector",";","-","`","activity_regularizer","`",":","regularization","applied","to","the","output",";","-","`","kernel_constraint","`",":","constraint","applied","to","the","weights",";","-","`","bias_constraint","`",":","constraint","applied","to","the","bias","vector","."]
docstr: Creates a set of weights for a GCN with skip connections.
  :param input_dim: dimension of the input space
  :param input_dim_skip: dimension of the input space for the skip connection
  :param channels: dimension of the output space
  :param name: name of the layer
  :return:
      - kernel_1, from input space of the layer to output space
      - kernel_2, from input space of the skip connection to output space
      - bias, bias vector on the output space if use_bias=True, None otherwise.
docstr_tok: ["Creates","a","set","of","weights","for","a","GCN","with","skip","connections",".",":","param","input_dim",":","dimension","of","the","input","space",":","param","input_dim_skip",":","dimension","of","the","input","space","for","the","skip","connection",":","param","channels",":","dimension","of","the","output","space",":","param","name",":","name","of","the","layer",":","return",":","-","kernel_1",",","from","input","space","of","the","layer","to","output","space","-","kernel_2",",","from","input","space","of","the","skip","connection","to","output","space","-","bias",",","bias","vector","on","the","output","space","if","use_bias=True",",","None","otherwise","."]
code: def create_weights(self, input_dim, input_dim_skip, channels, name):
      """
      Creates a set of weights for a GCN with skip connections.
      :param input_dim: dimension of the input space
      :param input_dim_skip: dimension of the input space for the skip connection
      :param channels: dimension of the output space
      :param name: name of the layer
      :return:
          - kernel_1, from input space of the layer to output space
          - kernel_2, from input space of the skip connection to output space
          - bias, bias vector on the output space if use_bias=True, None otherwise.
      """
      kernel_1 = self.add_weight(
          shape=(input_dim, channels),
          name=name + "_kernel_1",
          initializer=self.kernel_initializer,
          regularizer=self.kernel_regularizer,
          constraint=self.kernel_constraint,
      )
      kernel_2 = self.add_weight(
          shape=(input_dim_skip, channels),
          name=name + "_kernel_2",
          initializer=self.kernel_initializer,
          regularizer=self.kernel_regularizer,
          constraint=self.kernel_constraint,
      )
      bias = None
      if self.use_bias:
          bias = self.add_weight(
              shape=(channels,),
              name=name + "_bias",
              initializer=self.bias_initializer,
              regularizer=self.bias_regularizer,
              constraint=self.bias_constraint,
          )
      return kernel_1, kernel_2, bias
  
file_path: spektral/spektral/layers/convolutional/arma_conv.py
imports: from tensorflow.keras import activations
  from tensorflow.keras import backend
  from tensorflow.keras.layers import Dropout
  from spektral.layers import ops
  from spektral.layers.convolutional.conv import Conv
  from spektral.utils import normalized_adjacency
label_desc: Use image node_id 4 for calling the ARMAConv obj's underlying member method code with example usage: obj.create_weights(input_dim, input_dim_skip, channels, name) and returns: kernel_1,  kernel_2,  bias