Previous Episode: TensorIterator

What is __torch_function__? Why would I want to use it? What does it have to do with keeping extra metadata on Tensors or torch.fx? How is it implemented? Why is __torch_function__ a really popular way of extending functionality in PyTorch? What makes it different from the dispatcher extensibility mechanism? What are some downsides of it being written this way? What are we doing about it?

Further reading.

__torch_function__ RFC: https://github.com/pytorch/rfcs/blob/master/RFC-0001-torch-function-for-methods.mdOne of the original GitHub issues tracking the overall design discussion https://github.com/pytorch/pytorch/issues/24015Documentation for using __torch_function__ https://pytorch.org/docs/stable/notes/extending.html#extending-torch