class_docstr: Implementation of 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 graph personalized page rank matrix
  
    - This class assumes that the personalized page rank matrix (specified in paper) matrix is passed as
      input to the Keras methods.
  
  .. seealso:: :class:`.PPNP` combines several of these layers.
  
  Args:
      units (int): dimensionality of output feature vectors
      final_layer (bool): Deprecated, use ``tf.gather`` or :class:`.GatherIndices`
      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","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","graph","personalized","page","rank","matrix","-","This","class","assumes","that","the","personalized","page","rank","matrix","(","specified","in","paper",")","matrix","is","passed","as","input","to","the","Keras","methods",".","..","seealso",":",":",":","class",":","`",".PPNP","`","combines","several","of","these","layers",".","Args",":","units","(","int",")",":","dimensionality","of","output","feature","vectors","final_layer","(","bool",")",":","Deprecated",",","use","``","tf.gather","``","or",":","class",":","`",".GatherIndices","`","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
          node features (size 1 x N x F),
          graph personalized page rank 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","node","features","(","size","1","x","N","x","F",")",",","graph","personalized","page","rank","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
              node features (size 1 x N x F),
              graph personalized page rank 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.
      """
      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"
          )
  
      # Remove singleton batch dimension
      features = K.squeeze(features, 0)
  
      # Propagate the features
      A = As[0]
      output = K.dot(A, features)
  
      # Add batch dimension back if we removed it
      if batch_dim == 1:
          output = K.expand_dims(output, 0)
  
      return output
  
imports: import warnings
  from tensorflow.keras.layers import Dense, Lambda, Layer, Dropout, Input
  import tensorflow.keras.backend
  import tensorflow
  import numpy
  from .misc import SqueezedSparseConversion, GatherIndices
  from ..mapper import FullBatchNodeGenerator
  from .misc import deprecated_model_function
  from .preprocessing_layer import GraphPreProcessingLayer
label_desc: Use image node_id 5 for calling the PPNPPropagationLayer obj's underlying member method code with example usage: obj.call(inputs) and returns: output