infer-types
A CLI tool to automatically add type annotations into Python code.
The main scenario for using the tool is to help you with annotating a big and old codebase. It won't solve the task for you 100% but will definitely help you tremendously, because many of the functions in the real world have quite simple return types that are easy to infer automatically.
Features:
- 100% automated, get a bunch of type annotations with no effort.
- 100% static, all types are inferred without running the code.
- A lot of heuristics and smart inference.
- Actively uses typeshed to find annotations for unannotated dependencies.
Example
Let's say, you have the following method:
class Database:
def users_count(self):
return len(self.users)
Since len always returns int, infer-types is able to infer the return type of the method. So, after running the tool, the code will look like this:
class Database:
def users_count(self) -> int:
return len(self.users)
Installation
python3 -m pip install infer-types
Usage
python3 -m infer_types ./example/
The tool will add new import statements that can be duplicated and are located not at the top of the file. To fix it, run isort:
python3 -m isort ./example/
The infer-types tool uses the new fancy syntax for type annotations introduced in Python 3.10. So, instead of Optional[str] it will emit str | None. If your code is supposed to run on an older version of Python, add from __future__ import annotations at the beginning of each file. It will solve the issue and also make startup of your app faster. You can also do that with isort:
python3 -m isort --add-import 'from __future__ import annotations' ./example/
See awesome-python-typing for more tools to help you with annotating your code.
How it works
- Most of heuristics live in astypes package. Check it out learn more about the main inference logic.
- If the same method is defined in a base class, copy the type annotations from there.
- If there are no return statements returning a value, the return type is
None. - If there is a
yieldstatement, the return type istyping.Iterator. - In some cases, the return type can be guessed from the function name. For example,
is_openfunction is assumed to returnboolbecause it starts withis_.
You can run only a specific heuristic using the --only flag.
Release files for infer_types 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| infer_types-1.0.0.tar.gz | 14.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| infer_types-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.7 kB
Release files / infer_types-1.0.0.tar.gz
| Download URL | infer_types-1.0.0.tar.gz |
|---|---|
| Size | 14.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a7d09a87431bccf73c30983b7918803bf4fe066df053aecf35ab293aad9a0c2b
|
|
BLAKE2b-256 checksum How to use checksums |
ab00bce897ae055f60e805485ccf64a0b74767ed397195a48e9e220c63bfa41f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.28.2
|
Release files / infer_types-1.0.0-py3-none-any.whl
| Download URL | infer_types-1.0.0-py3-none-any.whl |
|---|---|
| Size | 11.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98ac8ff060061d56736e13238945b835c5c90eef7fc17f42adf9dded26b94f29
|
|
BLAKE2b-256 checksum How to use checksums |
3a299b412805f930bae4dd60babef9be5677a033e00f3c0b3b40e64e6f3224cb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.28.2
|