code: def find_output_shape(
      inputs: List[str], shapes: List[TensorShapeType], output: str
  ) -> TensorShapeType:
      """Find the output shape for given inputs, shapes and output string, taking
      into account broadcasting.
  
      Examples
      --------
      >>> oe.parser.find_output_shape(["ab", "bc"], [(2, 3), (3, 4)], "ac")
      (2, 4)
  
      # Broadcasting is accounted for
      >>> oe.parser.find_output_shape(["a", "a"], [(4, ), (1, )], "a")
      (4,)
      """
      return tuple(
          max(
              shape[loc]
              for shape, loc in zip(shapes, [x.find(c) for x in inputs])
              if loc >= 0
          )
          for c in output
      )
  
file_path: ivy/ivy/utils/einsum_parser.py
imports: import itertools
  from typing import Any, Dict, Iterator, List, Tuple, Union
  import numpy
label_desc: Use image node_id 6 for calling a global function with example usage: find_output_shape(inputs, shapes, output) and returns: tuple