class_docstr: Base class for Composition bijectors (Chain, JointMap).
  
  A Composition represents a partially ordered set of invertible
  transformations. These transformations may happen in series (Chain), in
  parallel (JointMap), or they could be an arbitrary DAG. Composition handles
  the common machinery of such transformations, delegating graph-traversal to
  `_walk_forward` and `_walk_inverse` (which must be overridden by subclasses).
  
  The `_walk_{direction}` methods take a `step_fn`, a single (structured)
  `argument` (representing zipped `*args`), and arbitrary `**kwargs`. They are
  responsible for invoking `step_fn(bij, bij_inputs, **bij_kwds)`
  for each nested bijector. See `Chain` and `JointMap` for examples.
  
  These methods are typically invoked using `_call_walk_{direction}`, which
  wraps `step_fn` and converts structured `*args` into a single structure of
  tuples, allowing users to provide a `step_fn` with multiple positional
  arguments (e.g., `foward_log_det_jacobian`).
  
  In practice, Bijector methods are defined in the base-class, and users
  should not need to invoke `walk` methods directly.
code: def _parameter_properties(cls, dtype):
      def get_parameter_event_ndims(self, x_event_ndims):
          return nest.map_structure_up_to(
              self.bijectors,  # Recurse up to the BijectorWithMetadata tuples.
              lambda bm: bm.x_event_ndims,
              self._get_bijectors_with_metadata(  # pylint: disable=protected-access
                  event_ndims=x_event_ndims,
                  pack_as_original_structure=True,
              ),
          )
  
      return dict(
          bijectors=parameter_properties.BatchedComponentProperties(
              event_ndims=get_parameter_event_ndims
          )
      )
  
imports: import collections
  import functools
  import sys
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import bijector
  from tensorflow_probability.python.bijectors import ldj_ratio
  from tensorflow_probability.python.internal import assert_util
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import nest_util
  from tensorflow_probability.python.internal import parameter_properties
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow.python.ops import control_flow_util
  from tensorflow.python.util import nest
label_desc: Use image node_id 2 for calling the Composition obj's underlying member method code with example usage: obj._parameter_properties(cls, dtype) and returns: dict, nest