means for the inputs to be aligned.

Propagate names: result names are obtained by unifying the batch
  dimensions and removing the contracted dimensions:
  "unify(tensor.names[:-2], other.names[:-2]) + (tensor.names[-2],
  other.names[-1])".

Examples:
# Batch matrix multiply of matrices Tensor['C', 'D'] and Tensor['E', 'F'].
   # 'A', 'B' are batch dimensions.



x = torch.randn(3, 3, 3, 3, names=('A', 'B', 'C', 'D'))
y = torch.randn(3, 3, 3, names=('B', 'E', 'F'))
torch.matmul(x, y).names
   ('A', 'B', 'C', 'F')



Finally, there are fused "add" versions of many matmul functions.
i.e., "addmm()" and "addmv()". These are treated as composing name
inference for i.e. "mm()" and name inference for "add()".
Factory functions
Factory functions now take a new "names" argument that associates a
name with each dimension.



torch.zeros(2, 3, names=('N', 'C'))
   tensor([[0., 0., 0.],
           [0., 0., 0.]], names=('N', 'C'))



out function and in-place variants