-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Infer type of class variables from base classes #12022
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This sets the type of class variables to their types from the superclass (if not set). It unfortunately makes some error messages a bit worse, but I think fixing that properly requires adding a "where did this type come from? inferred/type annotation/type comment/etc." field to `Type`, and that would be a much bigger change. I also had to delete some suspicious special case code that treated actual type annotations and `# type: ` comments differently for `None`.
Diff from mypy_primer, showing the effect of this PR on open source code: alectryon (https://github.com/cpitclaudel/alectryon)
- alectryon/docutils.py:1242: error: Incompatible types in assignment (expression has type "Tuple[str]", base class "RSTLiterateParser" defined the type as "Tuple[]")
+ alectryon/docutils.py:1242: error: Incompatible types in assignment (expression has type "Tuple[str]", variable has type "Tuple[]")
- alectryon/docutils.py:1246: error: Incompatible types in assignment (expression has type "Tuple[str]", base class "RSTLiterateParser" defined the type as "Tuple[]")
+ alectryon/docutils.py:1246: error: Incompatible types in assignment (expression has type "Tuple[str]", variable has type "Tuple[]")
stone (https://github.com/dropbox/stone)
+ stone/backend.py:95: error: Incompatible types in assignment (expression has type "None", variable has type "ArgumentParser")
arviz (https://github.com/arviz-devs/arviz)
+ arviz/data/io_pyro.py:23: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ arviz/data/io_pyro.py:24: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ arviz/data/io_pymc3_3x.py:55: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ arviz/data/io_pymc3_3x.py:56: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ arviz/data/io_numpyro.py:21: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ arviz/data/io_numpyro.py:22: error: Incompatible types in assignment (expression has type "None", variable has type "int")
schema_salad (https://github.com/common-workflow-language/schema_salad)
+ schema_salad/tests/test_schemas_directive.py: note: In class "TestSchemasDirective":
+ schema_salad/tests/test_schemas_directive.py:22:23: error: Incompatible types in assignment (expression has type "None", variable has type "Loader") [assignment]
+ schema_salad/tests/test_schemas_directive.py:23:18: error: Incompatible types in assignment (expression has type "None", variable has type "Union[Names, SchemaParseException]") [assignment]
+ schema_salad/tests/test_schemas_directive.py:24:23: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, Any]") [assignment]
+ schema_salad/tests/test_schemas_directive.py:25:25: error: Incompatible types in assignment (expression has type "None", variable has type "Loader") [assignment]
+ schema_salad/tests/test_real_cwl.py: note: In class "TestRealWorldCWL":
+ schema_salad/tests/test_real_cwl.py:23:23: error: Incompatible types in assignment (expression has type "None", variable has type "Loader") [assignment]
+ schema_salad/tests/test_real_cwl.py:24:18: error: Incompatible types in assignment (expression has type "None", variable has type "Union[Names, SchemaParseException]") [assignment]
+ schema_salad/tests/test_real_cwl.py:25:23: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, Any]") [assignment]
+ schema_salad/tests/test_real_cwl.py:26:25: error: Incompatible types in assignment (expression has type "None", variable has type "Loader") [assignment]
dulwich (https://github.com/dulwich/dulwich)
+ dulwich/objects.py:265: error: Incompatible types in assignment (expression has type "None", variable has type "bytes")
+ dulwich/objects.py:266: error: Incompatible types in assignment (expression has type "None", variable has type "int")
sympy (https://github.com/sympy/sympy)
+ sympy/core/operations.py:44: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Basic]")
+ sympy/printing/printer.py:249: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ sympy/codegen/ast.py:510: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ sympy/codegen/fnodes.py:616: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ sympy/codegen/fnodes.py:617: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ sympy/polys/domains/integerring.py:38: error: "None" not callable
+ sympy/polys/domains/integerring.py:39: error: "None" not callable
+ sympy/polys/domains/rationalfield.py:41: error: "None" not callable
+ sympy/polys/domains/rationalfield.py:42: error: "None" not callable
+ sympy/polys/domains/gmpyintegerring.py:22: error: "None" not callable
+ sympy/polys/domains/gmpyintegerring.py:23: error: "None" not callable
+ sympy/polys/domains/pythonrationalfield.py:18: error: "None" not callable
+ sympy/polys/domains/pythonrationalfield.py:19: error: "None" not callable
+ sympy/polys/domains/gmpyrationalfield.py:21: error: "None" not callable
+ sympy/polys/domains/gmpyrationalfield.py:22: error: "None" not callable
+ sympy/polys/domains/gaussiandomains.py:16: error: Incompatible types in assignment (expression has type "None", variable has type "Domain")
+ sympy/polys/domains/gaussiandomains.py:17: error: Incompatible types in assignment (expression has type "None", variable has type "Domain")
+ sympy/polys/domains/gaussiandomains.py:246: error: Incompatible types in assignment (expression has type "None", variable has type "Domain")
+ sympy/solvers/ode/single.py:86: error: Incompatible types in assignment (expression has type "None", variable has type "Expr")
+ sympy/solvers/ode/single.py:87: error: Incompatible types in assignment (expression has type "None", variable has type "AppliedUndef")
+ sympy/solvers/ode/single.py:88: error: Incompatible types in assignment (expression has type "None", variable has type "Symbol")
+ sympy/solvers/ode/single.py:89: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ sympy/solvers/ode/single.py:90: error: Incompatible types in assignment (expression has type "None", variable has type "Expr")
+ sympy/solvers/ode/single.py:91: error: Incompatible types in assignment (expression has type "None", variable has type "Expr")
+ sympy/solvers/ode/single.py:264: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ sympy/solvers/ode/single.py:268: error: Incompatible types in assignment (expression has type "None", variable has type "bool")
+ sympy/solvers/ode/single.py:271: error: Incompatible types in assignment (expression has type "None", variable has type "SingleODEProblem")
+ sympy/matrices/common.py:60: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ sympy/matrices/common.py:61: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ sympy/solvers/diophantine/diophantine.py:161: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ sympy/vector/dyadic.py:26: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Dyadic]")
+ sympy/vector/dyadic.py:27: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Dyadic]")
+ sympy/vector/dyadic.py:28: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Dyadic]")
+ sympy/vector/dyadic.py:29: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Dyadic]")
+ sympy/vector/dyadic.py:30: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Dyadic]")
+ sympy/vector/dyadic.py:31: error: Incompatible types in assignment (expression has type "None", variable has type "DyadicZero")
+ sympy/vector/vector.py:28: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Vector]")
+ sympy/vector/vector.py:29: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Vector]")
+ sympy/vector/vector.py:30: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Vector]")
+ sympy/vector/vector.py:31: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Vector]")
+ sympy/vector/vector.py:32: error: Incompatible types in assignment (expression has type "None", variable has type "Type[Vector]")
+ sympy/vector/vector.py:33: error: Incompatible types in assignment (expression has type "None", variable has type "VectorZero")
+ sympy/tensor/tensor.py:2701: error: Incompatible types in assignment (expression has type "None", variable has type "_IndexStructure")
+ sympy/tensor/tensor.py:3167: error: Incompatible types in assignment (expression has type "None", variable has type "_IndexStructure")
+ sympy/stats/rv.py:195: error: Incompatible types in assignment (expression has type "None", variable has type "bool")
+ sympy/stats/rv.py:196: error: Incompatible types in assignment (expression has type "None", variable has type "bool")
+ sympy/stats/rv.py:197: error: Incompatible types in assignment (expression has type "None", variable has type "bool")
+ sympy/stats/rv.py:198: error: Incompatible types in assignment (expression has type "None", variable has type "bool")
+ sympy/utilities/_compilation/runners.py:53: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, str]")
+ sympy/utilities/_compilation/runners.py:57: error: Incompatible types in assignment (expression has type "None", variable has type "Tuple[Optional[str], ...]")
+ sympy/utilities/_compilation/runners.py:60: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, Callable[[Optional[str]], str]]")
+ sympy/utilities/_compilation/runners.py:63: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, str]")
edgedb (https://github.com/edgedb/edgedb)
+ edb/schema/indexes.py:397:16: error: Unexpected keyword argument "expr" for "ObjectDDL"
urllib3 (https://github.com/urllib3/urllib3)
+ src/urllib3/connectionpool.py:1036: error: Unexpected keyword argument "cert_file" for "HTTPConnection" [call-arg]
+ src/urllib3/connection.py:129: note: "HTTPConnection" defined here
+ src/urllib3/connectionpool.py:1036: error: Unexpected keyword argument "key_file" for "HTTPConnection" [call-arg]
+ src/urllib3/connection.py:129: note: "HTTPConnection" defined here
+ src/urllib3/connectionpool.py:1036: error: Unexpected keyword argument "key_password" for "HTTPConnection" [call-arg]
+ src/urllib3/connection.py:129: note: "HTTPConnection" defined here
+ src/urllib3/connectionpool.py:1046: error: Argument 1 to "_prepare_conn" of "HTTPSConnectionPool" has incompatible type "HTTPConnection"; expected "HTTPSConnection" [arg-type]
steam.py (https://github.com/Gobot1234/steam.py)
- steam/trade.py:250: error: Incompatible types in assignment (expression has type "Tuple[str, str, str, str, str, str, str]", base class "Asset" defined the type as "Tuple[str, str, str, str, str, str]") [assignment]
+ steam/trade.py:250: error: Incompatible types in assignment (expression has type "Tuple[str, str, str, str, str, str, str]", variable has type "Tuple[str, str, str, str, str, str]") [assignment]
cwltool (https://github.com/common-workflow-language/cwltool)
+ cwltool/argparser.py: note: In class "FSAction":
+ cwltool/argparser.py:716:16: error: Incompatible types in assignment (expression has type "None", variable has type "str") [assignment]
+ cwltool/argparser.py: note: In class "FSAppendAction":
+ cwltool/argparser.py:744:16: error: Incompatible types in assignment (expression has type "None", variable has type "str") [assignment]
tornado (https://github.com/tornadoweb/tornado)
+ tornado/util.py:261: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, Any]")
+ tornado/httputil.py:340: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ tornado/httputil.py:341: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ tornado/httputil.py:344: error: Incompatible types in assignment (expression has type "None", variable has type "Future[None]")
+ tornado/netutil.py:490: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ tornado/iostream.py:1357: error: Incompatible types in assignment (expression has type "None", variable has type "SSLSocket")
+ tornado/httpclient.py:179: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[IOLoop, AsyncHTTPClient]")
+ tornado/httpclient.py:342: error: Incompatible types in assignment (expression has type "None", variable has type "Union[Dict[str, str], HTTPHeaders]")
+ tornado/httpclient.py:627: error: Incompatible types in assignment (expression has type "None", variable has type "HTTPRequest")
+ tornado/web.py:199: error: Incompatible types in assignment (expression has type "None", variable has type "List[OutputTransform]")
+ tornado/web.py:200: error: Incompatible types in assignment (expression has type "None", variable has type "List[str]")
+ tornado/web.py:201: error: Incompatible types in assignment (expression has type "None", variable has type "Dict[str, str]")
+ tornado/websocket.py:809: error: Incompatible types in assignment (expression has type "None", variable has type "IOStream")
+ tornado/websocket.py:1354: error: Incompatible types in assignment (expression has type "None", variable has type "WebSocketProtocol")
+ tornado/test/web_test.py:222: error: Incompatible types in assignment (expression has type "None", variable has type "Future[Any]")
+ tornado/test/concurrent_test.py:102: error: Incompatible types in assignment (expression has type "None", variable has type "Callable[..., Any]")
bandersnatch (https://github.com/pypa/bandersnatch)
+ src/bandersnatch_storage_plugins/swift.py: note: In member "walk" of class "SwiftStorage":
+ src/bandersnatch_storage_plugins/swift.py:624: error: Argument 1 to "append" of "list" has incompatible type "Path"; expected "SwiftPath"
+ src/bandersnatch_storage_plugins/swift.py:626: error: Argument 1 to "append" of "list" has incompatible type "Path"; expected "SwiftPath"
+ src/bandersnatch_storage_plugins/swift.py: note: In member "rmdir" of class "SwiftStorage":
+ src/bandersnatch_storage_plugins/swift.py:839: error: Unexpected keyword argument "include_swiftkeep" for "iterdir" of "Path"
+ src/bandersnatch_storage_plugins/swift.py:839: error: Unexpected keyword argument "recurse" for "iterdir" of "Path"
+ src/bandersnatch_storage_plugins/swift.py:839: error: Unexpected keyword argument "include_swiftkeep" for "iterdir" of "Path"
+ src/bandersnatch_storage_plugins/swift.py:839: error: Unexpected keyword argument "recurse" for "iterdir" of "Path"
+ src/bandersnatch_storage_plugins/swift.py: note: In member "path_backend" of class "SwiftFileLock":
+ src/bandersnatch_storage_plugins/swift.py:64: error: Incompatible return value type (got "Type[Path]", expected "Type[SwiftPath]")
+ src/bandersnatch_storage_plugins/s3.py: note: In member "path_backend" of class "S3FileLock":
+ src/bandersnatch_storage_plugins/s3.py:77: error: Incompatible return value type (got "Type[Path]", expected "Type[S3Path]")
+ src/bandersnatch_storage_plugins/s3.py: note: In member "walk" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:179: error: Argument 1 to "append" of "list" has incompatible type "Path"; expected "S3Path"
+ src/bandersnatch_storage_plugins/s3.py:181: error: Argument 1 to "append" of "list" has incompatible type "Path"; expected "S3Path"
+ src/bandersnatch_storage_plugins/s3.py:183: error: Argument 1 to "append" of "list" has incompatible type "Path"; expected "S3Path"
+ src/bandersnatch_storage_plugins/s3.py: note: At top level:
+ src/bandersnatch_storage_plugins/s3.py:207: error: Unused "type: ignore" comment
+ src/bandersnatch_storage_plugins/s3.py: note: In member "copy_file" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:253: error: "Path" has no attribute "_accessor"
+ src/bandersnatch_storage_plugins/s3.py:256: error: "Path" has no attribute "key"
+ src/bandersnatch_storage_plugins/s3.py:257: error: "Path" has no attribute "bucket"
+ src/bandersnatch_storage_plugins/s3.py:257: error: "Path" has no attribute "key"
+ src/bandersnatch_storage_plugins/s3.py:258: error: "Path" has no attribute "bucket"
+ src/bandersnatch_storage_plugins/s3.py: note: In member "write_file" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:274: error: Incompatible types in assignment (expression has type "BinaryIO", variable has type "TextIO")
+ src/bandersnatch_storage_plugins/s3.py:275: error: Argument 1 to "write" of "IO" has incompatible type "bytes"; expected "str"
+ src/bandersnatch_storage_plugins/s3.py: note: In member "mkdir" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:339: error: "Type[Path]" has no attribute "keep_file"
+ src/bandersnatch_storage_plugins/s3.py:344: error: "Type[Path]" has no attribute "keep_file"
+ src/bandersnatch_storage_plugins/s3.py: note: In member "get_upload_time" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:406: error: "Path" has no attribute "_accessor"
+ src/bandersnatch_storage_plugins/s3.py:407: error: "Path" has no attribute "bucket"
+ src/bandersnatch_storage_plugins/s3.py:407: error: "Path" has no attribute "key"
+ src/bandersnatch_storage_plugins/s3.py: note: In member "set_upload_time" of class "S3Storage":
+ src/bandersnatch_storage_plugins/s3.py:416: error: "Path" has no attribute "_accessor"
+ src/bandersnatch_storage_plugins/s3.py:417: error: "Path" has no attribute "bucket"
+ src/bandersnatch_storage_plugins/s3.py:417: error: "Path" has no attribute "key"
+ src/bandersnatch_storage_plugins/s3.py:422: error: "Path" has no attribute "bucket"
+ src/bandersnatch_storage_plugins/s3.py:422: error: "Path" has no attribute "key"
ibis (https://github.com/ibis-project/ibis)
- ibis/backends/base/sql/alchemy/__init__.py:61: error: Incompatible types in assignment (expression has type "Type[AlchemyTable]", base class "BaseSQLBackend" defined the type as "Type[DatabaseTable]")
pip (https://github.com/pypa/pip)
- src/pip/_internal/cli/progress_bars.py:132: error: Incompatible types in assignment (expression has type "Tuple[str, str, str]", base class "IncrementalBar" defined the type as "Tuple[str, str, str, str, str, str, str, str, str]")
+ src/pip/_internal/cli/progress_bars.py:132: error: Incompatible types in assignment (expression has type "Tuple[str, str, str]", variable has type "Tuple[str, str, str, str, str, str, str, str, str]")
spack (https://github.com/spack/spack)
+ lib/spack/spack/platforms/_platform.py:40: error: Incompatible types in assignment (expression has type "None", variable has type "int")
+ lib/spack/spack/platforms/_platform.py:45: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/platforms/_platform.py:46: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/platforms/_platform.py:47: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/platforms/_platform.py:49: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/platforms/_platform.py:50: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/platforms/_platform.py:51: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/compiler.py:268: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/compiler.py:270: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/package.py:666: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ lib/spack/spack/package.py:669: error: Incompatible types in assignment (expression has type "None", variable has type "str")
freqtrade (https://github.com/freqtrade/freqtrade)
+ freqtrade/persistence/models.py:88: error: Item "str" of "Optional[str]" has no attribute "isnot"
+ freqtrade/persistence/models.py:88: error: Item "None" of "Optional[str]" has no attribute "isnot"
+ freqtrade/persistence/models.py:814: error: Unsupported operand types for < ("datetime" and "None")
+ freqtrade/persistence/models.py:814: note: Left operand is of type "Optional[datetime]"
+ freqtrade/persistence/models.py:816: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:851: error: Item "str" of "Optional[str]" has no attribute "isnot"
+ freqtrade/persistence/models.py:851: error: Item "None" of "Optional[str]" has no attribute "isnot"
+ freqtrade/persistence/models.py:882: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:896: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:908: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:911: error: Unsupported operand types for <= ("datetime" and "None")
+ freqtrade/persistence/models.py:911: note: Left operand is of type "Optional[datetime]"
+ freqtrade/persistence/models.py:941: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:974: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:1007: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:1059: error: "bool" has no attribute "is_"
+ freqtrade/persistence/models.py:1059: error: Unsupported operand types for <= ("datetime" and "None")
+ freqtrade/persistence/models.py:1059: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:150: error: "int" has no attribute "in_"
+ freqtrade/rpc/rpc.py:268: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:269: error: Unsupported operand types for <= ("date" and "None")
+ freqtrade/rpc/rpc.py:269: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:270: error: Unsupported operand types for > ("date" and "None")
+ freqtrade/rpc/rpc.py:270: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:311: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:312: error: Unsupported operand types for <= ("date" and "None")
+ freqtrade/rpc/rpc.py:312: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:313: error: Unsupported operand types for > ("date" and "None")
+ freqtrade/rpc/rpc.py:313: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:353: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:354: error: Unsupported operand types for <= ("date" and "None")
+ freqtrade/rpc/rpc.py:354: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:355: error: Unsupported operand types for > ("date" and "None")
+ freqtrade/rpc/rpc.py:355: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:385: error: Item "datetime" of "Optional[datetime]" has no attribute "desc"
+ freqtrade/rpc/rpc.py:385: error: Item "None" of "Optional[datetime]" has no attribute "desc"
+ freqtrade/rpc/rpc.py:387: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:390: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:391: error: Item "datetime" of "Optional[datetime]" has no attribute "desc"
+ freqtrade/rpc/rpc.py:391: error: Item "None" of "Optional[datetime]" has no attribute "desc"
+ freqtrade/rpc/rpc.py:398: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:412: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:438: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:438: error: Unsupported operand types for <= ("datetime" and "None")
+ freqtrade/rpc/rpc.py:438: note: Left operand is of type "Optional[datetime]"
+ freqtrade/rpc/rpc.py:439: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:692: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:724: error: "bool" has no attribute "is_"
+ freqtrade/rpc/rpc.py:739: error: "bool" has no attribute "is_"
+ freqtrade/commands/list_commands.py:214: error: "int" has no attribute "in_"
+ freqtrade/freqtradebot.py:624: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ freqtrade/freqtradebot.py:869: error: Argument 2 to "update_trade_state" of "FreqtradeBot" has incompatible type "Optional[str]"; expected "str"
+ freqtrade/freqtradebot.py:926: error: No overload variant of "__sub__" of "datetime" matches argument type "None"
+ freqtrade/freqtradebot.py:926: note: Possible overload variants:
+ freqtrade/freqtradebot.py:926: note: def __sub__(self, timedelta) -> datetime
+ freqtrade/freqtradebot.py:926: note: def __sub__(self, datetime) -> timedelta
+ freqtrade/freqtradebot.py:926: note: Right operand is of type "Optional[datetime]"
+ freqtrade/freqtradebot.py:1057: error: Unsupported operand types for < ("float" and "None")
+ freqtrade/freqtradebot.py:1057: note: Both left and right operands are unions
+ freqtrade/freqtradebot.py:1062: error: Argument 1 to "cancel_order_with_result" of "Exchange" has incompatible type "Optional[str]"; expected "str"
+ freqtrade/freqtradebot.py:1088: error: Argument 2 to "update_trade_state" of "FreqtradeBot" has incompatible type "Optional[str]"; expected "str"
+ freqtrade/freqtradebot.py:1099: error: Argument 2 to "update_trade_state" of "FreqtradeBot" has incompatible type "Optional[str]"; expected "str"
+ freqtrade/freqtradebot.py:1120: error: Argument 1 to "cancel_order_with_result" of "Exchange" has incompatible type "Optional[str]"; expected "str"
+ freqtrade/freqtradebot.py:1259: error: Argument 2 to "update_trade_state" of "FreqtradeBot" has incompatible type "Optional[str]"; expected "str"
alerta (https://github.com/alerta/alerta)
+ alerta/models/alarms/__init__.py:22: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ alerta/models/alarms/__init__.py:23: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ alerta/models/alarms/__init__.py:24: error: Incompatible types in assignment (expression has type "None", variable has type "str")
+ alerta/models/alarms/__init__.py:25: error: Incompatible types in assignment (expression has type "None", variable has type "str")
pandas (https://github.com/pandas-dev/pandas)
+ pandas/core/arrays/period.py:326: error: Item "NaTType" of "Union[Period, NaTType]" has no attribute "ordinal" [union-attr]
+ pandas/core/arrays/timedeltas.py:571: error: Incompatible types in assignment (expression has type "List[Any]", variable has type "ndarray[Any, dtype[floating[_64Bit]]]") [assignment]
+ pandas/core/arrays/timedeltas.py:586: error: Incompatible types in assignment (expression has type "TimedeltaArray", variable has type "ndarray[Any, dtype[floating[_64Bit]]]") [assignment]
+ pandas/core/arrays/timedeltas.py:628: error: Incompatible types in assignment (expression has type "List[Any]", variable has type "ndarray[Any, dtype[floating[_64Bit]]]") [assignment]
+ pandas/tests/tseries/offsets/test_week.py:33: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_week.py:34: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_week.py:155: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_week.py:156: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_week.py:271: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_week.py:272: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_month.py:35: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_month.py:36: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_month.py:299: error: "None" not callable [misc]
+ pandas/tests/tseries/offsets/test_month.py:300: error: "None" not callable [misc]
+ pandas/tests/indexes/interval/test_base.py:19: error: "Type[Index]" has no attribute "from_breaks" [attr-defined]
+ pandas/tests/indexes/categorical/test_category.py:25: error: Incompatible return value type (got "Index", expected "CategoricalIndex") [return-value]
|
To me, based on the mypy primer results, it looks like you broke this case: (I haven't tested this worked, but this felt like a nice minimum repro for you to use as a base for a fix) def f(x: int) -> int: return x
class Example:
n = f
g = n(42) |
Hmm I can't get your example to produce any errors. I always get:
I think 90% of the changes look like they're because I deleted this code:
So a load of errors are detected where people did Anyway I'm sure you're right that it's not quite correct. I was really hoping someone more familiar with the code could take a look at it! |
inferred = cast(Var, lvalue.node) | ||
assert isinstance(inferred, Var) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a bit suspicious -- does assert isinstance(lvalue.node, Var)
and then inferred = lvalue.node
not work here? I would have thought it would narrow.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good spot!
My bad, I should have actually loaded your branch and not just guessed, lol Here's some cases this seems to change (I don't know much we want to support them, though): class A:
DEFAULT_STATUS = None # type: str This seems to be intentional by you?
|
Yeah so that was sort of intentional in that I knew it would do that. I didn't really want to have to change it but I couldn't get the code to work otherwise (can't remember the exact issue now) and it didn't seem to make any sense to allow |
@Timmmm this is a legacy of the pre-PEP 526 days (i.e., Python 2.7 and <3.6), when |
Ah do you mean at some point you couldn't do |
No, it's because there was no way to write |
Sorry if I'm being dense but why does that mean you need to treat |
I think it's the opposite. Your PR makes mypy throw errors on code like https://github.com/alerta/alerta/blob/c951891beeb855f3f97ad58df043b9c1c339f10c/alerta/models/alarms/__init__.py#L22 that does |
Yes it does but the thing I don't understand is why does that pattern exist in the first place? |
Because there's no way to declare a variable without an initializer using type comments, so projects that still support Python 2 or 3.5 need to use this pattern. |
I think we're having some communication issues! Why can projects that need to support Python 2 or 3.5 not do this?
|
As I understand it, x = None # type: str is equivalent to x: str Because you cannot express the second with type comments. |
They aren't equivalent. The code I removed special cases the I don't understand why that was ever needed. |
Wait I think I might have just figured it out. With the old
|
This sets the type of class variables to their types from the superclass (if not set). It unfortunately makes some error messages a bit worse, but I think fixing that properly requires adding a "where did this type come from? inferred/type annotation/type comment/etc." field to
Type
, and that would be a much bigger change.I also had to delete some suspicious special case code that treated actual type annotations and
# type:
comments differently forNone
.Note this does not pass all tests. I started modifying them so they would pass, so you can see the effect this has on the output. However it changes quite a lot so I thought it would make more sense to check this is along the right lines before finishing.
Description
Attempt to fix #10375
Test Plan
Simple tests added in
check-classes.test