class_docstr: A CensNet convolutional layer from the paper
  
  > [Co-embedding of Nodes and Edges with Graph Neural Networks](https://arxiv.org/abs/2010.13242)<br>
  > Xiaodong Jiang et al.
  
  This implements both the node and edge propagation rules as a single layer.
  
  **Mode**: single, disjoint, batch.
  
  **Input**
  
  - Node features of shape `([batch], n_nodes, n_node_features)`;
  - A tuple containing:
      - Modified Laplacian of shape `([batch], n_nodes, n_nodes)`; can be
          computed with `spektral.utils.convolution.gcn_filter`.
      - Modified line graph Laplacian of shape `([batch], n_edges, n_edges)`;
          can be computed with `spektral.utils.convolution.line_graph` and
          `spektral.utils.convolution.gcn_filter`.
      - Incidence matrix of shape `([batch], n_nodes, n_edges)`; can be
          computed with `spektral.utils.convolution.incidence_matrix`.
  - Edge features of shape `([batch], n_edges, n_edge_features)`;
  
  **Output**
  
  - Node features with the same shape as the input, but with the last
  dimension changed to `node_channels`.
  - Edge features with the same shape as the input, but with the last
  dimension changed to `edge_channels`.
  
  **Arguments**
  
  - `node_channels`: number of output channels for the node features;
  - `edge_channels`: number of output channels for the edge features;
  - `activation`: activation function;
  - `use_bias`: bool, add a bias vector to the output;
  - `kernel_initializer`: initializer for the weights;
  - `node_initializer`: initializer for the node feature weights (P_n);
  - `edge_initializer`: initializer for the edge feature weights (P_e);
  - `bias_initializer`: initializer for the bias vector;
  - `kernel_regularizer`: regularization applied to the weights;
  - `edge_regularizer`: regularization applied to the edge feature weights;
  - `bias_regularizer`: regularization applied to the bias vector;
  - `activity_regularizer`: regularization applied to the output;
  - `kernel_constraint`: constraint applied to the weights;
  - `edge_constraint`: constraint applied to the edge feature weights;
  - `bias_constraint`: constraint applied to the bias vector.
code: def config(self):
      # Get configuration for sub-components.
      node_reg = tf.keras.regularizers.serialize(
          self.__node_regularizer
      )
      node_init = tf.keras.initializers.serialize(
          self.__node_initializer
      )
      node_constraint = tf.keras.constraints.serialize(
          self.__node_constraint
      )
  
      edge_reg = tf.keras.regularizers.serialize(
          self.__edge_regularizer
      )
      edge_init = tf.keras.initializers.serialize(
          self.__edge_initializer
      )
      edge_constraint = tf.keras.constraints.serialize(
          self.__edge_constraint
      )
  
      return dict(
          node_channels=self.node_channels,
          edge_channels=self.edge_channels,
          node_regularizer=node_reg,
          node_initializer=node_init,
          node_constraint=node_constraint,
          edge_regularizer=edge_reg,
          edge_initializer=edge_init,
          edge_constraint=edge_constraint,
      )
  
file_path: spektral/spektral/layers/convolutional/censnet_conv.py
imports: import tensorflow
  from spektral.layers import ops
  from spektral.layers.convolutional.conv import Conv
  from spektral.utils.convolution import gcn_filter, incidence_matrix, line_graph
label_desc: Use image node_id 7 for calling the CensNetConv obj's underlying member method code with example usage: obj.config() and returns: dict