class_docstr: A crystal graph convolutional layer from the paper
  
  > [Crystal Graph Convolutional Neural Networks for an Accurate and
  Interpretable Prediction of Material Properties](https://arxiv.org/abs/1710.10324)<br>
  > Tian Xie and Jeffrey C. Grossman
  
  **Mode**: single, disjoint, mixed.
  
  **This layer expects a sparse adjacency matrix.**
  
  This layer computes:
  $$
      \x_i' = \x_i + \sum\limits_{j \in \mathcal{N}(i)} \sigma \left( \z_{ij}
      \W^{(f)} + \b^{(f)} \right) \odot \g \left( \z_{ij} \W^{(s)} + \b^{(s)}
      \right)
  $$
  where \(\z_{ij} = \x_i \| \x_j \| \e_{ji} \), \(\sigma\) is a sigmoid
  activation, and \(g\) is the activation function (defined by the `activation`
  argument).
  
  **Input**
  
  - Node features of shape `(n_nodes, n_node_features)`;
  - Binary adjacency matrix of shape `(n_nodes, n_nodes)`.
  - Edge features of shape `(num_edges, n_edge_features)`.
  
  **Output**
  
  - Node features with the same shape of the input.
  
  **Arguments**
  
  - `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.
code: def __init__(
      self,
      aggregate="sum",
      activation=None,
      use_bias=True,
      kernel_initializer="glorot_uniform",
      bias_initializer="zeros",
      kernel_regularizer=None,
      bias_regularizer=None,
      activity_regularizer=None,
      kernel_constraint=None,
      bias_constraint=None,
      **kwargs,
  ):
      super().__init__(
          aggregate=aggregate,
          activation=activation,
          use_bias=use_bias,
          kernel_initializer=kernel_initializer,
          bias_initializer=bias_initializer,
          kernel_regularizer=kernel_regularizer,
          bias_regularizer=bias_regularizer,
          activity_regularizer=activity_regularizer,
          kernel_constraint=kernel_constraint,
          bias_constraint=bias_constraint,
          **kwargs,
      )
  
file_path: spektral/spektral/layers/convolutional/crystal_conv.py
imports: from tensorflow.keras import backend
  from tensorflow.keras.layers import Dense
  from spektral.layers.convolutional.message_passing import MessagePassing
label_desc: Use image node_id 1 to create a new CrystalConv object from inherited base classes: MessagePassing with example: obj = CrystalConv(aggregate, activation, use_bias, kernel_initializer, bias_initializer, kernel_regularizer, bias_regularizer, activity_regularizer, kernel_constraint, bias_constraint)