Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions conformance/results/mypy/annotations_generators.toml
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ annotations_generators.py:71: error: No return value expected [return-value]
annotations_generators.py:75: error: Incompatible types in "yield" (actual type "B", expected type "A") [misc]
annotations_generators.py:86: error: The return type of a generator function should be "Generator" or one of its supertypes [misc]
annotations_generators.py:91: error: The return type of an async generator function should be "AsyncGenerator" or one of its supertypes [misc]
annotations_generators.py:116: error: Incompatible types in "yield from" (actual type "A", expected type "B") [misc]
annotations_generators.py:117: error: Incompatible types in "yield from" (actual type "int", expected type "B") [misc]
annotations_generators.py:118: error: Incompatible types in "yield from" (actual type "A", expected type "B") [misc]
annotations_generators.py:119: error: Incompatible types in "yield from" (actual type "int", expected type "B") [misc]
"""
conformance_automated = "Fail"
errors_diff = """
Line 87: Expected 1 errors
Line 92: Expected 1 errors
Line 133: Expected 1 errors
Line 135: Expected 1 errors
"""
2 changes: 2 additions & 0 deletions conformance/results/mypy/qualifiers_final_annotation.toml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ qualifiers_final_annotation.py:145: error: Cannot assign to final name "x" [mis
qualifiers_final_annotation.py:147: error: Cannot assign to final name "x" [misc]
qualifiers_final_annotation.py:152: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment]
qualifiers_final_annotation.py:155: error: Cannot assign to final name "x" [misc]
qualifiers_final_annotation.py:166: error: Cannot assign to final name "TEN" [misc]
qualifiers_final_annotation.py:170: error: Cannot assign to final name "PI" [misc]
"""
conformance_automated = "Fail"
errors_diff = """
Expand Down
2 changes: 1 addition & 1 deletion conformance/results/mypy/version.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = "mypy 1.15.0"
test_duration = 1.8
test_duration = 1.7
10 changes: 5 additions & 5 deletions conformance/results/pyre/annotations_generators.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ annotations_generators.py:87:4 Incompatible return type [7]: Expected `int` but
annotations_generators.py:88:4 Incompatible return type [7]: Expected `int` but got `Generator[typing.Any, typing.Any, int]`.
annotations_generators.py:91:0 Incompatible async generator return type [57]: Expected return annotation to be AsyncGenerator or a superclass but got `int`.
annotations_generators.py:92:4 Incompatible return type [7]: Expected `int` but got `AsyncGenerator[None, typing.Any]`.
annotations_generators.py:116:4 Incompatible return type [7]: Expected `Iterator[B]` but got `Generator[A, None, typing.Any]`.
annotations_generators.py:117:4 Incompatible return type [7]: Expected `Iterator[B]` but got `Generator[int, None, typing.Any]`.
annotations_generators.py:133:4 Incompatible return type [7]: Expected `Generator[None, str, None]` but got `Generator[None, int, typing.Any]`.
annotations_generators.py:183:0 Incompatible variable type [9]: v1 is declared to have type `typing.Callable[[], Coroutine[typing.Any, typing.Any, AsyncIterator[int]]]` but is used as type `typing.Callable(generator29)[[], AsyncIterator[int]]`.
annotations_generators.py:118:4 Incompatible return type [7]: Expected `Iterator[B]` but got `Generator[A, None, typing.Any]`.
annotations_generators.py:119:4 Incompatible return type [7]: Expected `Iterator[B]` but got `Generator[int, None, typing.Any]`.
annotations_generators.py:135:4 Incompatible return type [7]: Expected `Generator[None, str, None]` but got `Generator[None, int, typing.Any]`.
annotations_generators.py:185:0 Incompatible variable type [9]: v1 is declared to have type `typing.Callable[[], Coroutine[typing.Any, typing.Any, AsyncIterator[int]]]` but is used as type `typing.Callable(generator29)[[], AsyncIterator[int]]`.
"""
conformance_automated = "Fail"
errors_diff = """
Line 51: Expected 1 errors
Line 86: Expected 1 errors
Line 88: Unexpected errors ['annotations_generators.py:88:4 Incompatible return type [7]: Expected `int` but got `Generator[typing.Any, typing.Any, int]`.']
Line 183: Unexpected errors ['annotations_generators.py:183:0 Incompatible variable type [9]: v1 is declared to have type `typing.Callable[[], Coroutine[typing.Any, typing.Any, AsyncIterator[int]]]` but is used as type `typing.Callable(generator29)[[], AsyncIterator[int]]`.']
Line 185: Unexpected errors ['annotations_generators.py:185:0 Incompatible variable type [9]: v1 is declared to have type `typing.Callable[[], Coroutine[typing.Any, typing.Any, AsyncIterator[int]]]` but is used as type `typing.Callable(generator29)[[], AsyncIterator[int]]`.']
"""
3 changes: 3 additions & 0 deletions conformance/results/pyre/qualifiers_final_annotation.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ notes = """
Does not report Final variable with missing initialization in module scope.
Does not report error for invalid nesting of Final and ClassVar.
Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition.
Does not reject modification of imported variable declared Final.
"""
output = """
qualifiers_final_annotation.py:18:6 Invalid type parameters [24]: Generic type `Final` expects 1 type parameter, received 2.
Expand Down Expand Up @@ -33,5 +34,7 @@ errors_diff = """
Line 16: Expected 1 errors
Line 107: Expected 1 errors
Line 108: Expected 1 errors
Line 166: Expected 1 errors
Line 170: Expected 1 errors
Line 133: Unexpected errors ['qualifiers_final_annotation.py:133:0 Unexpected keyword [28]: Unexpected keyword argument `x` to call `N.__init__`.']
"""
2 changes: 1 addition & 1 deletion conformance/results/pyre/version.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = "pyre 0.9.23"
test_duration = 6.5
test_duration = 6.8
18 changes: 12 additions & 6 deletions conformance/results/pyright/annotations_generators.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,17 @@ annotations_generators.py:51:21 - error: Function with declared return type "C"
annotations_generators.py:54:16 - error: Type "Literal[False]" is not assignable to return type "C"
  "Literal[False]" is not assignable to "C" (reportReturnType)
annotations_generators.py:57:15 - error: Return type of generator function must be compatible with "Generator[Literal[3], Any, Any]"
  "Literal[3]" is not assignable to "A" (reportReturnType)
  "Generator[Literal[3], Unknown, Unknown]" is not assignable to "Generator[A, B, C]"
    Type parameter "_YieldT_co@Generator" is covariant, but "Literal[3]" is not a subtype of "A"
      "Literal[3]" is not assignable to "A" (reportReturnType)
annotations_generators.py:66:15 - error: Return type of generator function must be compatible with "Generator[Literal[3], Any, Any]"
  "Literal[3]" is not assignable to "A" (reportReturnType)
  "Generator[Literal[3], Unknown, Unknown]" is not assignable to "Generator[A, int, Any]"
    Type parameter "_YieldT_co@Generator" is covariant, but "Literal[3]" is not a subtype of "A"
      "Literal[3]" is not assignable to "A" (reportReturnType)
annotations_generators.py:75:11 - error: Return type of generator function must be compatible with "Generator[B, Any, Any]"
  "B" is not assignable to "A" (reportReturnType)
  "Generator[B, Unknown, Unknown]" is not assignable to "Iterator[A]"
    Type parameter "_T_co@Iterator" is covariant, but "B" is not a subtype of "A"
      "B" is not assignable to "A" (reportReturnType)
annotations_generators.py:86:21 - error: Return type of generator function must be compatible with "Generator[Any, Any, Any]"
  "Generator[Any, Any, Any]" is not assignable to "int" (reportInvalidTypeForm)
annotations_generators.py:87:11 - error: Return type of generator function must be compatible with "Generator[None, Any, Any]"
Expand All @@ -18,15 +24,15 @@ annotations_generators.py:91:27 - error: Return type of async generator function
  "AsyncGenerator[Any, Any, Any]" is not assignable to "int" (reportInvalidTypeForm)
annotations_generators.py:92:11 - error: Return type of async generator function must be compatible with "AsyncGenerator[None, Any]"
  "AsyncGenerator[None, Unknown, Unknown]" is not assignable to "int" (reportReturnType)
annotations_generators.py:116:16 - error: Return type of generator function must be compatible with "Generator[A, Any, Any]"
annotations_generators.py:118:16 - error: Return type of generator function must be compatible with "Generator[A, Any, Any]"
  "Generator[A, Unknown, Unknown]" is not assignable to "Iterator[B]"
    Type parameter "_T_co@Iterator" is covariant, but "A" is not a subtype of "B"
      "A" is not assignable to "B" (reportReturnType)
annotations_generators.py:117:16 - error: Return type of generator function must be compatible with "Generator[int, Any, Any]"
annotations_generators.py:119:16 - error: Return type of generator function must be compatible with "Generator[int, Any, Any]"
  "Generator[int, Unknown, Unknown]" is not assignable to "Iterator[B]"
    Type parameter "_T_co@Iterator" is covariant, but "int" is not a subtype of "B"
      "int" is not assignable to "B" (reportReturnType)
annotations_generators.py:133:16 - error: Return type of generator function must be compatible with "Generator[None, Any, Any]"
annotations_generators.py:135:16 - error: Return type of generator function must be compatible with "Generator[None, Any, Any]"
  "Generator[None, int, Unknown]" is not assignable to "Generator[None, str, None]"
    Type parameter "_SendT_contra@Generator" is contravariant, but "int" is not a supertype of "str"
      "str" is not assignable to "int" (reportReturnType)
Expand Down
4 changes: 3 additions & 1 deletion conformance/results/pyright/callables_subtyping.toml
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,12 @@ callables_subtyping.py:119:23 - error: Type "StrArgs4" is not assignable to decl
  "StrArgs4" is incompatible with protocol "IntStrArgs4"
    "__call__" is an incompatible type
      Type "(a: int, /, *args: str) -> None" is not assignable to type "(*args: int | str) -> None"
        Parameter 1: type "int | str" is incompatible with type "int"
          Type "int | str" is not assignable to type "int"
        Parameter 2: type "int | str" is incompatible with type "str"
          Type "int | str" is not assignable to type "str"
        Parameter 1: type "*tuple[int | str, ...]" is incompatible with type "*tuple[str, ...]"
          "*tuple[int | str, ...]" is not assignable to "*tuple[str, ...]" (reportAssignmentType)
... (reportAssignmentType)
callables_subtyping.py:120:23 - error: Type "IntArgs4" is not assignable to declared type "IntStrArgs4"
  "IntArgs4" is incompatible with protocol "IntStrArgs4"
    "__call__" is an incompatible type
Expand Down
2 changes: 2 additions & 0 deletions conformance/results/pyright/qualifiers_final_annotation.toml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ qualifiers_final_annotation.py:147:10 - error: "x" is declared as Final and cann
qualifiers_final_annotation.py:149:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues)
qualifiers_final_annotation.py:152:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues)
qualifiers_final_annotation.py:155:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues)
qualifiers_final_annotation.py:166:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues)
qualifiers_final_annotation.py:170:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues)
"""
conformance_automated = "Pass"
errors_diff = """
Expand Down
2 changes: 1 addition & 1 deletion conformance/results/pyright/version.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = "pyright 1.1.394"
version = "pyright 1.1.396"
test_duration = 1.3
14 changes: 7 additions & 7 deletions conformance/results/pytype/annotations_generators.toml
Original file line number Diff line number Diff line change
Expand Up @@ -46,26 +46,26 @@ async def generator9() -> int: # E: incompatible return type
yield None # E
\u001b[1m\u001b[31m~~~~~~~~~~~~~~\u001b[39m\u001b[0m

annotations_generators.py:99:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Bad return type 'IntIterator' for generator function generator15 [bad-yield-annotation]
annotations_generators.py:100:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Bad return type 'IntIterator' for generator function generator15 [bad-yield-annotation]

def generator15() -> IntIterator: # OK
\u001b[1m\u001b[31m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[39m\u001b[0m
yield 0
\u001b[1m\u001b[31m~~~~~~~~~~~\u001b[39m\u001b[0m

annotations_generators.py:107:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Bad return type 'AsyncIntIterator' for async generator function generator16 [bad-yield-annotation]
annotations_generators.py:109:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Bad return type 'AsyncIntIterator' for async generator function generator16 [bad-yield-annotation]

async def generator16() -> AsyncIntIterator: # OK
\u001b[1m\u001b[31m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[39m\u001b[0m
yield 0
\u001b[1m\u001b[31m~~~~~~~~~~~\u001b[39m\u001b[0m

annotations_generators.py:116:5: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in generator18: bad return type [bad-return-type]
annotations_generators.py:118:5: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in generator18: bad return type [bad-return-type]

yield from generator17() # E: incompatible generator type
\u001b[1m\u001b[31m~~~~~~~~~~~~~~~~~~~~~~~~\u001b[39m\u001b[0m

annotations_generators.py:117:5: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in generator18: bad return type [bad-return-type]
annotations_generators.py:119:5: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in generator18: bad return type [bad-return-type]

yield from [1] # E: incompatible generator type
\u001b[1m\u001b[31m~~~~~~~~~~~~~~\u001b[39m\u001b[0m
Expand All @@ -76,7 +76,7 @@ errors_diff = """
Line 51: Expected 1 errors
Line 87: Expected 1 errors
Line 92: Expected 1 errors
Line 133: Expected 1 errors
Line 99: Unexpected errors ["annotations_generators.py:99:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Bad return type 'IntIterator' for generator function generator15 [bad-yield-annotation]"]
Line 107: Unexpected errors ["annotations_generators.py:107:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Bad return type 'AsyncIntIterator' for async generator function generator16 [bad-yield-annotation]"]
Line 135: Expected 1 errors
Line 100: Unexpected errors ["annotations_generators.py:100:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Bad return type 'IntIterator' for generator function generator15 [bad-yield-annotation]"]
Line 109: Unexpected errors ["annotations_generators.py:109:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Bad return type 'AsyncIntIterator' for async generator function generator16 [bad-yield-annotation]"]
"""
17 changes: 16 additions & 1 deletion conformance/results/pytype/qualifiers_final_annotation.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ Does not report Final variable with missing initialization.
Does not reject Final instance variable declared outside of __init__ method.
Does not reject modification of global variable declared Final.
Does not reject modification of local variable declared Final.
Does not reject modification of imported variable declared Final.
"""
output = """
qualifiers_final_annotation.py:18:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Invalid type annotation 'Final[str, int]' [invalid-annotation]
Expand Down Expand Up @@ -106,9 +107,19 @@ N(x="", y="") # E

qualifiers_final_annotation.py:145:5: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in func2: Assigning to variable x, which was annotated with Final [final-error]

x += 1 # E: cannot modify Final value
x += 1 # E: cannot modify Final value
\u001b[1m\u001b[31m~\u001b[39m\u001b[0m

qualifiers_final_annotation.py:164:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Can't find module '_qualifiers_final_annotation_1'. [import-error]

from _qualifiers_final_annotation_1 import TEN
\u001b[1m\u001b[31m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[39m\u001b[0m

qualifiers_final_annotation.py:168:1: \u001b[1m\u001b[31merror\u001b[39m\u001b[0m: in <module>: Can't find module '_qualifiers_final_annotation_2'. [import-error]

from _qualifiers_final_annotation_2 import *
\u001b[1m\u001b[31m~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u001b[39m\u001b[0m

"""
conformance_automated = "Fail"
errors_diff = """
Expand All @@ -123,5 +134,9 @@ Line 147: Expected 1 errors
Line 149: Expected 1 errors
Line 152: Expected 1 errors
Line 155: Expected 1 errors
Line 166: Expected 1 errors
Line 170: Expected 1 errors
Line 93: Unexpected errors ['qualifiers_final_annotation.py:93:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Class ClassCChild overrides final class attribute BORDER_WIDTH, defined in base class ClassC [final-error]']
Line 164: Unexpected errors ["qualifiers_final_annotation.py:164:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Can't find module '_qualifiers_final_annotation_1'. [import-error]"]
Line 168: Unexpected errors ["qualifiers_final_annotation.py:168:1: \\x1b[1m\\x1b[31merror\\x1b[39m\\x1b[0m: in <module>: Can't find module '_qualifiers_final_annotation_2'. [import-error]"]
Comment on lines +140 to +141
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems pytype can't find the helper modules at all? This suggests the root problem here is something in the conformance tests' path setup for pytype.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We may need help from pytype maintainers here.

So far, I haven't seen any interest expressed by the pytype maintainers to be conformant with the typing spec, so maybe we should drop pytype from the test entirely? Maintaining support for pytype has been a bit of a burden (much more so than the other three type checkers), and I haven't seen any sign that anyone (including the pytype team) care about the results of these tests.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think there will be pytype maintainers at the PyCon typing summit, so I can discuss this general topic with them there. I don't think figuring out this issue needs to block this PR.

"""
2 changes: 1 addition & 1 deletion conformance/results/pytype/version.toml
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
version = "pytype 2024.10.11"
test_duration = 34.9
test_duration = 34.7
12 changes: 6 additions & 6 deletions conformance/results/results.html
Original file line number Diff line number Diff line change
Expand Up @@ -159,16 +159,16 @@ <h3>Python Type System Conformance Test Results</h3>
<div class="table_container"><table><tbody>
<tr><th class="col1">&nbsp;</th>
<th class='tc-header'><div class='tc-name'>mypy 1.15.0</div>
<div class='tc-time'>1.8sec</div>
<div class='tc-time'>1.7sec</div>
</th>
<th class='tc-header'><div class='tc-name'>pyright 1.1.394</div>
<th class='tc-header'><div class='tc-name'>pyright 1.1.396</div>
<div class='tc-time'>1.3sec</div>
</th>
<th class='tc-header'><div class='tc-name'>pyre 0.9.23</div>
<div class='tc-time'>6.5sec</div>
<div class='tc-time'>6.8sec</div>
</th>
<th class='tc-header'><div class='tc-name'>pytype 2024.10.11</div>
<div class='tc-time'>34.9sec</div>
<div class='tc-time'>34.7sec</div>
</th>
</tr>
<tr><th class="column" colspan="5">
Expand Down Expand Up @@ -432,8 +432,8 @@ <h3>Python Type System Conformance Test Results</h3>
<tr><th class="column col1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qualifiers_final_annotation</th>
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition.</p><p>Does not allow conditional assignment of Final instance variable in __init__ method.</p><p>Does not allow redefinition of private class variable that is marked Final in parent class.</p><p>Does not report modification of local Final variable via "for" statement.</p></span></div></th>
<th class="column col2 conformant">Pass</th>
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does not report Final variable with missing initialization in module scope.</p><p>Does not report error for invalid nesting of Final and ClassVar.</p><p>Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition.</p></span></div></th>
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does not report Final variable with missing initialization.</p><p>Does not reject Final instance variable declared outside of __init__ method.</p><p>Does not reject modification of global variable declared Final.</p><p>Does not reject modification of local variable declared Final.</p></span></div></th>
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does not report Final variable with missing initialization in module scope.</p><p>Does not report error for invalid nesting of Final and ClassVar.</p><p>Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition.</p><p>Does not reject modification of imported variable declared Final.</p></span></div></th>
<th class="column col2 partially-conformant"><div class="hover-text">Partial<span class="tooltip-text" id="bottom"><p>Does not report Final variable with missing initialization.</p><p>Does not reject Final instance variable declared outside of __init__ method.</p><p>Does not reject modification of global variable declared Final.</p><p>Does not reject modification of local variable declared Final.</p><p>Does not reject modification of imported variable declared Final.</p></span></div></th>
</tr>
<tr><th class="column col1">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;qualifiers_final_decorator</th>
<th class="column col2 conformant">Pass</th>
Expand Down
7 changes: 7 additions & 0 deletions conformance/tests/_qualifiers_final_annotation_1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"""
Used as part of the test for the typing.Final special form.
"""

from typing import Final

TEN: Final[int] = 10
7 changes: 7 additions & 0 deletions conformance/tests/_qualifiers_final_annotation_2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"""
Used as part of the test for the typing.Final special form.
"""

from typing import Final

PI: Final = 3.14
Loading