Bijector which inverts another Bijector.
Example Use: [ExpGammaDistribution (see Background & Context)](
https://reference.wolfram.com/language/ref/ExpGammaDistribution.html)
models `Y=log(X)` where `X ~ Gamma`.
```python
exp_gamma_distribution = TransformedDistribution(
distribution=Gamma(concentration=1., rate=2.),
bijector=bijector.Invert(bijector.Exp())
```
- - -
#### `tf.contrib.distributions.bijector.Invert.__init__(bijector, validate_args=False, name=None)` {#Invert.__init__}
Creates a `Bijector` which swaps the meaning of `inverse` and `forward`.
Note: An inverted bijector's `inverse_log_det_jacobian` is often more
efficient if the base bijector implements `_forward_log_det_jacobian`. If
`_forward_log_det_jacobian` is not implemented then the following code is
used:
```python
y = self.inverse(x, **kwargs)
return -self.inverse_log_det_jacobian(y, **kwargs)
```
##### Args:
* `bijector`: Bijector instance.
* `validate_args`: Python `bool` indicating whether arguments should be
checked for correctness.
* `name`: Python `str`, name given to ops managed by this object.
- - -
#### `tf.contrib.distributions.bijector.Invert.bijector` {#Invert.bijector}
- - -
#### `tf.contrib.distributions.bijector.Invert.dtype` {#Invert.dtype}
dtype of `Tensor`s transformable by this distribution.
- - -
#### `tf.contrib.distributions.bijector.Invert.event_ndims` {#Invert.event_ndims}
Returns then number of event dimensions this bijector operates on.
- - -
#### `tf.contrib.distributions.bijector.Invert.forward(x, name='forward')` {#Invert.forward}
Returns the forward `Bijector` evaluation, i.e., X = g(Y).
##### Args:
* `x`: `Tensor`. The input to the "forward" evaluation.
* `name`: The name to give this op.
##### Returns:
`Tensor`.
##### Raises:
* `TypeError`: if `self.dtype` is specified and `x.dtype` is not
`self.dtype`.
* `NotImplementedError`: if `_forward` is not implemented.
- - -
#### `tf.contrib.distributions.bijector.Invert.forward_event_shape(input_shape)` {#Invert.forward_event_shape}
Shape of a single sample from a single batch as a `TensorShape`.
Same meaning as `forward_event_shape_tensor`. May be only partially defined.
##### Args:
* `input_shape`: `TensorShape` indicating event-portion shape passed into
`forward` function.
##### Returns:
* `forward_event_shape_tensor`: `TensorShape` indicating event-portion shape
after applying `forward`. Possibly unknown.
- - -
#### `tf.contrib.distributions.bijector.Invert.forward_event_shape_tensor(input_shape, name='forward_event_shape_tensor')` {#Invert.forward_event_shape_tensor}
Shape of a single sample from a single batch as an `int32` 1D `Tensor`.
##### Args:
* `input_shape`: `Tensor`, `int32` vector indicating event-portion shape
passed into `forward` function.
* `name`: name to give to the op
##### Returns:
* `forward_event_shape_tensor`: `Tensor`, `int32` vector indicating
event-portion shape after applying `forward`.
- - -
#### `tf.contrib.distributions.bijector.Invert.forward_log_det_jacobian(x, name='forward_log_det_jacobian')` {#Invert.forward_log_det_jacobian}
Returns both the forward_log_det_jacobian.
##### Args:
* `x`: `Tensor`. The input to the "forward" Jacobian evaluation.
* `name`: The name to give this op.
##### Returns:
`Tensor`.
##### Raises:
* `TypeError`: if `self.dtype` is specified and `y.dtype` is not
`self.dtype`.
* `NotImplementedError`: if neither `_forward_log_det_jacobian`
nor {`_inverse`, `_inverse_log_det_jacobian`} are implemented.
- - -
#### `tf.contrib.distributions.bijector.Invert.graph_parents` {#Invert.graph_parents}
Returns this `Bijector`'s graph_parents as a Python list.
- - -
#### `tf.contrib.distributions.bijector.Invert.inverse(y, name='inverse')` {#Invert.inverse}
Returns the inverse `Bijector` evaluation, i.e., X = g^{-1}(Y).
##### Args:
* `y`: `Tensor`. The input to the "inverse" evaluation.
* `name`: The name to give this op.
##### Returns:
`Tensor`.
##### Raises:
* `TypeError`: if `self.dtype` is specified and `y.dtype` is not
`self.dtype`.
* `NotImplementedError`: if neither `_inverse` nor
`_inverse_and_inverse_log_det_jacobian` are implemented.
- - -
#### `tf.contrib.distributions.bijector.Invert.inverse_and_inverse_log_det_jacobian(y, name='inverse_and_inverse_log_det_jacobian')` {#Invert.inverse_and_inverse_log_det_jacobian}
Returns both the inverse evaluation and inverse_log_det_jacobian.
Enables possibly more efficient calculation when both inverse and
corresponding Jacobian are needed.
See `inverse()`, `inverse_log_det_jacobian()` for more details.
##### Args:
* `y`: `Tensor`. The input to the "inverse" Jacobian evaluation.
* `name`: The name to give this op.
##### Returns:
`Tensor`.
##### Raises:
* `TypeError`: if `self.dtype` is specified and `y.dtype` is not
`self.dtype`.
* `NotImplementedError`: if neither `_inverse_and_inverse_log_det_jacobian`
nor {`_inverse`, `_inverse_log_det_jacobian`} are implemented.
- - -
#### `tf.contrib.distributions.bijector.Invert.inverse_event_shape(output_shape)` {#Invert.inverse_event_shape}
Shape of a single sample from a single batch as a `TensorShape`.
Same meaning as `inverse_event_shape_tensor`. May be only partially defined.
##### Args:
* `output_shape`: `TensorShape` indicating event-portion shape passed into
`inverse` function.
##### Returns:
* `inverse_event_shape_tensor`: `TensorShape` indicating event-portion shape
after applying `inverse`. Possibly unknown.
- - -
#### `tf.contrib.distributions.bijector.Invert.inverse_event_shape_tensor(output_shape, name='inverse_event_shape_tensor')` {#Invert.inverse_event_shape_tensor}
Shape of a single sample from a single batch as an `int32` 1D `Tensor`.
##### Args:
* `output_shape`: `Tensor`, `int32` vector indicating event-portion shape
passed into `inverse` function.
* `name`: name to give to the op
##### Returns:
* `inverse_event_shape_tensor`: `Tensor`, `int32` vector indicating
event-portion shape after applying `inverse`.
- - -
#### `tf.contrib.distributions.bijector.Invert.inverse_log_det_jacobian(y, name='inverse_log_det_jacobian')` {#Invert.inverse_log_det_jacobian}
Returns the (log o det o Jacobian o inverse)(y).
Mathematically, returns: `log(det(dX/dY))(Y)`. (Recall that: `X=g^{-1}(Y)`.)
Note that `forward_log_det_jacobian` is the negative of this function.
##### Args:
* `y`: `Tensor`. The input to the "inverse" Jacobian evaluation.
* `name`: The name to give this op.
##### Returns:
`Tensor`.
##### Raises:
* `TypeError`: if `self.dtype` is specified and `y.dtype` is not
`self.dtype`.
* `NotImplementedError`: if neither `_inverse_log_det_jacobian` nor
`_inverse_and_inverse_log_det_jacobian` are implemented.
- - -
#### `tf.contrib.distributions.bijector.Invert.is_constant_jacobian` {#Invert.is_constant_jacobian}
Returns true iff the Jacobian is not a function of x.
Note: Jacobian is either constant for both forward and inverse or neither.
##### Returns:
* `is_constant_jacobian`: Python `bool`.
- - -
#### `tf.contrib.distributions.bijector.Invert.name` {#Invert.name}
Returns the string name of this `Bijector`.
- - -
#### `tf.contrib.distributions.bijector.Invert.validate_args` {#Invert.validate_args}
Returns True if Tensor arguments will be validated.