'shape' of the ellipsis (the size of the dimensions covered by
      them) must broadcast together. If the output is not explicitly
      defined with the arrow ('->') notation, the ellipsis will come
      first in the output (left-most dimensions), before the subscript
      labels that appear exactly once for the input operands. e.g. the
      following equation implements batch matrix multiplication
      '...ij,...jk'.
  A few final notes: the equation may contain whitespaces between
  the different elements (subscripts, ellipsis, arrow and comma)
  but something like *'. . .'* is not valid. An empty string *''*
  is valid for scalar operands.

Note:
 "torch.einsum" handles ellipsis ('...') differently from NumPy in
 that it allows dimensions covered by the ellipsis to be summed
 over, that is, ellipsis are not required to be part of the
 output.

Note:
 This function uses opt_einsum (https://optimized-
