class_docstr: Implements an Highway Flow bijector [1].
  
  HighwayFlow interpolates the vector-valued input `X` with the transformations
  at each step of the bjiector. The Highway Flow can be used as building block
  for a Cascading flow [1] or as a generic normalizing flow.
  
  The transformation consists of a convex update between the input `X` and a
  linear transformation of `X` followed by activation with the form `g(A @
  X + b)`, where `g(.)` is a differentiable non-decreasing activation
  function, and `A` and `b` are weights.
  
  The convex update is regulated by a residual fraction `lam`
  constrained between 0 and 1. Conceptually, we'd like to represent the
  function:
  `Y = lam * X + (1 - lam) * g(A @ X + b)`.
  
  To make this transformation invertible, the bijector is split in three
  convex updates:
   - `Y1 = lam * X + (1 - lam) * L @ X`, with `L` lower diagonal matrix with
     ones on the diagonal;
   - `Y2 = lam * Y1 + (1 - lam) * (U @ Y1 + b)`, with `U` upper diagonal matrix
     with positive diagonal;
   - `Y = lam * Y2 + (1 - lam) * g(Y2)`.
  where the identity function is mixed in at each step to ensure invertibility.
  While this is not exactly equivalent to the original expression, it is
  'morally similar' in that it similarly specializes to the
  identity function when `lam = 1`.
  
  The function `build_trainable_highway_flow` helps initializing the bijector
  with the variables respecting the various constraints.
  
  For more details on Highway Flow and Cascading Flows see [1].
  
  #### Usage example
  ```python
  tfd = tfp.distributions
  tfb = tfp.bijectors
  
  dim = 4 # last input dimension
  
  bijector = build_trainable_highway_flow(dim, activation_fn=tf.nn.softplus)
  y = bijector.forward(x)  # forward mapping
  x = bijector.inverse(y)  # inverse mapping
  base = tfd.MultivariateNormalDiag(loc=tf.zeros(dim)) # Base distribution
  transformed_distribution = tfd.TransformedDistribution(base, bijector)
  ```
  
  #### References
  
  [1]: Ambrogioni, Luca, Gianluigi Silvestri, and Marcel van Gerven.
  "Automatic variational inference with cascading flows." arXiv preprint
  arXiv:2102.04801 (2021).
code: def bias(self):
      return self._bias
  
imports: import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import bijector
  from tensorflow_probability.python.bijectors import chain
  from tensorflow_probability.python.bijectors import fill_scale_tril
  from tensorflow_probability.python.bijectors import fill_triangular
  from tensorflow_probability.python.bijectors import pad
  from tensorflow_probability.python.bijectors import shift
  from tensorflow_probability.python.bijectors import sigmoid
  from tensorflow_probability.python.bijectors import softplus
  from tensorflow_probability.python.bijectors import transform_diagonal
  from tensorflow_probability.python.experimental.bijectors import scalar_function_with_inferred_inverse
  from tensorflow_probability.python.internal import cache_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal import tensor_util
  from tensorflow_probability.python.util import deferred_tensor
label_desc: Use image node_id 2 for calling the HighwayFlow obj's underlying member method code with example usage: obj.bias() and returns: self