code: def multi_dot(
      x: Sequence[Union[tf.Tensor, tf.Variable]],
      /,
      *,
      out: Optional[Union[tf.Tensor, tf.Variable]] = None,
  ) -> tf.Tensor:
      # This implementation simply chains tf.tensordot multiple times
      # TODO: reimplement this function once tf adds multi_dot or inplace updates
      if len(x) < 2:
          raise ValueError("Expecting at least two tensors.")
      dot_out = _reduce(tf.matmul, x)
      return dot_out
  
file_path: ivy/ivy/functional/backends/tensorflow/experimental/linear_algebra.py
imports: from typing import Union, Optional, Tuple, List, Sequence
  import tensorflow
  from functools import reduce
  import ivy
  from ivy.functional.ivy.experimental.linear_algebra import _check_valid_dimension_size
  from ivy.func_wrapper import with_unsupported_dtypes, with_supported_dtypes
  from ivy.utils.exceptions import IvyNotImplementedException
  from ..None import backend_version
label_desc: Use image node_id 9 for calling a global function with example usage: multi_dot() and returns: dot_out