pytorch
4d72538f - Give Tensor a trivial (for now) metaclass _TensorMeta (#56147)

Commit
3 years ago
Give Tensor a trivial (for now) metaclass _TensorMeta (#56147) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/56147 This is support of #55686, you can see the broader context of the metaclass in a more complete PR #56017. The short story is that in the future I want to give Tensor a non-trivial metaclass, so to derisk the change first I give it a trivial metaclass to shake out any bugs that might be caused by it. The metaclass shouldn't have any performance impact on Tensor as it only gets invoked upon subclass creation. By the way, it was totally not documented how to create metaclasses in the Python C API, and it took a good bit of trial error to figure it out (and the answer is now immortalized in https://stackoverflow.com/q/67077317/23845 -- the things that I got wrong in earlier versions of the PR included setting tp_basicsize incorrectly, incorrectly setting Py_TPFLAGS_HAVE_GC on the metaclass--you want to leave it unset so that it inherits, and determining that tp_init is what actually gets called when you construct a class, not tp_call as another not-to-be-named StackOverflow question suggests). Aside: Ordinarily, adding a metaclass to a class is a user visible change, as it means that it is no longer valid to mixin another class with a different metaclass. However, because _C._TensorBase is a C extension object, it will typically conflict with most other metaclasses, so this is not BC breaking. Signed-off-by: Edward Z. Yang <ezyang@fb.com> Test Plan: Imported from OSS Reviewed By: H-Huang Differential Revision: D28028747 Pulled By: ezyang fbshipit-source-id: c1e35a986aeb3db540c73d188f53dce951eeed33
Author
Parents
Loading