code: def get_log_joint(cond_set):
      g = tf.get_default_graph()
      cond_set_names = [i.name[:-1] for i in cond_set]
      cond_set_names.sort()
      cond_set_name = "log_joint_of_" + "_".join(cond_set_names)
      with tf.name_scope("conjugate_log_joint/") as scope:
          try:
              # Use log joint tensor if already built in graph.
              return g.get_tensor_by_name(scope + cond_set_name + ":0")
          except:
              pass
  
          terms = []
          for b in cond_set:
              name = b.name.replace(":", "_") + "_conjugate_log_prob"
              try:
                  # Use log prob tensor if already built in graph.
                  conjugate_log_prob = g.get_tensor_by_name(
                      scope + name + ":0"
                  )
              except:
                  if getattr(b, "conjugate_log_prob", None) is None:
                      raise NotImplementedError(
                          "conjugate_log_prob not implemented for"
                          " {}".format(type(b))
                      )
                  conjugate_log_prob = tf.reduce_sum(
                      b.conjugate_log_prob(), name=name
                  )
  
              terms.append(conjugate_log_prob)
  
          result = tf.add_n(terms, name=cond_set_name)
          return result
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import edward.inferences.conjugacy.conjugate_log_probs
  import numpy
  import six
  import tensorflow
  import time
  from collections import defaultdict
  from edward.inferences.conjugacy.simplify import symbolic_suff_stat, full_simplify, expr_contains, reconstruct_expr
  from edward.models.random_variables import *
  from edward.util import copy, get_blanket
label_desc: Use image node_id 4 for calling a global function with example usage: get_log_joint(cond_set) and returns: result, g