def modified_gan(logu, self_normalized=False, name=None):
with tf.compat.v1.name_scope(name, "<STR_LIT>", [logu]):<EOL><INDENT>logu = tf.convert_to_tensor(value=logu, name="<STR_LIT>")<EOL>y = tf.nn.softplus(logu) - logu<EOL>if self_normalized:<EOL><INDENT>y += <NUM_LIT:0.5> * tf.math.expm1(logu)<EOL><DEDENT>return y<EOL><DEDENT>
The Modified-GAN Csiszar-function in log-space.

    A Csiszar-function is a member of,

    ```none
    F = { f:R_+ to R : f convex }.
    ```

    When `self_normalized = True` the modified-GAN (Generative/Adversarial
    Network) Csiszar-function is:

    ```none
    f(u) = log(1 + u) - log(u) + 0.5 (u - 1)
    ```

    When `self_normalized = False` the `0.5 (u - 1)` is omitted.

    The unmodified GAN Csiszar-function is identical to Jensen-Shannon (with
    `self_normalized = False`).

    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.
      self_normalized: Python `bool` indicating whether `f'(u=1)=0`. When
        `f'(u=1)=0` the implied Csiszar f-Divergence remains non-negative even
        when `p, q` are unnormalized measures.
      name: Python `str` name prefixed to Ops created by this function.

    Returns:
      chi_square_of_u: `float`-like `Tensor` of the Csiszar-function evaluated
        at `u = exp(logu)`.