[[ 2.8153,  1.8787, -4.3839, -1.2112],
              [ 0.3728, -2.1131,  0.0921,  0.8305]]])
  >>> # with sublist format and ellipsis
  >>> torch.einsum(As, [..., 0, 1], Bs, [..., 1, 2], [..., 0, 2])
  tensor([[[-1.0564, -1.5904,  3.2023,  3.1271],
          [-1.6706, -0.8097, -0.8025, -2.1183]],

          [[ 4.2239,  0.3107, -0.5756, -0.2354],
          [-1.4558, -0.3460,  1.5087, -0.8530]],

          [[ 2.8153,  1.8787, -4.3839, -1.2112],
          [ 0.3728, -2.1131,  0.0921,  0.8305]]])

  >>> # batch permute
  >>> A = torch.randn(2, 3, 4, 5)
  >>> torch.einsum('...ij->...ji', A).shape
  torch.Size([2, 3, 5, 4])

  >>> # equivalent to torch.nn.functional.bilinear
  >>> A = torch.randn(3, 5, 4)
  >>> l = torch.randn(2, 5)
  >>> r = torch.randn(2, 4)
  >>> torch.einsum('bn,anm,bm->ba', l, A, r)
  tensor([[-0.3430, -5.2405,  0.4494],
          [ 0.3311,  5.5201, -3.0356]])
