class_docstr: Base layer class.
  This is the class from which all layers inherit.
  A layer is a class implementing common neural networks operations, such
  as convolution, batch norm, etc. These operations require managing weights,
  losses, updates, and inter-layer connectivity.
  Users will just instantiate a layer and then treat it as a callable.
  We recommend that descendants of `Layer` implement the following methods:
  * `__init__()`: Save configuration in member variables
  * `build()`: Called once from `__call__`, when we know the shapes of inputs
      and `dtype`.
  * `call()`: Called in `__call__` after making sure `build()` has been called
      once. Should actually perform the logic of applying the layer to the
      input tensors (which should be passed in as the first argument).
class_docstr_tok: ["Base","layer","class",".","This","is","the","class","from","which","all","layers","inherit",".","A","layer","is","a","class","implementing","common","neural","networks","operations",",","such","as","convolution",",","batch","norm",",","etc",".","These","operations","require","managing","weights",",","losses",",","updates",",","and","inter-layer","connectivity",".","Users","will","just","instantiate","a","layer","and","then","treat","it","as","a","callable",".","We","recommend","that","descendants","of","`","Layer","`","implement","the","following","methods",":","*","`","__init__","(",")","`",":","Save","configuration","in","member","variables","*","`","build","(",")","`",":","Called","once","from","`","__call__","`",",","when","we","know","the","shapes","of","inputs","and","`","dtype","`",".","*","`","call","(",")","`",":","Called","in","`","__call__","`","after","making","sure","`","build","(",")","`","has","been","called","once",".","Should","actually","perform","the","logic","of","applying","the","layer","to","the","input","tensors","(","which","should","be","passed","in","as","the","first","argument",")","."]
docstr: Wraps `call`, applying pre- and post-processing steps.
  Arguments:
  inputs: input tensor(s).
  *args: additional positional arguments to be passed to `self.call`.
  **kwargs: additional keyword arguments to be passed to `self.call`.
  Returns:
  Output tensor(s).
docstr_tok: ["Wraps","`","call","`",",","applying","pre-","and","post-processing","steps",".","Arguments",":","inputs",":","input","tensor","(","s",")",".","*","args",":","additional","positional","arguments","to","be","passed","to","`","self.call","`",".","*","*","kwargs",":","additional","keyword","arguments","to","be","passed","to","`","self.call","`",".","Returns",":","Output","tensor","(","s",")","."]
code: def __call__(self, inputs, *args, **kargs):
      """Wraps `call`, applying pre- and post-processing steps.
      Arguments:
      inputs: input tensor(s).
      *args: additional positional arguments to be passed to `self.call`.
      **kwargs: additional keyword arguments to be passed to `self.call`.
      Returns:
      Output tensor(s).
      """
      if not self.built:
          input_shapes = inputs.shape
          self.build(input_shapes)
  
          self.built = True
  
      with tf.name_scope(self._name):
          outputs = self.call(inputs, *args, **kargs)
  
      return outputs
  
file_path: tf-encrypted/tf_encrypted/keras/engine/base_layer.py
imports: import logging
  from abc import ABC
  import numpy
  import tensorflow
  from tensorflow.python.keras.utils import generic_utils
  import tf_encrypted
  from tf_encrypted.keras.engine.base_layer_utils import unique_object_name
  from tf_encrypted.protocol import TFEPrivateTensor
  from tf_encrypted.protocol import TFEPrivateVariable
label_desc: Use image node_id 5 for calling the Layer obj's underlying member method code with example usage: obj.__call__(inputs) and returns: outputs