code: def eigvalsh(
      x: Union[tf.Tensor, tf.Variable],
      /,
      *,
      UPLO: str = "L",
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> Union[tf.Tensor, tf.Variable]:
      if UPLO not in ("L", "U"):
          raise ValueError("UPLO argument must be 'L' or 'U'")
  
      if UPLO == "L":
          return tf.linalg.eigh(x)[0]
      elif UPLO == "U":
          axes = list(range(len(x.shape) - 2)) + [
              len(x.shape) - 1,
              len(x.shape) - 2,
          ]
          ret = tf.linalg.eigh(tf.transpose(x, perm=axes))[0]
          return ret
  
imports: from typing import Union, Optional, Tuple, Literal, List, NamedTuple, Sequence
  from collections import namedtuple
  import tensorflow
  from tensorflow.python.framework.dtypes import DType
  import ivy
  from ivy import inf
  from ivy.func_wrapper import with_unsupported_dtypes, with_supported_dtypes
  from .None import backend_version
label_desc: Use image node_id 7 for calling a global function with example usage: eigvalsh() and returns: tf, ret