(t: Type)
| 9828 | |
| 9829 | |
| 9830 | def equality_value_info(t: Type) -> EqualityValueInfo: |
| 9831 | t = get_proper_type(t) |
| 9832 | if isinstance(t, UnionType): |
| 9833 | return combine_equality_value_info(equality_value_info(item) for item in t.items) |
| 9834 | if isinstance(t, TypeVarType): |
| 9835 | if t.values: |
| 9836 | return combine_equality_value_info(equality_value_info(item) for item in t.values) |
| 9837 | return equality_value_info(t.upper_bound) |
| 9838 | if isinstance(t, Instance) and t.last_known_value is not None: |
| 9839 | return equality_value_info(t.last_known_value) |
| 9840 | if isinstance(t, LiteralType): |
| 9841 | return equality_value_info(t.fallback) |
| 9842 | if isinstance(t, Instance): |
| 9843 | if t.type.fullname == "builtins.object": |
| 9844 | return EqualityValueInfo({}, is_top=True) |
| 9845 | |
| 9846 | enum_type_names = {t.type.fullname} if t.type.is_enum else set() |
| 9847 | domains = {} |
| 9848 | for base in t.type.mro: |
| 9849 | if domain := VALUE_EQUALITY_DOMAINS.get(base.fullname): |
| 9850 | domains[domain] = EqualityDomainInfo({t.type.fullname}, enum_type_names) |
| 9851 | |
| 9852 | return EqualityValueInfo(domains, is_top=False) |
| 9853 | if isinstance(t, AnyType): |
| 9854 | return EqualityValueInfo({}, is_top=True) |
| 9855 | return EqualityValueInfo({}, is_top=False) |
| 9856 | |
| 9857 | |
| 9858 | def combine_equality_value_info(infos: Iterable[EqualityValueInfo]) -> EqualityValueInfo: |
no test coverage detected
searching dependent graphs…