code: def jd_coroutine():
      d0, d1, d2, d3 = part_dists()
  
      root = jdc.JointDistributionCoroutine.Root
  
      @jdc.JointDistributionCoroutine
      def model():
          w = yield root(d0)
          x = yield root(d1)
          y = yield d2(x)
          yield d3(y, x, w)
  
      return model
  
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 2 for calling a global function with example usage: jd_coroutine() and returns: model