Tensor.contiguous, Tensor.is_contiguous batch rule (#47621)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/47621
Followup to #47365.
is_contiguous on BatchedTensorImpl is implemented as:
- Whenever one creates a BatchedTensorImpl, we cache the strides of the
per-examples, just like how we cache the sizes of the per-examples.
- With the cached strides, we use TensorImpl::refresh_contiguous() to
compute if the tensor is contiguous or not.
- is_contiguous checks the `is_contiguous_` flag that
refresh_contiguous() populates.
Both contiguous and is_contiguous only support torch.contiguous_format.
I'm not sure what the semantics should be for other memory formats; they
are also rank dependent (e.g., channels_last tensor must have 4
dimensions) which makes this a bit tricky.
Test Plan: - new tests
Reviewed By: Chillee, anjali411
Differential Revision: D24840975
Pulled By: zou3519
fbshipit-source-id: 4d86dbf11e2eec45f3f08300ae3f2d79615bb99d