/
eb
/
python_learn
Обзор
Документация
Войти
/
eb
/
python_learn
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
main
venv/Lib/site-packages/mypyc/test-data/commandline.test
194 строки
4 KB
EvgeniyBudaev
Улучшения в системе type hints
01 мар 2021, 16:52
01 мар 2021, 16:52
e4c1f6e
Код
Авторство
О чём код?
-- Test cases for invoking mypyc on the command line -- -- These are slow -- do not add test cases unless you have a very good reason to do so. [case testCompileMypyc] # cmd: a.py b.py p/__init__.py p/q.py import os.path import p import p.q import a import b print('<main>', b.g(a.A())) try: a.f('') except TypeError: pass else: assert False for x in [a, b, p, p.q]: assert os.path.splitext(x.__file__)[1] != '.py' [file z.py] [file a.py] import b import c from p import s print('<a>', ord('A') == 65) # Test full builtins class A: def __init__(self) -> None: self.x = 4 def f(x: int) -> b.B: return b.B(x) class B: def __init__(self, x: int, y: str) -> None: self.x = x print('<a>', f(5).x) print('<c>', c.foo()) assert s.bar(10) == 20 [file b.py] import a import p.q class B: def __init__(self, x: int) -> None: self.x = x def g(z: 'a.A') -> int: return p.q.foo(z.x) print('<b>', 'here') [file c.py] def foo() -> int: return 10 [file p/__init__.py] [file p/q.py] import p.r def foo(x: int) -> int: return x*p.r.foo(x) [file p/r.py] def foo(x: int) -> int: return x [file p/s.py] def bar(x: int) -> int: return x*2 [out] <b> here <a> True <a> 5 <c> 10 <main> 16 -- This test is here so we can turn it on when we get nervous about -- this case, but is disabled for speed reasons. [case testCompileMypycOne-skip] # cmd: a.py import os.path import a assert os.path.splitext(a.__file__)[1] != '.py' assert a.f(10) == 100 [file a.py] def f(x: int) -> int: return x*x [case testErrorOutput] # cmd: test.py [file test.py] from typing import List, Any from typing_extensions import Final from mypy_extensions import trait, mypyc_attr def busted(b: bool) -> None: for i in range(1, 10, 0): # E: range() step can't be zero try: if i == 5: break # E: break inside try/finally block is unimplemented elif i == 4: continue # E: continue inside try/finally block is unimplemented finally: print('oops') print(sum([1,2,3])) x = [1,2] class Foo: a, b = (10, 20) # E: Only assignment to variables is supported in class bodies x[0] = 10 # E: Only assignment to variables is supported in class bodies lol = 20 l = [10] # W: Unsupported default attribute value c = d = 50 # E: Multiple assignment in class bodies not supported if 1+1 == 2: # E: Unsupported statement in class body x = 10 Foo.lol = 50 # E: Only class variables defined as ClassVar can be assigned to def decorator(x: Any) -> Any: return x class NeverMetaclass(type): # E: Inheriting from most builtin types is unimplemented pass class Concrete1: pass @trait class PureTrait: pass @trait class Trait1(Concrete1): pass class Concrete2: pass @trait class Trait2(Concrete2): pass @decorator class NonExt(Concrete1): # E: Non-extension classes may not inherit from extension classes pass class Nope(Trait1, Concrete2): # E: Non-trait bases must appear first in parent list # E: Non-trait MRO must be linear pass @decorator class NonExt2: @property # E: Property setters not supported in non-extension classes def test(self) -> int: pass @test.setter def test(self, x: int) -> None: pass iterator_warning = (i+1 for i in range(10)) # W: Treating generator comprehension as list # But we don't want warnings for these cases: tup = tuple(i+1 for i in range(10)) a_str = " ".join(str(i) for i in range(10)) wtvr = next(i for i in range(10) if i == 5) d1 = {1: 2} # Make sure we can produce an error when we hit the awful None case def f(l: List[object]) -> None: x = None # E: Local variable 'x' has inferred type None; add an annotation for i in l: if x is None: x = i @mypyc_attr(allow_interpreted_subclasses=True) class AllowInterp1(Concrete1): # E: Base class "test.Concrete1" does not allow interpreted subclasses pass @mypyc_attr(allow_interpreted_subclasses=True) class AllowInterp2(PureTrait): # E: Base class "test.PureTrait" does not allow interpreted subclasses pass