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.
Metadata
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 | Provenance | Actions |
|---|---|---|---|---|
| infer_types-1.0.0.tar.gz | 14.6 kB | Without provenance | Details for infer_types-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| infer_types-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for infer_types-1.0.0-py3-none-any.whl |
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
|
Security for infer_types 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.