base.py 文件源码

python
阅读 22 收藏 0 点赞 0 评论 0

项目:pyta 作者: pyta-uoft 项目源码 文件源码
def unify(self, t1, t2):
        if isinstance(t1, TypeVar) and isinstance(t2, TypeVar):
            if t1 == t2:
                # TODO: look into implementation of  __eq__ TVARS
                pass
            else:
                node1, node2 = self._tvar_tnode[t1], self._tvar_tnode[t2]
                self._union(node1, node2)
        elif isinstance(t1, TypeVar):
            node2 = self.add_concrete_to_sets(t2)
            node1 = self._tvar_tnode[t1]
            self._union(node1, node2)
        elif isinstance(t2, TypeVar):
            self.unify(t2, t1)
        elif isinstance(t1, GenericMeta) and isinstance(t2, GenericMeta):
            self._unify_generic(t1, t2)
        elif isinstance(t1, CallableMeta) and isinstance(t2, CallableMeta):
            rtype = self.unify_call(t1, *t2.__args__[:-1])
            self.unify(rtype, t2.__args__[-1])
        elif isinstance(t1, TupleMeta) and isinstance(t2, TupleMeta):
            self._unify_tuple(t1, t2)
        elif t1.__class__.__name__ == '_Union' or t2.__class__.__name__ == '_Union':
            pass
        elif t1 == Any or t2 == Any:
            pass
        elif isinstance(t1, _ForwardRef) and isinstance(t2, _ForwardRef) and t1 == t2:
            pass
        elif isinstance(t1, _ForwardRef) or isinstance(t2, _ForwardRef):
            raise Exception(str(t1) + ' ' + str(t2))
        elif issubclass(t1, t2) or issubclass(t2, t1):
            pass
        elif t1 != t2:
            raise TypeInferenceError(str(t1) + ' ' + str(t2))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号