code: def stable_softmax(
      logits: tf.Tensor,
      axis: Optional[int] = None,
      name: Optional[str] = None,
  ) -> tf.Tensor:
      """
      Stable wrapper that returns the same output as `tf.nn.softmax`, but that works reliably with XLA on CPU. It is
      meant as a workaround for the [following issue](https://github.com/tensorflow/tensorflow/issues/55682), and will be
      removed after it gets fixed. The arguments and outputs are the same as `tf.nn.softmax`, and relies on the fact that
      `softmax(x) = softmax(x + c)` (see https://ogunlao.github.io/2020/04/26/you_dont_really_know_softmax.html).
  
      Args:
          logits (`tf.Tensor`):
              Must be one of the following types: half, float32, float64.
          axis (`int`, *optional*):
              The dimension softmax would be performed on. The default is -1 which indicates the last dimension.
          name (`str`, *optional*):
              A name for the operation.
  
      Returns:
          `tf.Tensor`:
              A Tensor. Has the same type and shape as logits.
      """
      # TODO: When the issue linked above gets sorted, add a check on TF version here and use the original function if
      # it has the fix. After we drop the support for unfixed versions, remove this function.
      return tf.nn.softmax(logits=logits + 1e-9, axis=axis, name=name)
  
imports: from typing import List, Optional, Union
  import numpy
  import tensorflow
  from .utils import logging
label_desc: Use image node_id 2 for calling a global function with example usage: stable_softmax(logits, axis, name) and returns: tf