def __call__(self, value, name=None, **kwargs):
<EOL>from tensorflow_probability.python.bijectors import chain  <EOL>from tensorflow_probability.python.distributions import distribution  <EOL>from tensorflow_probability.python.distributions import transformed_distribution  <EOL>if type(value) is transformed_distribution.TransformedDistribution:  <EOL><INDENT>new_kwargs = value.parameters<EOL>new_kwargs.update(kwargs)<EOL>new_kwargs["<STR_LIT:name>"] = name or new_kwargs.get("<STR_LIT:name>", None)<EOL>new_kwargs["<STR_LIT>"] = self(value.bijector)<EOL>return transformed_distribution.TransformedDistribution(**new_kwargs)<EOL><DEDENT>if isinstance(value, distribution.Distribution):<EOL><INDENT>return transformed_distribution.TransformedDistribution(<EOL>distribution=value,<EOL>bijector=self,<EOL>name=name,<EOL>**kwargs)<EOL><DEDENT>if isinstance(value, chain.Chain):<EOL><INDENT>new_kwargs = kwargs.copy()<EOL>new_kwargs["<STR_LIT>"] = [self] + ([] if value.bijectors is None<EOL>else list(value.bijectors))<EOL>if "<STR_LIT>" not in new_kwargs:<EOL><INDENT>new_kwargs["<STR_LIT>"] = value.validate_args<EOL><DEDENT>new_kwargs["<STR_LIT:name>"] = name or value.name<EOL>return chain.Chain(**new_kwargs)<EOL><DEDENT>if isinstance(value, Bijector):<EOL><INDENT>return chain.Chain([self, value], name=name, **kwargs)<EOL><DEDENT>return self._call_forward(value, name=name or "<STR_LIT>", **kwargs)<EOL>
Applies or composes the `Bijector`, depending on input type.

        This is a convenience function which applies the `Bijector` instance in
        three different ways, depending on the input:

        1. If the input is a `tfd.Distribution` instance, return
           `tfd.TransformedDistribution(distribution=input, bijector=self)`.
        2. If the input is a `tfb.Bijector` instance, return
           `tfb.Chain([self, input])`.
        3. Otherwise, return `self.forward(input)`

        Args:
          value: A `tfd.Distribution`, `tfb.Bijector`, or a `Tensor`.
          name: Python `str` name given to ops created by this function.
          **kwargs: Additional keyword arguments passed into the created
            `tfd.TransformedDistribution`, `tfb.Bijector`, or `self.forward`.

        Returns:
          composition: A `tfd.TransformedDistribution` if the input was a
            `tfd.Distribution`, a `tfb.Chain` if the input was a `tfb.Bijector`, or
            a `Tensor` computed by `self.forward`.

        #### Examples

        ```python
        sigmoid = tfb.Reciprocal()(
            tfb.AffineScalar(shift=1.)(
              tfb.Exp()(
                tfb.AffineScalar(scale=-1.))))
        # ==> `tfb.Chain([
        #         tfb.Reciprocal(),
        #         tfb.AffineScalar(shift=1.),
        #         tfb.Exp(),
        #         tfb.AffineScalar(scale=-1.),
        #      ])`  # ie, `tfb.Sigmoid()`

        log_normal = tfb.Exp()(tfd.Normal(0, 1))
        # ==> `tfd.TransformedDistribution(tfd.Normal(0, 1), tfb.Exp())`

        tfb.Exp()([-1., 0., 1.])
        # ==> tf.exp([-1., 0., 1.])
        ```