Because it is not used by runtime. Mypy is just linter which adds additional restrictions on code which are not enforced by interpreter. You can have false positives so correct python code must be fixed to pass linter checks. In my opinion if you need static type checks you should use statically typed language and not hurt your coding speed by such partial solution. Also majority of python libraries do not use type annotations so you are limited to your code.
Well, yes, this is exactly how the type checkers of
statically-typed languages work: as linters, during compilation.
The largest difference is that typing in Python is gradual, so not
everything needs to be typed as you say.
I agree that statically typed languages are preferable. I don't consider static
typing optional so I'm glad Python is growing a solution that supports it,
though.
In my experience, mypy works surprisingly well. It doesn't hurt my
coding speed at all but enhances it to levels that were not
previously possible in Python, due to a lack of typing. False
positives are rather rare.