code: def symmetrized_csiszar_function(logu, csiszar_function, name=None):
      """Symmetrizes a Csiszar-function in log-space.
  
      A Csiszar-function is a member of,
  
      ```none
      F = { f:R_+ to R : f convex }.
      ```
  
      The symmetrized Csiszar-function is defined as:
  
      ```none
      f_g(u) = 0.5 g(u) + 0.5 u g (1 / u)
      ```
  
      where `g` is some other Csiszar-function.
  
      We say the function is "symmetrized" because:
  
      ```none
      D_{f_g}[p, q] = D_{f_g}[q, p]
      ```
  
      for all `p << >> q` (i.e., `support(p) = support(q)`).
  
      There exists alternatives for symmetrizing a Csiszar-function. For example,
  
      ```none
      f_g(u) = max(f(u), f^*(u)),
      ```
  
      where `f^*` is the dual Csiszar-function, also implies a symmetric
      f-Divergence.
  
      Example:
  
      When either of the following functions are symmetrized, we obtain the
      Jensen-Shannon Csiszar-function, i.e.,
  
      ```none
      g(u) = -log(u) - (1 + u) log((1 + u) / 2) + u - 1
      h(u) = log(4) + 2 u log(u / (1 + u))
      ```
  
      implies,
  
      ```none
      f_g(u) = f_h(u) = u log(u) - (1 + u) log((1 + u) / 2)
             = jensen_shannon(log(u)).
      ```
  
      Warning: this function makes non-log-space calculations and may therefore be
      numerically unstable for `|logu| >> 0`.
  
      Args:
        logu: `float`-like `Tensor` representing `log(u)` from above.
        csiszar_function: Python `callable` representing a Csiszar-function over
          log-domain.
        name: Python `str` name prefixed to Ops created by this function.
  
      Returns:
        symmetrized_g_of_u: `float`-like `Tensor` of the result of applying the
          symmetrization of `g` evaluated at `u = exp(logu)`.
      """
  
      with tf.name_scope(name or "symmetrized_csiszar_function"):
          logu = tf.convert_to_tensor(logu, name="logu")
          return 0.5 * (
              csiszar_function(logu)
              + dual_csiszar_function(logu, csiszar_function)
          )
  
imports: import enum
  import functools
  import warnings
  import numpy
  import tensorflow.compat.v2
  from tensorflow_probability.python import monte_carlo
  from tensorflow_probability.python.internal import dtype_util
  from tensorflow_probability.python.internal import nest_util
  from tensorflow_probability.python.internal import prefer_static
  from tensorflow_probability.python.internal import samplers
  from tensorflow_probability.python.internal.reparameterization import FULLY_REPARAMETERIZED
  from tensorflow_probability.python.stats.leave_one_out import log_soomean_exp
  from tensorflow.python.util import deprecation
label_desc: Use image node_id 17 for calling a global function with example usage: symmetrized_csiszar_function(logu, csiszar_function, name) and returns: unknown