Skip to content

Commit 2fe43b0

Browse files
authored
Merge branch 'main' into increase_getopt_test_cov
2 parents 9f40b65 + a53b5b1 commit 2fe43b0

3 files changed

Lines changed: 18 additions & 8 deletions

File tree

Lib/test/test_typing.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2801,8 +2801,14 @@ def test_args(self):
28012801
self.assertEqual(Literal[1, 2, 3].__args__, (1, 2, 3))
28022802
self.assertEqual(Literal[1, 2, 3, 3].__args__, (1, 2, 3))
28032803
self.assertEqual(Literal[1, Literal[2], Literal[3, 4]].__args__, (1, 2, 3, 4))
2804-
# Mutable arguments will not be deduplicated
2805-
self.assertEqual(Literal[[], []].__args__, ([], []))
2804+
# Unhashable arguments will be deduplicated too
2805+
self.assertEqual(Literal[[], []].__args__, ([],))
2806+
self.assertEqual(Literal[{"a": 1}, {"a": 1}].__args__, ({"a": 1},))
2807+
self.assertEqual(
2808+
Literal[1, {'a': 'b'}, 2, {'a': 'b'}, 3].__args__,
2809+
(1, {'a': 'b'}, 2, 3),
2810+
)
2811+
self.assertEqual(Literal[{1}, {1}, {2}, {2}].__args__, ({1}, {2}))
28062812

28072813
def test_flatten(self):
28082814
l1 = Literal[Literal[1], Literal[2], Literal[3]]

Lib/typing.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -775,13 +775,16 @@ def open_helper(file: str, mode: MODE) -> str:
775775
# There is no '_type_check' call because arguments to Literal[...] are
776776
# values, not types.
777777
parameters = _flatten_literal_params(parameters)
778+
value_and_type_parameters = list(_value_and_type_iter(parameters))
779+
deduplicated_parameters = tuple(
780+
p
781+
for p, _ in _deduplicate(
782+
value_and_type_parameters,
783+
unhashable_fallback=True,
784+
)
785+
)
778786

779-
try:
780-
parameters = tuple(p for p, _ in _deduplicate(list(_value_and_type_iter(parameters))))
781-
except TypeError: # unhashable parameters
782-
pass
783-
784-
return _LiteralGenericAlias(self, parameters)
787+
return _LiteralGenericAlias(self, deduplicated_parameters)
785788

786789

787790
@_SpecialForm
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Deduplicate unhashable args in :data:`typing.Literal`.

0 commit comments

Comments
 (0)