code: def testParameterProperties(self, bijector_name, data):
      if (
          tf.config.functions_run_eagerly()
          or not tf.executing_eagerly()
      ):
          self.skipTest(
              "To reduce test weight, parameter properties tests run in "
              "eager mode only."
          )
  
      non_trainable_params = (
          "bijector",  # Several.
          "forward_fn",  # Inline.
          "inverse_fn",  # Inline.
          "forward_min_event_ndims",  # Inline.
          "inverse_min_event_ndims",  # Inline.
          "event_shape_out",  # Reshape.
          "event_shape_in",  # Reshape.
          "perm",  # Transpose.
          "rightmost_transposed_ndims",  # Transpose.
          "diag_bijector",  # TransformDiagonal.
          "diag_shift",  # FillScaleTriL (doesn't support batch shape).
      )
      bijector, event_dim = self._draw_bijector(
          bijector_name,
          data,
          validate_args=True,
          allowed_bijectors=bhps.INSTANTIABLE_BIJECTORS,
      )
  
      # Extract the full shape of an output from this bijector.
      xs = self._draw_domain_tensor(bijector, data, event_dim)
      ys = bijector.forward(xs)
      output_shape = ps.shape(ys)
      sample_and_batch_ndims = (
          ps.rank_from_shape(output_shape)
          - bijector.inverse_min_event_ndims
      )
  
      try:
          params = type(bijector).parameter_properties()
          params64 = type(bijector).parameter_properties(
              dtype=tf.float64
          )
      except NotImplementedError as e:
          self.skipTest(str(e))
  
      seeds = samplers.split_seed(test_util.test_seed(), n=len(params))
      new_parameters = {}
      for i, (param_name, param) in enumerate(params.items()):
          if param_name in non_trainable_params:
              continue
  
          # Check that the shape_fn is consistent with event_ndims.
          try:
              param_shape = param.shape_fn(sample_shape=output_shape)
          except NotImplementedError:
              self.skipTest(
                  "No shape function implemented for bijector {} "
                  "parameter {}.".format(bijector_name, param_name)
              )
          self.assertGreaterEqual(
              param.event_ndims,
              ps.rank_from_shape(param_shape) - sample_and_batch_ndims,
          )
  
          if param.is_preferred:
              try:
                  param_bijector = (
                      param.default_constraining_bijector_fn()
                  )
              except NotImplementedError:
                  self.skipTest(
                      "No constraining bijector implemented for {} "
                      "parameter {}.".format(bijector_name, param_name)
                  )
              unconstrained_shape = (
                  param_bijector.inverse_event_shape_tensor(param_shape)
              )
              unconstrained_param = samplers.normal(
                  unconstrained_shape, seed=seeds[i]
              )
              new_parameters[param_name] = param_bijector.forward(
                  unconstrained_param
              )
  
              # Check that passing a float64 `eps` works with float64 parameters.
              b_float64 = params64[
                  param_name
              ].default_constraining_bijector_fn()
              b_float64(tf.cast(unconstrained_param, tf.float64))
  
      # Copy over any non-trainable parameters.
      new_parameters.update(
          {
              k: v
              for (k, v) in bijector.parameters.items()
              if k in non_trainable_params
          }
      )
  
      # Sanity check that we got valid parameters.
      new_parameters["validate_args"] = True
      new_bijector = type(bijector)(**new_parameters)
      self.evaluate(
          tf.group(*[v.initializer for v in new_bijector.variables])
      )
      xs = self._draw_domain_tensor(new_bijector, data, event_dim)
      self.evaluate(new_bijector.forward(xs))
  
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 5 for calling the BijectorPropertiesTest obj's underlying member method code with example usage: obj.testParameterProperties(bijector_name, data) without return types