[PyTorch Edge][type] Add type support for NamedTuple custom class (import) (#63130)
Summary:
Pull Request resolved: https://github.com/pytorch/pytorch/pull/63130
Extend `type_parser` to handle `NamedTuple` type. It can be extended to handle other types when needed. The custom type will follow the following format:
```
"qualified_named[
NamedTuple, [
[filed_name_1, field_type_1],
[filed_name_2, field_type_2]
]
]"
```
For example:
```
"__torch__.base_models.sparse_nn.pytorch_preproc_types.PreprocOutputType[
NamedTuple, [
[float_features, Tensor],
[id_list_features, List[Tensor]],
[label, Tensor],
[weight, Tensor],
]
]"
```
For nested types, the order of type lists from type table should be:
```
std::string type_1 = “__torch__.C [
NamedTuple, [
[field_name_c_1, Tensor],
[field_name_c_2, Tuple[Tensor, Tensor]],
]
]”
std::string type_2 = “__torch__.B [
NamedTuple, [
[field_name_b, __torch__.C ]
]
]”
std::string type_3 = “__torch__.A[
NamedTuple, [
[field_name_a, __torch__.B]
]
]”
std::vector<std::string> type_strs = {type_str_1, type_str_2, type_3};
std::vector<TypePtr> type_ptrs = c10::parseType(type_strs);
```
namedtuple from both `collection` and `typing` are supported
```
from typing import NamedTuple
from collections import namedtuple
```
This change only adds the parser and now new runtime can read the above format.
ghstack-source-id: 141293658
Test Plan:
```
buck test mode/dev //caffe2/test/cpp/jit:jit -- --exact 'caffe2/test/cpp/jit:jit - LiteInterpreterTest.CompatiblePrimitiveType'
buck test mode/dev //caffe2/test/cpp/jit:jit -- --exact 'caffe2/test/cpp/jit:jit - LiteInterpreterTest.CompatibleCustomType'
buck test mode/dev //caffe2/test/cpp/jit:jit -- --exact 'caffe2/test/cpp/jit:jit - LiteInterpreterTest.InCompatiblePrimitiveType'
buck test mode/dev //caffe2/test/cpp/jit:jit -- --exact 'caffe2/test/cpp/jit:jit - LiteInterpreterTest.InCompatibleCustomType'
```
Reviewed By: iseeyuan
Differential Revision: D30261547
fbshipit-source-id: 68a9974338464e320b39a5c613dc048f6c5adeb5