def __call__(self, argument: Any, /, **side_inputs: Any) -> Any:
    """Abstract call method for a layer.

    Layers are model components that take one main input and optional side
    inputs, and produce a single output.
    By convention, almost all model components in a Penzai model are instances
    of Layer, making it possible to easily compose them with other layers and
    wrappers. If a layer needs to take multiple input arrays, its input can be
    a nested data structure.

    Both arguments should be passed positionally by any caller; callers should
    not assume they have particular names, and subclasses of Layer are free to
    rename them.

    Args:
      argument: The primary input to the layer. Usually either an array or a
        nested structure of arrays.
      **side_inputs: Arbitrary side context available to the layer. Each should
        usually be an array, Variable, or structure of arrays or variables.
        Layers *must* accept arbitrary side input keyword arguments and should
        ignore side inputs that they do not use.

    Returns:
      An output value, or possibly a nested structure.
    """
    raise NotImplementedError(
        "__call__ must be overridden for Layer subclasses"
    )
Abstract call method for a layer.

    Layers are model components that take one main input and optional side
    inputs, and produce a single output.
    By convention, almost all model components in a Penzai model are instances
    of Layer, making it possible to easily compose them with other layers and
    wrappers. If a layer needs to take multiple input arrays, its input can be
    a nested data structure.

    Both arguments should be passed positionally by any caller; callers should
    not assume they have particular names, and subclasses of Layer are free to
    rename them.

    Args:
      argument: The primary input to the layer. Usually either an array or a
        nested structure of arrays.
      **side_inputs: Arbitrary side context available to the layer. Each should
        usually be an array, Variable, or structure of arrays or variables.
        Layers *must* accept arbitrary side input keyword arguments and should
        ignore side inputs that they do not use.

    Returns:
      An output value, or possibly a nested structure.
    
penzai/nn/layer.py