out function and in-place variants
A tensor specified as an "out=" tensor has the following behavior:


If it has no named dimensions, then the names computed from the
  operation get propagated to it.


If it has any named dimensions, then the names computed from the
  operation must be exactly equal to the existing names. Otherwise,
  the operation errors.


All in-place methods modify inputs to have names equal to the computed
names from name inference. For example:



x = torch.randn(3, 3)
y = torch.randn(3, 3, names=('N', 'C'))
x.names
   (None, None)
x += y
x.names
   ('N', 'C')


