class_docstr: Bijector which applies a composition of bijectors.
  
  Example Use:
  
  ```python
  chain = Chain([Exp(), Softplus()], name="one_plus_exp")
  ```
  
  Results in:
  
  * Forward:
  
    ```python
    exp = Exp()
    softplus = Softplus()
    Chain([exp, softplus]).forward(x)
    = exp.forward(softplus.forward(x))
    = tf.exp(tf.log(1. + tf.exp(x)))
    = 1. + tf.exp(x)
    ```
  
  * Inverse:
  
    ```python
    exp = Exp()
    softplus = Softplus()
    Chain([exp, softplus]).inverse(y)
    = softplus.inverse(exp.inverse(y))
    = tf.log(tf.exp(tf.log(y)) - 1.)
    = tf.log(y - 1.)
    ```
  
  Keyword arguments can be passed to the inner bijectors by utilizing the inner
  bijector names, e.g.:
  
  ```python
  chain = Chain([Bijector1(name='b1'), Bijector2(name='b2')])
  y = chain.forward(x, b1={'arg': 1}, b2={'arg': 2})
  
  # Equivalent to:
  z = Bijector2().forward(x, arg=1)
  y = Bijector1().forward(z, arg=2)
  ```
class_docstr_tok: ["Bijector","which","applies","a","composition","of","bijectors",".","Example","Use",":","``","`","python","chain","=","Chain","(","[","Exp","(",")",",","Softplus","(",")","]",",","name=","''","one_plus_exp","''",")","``","`","Results","in",":","*","Forward",":","``","`","python","exp","=","Exp","(",")","softplus","=","Softplus","(",")","Chain","(","[","exp",",","softplus","]",")",".forward","(","x",")","=","exp.forward","(","softplus.forward","(","x",")",")","=","tf.exp","(","tf.log","(","1",".","+","tf.exp","(","x",")",")",")","=","1",".","+","tf.exp","(","x",")","``","`","*","Inverse",":","``","`","python","exp","=","Exp","(",")","softplus","=","Softplus","(",")","Chain","(","[","exp",",","softplus","]",")",".inverse","(","y",")","=","softplus.inverse","(","exp.inverse","(","y",")",")","=","tf.log","(","tf.exp","(","tf.log","(","y",")",")","-","1",".",")","=","tf.log","(","y","-","1",".",")","``","`","Keyword","arguments","can","be","passed","to","the","inner","bijectors","by","utilizing","the","inner","bijector","names",",","e.g",".",":","``","`","python","chain","=","Chain","(","[","Bijector1","(","name='b1","'",")",",","Bijector2","(","name='b2","'",")","]",")","y","=","chain.forward","(","x",",","b1=","{","'arg","'",":","1","}",",","b2=","{","'arg","'",":","2","}",")","#","Equivalent","to",":","z","=","Bijector2","(",")",".forward","(","x",",","arg=1",")","y","=","Bijector1","(",")",".forward","(","z",",","arg=2",")","``","`"]
docstr: Applies `transform_fn` to `x` sequentially over nested bijectors.
docstr_tok: ["Applies","`","transform_fn","`","to","`","x","`","sequentially","over","nested","bijectors","."]
code: def _walk_forward(self, step_fn, x, **kwargs):
      """Applies `transform_fn` to `x` sequentially over nested bijectors."""
      for bij in reversed(self._bijectors):
          x = step_fn(bij, x, **kwargs.get(bij.name, {}))
      return x
  
file_path: probability/tensorflow_probability/python/bijectors/chain.py
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import bijector
  from tensorflow_probability.python.bijectors import composition
  from tensorflow_probability.python.internal import auto_composite_tensor
  from tensorflow_probability.python.internal import prefer_static
label_desc: Use image node_id 3 for calling the _Chain obj's underlying member method code with example usage: obj._walk_forward(step_fn, x) and returns: x