code: def test_str(self):
      @jdc.JointDistributionCoroutine
      def model():
          x = yield Root(
              mvn_diag.MultivariateNormalDiag(
                  tf.zeros([10, 3]), tf.ones(3), name="x"
              )
          )
          yield multinomial.Multinomial(
              logits=pad.Pad([[0, 1]])(x), total_count=13, name="y"
          )
  
      self.assertEqual(
          "tfp.distributions.JointDistributionPinned("
          '"PinnedJointDistributionCoroutine", '
          "batch_shape=StructTuple(\n  x=[10]\n), "
          "event_shape=StructTuple(\n  x=[3]\n), "
          "dtype=StructTuple(\n  x=float32\n))",
          str(jdp.JointDistributionPinned(model, y=tf.zeros([10, 4]))),
      )
  
      @functools.partial(
          jdab.JointDistributionCoroutineAutoBatched, batch_ndims=1
      )
      def model_ab():
          x = yield Root(
              mvn_diag.MultivariateNormalDiag(
                  tf.zeros([10, 3]), tf.ones(3), name="x"
              )
          )
          yield multinomial.Multinomial(
              logits=pad.Pad([[0, 1]])(x), total_count=13, name="y"
          )
  
      self.assertEqual(
          "tfp.distributions.JointDistributionPinned("
          '"PinnedJointDistributionCoroutineAutoBatched", '
          "batch_shape=[10], "
          "event_shape=StructTuple(\n  x=[3]\n), "
          "dtype=StructTuple(\n  x=float32\n))",
          str(
              jdp.JointDistributionPinned(model_ab, y=tf.zeros([10, 4]))
          ),
      )
  
imports: import collections
  import functools
  from absl.testing import parameterized
  import numpy
  import tensorflow.compat.v1
  import tensorflow.compat.v2
  from tensorflow_probability.python.bijectors import pad
  from tensorflow_probability.python.distributions import beta
  from tensorflow_probability.python.distributions import binomial
  from tensorflow_probability.python.distributions import cholesky_lkj
  from tensorflow_probability.python.distributions import gamma
  from tensorflow_probability.python.distributions import independent
  from tensorflow_probability.python.distributions import joint_distribution_auto_batched
  from tensorflow_probability.python.distributions import joint_distribution_coroutine
  from tensorflow_probability.python.distributions import joint_distribution_named
  from tensorflow_probability.python.distributions import joint_distribution_sequential
  from tensorflow_probability.python.distributions import multinomial
  from tensorflow_probability.python.distributions import mvn_diag
  from tensorflow_probability.python.distributions import normal
  from tensorflow_probability.python.distributions import sample
  from tensorflow_probability.python.distributions import uniform
  from tensorflow_probability.python.experimental.distributions import increment_log_prob
  from tensorflow_probability.python.experimental.distributions import joint_distribution_pinned
  from tensorflow_probability.python.internal import structural_tuple
  from tensorflow_probability.python.internal import test_util
  from tensorflow_probability.python.math import generic
label_desc: Use image node_id 14 for calling the JointDistributionPinnedTest obj's underlying member method code with example usage: obj.test_str() without return types