| # Copyright (c) Meta Platforms, Inc. and affiliates. | |
| # | |
| # This source code is licensed under the MIT license found in the | |
| # LICENSE file in the root directory of this source tree. | |
| from dataclasses import dataclass, field | |
| from pathlib import Path | |
| @dataclass(kw_only=True) | |
| class Project: | |
| location: str | |
| name_override: str | None = None | |
| pyrefly_cmd: str | None | |
| deps: list[str] | None = None | |
| # BELOW ARE UNUSED FIELDS | |
| mypy_cmd: str | None = None | |
| pyright_cmd: str | None = None | |
| install_cmd: str | None = None | |
| needs_mypy_plugins: bool = False | |
| # if expected_success, there is a recent version of mypy which passes cleanly | |
| expected_mypy_success: bool = False | |
| expected_pyright_success: bool = False | |
| expected_pyrefly_success: bool = False | |
| # cost is vaguely proportional to type check time | |
| # for mypy we use the compiled times | |
| cost: dict[str, int] = field(default_factory=dict) | |
| revision: str | None = None | |
| min_python_version: tuple[int, int] | None = None | |
| supported_platforms: list[str] | None = None | |
| skip_pyrefly: bool = False | |
| skip_determinism_check: bool = False | |
| @property | |
| def name(self) -> str: | |
| if self.name_override is not None: | |
| return self.name_override | |
| return Path(self.location).name | |
| # Project list is sourced from: | |
| # https://github.com/hauntsaninja/mypy_primer/blob/master/mypy_primer/projects.py | |
| def get_mypy_primer_projects() -> list[Project]: | |
| return [ | |
| Project( | |
| location="https://github.com/python/mypy", | |
| mypy_cmd="{mypy} --config-file mypy_self_check.ini -p mypy -p mypyc", | |
| pyright_cmd="{pyright} mypy mypyc", | |
| pyrefly_cmd="{pyrefly} mypy mypyc", | |
| deps=["pytest", "types-psutil", "types-setuptools", "filelock", "tomli"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 15, "pyright": 50}, | |
| ), | |
| Project( | |
| location="https://github.com/hauntsaninja/mypy_primer", | |
| mypy_cmd="{mypy} -p mypy_primer --strict", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} mypy_primer", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/psf/black", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["aiohttp", "click", "pathspec", "tomli", "platformdirs", "packaging"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/hauntsaninja/pyp", | |
| mypy_cmd="{mypy} --strict -m pyp", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pytest-dev/pytest", | |
| mypy_cmd="{mypy} src testing", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src testing", | |
| deps=["attrs", "pluggy", "py", "types-setuptools"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pandas-dev/pandas", | |
| mypy_cmd="{mypy} pandas", | |
| pyright_cmd="{pyright} pandas", | |
| pyrefly_cmd="{pyrefly} pandas", | |
| deps=[ | |
| "numpy", | |
| "types-python-dateutil", | |
| "types-pytz", | |
| "types-PyMySQL", | |
| "types-setuptools", | |
| "pytest", | |
| ], | |
| expected_mypy_success=True, | |
| cost={"mypy": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/pycqa/pylint", | |
| mypy_cmd="{mypy} pylint/checkers --ignore-missing-imports", | |
| pyright_cmd="{pyright} pylint/checkers", | |
| pyrefly_cmd="{pyrefly} pylint/checkers", | |
| deps=["types-toml"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aio-libs/aiohttp", | |
| mypy_cmd="{mypy} aiohttp", | |
| pyright_cmd="{pyright} aiohttp", | |
| pyrefly_cmd="{pyrefly} aiohttp", | |
| deps=["pytest"], | |
| install_cmd="AIOHTTP_NO_EXTENSIONS=1 {install} -e .", | |
| expected_mypy_success=True, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| Project( | |
| location="https://github.com/python-attrs/attrs", | |
| mypy_cmd=( | |
| "{mypy} src/attr/__init__.pyi src/attr/_version_info.pyi src/attr/converters.pyi" | |
| " src/attr/exceptions.pyi src/attr/filters.pyi src/attr/setters.pyi" | |
| " src/attr/validators.pyi tests/typing_example.py" | |
| ), | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd=( | |
| "{pyrefly} src/attr/__init__.pyi src/attr/_version_info.pyi src/attr/converters.pyi" | |
| " src/attr/exceptions.pyi src/attr/filters.pyi src/attr/setters.pyi" | |
| " src/attr/validators.pyi tests/typing_example.py" | |
| ), | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/twisted/twisted", | |
| mypy_cmd="{mypy} src/twisted", | |
| pyright_cmd="{pyright} src/twisted", | |
| pyrefly_cmd="{pyrefly} src/twisted", | |
| deps=[ | |
| "attrs", | |
| "automat", | |
| "constantly", | |
| "hyperlink", | |
| "incremental", | |
| "zope.interface", | |
| "typing_extensions", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/hypothesisworks/hypothesis", | |
| mypy_cmd="{mypy} hypothesis/src/hypothesis", | |
| pyright_cmd="{pyright} hypothesis/src/hypothesis", | |
| pyrefly_cmd="{pyrefly} hypothesis/src/hypothesis", | |
| deps=["attrs", "sortedcontainers"], | |
| ), | |
| Project( | |
| location="https://github.com/sphinx-doc/sphinx", | |
| mypy_cmd="{mypy} sphinx", | |
| pyright_cmd="{pyright} sphinx", | |
| pyrefly_cmd="{pyrefly} sphinx", | |
| deps=["babel", "docutils-stubs", "types-requests", "packaging", "jinja2"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/scikit-learn/scikit-learn", | |
| mypy_cmd="{mypy} sklearn", | |
| pyright_cmd="{pyright} sklearn", | |
| pyrefly_cmd="{pyrefly} sklearn", | |
| deps=["joblib", "numpy", "scipy-stubs", "threadpoolctl"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 15, "pyright": 240}, | |
| ), | |
| Project( | |
| location="https://github.com/pypa/bandersnatch", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["types-filelock", "types-freezegun", "types-setuptools"], | |
| expected_mypy_success=True, | |
| # The upstream repo contains symlinks whose targets include a trailing newline. | |
| # https://github.com/pypa/bandersnatch/pull/2280 | |
| skip_pyrefly=True, | |
| ), | |
| Project( | |
| location="https://github.com/hauntsaninja/boostedblob", | |
| mypy_cmd="{mypy} boostedblob", | |
| pyright_cmd="{pyright} boostedblob", | |
| pyrefly_cmd="{pyrefly} boostedblob", | |
| deps=["aiohttp", "uvloop", "pycryptodome"], | |
| expected_mypy_success=True, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| Project( | |
| location="https://github.com/quora/asynq", | |
| mypy_cmd="{mypy} asynq", | |
| pyright_cmd="{pyright} asynq", | |
| pyrefly_cmd="{pyrefly} asynq", | |
| deps=["qcore"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/scrapy/scrapy", | |
| mypy_cmd="{mypy} scrapy tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} scrapy tests", | |
| deps=["attrs", "types-pyOpenSSL", "types-setuptools"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pypa/twine", | |
| mypy_cmd="{mypy} twine", | |
| pyright_cmd="{pyright} twine", | |
| pyrefly_cmd="{pyrefly} twine", | |
| deps=["keyring", "types-requests", "rich"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/more-itertools/more-itertools", | |
| mypy_cmd="{mypy} more_itertools", | |
| pyright_cmd="{pyright} more_itertools", | |
| pyrefly_cmd="{pyrefly} more_itertools", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pydata/xarray", | |
| mypy_cmd="{mypy} --exclude conftest.py", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=["types-PyYAML", "types-python-dateutil", "types-pytz", "numpy"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 25, "pyright": 170}, | |
| ), | |
| Project( | |
| location="https://github.com/pallets/werkzeug", | |
| mypy_cmd="{mypy} src/werkzeug tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src/werkzeug tests", | |
| deps=["types-setuptools", "pytest", "markupsafe"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pallets/jinja", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["markupsafe"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/mystor/git-revise", | |
| mypy_cmd="{mypy} gitrevise", | |
| pyright_cmd="{pyright} gitrevise", | |
| pyrefly_cmd="{pyrefly} gitrevise", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/PyGithub/PyGithub", | |
| mypy_cmd="{mypy} github tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} github tests", | |
| deps=["types-requests", "pyjwt"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/we-like-parsers/pegen", | |
| mypy_cmd="{mypy} src/pegen", | |
| pyright_cmd="{pyright} src/pegen", | |
| pyrefly_cmd="{pyrefly} src/pegen", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/zulip/zulip", | |
| mypy_cmd=( | |
| "{mypy} zerver zilencer zproject tools analytics corporate scripts --platform=linux" | |
| ), | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} zerver zilencer zproject tools analytics corporate scripts", | |
| deps=[ | |
| "types-PyYAML", | |
| "types-polib", | |
| "types-redis", | |
| "types-Markdown", | |
| "types-decorator", | |
| "types-pytz", | |
| "types-requests", | |
| "types-python-dateutil", | |
| "types-orjson", | |
| "cryptography", | |
| "django-stubs", | |
| ], | |
| # TODO: the plugin here is a little involved and might only work on linux | |
| # figure out what it would take to make it actually work | |
| # needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| cost={"pyright": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/dropbox/stone", | |
| mypy_cmd="{mypy} stone test", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} stone test", | |
| deps=["types-six"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/yelp/paasta", | |
| mypy_cmd="{mypy} paasta_tools", | |
| pyright_cmd="{pyright} paasta_tools", | |
| pyrefly_cmd="{pyrefly} paasta_tools", | |
| deps=[ | |
| "types-retry", | |
| "types-tzlocal", | |
| "types-ujson", | |
| "types-python-dateutil", | |
| "types-pytz", | |
| "types-PyYAML", | |
| "types-requests", | |
| ], | |
| expected_mypy_success=True, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| # mypy plugin | |
| Project( | |
| location="https://github.com/PrefectHQ/prefect", | |
| mypy_cmd="{mypy} src/prefect --exclude conftest.py", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src/prefect", | |
| deps=[ | |
| "types-python-dateutil", | |
| "types-requests", | |
| "types-simplejson", | |
| "types-toml", | |
| "types-croniter", | |
| "types-PyYAML", | |
| "types-python-slugify", | |
| "types-pytz", | |
| "cryptography", | |
| "SQLAlchemy", | |
| "pydantic", | |
| ], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| cost={"mypy": 10, "pyright": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/pallets/itsdangerous", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["pytest"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/jab/bidict", | |
| mypy_cmd="{mypy} bidict", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} bidict", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/jaraco/zipp", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aaugustin/websockets", | |
| mypy_cmd="{mypy} --strict src", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pycqa/isort", | |
| mypy_cmd="{mypy} --ignore-missing-imports isort", | |
| pyright_cmd="{pyright} isort", | |
| pyrefly_cmd="{pyrefly} isort", | |
| deps=["types-setuptools"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aio-libs/aioredis", | |
| mypy_cmd="{mypy} aioredis --ignore-missing-imports", | |
| pyright_cmd="{pyright} aioredis", | |
| pyrefly_cmd="{pyrefly} aioredis", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/agronholm/anyio", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aio-libs/yarl", | |
| mypy_cmd="{mypy} --show-error-codes yarl tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} yarl tests", | |
| deps=["multidict"], | |
| expected_mypy_success=True, | |
| ), | |
| # mypy plugin | |
| Project( | |
| location="https://github.com/freqtrade/freqtrade", | |
| mypy_cmd="{mypy} freqtrade scripts", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} freqtrade scripts", | |
| deps=[ | |
| "types-cachetools", | |
| "types-requests", | |
| "types-python-dateutil", | |
| "types-tabulate", | |
| "types-filelock", | |
| "pydantic", | |
| "sqlalchemy", | |
| ], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| cost={"mypy": 15}, | |
| ), | |
| Project( | |
| location="https://github.com/google/jax", | |
| mypy_cmd="{mypy} jax", | |
| pyright_cmd="{pyright} jax", | |
| pyrefly_cmd="{pyrefly} jax", | |
| deps=["types-requests", "numpy"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 30, "pyright": 90}, | |
| ), | |
| Project( | |
| location="https://github.com/dulwich/dulwich", | |
| mypy_cmd="{mypy} dulwich", | |
| pyright_cmd="{pyright} dulwich", | |
| pyrefly_cmd="{pyrefly} dulwich", | |
| deps=["types-certifi", "types-paramiko"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/numpy/numpy", | |
| pyrefly_cmd="{pyrefly} check --search-path=. numpy/typing/tests/data", | |
| deps=["pytest"], | |
| ), | |
| Project( | |
| location="https://github.com/optuna/optuna", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=[ | |
| "types-PyYAML", | |
| "types-redis", | |
| "types-setuptools", | |
| "SQLAlchemy", | |
| "numpy", | |
| ], | |
| expected_mypy_success=True, | |
| cost={"mypy": 25, "pyright": 70}, | |
| ), | |
| Project( | |
| location="https://github.com/trailofbits/manticore", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-protobuf", "types-PyYAML", "types-redis", "types-setuptools"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 15, "pyright": 75}, | |
| ), | |
| Project( | |
| location="https://github.com/aiortc/aiortc", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["cryptography"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/Textualize/rich", | |
| mypy_cmd="{mypy} -p rich --ignore-missing-imports --warn-unreachable", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} rich", | |
| deps=["attrs"], | |
| expected_mypy_success=True, | |
| ), | |
| # mypy plugin | |
| Project( | |
| location="https://github.com/dedupeio/dedupe", | |
| mypy_cmd="{mypy} --ignore-missing-imports dedupe", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} dedupe", | |
| deps=["numpy"], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/schemathesis/schemathesis", | |
| mypy_cmd="{mypy} src/schemathesis", | |
| pyright_cmd="{pyright} src/schemathesis", | |
| pyrefly_cmd="{pyrefly} src/schemathesis", | |
| deps=["attrs", "types-requests", "types-PyYAML", "hypothesis"], | |
| expected_mypy_success=True, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| Project( | |
| location="https://github.com/graphql-python/graphql-core", | |
| mypy_cmd="{mypy} src tests", | |
| pyright_cmd="{pyright} src tests", | |
| pyrefly_cmd="{pyrefly} src tests", | |
| expected_mypy_success=True, | |
| cost={"mypy": 40}, | |
| ), | |
| Project( | |
| location="https://github.com/Legrandin/pycryptodome", | |
| mypy_cmd="{mypy} lib", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} lib", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/niklasf/python-chess", | |
| mypy_cmd="{mypy} --strict chess", | |
| pyright_cmd="{pyright} chess", | |
| pyrefly_cmd="{pyrefly} chess", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pytorch/ignite", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| expected_mypy_success=True, | |
| cost={"pyright": 50}, | |
| ), | |
| Project( | |
| location="https://github.com/pypa/packaging", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pydantic/pydantic", | |
| mypy_cmd="{mypy} pydantic", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pydantic", | |
| deps=[ | |
| "typing-extensions", | |
| "annotated-types", | |
| "pydantic-core", | |
| "pydantic-settings", | |
| "typing-inspection", | |
| ], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pydantic/pydantic", | |
| pyrefly_cmd="{pyrefly} tests/typechecking", | |
| deps=[ | |
| "typing-extensions", | |
| "annotated-types", | |
| "pydantic-core", | |
| "pydantic-settings", | |
| "typing-inspection", | |
| ], | |
| name_override="pydantic-tests", | |
| ), | |
| Project( | |
| location="https://github.com/encode/starlette", | |
| mypy_cmd="{mypy} starlette tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} starlette tests", | |
| deps=["types-requests", "types-PyYAML"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aio-libs/janus", | |
| mypy_cmd="{mypy} janus --disallow-untyped-calls --disallow-incomplete-defs --strict", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} janus", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/alerta/alerta", | |
| mypy_cmd="{mypy} alerta tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} alerta tests", | |
| deps=["types-PyYAML", "types-setuptools", "types-requests", "types-pytz"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/nolar/kopf", | |
| mypy_cmd="{mypy} kopf", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} kopf", | |
| deps=["types-setuptools", "types-PyYAML"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/davidhalter/parso", | |
| mypy_cmd="{mypy} parso", | |
| pyright_cmd="{pyright} parso", | |
| pyrefly_cmd="{pyrefly} parso", | |
| expected_mypy_success=True, | |
| cost={"pyright": 75}, | |
| ), | |
| Project( | |
| location="https://github.com/konradhalas/dacite", | |
| mypy_cmd="{mypy} dacite", | |
| pyright_cmd="{pyright} dacite", | |
| pyrefly_cmd="{pyrefly} dacite", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/ilevkivskyi/com2ann", | |
| mypy_cmd="{mypy} --python-version=3.8 src/com2ann.py src/test_com2ann.py", | |
| pyright_cmd="{pyright} com2ann", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/srittau/python-htmlgen", | |
| mypy_cmd="{mypy} htmlgen test_htmlgen", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} htmlgen test_htmlgen", | |
| deps=["asserts"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/mitmproxy/mitmproxy", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/jpadilla/pyjwt", | |
| mypy_cmd="{mypy} jwt", | |
| pyright_cmd="{pyright} jwt", | |
| pyrefly_cmd="{pyrefly} jwt", | |
| deps=["cryptography"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/apache/spark", | |
| mypy_cmd="{mypy} --config python/mypy.ini python/pyspark", | |
| pyright_cmd="{pyright} python/pyspark", | |
| pyrefly_cmd="{pyrefly} python/pyspark", | |
| deps=["numpy"], | |
| expected_mypy_success=True, | |
| cost={"mypy": 20, "pyright": 110}, | |
| ), | |
| Project( | |
| location="https://github.com/laowantong/paroxython", | |
| mypy_cmd="{mypy} paroxython", | |
| pyright_cmd="{pyright} paroxython", | |
| pyrefly_cmd="{pyrefly} paroxython", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/Akuli/porcupine", | |
| mypy_cmd="{mypy} --config-file= porcupine", | |
| pyright_cmd="{pyright} porcupine", | |
| pyrefly_cmd="{pyrefly} porcupine", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/dropbox/mypy-protobuf", | |
| mypy_cmd="{mypy} mypy_protobuf/", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} mypy_protobuf", | |
| deps=["types-protobuf"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/spack/spack", | |
| mypy_cmd="{mypy} -p spack -p llnl", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} lib/spack/llnl lib/spack/spack", | |
| expected_mypy_success=True, | |
| cost={"mypy": 20, "pyright": 100}, | |
| ), | |
| Project( | |
| location="https://github.com/johtso/httpx-caching", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-freezegun", "httpx", "anyio", "pytest"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/python-poetry/poetry", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-requests"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/awslabs/sockeye", | |
| mypy_cmd=( | |
| "{mypy} --ignore-missing-imports --follow-imports=silent @typechecked-files" | |
| " --no-strict-optional" | |
| ), | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| deps=["types-PyYAML"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/wntrblm/nox", | |
| mypy_cmd="{mypy} nox", | |
| pyright_cmd="{pyright} nox", | |
| pyrefly_cmd="{pyrefly} nox", | |
| deps=["jinja2", "packaging", "importlib_metadata"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pandera-dev/pandera", | |
| mypy_cmd="{mypy} pandera tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pandera tests", | |
| deps=["types-click", "types-PyYAML", "types-setuptools", "types-requests"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://gitlab.com/cki-project/cki-lib", | |
| mypy_cmd="{mypy} --strict .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-PyYAML", "types-requests"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/python-jsonschema/check-jsonschema", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["types-jsonschema", "types-requests"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pybind/pybind11", | |
| mypy_cmd="{mypy} --exclude '^(tests|docs)/' .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pybind11", | |
| deps=["nox", "rich", "types-setuptools"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/rpdelaney/downforeveryone", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-requests", "types-requests", "pytest"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/DataDog/dd-trace-py", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=[ | |
| "attrs", | |
| "types-six", | |
| "types-setuptools", | |
| "types-docutils", | |
| "types-PyYAML", | |
| "types-protobuf", | |
| "envier", | |
| ], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| cost={"pyright": 75}, | |
| ), | |
| Project( | |
| location="https://github.com/systemd/mkosi", | |
| mypy_cmd="{mypy} mkosi", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} mkosi", | |
| deps=["cryptography"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/sympy/sympy", | |
| mypy_cmd="{mypy} sympy", | |
| pyright_cmd="{pyright} sympy", | |
| pyrefly_cmd="{pyrefly} sympy", | |
| expected_mypy_success=True, | |
| cost={"mypy": 35, "pyright": 240}, | |
| ), | |
| Project( | |
| location="https://github.com/nion-software/nionutils", | |
| mypy_cmd="{mypy} --strict -p nion.utils", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} nion/utils", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/PyCQA/flake8-pyi", | |
| mypy_cmd="{mypy} flake8_pyi", | |
| pyright_cmd="{pyright} flake8_pyi", | |
| pyrefly_cmd="{pyrefly} flake8_pyi", | |
| deps=["types-pyflakes"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/internetarchive/openlibrary", | |
| mypy_cmd="{mypy} openlibrary", | |
| pyright_cmd="{pyright} openlibrary", | |
| pyrefly_cmd="{pyrefly} openlibrary", | |
| deps=[ | |
| "types-PyYAML", | |
| "types-python-dateutil", | |
| "types-requests", | |
| "types-simplejson", | |
| "types-Deprecated", | |
| ], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/JohannesBuchner/imagehash", | |
| mypy_cmd="{mypy} imagehash", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} imagehash", | |
| deps=["numpy", "types-Pillow"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/Kalmat/PyWinCtl", | |
| mypy_cmd="{mypy} src/pywinctl", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src/pywinctl", | |
| deps=["types-setuptools", "types-pywin32", "types-python-xlib"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/mesonbuild/meson", | |
| mypy_cmd="./run_mypy.py --mypy {mypy}", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| deps=[ | |
| "types-PyYAML", | |
| "coverage", | |
| "types-chevron", | |
| "types-PyYAML", | |
| "types-tqdm", | |
| ], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/aio-libs/aiohttp-devtools", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["aiohttp", "watchfiles", "types-pygments"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/sco1/pylox", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["attrs", "pytest"], | |
| expected_mypy_success=True, | |
| min_python_version=(3, 10), | |
| ), | |
| Project( | |
| location="https://github.com/ppb/ppb-vector", | |
| mypy_cmd="{mypy} ppb_vector tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} ppb_vector tests", | |
| deps=["hypothesis"], | |
| expected_mypy_success=True, | |
| min_python_version=(3, 10), | |
| ), | |
| Project( | |
| location="https://github.com/mkdocs/mkdocs", | |
| mypy_cmd="{mypy} mkdocs", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} mkdocs", | |
| deps=[ | |
| "babel", | |
| "types-Markdown", | |
| "types-pytz", | |
| "types-PyYAML", | |
| "types-setuptools", | |
| "jinja2", | |
| "click", | |
| "watchdog", | |
| "pathspec", | |
| "platformdirs", | |
| "packaging", | |
| ], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pyppeteer/pyppeteer", | |
| mypy_cmd="{mypy} pyppeteer --config-file tox.ini", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pyppeteer", | |
| install_cmd="{install} .", | |
| ), | |
| Project( | |
| location="https://github.com/pypa/pip", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src", | |
| cost={"pyright": 45}, | |
| ), | |
| Project( | |
| location="https://github.com/pytorch/vision", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| cost={"pyright": 50}, | |
| ), | |
| Project( | |
| location="https://github.com/tornadoweb/tornado", | |
| mypy_cmd="{mypy} tornado", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} tornado", | |
| deps=["types-contextvars", "types-pycurl"], | |
| ), | |
| Project( | |
| location="https://github.com/scipy/scipy-stubs", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=[ | |
| "array-api-compat", | |
| "numpy", | |
| "numpy-typing-compat", | |
| "optype", | |
| "packaging", | |
| "scipy", | |
| ], | |
| expected_mypy_success=True, | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pycqa/flake8", | |
| mypy_cmd="{mypy} src tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src tests", | |
| deps=["pytest"], | |
| ), | |
| Project( | |
| location="https://github.com/home-assistant/core", | |
| mypy_cmd="{mypy} homeassistant", | |
| pyright_cmd="{pyright} homeassistant", | |
| pyrefly_cmd="{pyrefly} homeassistant", | |
| deps=[ | |
| "attrs", | |
| "pydantic", | |
| "types-setuptools", | |
| "types-atomicwrites", | |
| "types-certifi", | |
| "types-croniter", | |
| "types-PyYAML", | |
| "types-requests", | |
| "types-python-slugify", | |
| "types-backports", | |
| ], | |
| needs_mypy_plugins=True, | |
| cost={"mypy": 40, "pyright": 240}, | |
| ), | |
| Project( | |
| location="https://github.com/kornia/kornia", | |
| mypy_cmd="{mypy} kornia", | |
| pyright_cmd="{pyright} kornia", | |
| pyrefly_cmd="{pyrefly} kornia", | |
| ), | |
| Project( | |
| location="https://github.com/ibis-project/ibis", | |
| mypy_cmd="{mypy} --ignore-missing-imports ibis", | |
| pyright_cmd="{pyright} ibis", | |
| pyrefly_cmd="{pyrefly} ibis", | |
| deps=[ | |
| "types-setuptools", | |
| "types-requests", | |
| "types-python-dateutil", | |
| "types-pytz", | |
| "SQLAlchemy", | |
| ], | |
| cost={"mypy": 15, "pyright": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/streamlit/streamlit", | |
| mypy_cmd="{mypy} --config-file=lib/mypy.ini lib scripts", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} lib scripts", | |
| deps=[ | |
| "attrs", | |
| "tornado", | |
| "packaging", | |
| "types-toml", | |
| "types-python-dateutil", | |
| "types-setuptools", | |
| "types-protobuf", | |
| "types-pytz", | |
| "types-requests", | |
| "types-cffi", | |
| "click", | |
| "pytest", | |
| ], | |
| cost={"mypy": 10, "pyright": 50}, | |
| ), | |
| Project( | |
| location="https://github.com/dragonchain/dragonchain", | |
| mypy_cmd="{mypy} dragonchain --error-summary", | |
| pyright_cmd="{pyright} dragonchain", | |
| pyrefly_cmd="{pyrefly} dragonchain", | |
| deps=["types-redis", "types-requests"], | |
| ), | |
| Project( | |
| location="https://github.com/mikeshardmind/SinbadCogs", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["attrs", "types-pytz", "types-python-dateutil", "types-PyYAML"], | |
| ), | |
| Project( | |
| location="https://github.com/rotki/rotki", | |
| mypy_cmd="{mypy} rotkehlchen/ tools/data_faker", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} rotkehlchen", | |
| deps=["eth-typing", "types-requests", "types-setuptools"], | |
| cost={"pyright": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/arviz-devs/arviz", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["pytest", "types-setuptools", "types-ujson", "numpy", "xarray"], | |
| cost={"pyright": 45}, | |
| ), | |
| Project( | |
| location="https://github.com/urllib3/urllib3", | |
| mypy_cmd="{mypy} . --exclude setup.py", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=[ | |
| "idna>=2.0.0", | |
| "cryptography>=1.3.4", | |
| "tornado>=6.1", | |
| "pytest", | |
| "trustme==0.9.0", | |
| "types-backports", | |
| "types-requests", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/common-workflow-language/schema_salad", | |
| mypy_cmd="MYPYPATH=$MYPYPATH:mypy-stubs {mypy} schema_salad", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| install_cmd="{install} $(grep -v mypy mypy-requirements.txt)" | |
| " -r requirements.txt", | |
| expected_mypy_success=True, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| Project( | |
| location="https://github.com/common-workflow-language/cwltool", | |
| mypy_cmd="MYPYPATH=$MYPYPATH:mypy-stubs {mypy} cwltool tests/*.py setup.py", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| install_cmd="{install} $(grep -v mypy mypy-requirements.txt) -r requirements.txt", | |
| expected_mypy_success=True, | |
| cost={"mypy": 15}, | |
| supported_platforms=["linux", "darwin"], | |
| ), | |
| Project( | |
| location="https://github.com/AlexWaygood/typeshed-stats", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=[ | |
| "attrs", | |
| "cattrs", | |
| "pytest", | |
| "aiohttp", | |
| "pathspec", | |
| "jinja2", | |
| "tomli", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/FasterSpeeding/Tanjun", | |
| mypy_cmd="{mypy} tanjun", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} tanjun", | |
| deps=["hikari", "alluka"], | |
| ), | |
| Project( | |
| location="https://github.com/joerick/pyinstrument", | |
| mypy_cmd="{mypy} pyinstrument", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pyinstrument", | |
| ), | |
| Project( | |
| location="https://github.com/Gobot1234/steam.py", | |
| mypy_cmd="{mypy} steam", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} steam", | |
| deps=["cryptography"], | |
| ), | |
| Project( | |
| location="https://github.com/cpitclaudel/alectryon", | |
| mypy_cmd="{mypy} alectryon.py", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} alectryon.py", | |
| ), | |
| Project( | |
| location="https://github.com/yurijmikhalevich/rclip", | |
| mypy_cmd="{mypy} rclip --explicit-package-bases", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} rclip", | |
| deps=["numpy", "types-Pillow", "types-requests", "types-tqdm"], | |
| ), | |
| Project( | |
| location="https://github.com/psycopg/psycopg", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["pytest", "pproxy"], | |
| ), | |
| Project( | |
| location="https://gitlab.com/dkg/python-sop", | |
| mypy_cmd="{mypy} --strict sop", | |
| pyright_cmd="{pyright} sop", | |
| pyrefly_cmd="{pyrefly} sop", | |
| deps=["argcomplete"], | |
| ), | |
| Project( | |
| location="https://github.com/Rapptz/discord.py", | |
| mypy_cmd="{mypy} discord", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} discord", | |
| deps=["types-requests", "types-setuptools", "aiohttp"], | |
| cost={"mypy": 20}, | |
| ), | |
| Project( | |
| location="https://github.com/canonical/cloud-init", | |
| mypy_cmd="{mypy} cloudinit/ tests/ tools/", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} cloudinit tests tools", | |
| deps=[ | |
| "jinja2", | |
| "pytest", | |
| "types-jsonschema", | |
| "types-oauthlib", | |
| "types-pyyaml", | |
| "types-requests", | |
| "types-setuptools", | |
| ], | |
| cost={"mypy": 15, "pyright": 50}, | |
| ), | |
| Project( | |
| location="https://github.com/mongodb/mongo-python-driver", | |
| mypy_cmd="{mypy} bson gridfs tools pymongo", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} bson gridfs tools pymongo", | |
| deps=["types-requests", "types-pyOpenSSL", "cryptography", "certifi"], | |
| ), | |
| Project( | |
| location="https://github.com/artigraph/artigraph", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=["pydantic", "numpy", "pytest"], | |
| needs_mypy_plugins=True, | |
| ), | |
| Project( | |
| location="https://github.com/MaterializeInc/materialize", | |
| mypy_cmd=( | |
| "MYPYPATH=$MYPYPATH:misc/python {mypy} --explicit-package-bases ci misc/python" | |
| ), | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| install_cmd="{install} -r ci/builder/requirements.txt", | |
| ), | |
| Project( | |
| location="https://github.com/canonical/operator", | |
| mypy_cmd="{mypy} ops", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} ops", | |
| deps=["types-PyYAML"], | |
| ), | |
| Project( | |
| location="https://github.com/caronc/apprise", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=[ | |
| "types-six", | |
| "cryptography", | |
| "types-requests", | |
| "types-Markdown", | |
| "pytest", | |
| "certifi", | |
| "babel", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/Finistere/antidote", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["pytest"], | |
| ), | |
| Project( | |
| location="https://github.com/cognitedata/Expression", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["pytest"], | |
| ), | |
| Project( | |
| location="https://github.com/pyodide/pyodide", | |
| mypy_cmd="{mypy} src pyodide-build --exclude 'setup.py|^src/tests|conftest.py'", | |
| pyright_cmd="{pyright} src pyodide-build", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=[ | |
| "packaging", | |
| "types-docutils", | |
| "types-pyyaml", | |
| "types-setuptools", | |
| "numpy", | |
| "pydantic", | |
| ], | |
| needs_mypy_plugins=True, | |
| ), | |
| Project( | |
| location="https://github.com/bokeh/bokeh", | |
| mypy_cmd="{mypy} src release", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} src release", | |
| deps=["types-boto", "tornado", "numpy", "jinja2", "selenium"], | |
| cost={"pyright": 60}, | |
| ), | |
| Project( | |
| location="https://github.com/pandas-dev/pandas-stubs", | |
| mypy_cmd="{mypy} pandas-stubs tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pandas-stubs tests", | |
| deps=[ | |
| "numpy", | |
| "types-pytz", | |
| "matplotlib", | |
| "xarray", | |
| "pyarrow", | |
| "jinja2", | |
| "pytest", | |
| "SQLAlchemy", | |
| ], | |
| expected_pyright_success=True, | |
| cost={"mypy": 40, "pyright": 75}, | |
| ), | |
| # mypy checks w/ windows platform | |
| Project( | |
| location="https://github.com/enthought/comtypes", | |
| mypy_cmd="{mypy} comtypes --platform win32", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} comtypes", | |
| deps=["numpy"], | |
| ), | |
| Project( | |
| location="https://github.com/mit-ll-responsible-ai/hydra-zen", | |
| mypy_cmd="{mypy} src tests/annotations/mypy_checks.py", | |
| pyright_cmd="{pyright} tests/annotations src", | |
| pyrefly_cmd="{pyrefly} tests/annotations src", | |
| deps=["pydantic", "beartype", "hydra-core"], | |
| cost={"mypy": 10}, | |
| ), | |
| Project( | |
| location="https://github.com/Toufool/AutoSplit", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=[ | |
| "certifi", | |
| "ImageHash", | |
| "numpy", | |
| "packaging", | |
| "PyWinCtl", | |
| "PySide6-Essentials", | |
| "types-D3DShot", | |
| "types-keyboard", | |
| "types-Pillow", | |
| "types-psutil", | |
| "types-PyAutoGUI", | |
| "types-pyinstaller", | |
| "types-pywin32", | |
| "types-requests", | |
| "types-toml", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/Avasam/speedrun.com_global_scoreboard_webapp", | |
| mypy_cmd="{mypy} backend", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} backend", | |
| deps=[ | |
| "Flask", | |
| "PyJWT", | |
| "requests-cache", | |
| "types-Flask-SQLAlchemy", | |
| "types-httplib2", | |
| "types-requests", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/pwndbg/pwndbg", | |
| mypy_cmd="{mypy} pwndbg", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pwndbg", | |
| deps=["types-gdb"], | |
| cost={"mypy": 10, "pyright": 75}, | |
| ), | |
| Project( | |
| location="https://github.com/keithasaurus/koda-validate", | |
| mypy_cmd="{mypy} koda_validate --strict", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} koda_validate", | |
| deps=["koda"], | |
| ), | |
| Project( | |
| location="https://github.com/python/cpython", | |
| mypy_cmd="{mypy} --config-file Tools/clinic/mypy.ini", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| name_override="CPython (Argument Clinic)", | |
| ), | |
| Project( | |
| location="https://github.com/python/cpython", | |
| mypy_cmd="{mypy} --config-file Tools/cases_generator/mypy.ini", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| name_override="CPython (cases_generator)", | |
| ), | |
| Project( | |
| location="https://github.com/python/cpython", | |
| mypy_cmd="{mypy} --config-file Tools/peg_generator/mypy.ini", | |
| pyright_cmd=None, | |
| pyrefly_cmd=None, | |
| deps=["types-setuptools", "types-psutil"], | |
| name_override="CPython (peg_generator)", | |
| ), | |
| Project( | |
| location="https://github.com/python-trio/trio", | |
| mypy_cmd="{mypy} src/trio", | |
| pyright_cmd="{pyright} src/trio", | |
| pyrefly_cmd="{pyrefly} src/trio", | |
| deps=[ | |
| "types-pyOpenSSL", | |
| "types-cffi", | |
| "attrs", | |
| "outcome", | |
| "exceptiongroup", | |
| "pytest", | |
| "sniffio", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/pypa/setuptools", | |
| mypy_cmd="{mypy} setuptools pkg_resources", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} setuptools pkg_resources", | |
| deps=[ | |
| "pytest", | |
| "filelock", | |
| "ini2toml", | |
| "packaging", | |
| "tomli", | |
| "tomli-w", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/detachhead/pytest-robotframework", | |
| mypy_cmd="{mypy} -p pytest_robotframework", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} pytest_robotframework", | |
| ), | |
| Project( | |
| location="https://github.com/mhammond/pywin32", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["types-pywin32", "types-regex", "types-setuptools"], | |
| ), | |
| Project( | |
| location="https://github.com/beartype/beartype", | |
| mypy_cmd="{mypy} beartype", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} beartype", | |
| ), | |
| Project( | |
| location="https://github.com/colour-science/colour", | |
| mypy_cmd="{mypy} colour", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} colour", | |
| deps=["numpy", "pytest", "matplotlib", "pandas-stubs"], | |
| cost={"mypy": 45, "pyright": 180}, | |
| ), | |
| Project( | |
| location="https://github.com/vega/altair", | |
| mypy_cmd="{mypy} altair tests", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} altair tests", | |
| deps=[ | |
| "types-jsonschema", | |
| "pandas-stubs", | |
| "pytest", | |
| "narwhals", | |
| "packaging", | |
| "jinja2", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/hydpy-dev/hydpy", | |
| mypy_cmd="{mypy} hydpy", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} hydpy", | |
| deps=["numpy", "types-docutils"], | |
| ), | |
| Project( | |
| location="https://github.com/static-frame/static-frame", | |
| mypy_cmd="{mypy} static_frame", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} static_frame", | |
| deps=["numpy", "arraykit"], | |
| ), | |
| Project( | |
| location="https://github.com/Instagram/Fixit", | |
| mypy_cmd="{mypy} src/fixit", | |
| pyright_cmd="{pyright} src/fixit", | |
| pyrefly_cmd="{pyrefly} src/fixit", | |
| deps=[ | |
| "click", | |
| "libcst", | |
| "moreorless", | |
| "packaging", | |
| "tomli", | |
| "trailrunner", | |
| "attribution", | |
| "black", | |
| "flake8", | |
| "flake8-bugbear", | |
| "mypy", | |
| "ufmt", | |
| "usort", | |
| "pygls[ws]", | |
| "rich", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/narwhals-dev/narwhals", | |
| mypy_cmd="{mypy} narwhals tests", | |
| pyright_cmd="{pyright} narwhals tests", | |
| pyrefly_cmd="{pyrefly} narwhals tests", | |
| deps=[ | |
| "pandas-stubs", | |
| "pyarrow-stubs", | |
| "sqlframe", | |
| "polars", | |
| "hypothesis", | |
| "pytest", | |
| "uv", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/pola-rs/polars", | |
| mypy_cmd="{mypy} py-polars/src/polars py-polars/tests", | |
| pyright_cmd="{pyright} py-polars/src/polars py-polars/tests", | |
| pyrefly_cmd="{pyrefly} py-polars/src/polars py-polars/tests", | |
| deps=[ | |
| "pandas-stubs", | |
| "boto3-stubs", | |
| "google-auth-stubs", | |
| "polars-cloud", | |
| "numpy", | |
| "pyarrow", | |
| "pydantic", | |
| "tzdata", | |
| "sqlalchemy", | |
| "adbc-driver-manager", | |
| "adbc-driver-sqlite", | |
| "aiosqlite", | |
| "connectorx", | |
| "kuzu", | |
| "cloudpickle", | |
| "fsspec", | |
| "fastexcel", | |
| "openpyxl", | |
| "xlsx2csv", | |
| "xlsxwriter", | |
| "deltalake", | |
| "zstandard", | |
| "altair", | |
| "great-tables", | |
| "gevent", | |
| "matplotlib", | |
| "hypothesis", | |
| "orjson", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/JakobGM/patito", | |
| mypy_cmd="{mypy} src/patito tests", | |
| pyright_cmd="{pyright} src/patito tests", | |
| pyrefly_cmd="{pyrefly} src/patito tests", | |
| deps=["polars", "pydantic", "typing-extensions"], | |
| ), | |
| Project( | |
| location="https://github.com/quantco/dataframely", | |
| mypy_cmd="{mypy} dataframely tests", | |
| pyright_cmd="{pyright} dataframely tests", | |
| pyrefly_cmd="{pyrefly} dataframely tests", | |
| deps=["polars", "numpy", "fsspec", "pydantic"], | |
| ), | |
| Project( | |
| location="https://github.com/functime-org/functime", | |
| mypy_cmd="{mypy} functime tests", | |
| pyright_cmd="{pyright} functime tests", | |
| pyrefly_cmd="{pyrefly} functime tests", | |
| deps=["polars", "numpy"], | |
| ), | |
| Project( | |
| location="https://github.com/pyjanitor-devs/pyjanitor", | |
| mypy_cmd="{mypy} janitor tests", | |
| pyright_cmd="{pyright} janitor tests", | |
| pyrefly_cmd="{pyrefly} janitor tests", | |
| deps=["pandas-stubs", "numpy", "multipledispatch", "natsort"], | |
| ), | |
| Project( | |
| location="https://github.com/has2k1/plotnine", | |
| mypy_cmd="{mypy} plotnine tests", | |
| pyright_cmd="{pyright} plotnine tests", | |
| pyrefly_cmd="{pyrefly} plotnine tests", | |
| deps=["pandas-stubs", "numpy", "matplotlib", "mizani"], | |
| ), | |
| Project( | |
| location="https://github.com/pytorch/helion", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=[ | |
| "torch", | |
| "{repo}[dev,surrogate]", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/wemake-services/django-test-migrations", | |
| mypy_cmd="{mypy} django_test_migrations", | |
| pyright_cmd=None, | |
| pyrefly_cmd="{pyrefly} django_test_migrations", | |
| deps=["django-stubs"], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/wemake-services/django-modern-rest", | |
| mypy_cmd="{mypy} dmr", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly} dmr", | |
| deps=[ | |
| "django-stubs", | |
| "pydantic", | |
| "msgspec", | |
| "pyjwt", | |
| "openapi-spec-validator", | |
| "polyfactory", | |
| ], | |
| expected_mypy_success=True, | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/astropenguin/xarray-dataclasses", | |
| mypy_cmd="{mypy} xarray_dataclasses", | |
| pyright_cmd="{pyright} xarray_dataclasses", | |
| pyrefly_cmd="{pyrefly} xarray_dataclasses", | |
| deps=["numpy", "xarray"], | |
| expected_mypy_success=True, | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/typeddjango/django-stubs", | |
| mypy_cmd="{mypy} django-stubs", | |
| pyright_cmd=None, | |
| pyrefly_cmd="{pyrefly} django-stubs", | |
| install_cmd="{install} . ./ext", | |
| deps=[ | |
| "asgiref", | |
| "django-stubs-ext", | |
| "django", | |
| "redis", | |
| "tomli", | |
| "types-PyYAML", | |
| ], | |
| needs_mypy_plugins=True, | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/typeddjango/django-stubs", | |
| pyrefly_cmd="{pyrefly} tests/assert_type", | |
| deps=[ | |
| "asgiref", | |
| "django-stubs-ext", | |
| "django", | |
| "redis", | |
| "tomli", | |
| "types-PyYAML", | |
| ], | |
| name_override="django-stubs-tests", | |
| ), | |
| Project( | |
| location="https://github.com/scipy/scipy", | |
| mypy_cmd="{mypy} scipy", | |
| pyright_cmd=None, | |
| pyrefly_cmd="{pyrefly} scipy", | |
| deps=["numpy", "pytest", "hypothesis", "setuptools>=71.1", "types-psutil"], | |
| needs_mypy_plugins=True, | |
| ), | |
| Project( | |
| location="https://github.com/mikeshardmind/async-utils", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pypa/cibuildwheel", | |
| mypy_cmd="{mypy} cibuildwheel", | |
| pyright_cmd="{pyright} cibuildwheel", | |
| pyrefly_cmd="{pyrefly} cibuildwheel", | |
| deps=[ | |
| "bracex", | |
| "certifi", | |
| "dependency-groups", | |
| "filelock", | |
| "packaging", | |
| "platformdirs", | |
| "uv", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/pypa/build", | |
| mypy_cmd="{mypy}", | |
| pyright_cmd="{pyright}", | |
| pyrefly_cmd="{pyrefly}", | |
| deps=["importlib_metadata", "packaging", "pyproject_hooks", "tomli", "uv"], | |
| ), | |
| Project( | |
| location="https://github.com/pypa/pyproject-metadata", | |
| mypy_cmd="{mypy} pyproject_metadata", | |
| pyright_cmd="{pyright} pyproject_metadata", | |
| pyrefly_cmd="{pyrefly} pyproject_metadata", | |
| deps=["packaging"], | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/strawberry-graphql/strawberry", | |
| mypy_cmd="{mypy} strawberry --config-file=", | |
| pyright_cmd="{pyright} strawberry", | |
| pyrefly_cmd="{pyrefly} strawberry", | |
| deps=["graphql-core", "python-dateutil", "packaging"], | |
| ), | |
| Project( | |
| location="https://github.com/archlinux/archinstall", | |
| mypy_cmd="{mypy} .", | |
| pyright_cmd="{pyright} .", | |
| pyrefly_cmd="{pyrefly} .", | |
| deps=["cryptography", "pydantic", "pytest", "textual"], | |
| ), | |
| Project( | |
| location="https://github.com/zopefoundation/zope.interface", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["zope.testing"], | |
| ), | |
| Project( | |
| location="https://github.com/scikit-build/scikit-build-core", | |
| mypy_cmd="{mypy} src tests noxfile.py", | |
| pyright_cmd="{pyright} src tests noxfile.py", | |
| pyrefly_cmd="{pyrefly} src tests noxfile.py", | |
| deps=[ | |
| "build", | |
| "cattrs", | |
| "cmake", | |
| "exceptiongroup", | |
| "hatch-fancy-pypi-readme", | |
| "importlib-resources", | |
| "markdown-it-py", | |
| "ninja", | |
| "nox", | |
| "orjson", | |
| "packaging", | |
| "pytest", | |
| "pytest-subprocess", | |
| "rich", | |
| "setuptools-scm", | |
| "tomli", | |
| "types-setuptools", | |
| ], | |
| ), | |
| Project( | |
| location="https://github.com/hynek/svcs", | |
| mypy_cmd="{mypy} src tests/typing", | |
| pyright_cmd="{pyright} src tests/typing", | |
| pyrefly_cmd="{pyrefly} src tests/typing", | |
| deps=["attrs", "flask", "aiohttp", "fastapi", "starlette"], | |
| expected_mypy_success=True, | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/glyph/DateType", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/egraphs-good/egglog-python", | |
| mypy_cmd="{mypy} python", | |
| pyright_cmd="{pyright} python", | |
| pyrefly_cmd="{pyrefly} python", | |
| deps=["anywidget", "syrupy"], | |
| expected_mypy_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/WoLpH/numpy-stl", | |
| mypy_cmd="{mypy} stl", | |
| pyright_cmd="{pyright} stl", | |
| pyrefly_cmd="{pyrefly} stl", | |
| deps=["numpy", "python-utils"], | |
| expected_mypy_success=True, | |
| expected_pyright_success=True, | |
| ), | |
| Project( | |
| location="https://github.com/pyca/cryptography", | |
| mypy_cmd="{mypy} src/cryptography tests", | |
| pyright_cmd="{pyright} src/cryptography tests", | |
| pyrefly_cmd="{pyrefly} src/cryptography tests", | |
| deps=["cffi", "typing-extensions", "pytest"], | |
| ), | |
| Project( | |
| location="https://gitlab.com/TTsangSC/pytest-autoprofile", | |
| mypy_cmd="{mypy} src/pytest_autoprofile tests", | |
| pyright_cmd="{pyright} src/pytest_autoprofile tests", | |
| pyrefly_cmd="{pyrefly} src/pytest_autoprofile tests", | |
| deps=["pytest", "pluggy", "line_profiler", "typing-extensions"], | |
| ), | |
| Project( | |
| location="https://github.com/python-attrs/cattrs", | |
| mypy_cmd="{mypy} src", | |
| pyright_cmd="{pyright} src", | |
| pyrefly_cmd="{pyrefly} src", | |
| deps=["attrs"], | |
| ), | |
| ] |