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: Builds the layer
  
  Args:
      input_shapes (list of int): shapes of the layer's inputs (node features and adjacency matrix)
docstr_tok: ["Builds","the","layer","Args",":","input_shapes","(","list","of","int",")",":","shapes","of","the","layer","'s","inputs","(","node","features","and","adjacency","matrix",")"]
code: def build(self, input_shapes):
      """
      Builds the layer
  
      Args:
          input_shapes (list of int): shapes of the layer's inputs (node features and adjacency matrix)
      """
      self.built = True
  
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 4 for calling the APPNPPropagationLayer obj's underlying member method code with example usage: obj.build(input_shapes) without return types