code: def testCompositeTensor(self, bijector_name, data):
      bijector, event_dim = self._draw_bijector(
          bijector_name,
          data,
          batch_shape=[],
          validate_args=True,
          allowed_bijectors=(
              set(bhps.INSTANTIABLE_BIJECTORS)
              - set(COMPOSITE_TENSOR_IS_BROKEN)
          ),
      )
  
      if (
          type(bijector) is invert_lib._Invert
      ):  # pylint: disable=unidiomatic-typecheck
          if isinstance(
              bijector.bijector, tf.__internal__.CompositeTensor
          ):
              raise TypeError(
                  "`_Invert` should wrap only non-`CompositeTensor` "
                  "bijectors."
              )
          self.skipTest(
              "`_Invert` bijectors are not `CompositeTensor`s."
          )
  
      self.assertIsInstance(bijector, tf.__internal__.CompositeTensor)
      flat = tf.nest.flatten(bijector, expand_composites=True)
      unflat = tf.nest.pack_sequence_as(
          bijector, flat, expand_composites=True
      )
  
      # Compare forward maps before and after compositing.
      n = 3
      xs = self._draw_domain_tensor(
          bijector, data, event_dim, sample_shape=[n]
      )
      before_ys = bijector.forward(xs)
      after_ys = unflat.forward(xs)
      self.assertAllClose(*self.evaluate((before_ys, after_ys)))
  
      # Compare inverse maps before and after compositing.
      ys = self._draw_codomain_tensor(
          bijector, data, event_dim, sample_shape=[n]
      )
      before_xs = bijector.inverse(ys)
      after_xs = unflat.inverse(ys)
      self.assertAllClose(*self.evaluate((before_xs, after_xs)))
  
      # Input to tf.function
      self.assertAllClose(
          before_ys,
          tf.function(lambda b: b.forward(xs))(bijector),
          rtol=COMPOSITE_TENSOR_RTOL[bijector_name],
          atol=COMPOSITE_TENSOR_ATOL[bijector_name],
      )
  
      # Forward mapping: Check differentiation through forward mapping with
      # respect to the input and parameter variables.  Also check that any
      # variables are not referenced overmuch.
      xs = self._draw_domain_tensor(bijector, data, event_dim)
      wrt_vars = [xs] + [
          v for v in bijector.trainable_variables if v.dtype.is_floating
      ]
      with tf.GradientTape() as tape:
          tape.watch(wrt_vars)
          # TODO(b/73073515): Fix graph mode gradients with bijector caching.
          ys = bijector.forward(xs + 0)
      grads = tape.gradient(ys, wrt_vars)
      assert_no_none_grad(bijector, "forward", wrt_vars, grads)
  
      self.assertConvertVariablesToTensorsWorks(bijector)
  
imports: import collections
  import functools
  from absl.testing import parameterized
  import hypothesis
  from hypothesis import strategies
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python import bijectors
  from tensorflow_probability.python import util
  from tensorflow_probability.python.bijectors import hypothesis_testlib
  from tensorflow_probability.python.bijectors import invert
  from tensorflow_probability.python.internal import auto_composite_tensor
  from tensorflow_probability.python.internal import hypothesis_testlib
  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.internal import tensorshape_util
  from tensorflow_probability.python.internal import test_util
  from tensorflow.python.util import nest
label_desc: Use image node_id 9 for calling the BijectorPropertiesTest obj's underlying member method code with example usage: obj.testCompositeTensor(bijector_name, data) without return types