base.py 文件源码

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

项目:pyta 作者: pyta-uoft 项目源码 文件源码
def can_unify(self, t1, t2):
        """Return true iff given argument types can be unified."""
        if isinstance(t1, TypeVar) or isinstance(t2, TypeVar):
            return True
        elif isinstance(t1, GenericMeta) and isinstance(t2, GenericMeta):
            if _gorg(t1) is not _gorg(t2):
                return False
            elif t1.__args__ is not None and t2.__args__ is not None:
                for a1, a2 in zip(t1.__args__, t2.__args__):
                    if not self.can_unify(a1, a2):
                        return False
                return True
            else:
                return False
        elif isinstance(t1, GenericMeta):
            return False
        elif isinstance(t2, GenericMeta):
            return False
        elif t1.__class__.__name__ == '_Union' and t2.__class__.__name__ == 'Union':
            for union_type in t1.__args__:
                if union_type in t2.__args__:
                    return True
            else:
                return False
        elif t1.__class__.__name__ == '_Union':
            if t2 in t1.__args__:
                return True
            else:
                return False
        elif t2.__class__.__name__ == '_Union':
            if t1 in t2.__args__:
                return True
            else:
                return False
        elif t1 == Any or t2 == Any:
            return True
        elif (hasattr(t1, 'msg') and ('not found' in t1.msg)) or (hasattr(t2, 'msg') and ('not found' in t2.msg)):
            return False
        elif isinstance(t1, _ForwardRef) and isinstance(t2, _ForwardRef) and t1 == t2:
            return True
        elif isinstance(t1, _ForwardRef) or isinstance(t2, _ForwardRef):
            return False
        elif issubclass(t1, t2) or issubclass(t2, t1):
            return True
        elif t1 != t2:
            return False
        else:
            return True
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号