class_docstr: Implementation of Approximate Personalized Propagation of Neural Predictions (PPNP)
  as in https://arxiv.org/abs/1810.05997.
  
  Notes:
    - The inputs are tensors with a batch dimension of 1:
      Keras requires this batch dimension, and for full-batch methods
      we only have a single "batch".
  
    - There are two inputs required, the node features,
      and the normalized graph Laplacian matrix
  
    - This class assumes that the normalized Laplacian matrix is passed as
      input to the Keras methods.
  
  .. seealso:: :class:`.APPNP` combines several of these layers.
  
  Args:
      units (int): dimensionality of output feature vectors
      final_layer (bool): Deprecated, use ``tf.gather`` or :class:`.GatherIndices`
      teleport_probability: "probability" of returning to the starting node in the propagation step as described  in
      the paper (alpha in the paper)
      input_dim (int, optional): the size of the input shape, if known.
      kwargs: any additional arguments to pass to :class:`tensorflow.keras.layers.Layer`
class_docstr_tok: ["Implementation","of","Approximate","Personalized","Propagation","of","Neural","Predictions","(","PPNP",")","as","in","https",":","\/\/arxiv.org\/abs\/1810.05997",".","Notes",":","-","The","inputs","are","tensors","with","a","batch","dimension","of","1",":","Keras","requires","this","batch","dimension",",","and","for","full-batch","methods","we","only","have","a","single","``","batch","''",".","-","There","are","two","inputs","required",",","the","node","features",",","and","the","normalized","graph","Laplacian","matrix","-","This","class","assumes","that","the","normalized","Laplacian","matrix","is","passed","as","input","to","the","Keras","methods",".","..","seealso",":",":",":","class",":","`",".APPNP","`","combines","several","of","these","layers",".","Args",":","units","(","int",")",":","dimensionality","of","output","feature","vectors","final_layer","(","bool",")",":","Deprecated",",","use","``","tf.gather","``","or",":","class",":","`",".GatherIndices","`","teleport_probability",":","``","probability","''","of","returning","to","the","starting","node","in","the","propagation","step","as","described","in","the","paper","(","alpha","in","the","paper",")","input_dim","(","int",",","optional",")",":","the","size","of","the","input","shape",",","if","known",".","kwargs",":","any","additional","arguments","to","pass","to",":","class",":","`","tensorflow.keras.layers.Layer","`"]
docstr: Applies the layer.
  
  Args:
      inputs (list): a list of 3 input tensors that includes
          propagated node features (size 1 x N x F),
          node features (size 1 x N x F),
          graph adjacency matrix (size N x N),
          where N is the number of nodes in the graph, and
          F is the dimensionality of node features.
  
  Returns:
      Keras Tensor that represents the output of the layer.
docstr_tok: ["Applies","the","layer",".","Args",":","inputs","(","list",")",":","a","list","of","3","input","tensors","that","includes","propagated","node","features","(","size","1","x","N","x","F",")",",","node","features","(","size","1","x","N","x","F",")",",","graph","adjacency","matrix","(","size","N","x","N",")",",","where","N","is","the","number","of","nodes","in","the","graph",",","and","F","is","the","dimensionality","of","node","features",".","Returns",":","Keras","Tensor","that","represents","the","output","of","the","layer","."]
code: def call(self, inputs):
      """
      Applies the layer.
  
      Args:
          inputs (list): a list of 3 input tensors that includes
              propagated node features (size 1 x N x F),
              node features (size 1 x N x F),
              graph adjacency matrix (size N x N),
              where N is the number of nodes in the graph, and
              F is the dimensionality of node features.
  
      Returns:
          Keras Tensor that represents the output of the layer.
      """
      propagated_features, features, *As = inputs
      batch_dim, n_nodes, _ = K.int_shape(features)
      if batch_dim != 1:
          raise ValueError(
              "Currently full-batch methods only support a batch dimension of one"
          )
  
      # Propagate the node features
      A = As[0]
      if K.is_sparse(A):
          propagated_features = K.squeeze(propagated_features, 0)
          propagated_features = K.dot(A, propagated_features)
          propagated_features = K.expand_dims(propagated_features, 0)
      else:
          propagated_features = K.batch_dot(A, propagated_features)
  
      output = (1 - self.teleport_probability) * propagated_features
      output += self.teleport_probability * features
  
      return output
  
imports: import warnings
  from tensorflow.keras.layers import Dense, Lambda, Dropout, Input, Layer, InputLayer
  import tensorflow.keras.backend
  from ..mapper import FullBatchGenerator, ClusterNodeGenerator
  from .preprocessing_layer import GraphPreProcessingLayer
  from .misc import SqueezedSparseConversion, deprecated_model_function, GatherIndices
label_desc: Use image node_id 5 for calling the APPNPPropagationLayer obj's underlying member method code with example usage: obj.call(inputs) and returns: output