Skip to content

Commit 586d2a1

Browse files
committed
fix
1 parent 92051d9 commit 586d2a1

File tree

2 files changed

+22
-16
lines changed

2 files changed

+22
-16
lines changed

mypy/checker.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6549,6 +6549,7 @@ def comparison_type_narrowing_helper(self, node: ComparisonExpr) -> tuple[TypeMa
65496549
and not is_false_literal(expr)
65506550
and not is_true_literal(expr)
65516551
and not self.is_literal_enum(expr)
6552+
and not (isinstance(expr_type, CallableType) and expr_type.is_type_obj())
65526553
):
65536554
h = literal_hash(expr)
65546555
if h is not None:
@@ -6658,11 +6659,7 @@ def equality_type_narrowing_helper(
66586659
# If we haven't been able to narrow types yet, we might be dealing with a
66596660
# explicit type(x) == some_type check
66606661
if_map, else_map = self.narrow_type_by_equality(
6661-
operator,
6662-
operands,
6663-
operand_types,
6664-
expr_indices,
6665-
narrowable_indices=narrowable_indices,
6662+
operator, operands, operand_types, expr_indices, narrowable_indices=narrowable_indices
66666663
)
66676664
if node is not None:
66686665
type_if_map, type_else_map = self.find_type_equals_check(node, expr_indices)
@@ -6962,12 +6959,12 @@ def refine_identity_comparison_expression(
69626959
else:
69636960
type_targets.append((i, TypeRange(expr_type, is_upper_bound=False)))
69646961

6965-
# print = lambda *a: None
6966-
# print()
6967-
# print("operands", operands)
6968-
# print("operand_types", operand_types)
6969-
# print("operator_specific_targets", operator_specific_targets)
6970-
# print("type_targets", type_targets)
6962+
if False:
6963+
print()
6964+
print("operands", operands)
6965+
print("operand_types", operand_types)
6966+
print("operator_specific_targets", operator_specific_targets)
6967+
print("type_targets", type_targets)
69716968

69726969
partial_type_maps = []
69736970

@@ -7000,9 +6997,18 @@ def refine_identity_comparison_expression(
70006997
else_map = {}
70016998
partial_type_maps.append((if_map, else_map))
70026999

7003-
final_if_map, final_else_map = reduce_conditional_maps(partial_type_maps, use_meet=len(operands) > 2)
7004-
# print("final_if_map", {str(k): str(v) for k, v in final_if_map.items()})
7005-
# print("final_else_map", {str(k): str(v) for k, v in final_else_map.items()})
7000+
final_if_map, final_else_map = reduce_conditional_maps(
7001+
partial_type_maps, use_meet=len(operands) > 2
7002+
)
7003+
if False:
7004+
print(
7005+
"final_if_map",
7006+
{str(k): str(v) for k, v in final_if_map.items()} if final_if_map else None,
7007+
)
7008+
print(
7009+
"final_else_map",
7010+
{str(k): str(v) for k, v in final_else_map.items()} if final_else_map else None,
7011+
)
70067012
return final_if_map, final_else_map
70077013

70087014
def refine_away_none_in_comparison(

test-data/unit/check-narrowing.test

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2767,6 +2767,6 @@ def get_type(setting_name: str) -> Callable[[Box1], Any] | type[Any]:
27672767
def main(key: str):
27682768
existing_value_type = get_type(key)
27692769
if existing_value_type is TupleLike:
2770-
reveal_type(TupleLike) # N: Revealed type is "(def (__main__.Box1[Any]) -> Any) | type[Any]"
2771-
TupleLike(Box2("str")) # E: Argument 1 has incompatible type "Box2[str]"; expected "Box1[Any]"
2770+
reveal_type(TupleLike) # N: Revealed type is "def [_T_co] (__main__.Boxxy[_T_co`1]) -> __main__.TupleLike[_T_co`1]"
2771+
TupleLike(Box2("str"))
27722772
[builtins fixtures/tuple.pyi]

0 commit comments

Comments
 (0)