Skip to content

Commit fce726c

Browse files
committed
Fix _BoolLiteral not being treated as equivalent to Literal.
1 parent 9c44791 commit fce726c

File tree

2 files changed

+38
-8
lines changed

2 files changed

+38
-8
lines changed

tests/test_type_eval.py

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
GetSpecialAttr,
3232
GetType,
3333
GetAnnotations,
34+
IsSubtype,
3435
IsSub,
3536
Iter,
3637
Length,
@@ -1337,7 +1338,7 @@ def test_eval_bool_05():
13371338
assert d == Literal[False]
13381339

13391340

1340-
def test_eval_literal_generic_01():
1341+
def test_eval_bool_literal_01():
13411342
d = eval_typing(_BoolLiteral[True])
13421343
assert d == _BoolLiteral[True]
13431344
d = eval_typing(_BoolLiteral[False])
@@ -1352,7 +1353,7 @@ def test_eval_literal_generic_01():
13521353
assert d == _BoolLiteral[False]
13531354

13541355

1355-
def test_eval_literal_generic_02():
1356+
def test_eval_bool_literal_02():
13561357
d = eval_typing(not _BoolLiteral[True])
13571358
assert d == _BoolLiteral[False]
13581359

@@ -1362,7 +1363,7 @@ def test_eval_literal_generic_02():
13621363
assert d == _BoolLiteral[True]
13631364

13641365

1365-
def test_eval_literal_generic_03():
1366+
def test_eval_bool_literal_03():
13661367
d = eval_typing(AndLiteralGeneric[_BoolLiteral[True], _BoolLiteral[True]])
13671368
assert d == _BoolLiteral[True]
13681369
d = eval_typing(AndLiteralGeneric[_BoolLiteral[True], _BoolLiteral[False]])
@@ -1373,7 +1374,7 @@ def test_eval_literal_generic_03():
13731374
assert d == _BoolLiteral[False]
13741375

13751376

1376-
def test_eval_literal_generic_04():
1377+
def test_eval_bool_literal_04():
13771378
d = eval_typing(OrLiteralGeneric[_BoolLiteral[True], _BoolLiteral[True]])
13781379
assert d == _BoolLiteral[True]
13791380
d = eval_typing(OrLiteralGeneric[_BoolLiteral[True], _BoolLiteral[False]])
@@ -1384,21 +1385,48 @@ def test_eval_literal_generic_04():
13841385
assert d == _BoolLiteral[False]
13851386

13861387

1387-
def test_eval_literal_generic_05():
1388+
def test_eval_bool_literal_05():
13881389
d = eval_typing(LiteralGenericToLiteral[_BoolLiteral[True]])
13891390
assert d == Literal[True]
13901391
d = eval_typing(LiteralGenericToLiteral[_BoolLiteral[False]])
13911392
assert d == Literal[False]
13921393

13931394

1394-
def test_eval_literal_generic_06():
1395+
def test_eval_bool_literal_06():
13951396
d = eval_typing(NotLiteralGenericToLiteral[_BoolLiteral[True]])
13961397
assert d == Literal[False]
13971398
d = eval_typing(NotLiteralGenericToLiteral[_BoolLiteral[False]])
13981399
assert d == Literal[True]
13991400

14001401

1401-
def test_eval_literal_generic_error_01():
1402+
def test_eval_bool_literal_07():
1403+
d = eval_typing(IsSub[_BoolLiteral[True], Literal[True]])
1404+
assert d == _BoolLiteral[True]
1405+
d = eval_typing(IsSub[_BoolLiteral[False], Literal[False]])
1406+
assert d == _BoolLiteral[True]
1407+
1408+
d = eval_typing(IsSub[Literal[True], _BoolLiteral[True]])
1409+
assert d == _BoolLiteral[True]
1410+
d = eval_typing(IsSub[Literal[False], _BoolLiteral[False]])
1411+
assert d == _BoolLiteral[True]
1412+
1413+
d = eval_typing(IsSubtype[_BoolLiteral[True], Literal[True]])
1414+
assert d == _BoolLiteral[True]
1415+
d = eval_typing(IsSubtype[_BoolLiteral[False], Literal[False]])
1416+
assert d == _BoolLiteral[True]
1417+
1418+
d = eval_typing(IsSubtype[Literal[True], _BoolLiteral[True]])
1419+
assert d == _BoolLiteral[True]
1420+
d = eval_typing(IsSubtype[Literal[False], _BoolLiteral[False]])
1421+
assert d == _BoolLiteral[True]
1422+
1423+
d = eval_typing(Matches[_BoolLiteral[True], Literal[True]])
1424+
assert d == _BoolLiteral[True]
1425+
d = eval_typing(Matches[_BoolLiteral[False], Literal[False]])
1426+
assert d == _BoolLiteral[True]
1427+
1428+
1429+
def test_eval_bool_literal_error_01():
14021430
with pytest.raises(TypeError, match="Expected literal type, got 'int'"):
14031431
eval_typing(_BoolLiteral[int])
14041432

typemap/type_eval/_typing_inspect.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ def is_optional_type(t: Any) -> TypeGuard[UnionType]:
132132

133133

134134
def is_literal(t: Any) -> bool:
135-
return is_generic_alias(t) and get_origin(t) is Literal # type: ignore [comparison-overlap]
135+
from typemap.typing import _BoolLiteral
136+
137+
return is_generic_alias(t) and get_origin(t) in (Literal, _BoolLiteral)
136138

137139

138140
def get_head(t: Any) -> type | None:

0 commit comments

Comments
 (0)