pytorch
b58a7c95 - [DataLoader] Raise detailed Error for ForwardRef type (#57824)

Commit
4 years ago
[DataLoader] Raise detailed Error for ForwardRef type (#57824) Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/57824 Implement type check for string type. Re-raise detailed exception at compile time. ```py >>> class InvalidData(Generic[T_co], NamedTuple): # Invalid generic namedtuple in Python typing ... name: str ... data: T_co class DP(IterDataPipe['InvalidData[int]']): ... pass TypeError: InvalidData[int] is not supported by Python typing ``` Add `__type_class__` attribute to class, which optimizes the static checking flow by reducing checking times. ```py >>> class DP1(IterDataPipe[Union[int, str]]): ... pass >>> class DP2(DP1[int]): ... pass >>> list((cls, getattr(cls, '__type_class__', None)) for cls in DP2.__mro__) [(<class '__main__.DP2'>, False), (<class 'abc.DP1[int]'>, True), (<class '__main__.DP1'>, False), (<class 'abc.IterableDataset[typing.Union[int, str]]'>, True), (<class 'torch.utils.data.dataset.IterableDataset'>, False), (<class 'torch.utils.data.dataset.Dataset'>, None), (<class 'typing.Generic'>, None), (<class 'object'>, None)] ``` Among the class of `DP2`'s MRO, only `DP2`, `DP1` will be static checked when `__type_class__` is `False`. `abc.DP1[int]` and `abc.IterableDataset[typing.Union[int, str]]` will be ignored since they are just a class with typing. ## Future When Python 3.6 is deprecated, using TypeAlias rather than TypeMeta can eliminates the usage of `__type_class__` attribute. Test Plan: Imported from OSS Reviewed By: VitalyFedyunin Differential Revision: D28289104 Pulled By: ejguan fbshipit-source-id: 1da97460c8bfc48cea7396033fde484a24caba7c
Author
Parents
Loading