Skip to content

Commit c1ffe96

Browse files
committed
Use custom functions for expecting tuples, this avoids the need for multiple assert_types depending on different type inference
1 parent 0c7ca83 commit c1ffe96

11 files changed

+51
-60
lines changed

conformance/results/mypy/generics_typevartuple_args.toml

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@ notes = """
33
Does not enforce that tuples captured by TypeVarTuple are same type.
44
"""
55
output = """
6-
generics_typevartuple_args.py:35: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
7-
generics_typevartuple_args.py:36: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
8-
generics_typevartuple_args.py:50: error: Argument 2 to "func1" has incompatible type "str"; expected "int" [arg-type]
9-
generics_typevartuple_args.py:59: error: Argument 2 to "func2" has incompatible type "int"; expected "*tuple[*tuple[str, ...], str]" [arg-type]
10-
generics_typevartuple_args.py:60: error: Too few arguments for "func2" [call-arg]
11-
generics_typevartuple_args.py:61: error: Too few arguments for "func2" [call-arg]
12-
generics_typevartuple_args.py:61: error: Argument 1 to "func2" has incompatible type "str"; expected "int" [arg-type]
13-
generics_typevartuple_args.py:69: error: Too few arguments for "func3" [call-arg]
6+
generics_typevartuple_args.py:37: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
7+
generics_typevartuple_args.py:38: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
8+
generics_typevartuple_args.py:52: error: Argument 2 to "func1" has incompatible type "str"; expected "int" [arg-type]
9+
generics_typevartuple_args.py:61: error: Argument 2 to "func2" has incompatible type "int"; expected "*tuple[*tuple[str, ...], str]" [arg-type]
10+
generics_typevartuple_args.py:62: error: Too few arguments for "func2" [call-arg]
11+
generics_typevartuple_args.py:63: error: Too few arguments for "func2" [call-arg]
12+
generics_typevartuple_args.py:63: error: Argument 1 to "func2" has incompatible type "str"; expected "int" [arg-type]
13+
generics_typevartuple_args.py:71: error: Too few arguments for "func3" [call-arg]
1414
"""
1515
conformance_automated = "Fail"
1616
errors_diff = """
17-
Line 77: Expected 1 errors
18-
Line 78: Expected 1 errors
19-
Lines 20, 21: Expected error (tag 'args_to_tuple')
20-
Lines 33, 34: Expected error (tag 'exec_le')
17+
Line 79: Expected 1 errors
18+
Line 80: Expected 1 errors
2119
"""
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
conformant = "Partial"
2-
notes = "Does use assert_type in two different ways"
31
output = """
42
generics_typevartuple_callable.py:26: error: Argument "target" to "Process" has incompatible type "Callable[[int, str], None]"; expected "Callable[[str, int], None]" [arg-type]
53
"""
6-
conformance_automated = "Fail"
4+
conformance_automated = "Pass"
75
errors_diff = """
8-
Lines 49, 50: Expected error (tag 'fun3')
96
"""

conformance/results/pyrefly/generics_typevartuple_args.toml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,13 @@ conformance_automated = "Pass"
33
errors_diff = """
44
"""
55
output = """
6-
ERROR generics_typevartuple_args.py:21:12-68: assert_type(tuple[int, str], tuple[Literal[1], Literal['a']]) failed [assert-type]
7-
ERROR generics_typevartuple_args.py:34:12-71: assert_type(tuple[int, str], tuple[Literal[0], Literal['']]) failed [assert-type]
8-
ERROR generics_typevartuple_args.py:35:8-19: Unpacked argument `tuple[Literal[0], Literal['']]` is not assignable to parameter `*args` with type `tuple[*@_, Env]` in function `exec_le` [bad-argument-type]
9-
ERROR generics_typevartuple_args.py:36:8-30: Unpacked argument `tuple[Literal[0], Literal['']]` is not assignable to parameter `*args` with type `tuple[*@_, Env]` in function `exec_le` [bad-argument-type]
10-
ERROR generics_typevartuple_args.py:50:6-17: Unpacked argument `tuple[Literal[1], Literal['2'], Literal[3]]` is not assignable to parameter `*args` with type `tuple[int, ...]` in function `func1` [bad-argument-type]
11-
ERROR generics_typevartuple_args.py:59:6-16: Unpacked argument `tuple[Literal[1], Literal[1], Literal['']]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
12-
ERROR generics_typevartuple_args.py:60:6-9: Unpacked argument `tuple[Literal[1]]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
13-
ERROR generics_typevartuple_args.py:61:6-10: Unpacked argument `tuple[Literal['']]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
14-
ERROR generics_typevartuple_args.py:69:6-9: Unpacked argument `tuple[Literal[1]]` is not assignable to parameter `*args` with type `tuple[int, str]` in function `func3` [bad-argument-type]
15-
ERROR generics_typevartuple_args.py:77:13-19: Argument `tuple[Literal[1], Literal[2]]` is not assignable to parameter `*args` with type `tuple[int]` in function `func4` [bad-argument-type]
16-
ERROR generics_typevartuple_args.py:78:13-19: Argument `tuple[Literal['1']]` is not assignable to parameter `*args` with type `tuple[int]` in function `func4` [bad-argument-type]
6+
ERROR generics_typevartuple_args.py:37:8-19: Unpacked argument `tuple[Literal[0], Literal['']]` is not assignable to parameter `*args` with type `tuple[*@_, Env]` in function `exec_le` [bad-argument-type]
7+
ERROR generics_typevartuple_args.py:38:8-30: Unpacked argument `tuple[Literal[0], Literal['']]` is not assignable to parameter `*args` with type `tuple[*@_, Env]` in function `exec_le` [bad-argument-type]
8+
ERROR generics_typevartuple_args.py:52:6-17: Unpacked argument `tuple[Literal[1], Literal['2'], Literal[3]]` is not assignable to parameter `*args` with type `tuple[int, ...]` in function `func1` [bad-argument-type]
9+
ERROR generics_typevartuple_args.py:61:6-16: Unpacked argument `tuple[Literal[1], Literal[1], Literal['']]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
10+
ERROR generics_typevartuple_args.py:62:6-9: Unpacked argument `tuple[Literal[1]]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
11+
ERROR generics_typevartuple_args.py:63:6-10: Unpacked argument `tuple[Literal['']]` is not assignable to parameter `*args` with type `tuple[int, *tuple[str, ...], str]` in function `func2` [bad-argument-type]
12+
ERROR generics_typevartuple_args.py:71:6-9: Unpacked argument `tuple[Literal[1]]` is not assignable to parameter `*args` with type `tuple[int, str]` in function `func3` [bad-argument-type]
13+
ERROR generics_typevartuple_args.py:79:13-19: Argument `tuple[Literal[1], Literal[2]]` is not assignable to parameter `*args` with type `tuple[int]` in function `func4` [bad-argument-type]
14+
ERROR generics_typevartuple_args.py:80:13-19: Argument `tuple[Literal['1']]` is not assignable to parameter `*args` with type `tuple[int]` in function `func4` [bad-argument-type]
1715
"""

conformance/results/pyrefly/generics_typevartuple_callable.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,4 @@ errors_diff = """
44
"""
55
output = """
66
ERROR generics_typevartuple_callable.py:26:28-35: Argument `tuple[Literal[''], Literal[0]]` is not assignable to parameter `args` with type `tuple[int, str]` in function `Process.__init__` [bad-argument-type]
7-
ERROR generics_typevartuple_callable.py:50:12-71: assert_type(tuple[float, str, complex], tuple[float, Literal[''], complex]) failed [assert-type]
87
"""

conformance/results/pyright/generics_typevartuple_args.toml

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,20 @@
11
conformant = "Pass"
22
output = """
3-
generics_typevartuple_args.py:21:13 - error: "assert_type" mismatch: expected "tuple[Literal[1], Literal['a']]" but received "tuple[int, str]" (reportAssertTypeFailure)
4-
generics_typevartuple_args.py:34:13 - error: "assert_type" mismatch: expected "tuple[Literal[0], Literal['']]" but received "tuple[int, str]" (reportAssertTypeFailure)
5-
generics_typevartuple_args.py:35:16 - error: Argument of type "Literal['']" cannot be assigned to parameter of type "Env" in function "exec_le"
3+
generics_typevartuple_args.py:37:16 - error: Argument of type "Literal['']" cannot be assigned to parameter of type "Env" in function "exec_le"
64
  "Literal['']" is not assignable to "Env" (reportArgumentType)
7-
generics_typevartuple_args.py:36:16 - error: Argument of type "Literal['']" cannot be assigned to parameter of type "Env" in function "exec_le"
5+
generics_typevartuple_args.py:38:16 - error: Argument of type "Literal['']" cannot be assigned to parameter of type "Env" in function "exec_le"
86
  "Literal['']" is not assignable to "Env" (reportArgumentType)
9-
generics_typevartuple_args.py:50:10 - error: Argument of type "Literal['2']" cannot be assigned to parameter of type "int" in function "func1"
7+
generics_typevartuple_args.py:52:10 - error: Argument of type "Literal['2']" cannot be assigned to parameter of type "int" in function "func1"
108
  "Literal['2']" is not assignable to "int" (reportArgumentType)
11-
generics_typevartuple_args.py:59:10 - error: Argument of type "Literal[1]" cannot be assigned to parameter of type "str" in function "func2"
9+
generics_typevartuple_args.py:61:10 - error: Argument of type "Literal[1]" cannot be assigned to parameter of type "str" in function "func2"
1210
  "Literal[1]" is not assignable to "str" (reportArgumentType)
13-
generics_typevartuple_args.py:60:1 - error: Argument missing for parameter "args[2]" (reportCallIssue)
14-
generics_typevartuple_args.py:61:1 - error: Argument missing for parameter "args[2]" (reportCallIssue)
15-
generics_typevartuple_args.py:69:1 - error: Argument missing for parameter "args[1]" (reportCallIssue)
16-
generics_typevartuple_args.py:77:13 - error: Argument of type "tuple[Literal[1], Literal[2]]" cannot be assigned to parameter "args" of type "tuple[*Ts@func4]" in function "func4"
11+
generics_typevartuple_args.py:62:1 - error: Argument missing for parameter "args[2]" (reportCallIssue)
12+
generics_typevartuple_args.py:63:1 - error: Argument missing for parameter "args[2]" (reportCallIssue)
13+
generics_typevartuple_args.py:71:1 - error: Argument missing for parameter "args[1]" (reportCallIssue)
14+
generics_typevartuple_args.py:79:13 - error: Argument of type "tuple[Literal[1], Literal[2]]" cannot be assigned to parameter "args" of type "tuple[*Ts@func4]" in function "func4"
1715
  "tuple[Literal[1], Literal[2]]" is not assignable to "tuple[int]"
1816
    Tuple size mismatch; expected 1 but received 2 (reportArgumentType)
19-
generics_typevartuple_args.py:78:14 - error: Argument of type "tuple[Literal['1']]" cannot be assigned to parameter "args" of type "tuple[*Ts@func4]" in function "func4"
17+
generics_typevartuple_args.py:80:14 - error: Argument of type "tuple[Literal['1']]" cannot be assigned to parameter "args" of type "tuple[*Ts@func4]" in function "func4"
2018
  "Literal['1']" is not assignable to "int" (reportArgumentType)
2119
"""
2220
conformance_automated = "Pass"

conformance/results/pyright/generics_typevartuple_callable.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ output = """
33
generics_typevartuple_callable.py:26:28 - error: Argument of type "tuple[Literal[''], Literal[0]]" cannot be assigned to parameter "args" of type "tuple[*Ts@__init__]" in function "__init__"
44
  "Literal['']" is not assignable to "int"
55
  "Literal[0]" is not assignable to "str" (reportArgumentType)
6-
generics_typevartuple_callable.py:50:13 - error: "assert_type" mismatch: expected "tuple[float, Literal[''], complex]" but received "tuple[float, str, complex]" (reportAssertTypeFailure)
76
"""
87
conformance_automated = "Pass"
98
errors_diff = """

conformance/results/results.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,7 @@ <h3>Python Type System Conformance Test Results</h3>
383383
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>TypeVarTuple is pinned too early when calling generic function</p></span></div></th>
384384
</tr>
385385
<tr><th class="column col1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;generics_typevartuple_callable</th>
386-
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does use assert_type in two different ways</p></span></div></th>
386+
<th class="column col2 conformant">Pass</th>
387387
<th class="column col2 conformant">Pass</th>
388388
<th class="column col2 conformant">Pass</th>
389389
<th class="column col2 conformant">Pass</th>

conformance/results/zuban/generics_typevartuple_args.toml

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@ conformance_automated = "Pass"
22
errors_diff = """
33
"""
44
output = """
5-
generics_typevartuple_args.py:20: error: Expression is of type "tuple[Literal[1], Literal['a']]", not "tuple[int, str]" [misc]
6-
generics_typevartuple_args.py:33: error: Expression is of type "tuple[Literal[0], Literal['']]", not "tuple[int, str]" [misc]
7-
generics_typevartuple_args.py:35: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
8-
generics_typevartuple_args.py:36: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
9-
generics_typevartuple_args.py:50: error: Argument 2 to "func1" has incompatible type "str"; expected "int" [arg-type]
10-
generics_typevartuple_args.py:59: error: Argument 2 to "func2" has incompatible type "int"; expected "str" [arg-type]
11-
generics_typevartuple_args.py:60: error: Too few arguments for "func2" [call-arg]
12-
generics_typevartuple_args.py:61: error: Too few arguments for "func2" [call-arg]
13-
generics_typevartuple_args.py:61: error: Argument 1 to "func2" has incompatible type "str"; expected "int" [arg-type]
14-
generics_typevartuple_args.py:69: error: Too few arguments for "func3" [call-arg]
15-
generics_typevartuple_args.py:77: error: Argument 2 to "func4" has incompatible type "tuple[Literal[1], int]"; expected "tuple[int]" [arg-type]
16-
generics_typevartuple_args.py:78: error: Argument 2 to "func4" has incompatible type "tuple[Literal['1']]"; expected "tuple[int]" [arg-type]
5+
generics_typevartuple_args.py:37: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
6+
generics_typevartuple_args.py:38: error: Argument 3 to "exec_le" has incompatible type "str"; expected "Env" [arg-type]
7+
generics_typevartuple_args.py:52: error: Argument 2 to "func1" has incompatible type "str"; expected "int" [arg-type]
8+
generics_typevartuple_args.py:61: error: Argument 2 to "func2" has incompatible type "int"; expected "str" [arg-type]
9+
generics_typevartuple_args.py:62: error: Too few arguments for "func2" [call-arg]
10+
generics_typevartuple_args.py:63: error: Too few arguments for "func2" [call-arg]
11+
generics_typevartuple_args.py:63: error: Argument 1 to "func2" has incompatible type "str"; expected "int" [arg-type]
12+
generics_typevartuple_args.py:71: error: Too few arguments for "func3" [call-arg]
13+
generics_typevartuple_args.py:79: error: Argument 2 to "func4" has incompatible type "tuple[Literal[1], int]"; expected "tuple[int]" [arg-type]
14+
generics_typevartuple_args.py:80: error: Argument 2 to "func4" has incompatible type "tuple[Literal['1']]"; expected "tuple[int]" [arg-type]
1715
"""

conformance/results/zuban/generics_typevartuple_callable.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,4 @@ errors_diff = """
33
"""
44
output = """
55
generics_typevartuple_callable.py:26: error: Argument "args" to "Process" has incompatible type "tuple[str, int]"; expected "tuple[int, str]" [arg-type]
6-
generics_typevartuple_callable.py:49: error: Expression is of type "tuple[float, Literal[''], complex]", not "tuple[float, str, complex]" [misc]
76
"""

conformance/tests/generics_typevartuple_args.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@ def args_to_tuple(*args: *Ts) -> tuple[*Ts]:
1717
raise NotImplementedError
1818

1919

20-
assert_type(args_to_tuple(1, "a"), tuple[int, str]) # E[args_to_tuple]
21-
assert_type(args_to_tuple(1, "a"), tuple[Literal[1], Literal["a"]]) # E[args_to_tuple]
20+
def takes_int_and_str(tup: tuple[int, str]) -> None:
21+
raise NotImplementedError
22+
23+
24+
takes_int_and_str(args_to_tuple(1, "a"))
2225

2326

2427
class Env:
@@ -30,8 +33,7 @@ def exec_le(path: str, *args: * tuple[*Ts, Env], env: Env | None = None) -> tupl
3033

3134

3235
assert_type(exec_le("", Env()), tuple[()]) # OK
33-
assert_type(exec_le("", 0, "", Env()), tuple[int, str]) # E[exec_le]
34-
assert_type(exec_le("", 0, "", Env()), tuple[Literal[0], Literal['']]) # E[exec_le]
36+
takes_int_and_str(exec_le("", 0, "", Env()))
3537
exec_le("", 0, "") # E
3638
exec_le("", 0, "", env=Env()) # E
3739

0 commit comments

Comments
 (0)