Unfold / Fold
Block extraction (unfold) and block reassembly (fold) operations, supporting 1D/2D/3D with optional masking and Triton backends.
torchlinops.functional.unfold
unfold(
x: Shaped[Tensor, ...],
block_size: tuple,
stride: Optional[tuple] = None,
mask: Optional[Bool[Tensor, ...]] = None,
output: Optional[Tensor] = None,
) -> Tensor
Wrapper that dispatches complex and real tensors Also precomputes some shapes
| PARAMETER | DESCRIPTION |
|---|---|
x
|
Shape [B..., *im_size]
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
If mask is not None, block_size will be an int equal to the number of True elements in the mask Otherwise it will be the full block shape.
TYPE:
|
Source code in src/torchlinops/functional/_unfold/unfold.py
torchlinops.functional.fold
fold(
x,
im_size: tuple,
block_size: tuple,
stride: tuple,
mask: Optional[Bool[Tensor, ...]] = None,
output: Optional[Tensor] = None,
) -> Tensor
Accumulate an array of blocks into a full array
| PARAMETER | DESCRIPTION |
|---|---|
x
|
Shape [B..., blocks, block_size]
TYPE:
|
| RETURNS | DESCRIPTION |
|---|---|
Tensor
|
If mask is not None, block_size will be an int equal to the number of True elements in the mask Otherwise it will be the full block shape.
TYPE:
|
Source code in src/torchlinops/functional/_unfold/fold.py
torchlinops.functional.array_to_blocks
array_to_blocks(
input,
block_shape: tuple[int, ...],
stride: Optional[tuple[int, ...]] = None,
mask: Optional[Bool[Tensor, ...]] = None,
out: Optional[Tensor] = None,
)
Wrapper for default arguments
Source code in src/torchlinops/functional/_unfold/array_to_blocks.py
torchlinops.functional.blocks_to_array
blocks_to_array(
input,
im_size: tuple,
block_shape: tuple,
stride: Optional[tuple] = None,
mask: Optional[Bool[Tensor, ...]] = None,
out: Optional[Tensor] = None,
)
Wrapper for default arguments