Summary:
Fixes https://github.com/pytorch/pytorch/issues/61137 by raising an error if an empty tuple is passed in for the names:
```
>>> torch.empty((2, 3), names=['a', 'b']).flatten((), 'abc')
RuntimeError: flatten(tensor, dims, out_dim): dims cannot be empty
```
or from the original issue:
```
>>> torch.empty((2, 3)).flatten((), 'abc')
RuntimeError: flatten(tensor, dims, out_dim): dims cannot be empty
```
Pull Request resolved: https://github.com/pytorch/pytorch/pull/61953
Reviewed By: iramazanli
Differential Revision:
D30574571
Pulled By: malfet
fbshipit-source-id:
e606e84458a8dd66e5da6d0eb1a260f37b4ce91b
Tensor flatten(const Tensor& self, DimnameList dims, Dimname out_dim) {
auto positions = dimnames_to_positions(self, dims);
+ TORCH_CHECK(positions.size() > 0,
+ "flatten(tensor, dims, out_dim): dims cannot be empty");
for (const auto i : c10::irange(positions.size() - 1)) {
if (positions[i] + 1 == positions[i + 1]) continue;
TORCH_CHECK(positions[i] + 1 == positions[i + 1],
with self.assertRaisesRegex(RuntimeError, "must be consecutive in"):
tensor.flatten(['H', 'D', 'W'], 'features')
+ def test_flatten_nodims(self):
+ tensor = torch.empty((2, 3))
+ with self.assertRaisesRegex(RuntimeError, "cannot be empty"):
+ tensor.flatten((), 'abcd')
+
def test_unflatten(self):
# test args: tensor, int, namedshape
self.assertTrue(torch.equal(