torch-mlir/lib/Conversion/TorchToLinalg
Stephen Baione d49eabb3fc
Add Op for `torch.aten.unfold` (#3772)
# Description

Implementation of the op for `torch.aten.unfold`: [TorchToLinalg Op
Support #347](https://github.com/nod-ai/SHARK-ModelDev/issues/849)

Documentation of op can be found here: [PyTorch
Docs](https://pytorch.org/docs/stable/generated/torch.Tensor.unfold.html)

For this op, we apply a sliding window of some `size` along a single
`dimension`, with `step` in between iterations.

`Declaration: aten::unfold(Tensor(a) self, int dimension, int size, int
step) -> Tensor(a)`

The resulting `unfolded` tensor modifies the shape of `dimension` to be
equal to the number of blocks that the sliding windows extracts/inserts,
with an additional dimension of `size` appended (the number of cols of
the output tensor directly translates from the size of the sliding
window).

So if we had a tensor of rank 3 (A x B x C), with dimension = 1, size =
2 and step = 2:

    (A x B x C) |=> (A x (B - size) // step + 1 x C x size)

After extracting the window from the input tensor, we insert the (1 x
size) slice into the output tensor. We can make this simpler by mapping
the output indices from the input indices, like they do in the official
implementation:

[PyTorch
Code](https://github.com/pytorch/pytorch/blob/main/torch/_inductor/lowering.py#L1694)
2024-10-08 21:10:43 +00:00
..
CMakeLists.txt Re-organize project structure to separate PyTorch dependencies from core project. (#2542) 2023-11-02 19:45:55 -07:00
DataMovement.cpp Add Op for `torch.aten.unfold` (#3772) 2024-10-08 21:10:43 +00:00
IndirectDataMovement.cpp [NFC] Change to *cast instead of .*cast variants (#3405) 2024-05-30 23:45:13 -07:00
Linear.cpp [MLIR][TORCH] Add support for 1-d group convolution (#3770) 2024-10-08 10:48:47 +05:30
Pooling.cpp [TorchToLinalg] Support lowering MaxPool3dWithIndices (#3652) 2024-08-27 14:14:25 -05:00
PopulatePatterns.h Re-enable custom op support 2022-08-16 22:49:08 +05:30
Random.cpp [TorchToLinalg] address a dtype mismatch in `aten.multinomial` lowering (#3630) 2024-08-20 15:14:48 -05:00
Reduction.cpp [NFC] Change to *cast instead of .*cast variants (#3405) 2024-05-30 23:45:13 -07:00
TensorConstructors.cpp Adds misc fixes for some padding related issues (#3528) 2024-07-11 20:01:45 -05:00
TensorScalarInterop.cpp [NFC] Change to *cast instead of .*cast variants (#3405) 2024-05-30 23:45:13 -07:00
TorchToLinalg.cpp [TorchToLinalg][ONNX] Add Basic Determinant Support (#3481) 2024-06-25 13:34:19 -05:00
Uncategorized.cpp Revert "[TorchToLinalg] perform rank0 elementwise computations outside linalg generic ops (#3762)" (#3767) 2024-10-04 14:48:02 -07:00
Utils.cpp [MLIR][TORCH] Add support for negative step in aten.slice.Tensor op (#3763) 2024-10-08 10:34:27 +05:30