code: def initialize(self, input_shape, rng):
      
      try:
        # Re-using this layer, no new parameters.
        if not self._first_init:
          return ()
  
        # First call of this layer, create parameters.
        self._first_init = False
        self._params = self.new_parameters(input_shape, rng)
        return self._params
      except Exception:
        name, trace = self.__class__.__name__, _short_traceback()
        raise LayerError(name, 'initialize', self._caller, input_shape, trace)
docs: Initialize the layer given an input shape and rng.
  
      Returns new_parameters(input_shape, rng) on the first call and () on any
      subsequent call, as the layer is already initialized. This is used for
      networks that share parameters, so the layer only produces them once.
  
      Note that all arguments and return values can be tuples or dictionaries
      or arbitraty nested structures composed of tuples and dictionaries.
  
      Args:
        input_shape: a tuple representing the shape of the input.
        rng: random number generator.
  
      Returns:
        Newly created parameters on the first call and () on all subsequent calls.