Tip

💗 Upbear us at GitHub Sponsors and SonarQube Advanced Security (Tidelift). Follow us on Bluesky.

Your generous support is our quality assurance. 💗

# Features

Beartype complies with vast swaths of Python’s `typing` landscape and lint-filled laundry list of Python Enhancement Proposals (PEPs) – but nobody’s perfect. Not even the hulking form of beartype does everything. </audience_gasps>

Let’s chart exactly what beartype complies with and when beartype first did so. Introducing… Beartype’s feature matrix of bloated doom! It will bore you into stunned disbelief that somebody typed all this. [1]

category | feature | partial support | full support
--- | --- | --- | ---
Python | 3.5 | — | 0.1.0—0.3.0
| 3.6 | — | 0.1.0—0.10.4
| 3.7 | — | 0.1.0—0.15.0
| 3.8 | — | 0.1.0—0.19.0
| 3.9 | — | 0.3.2—0.22.0
| 3.10 | — | 0.7.0—current
| 3.11 | — | 0.12.0—current
| 3.12 | — | 0.17.0—current
| 3.13 | — | 0.19.0—current
| 3.14 | — | 0.22.0—current
PEP | 342 | none | 0.22.8—current
PEP | 362 | none | none
PEP | 380 | none | 0.22.8—current
| 435 | 0.16.0—current | none
| 440 | 0.1.0—current | none
| 484 | 0.2.0—current | none
| 517 | — | 0.19.0—current
| 518 | — | 0.19.0—current
PEP | 525 | none | 0.22.7—current
| 526 | — | 0.15.0—current
| 544 | — | 0.4.0—current
| 557 | 0.10.0—current | none
| 560 | — | 0.4.0—current
| 561 | — | 0.6.0—current
| 563 | — | 0.7.0—current
| 570 | — | 0.10.0—current
| 572 | — | 0.4.0—current
| 585 | — | 0.5.0—current
| 586 | — | 0.7.0—current
| 589 | 0.9.0—current | none
| 591 | 0.13.0—current | none
| 593 | — | 0.4.0—current
| 604 | — | 0.10.0—current
| 612 | 0.19.0—current | none
| 613 | none | 0.18.0—current
| 621 | — | 0.19.0—current
| 646 | 0.22.0—current | none
| 647 | — | 0.13.0—current
| 649 | none | 0.22.0—current
| 663 | 0.16.0—current | none
| 673 | — | 0.14.0—current
| 675 | 0.14.0—current | none
| 681 | none | none
| 688 | — | 0.1.0—current
| 692 | 0.19.0—current | none
| 695 | — | 0.21.0—current
| 696 | none | 0.22.0—current
| 698 | none | none
| 705 | none | none
| 742 | — | 0.20.0—current
| 747 | none | none
| 749 | none | 0.22.0—current
| 3102 | — | 0.1.0—current
| 3119 | — | 0.9.0—current
| 3141 | — | 0.1.0—current
packaging | PyPI | — | 0.1.0—current
| Anaconda | — | 0.1.0—current
| Arch Linux | — | 0.12.0—current
| Gentoo Linux | — | 0.2.0—current
| macOS Homebrew | — | 0.5.1—current
| macOS MacPorts | — | 0.5.1—current
decoratable | classes | — | 0.11.0—current
| coroutines | — | 0.9.0—current
| dataclasses | — | 0.10.0—current
| enumerations | 0.16.0—current | none
| functions | — | 0.1.0—current
| generators (asynchronous) | — | 0.9.0—current
| generators (synchronous) | — | 0.1.0—current
| methods | — | 0.1.0—current
| pseudo-functions (`__call__()`) | — | 0.13.0—current
hints | covariant | — | 0.1.0—current
| contravariant | none | none
| absolute forward references | — | 0.14.0—current
| relative forward references | — | 0.14.0—current
| subscriptable forward references | — | 0.16.0—current
| tuple unions | — | 0.1.0—current
| `type` alias statements | — | 0.21.0—current
parameters | optional | — | 0.18.0—current
| keyword-only | — | 0.1.0—current
| positional-only | — | 0.10.0—current
| variadic keyword | — | 0.19.0—current
| variadic positional | — | 0.1.0—current
plugin APIs | `__instancecheck_str__` | — | 0.17.0—current
shell variables | ${BEARTYPE_IS_COLOR} | — | 0.16.0—current
static checkers | mypy | — | 0.6.0—current
| pyright | — | 0.11.0—current
| pytype | none | none
| Pyre | none | none
`beartype` | `beartype()` | — | 0.1.0—current
| `BeartypeConf` | — | 0.10.0—current
| `BeartypeStrategy` | — | 0.10.0—current
beartype.abby | die_if_unbearable | — | 0.10.0—0.10.4
| is_bearable | — | 0.10.0—0.10.4
`beartype.claw` | `beartype_all()` | — | 0.15.0—current
| `beartype_package()` | — | 0.15.0—current
| `beartype_packages()` | — | 0.15.0—current
| `beartype_this_package()` | — | 0.15.0—current
| `beartyping()` | — | 0.15.0—current
`beartype.bite` | `infer_hint()` | — | 0.22.0—current
`beartype.door` | `TypeHint` | — | 0.11.0—current
| `AnnotatedTypeHint` | — | 0.11.0—current
| `AnyTypeHint` | — | 0.20.0—current
| `CallableTypeHint` | — | 0.11.0—current
| `GenericTypeHint` | — | 0.20.0—current
| `LiteralTypeHint` | — | 0.11.0—current
| `NewTypeTypeHint` | — | 0.11.0—current
| `TupleFixedTypeHint` | — | 0.19.0—current
| `TupleVariableTypeHint` | — | 0.19.0—current
| `TypeVarTypeHint` | — | 0.11.0—current
| `UnionTypeHint` | — | 0.11.0—current
| `die_if_unbearable()` | — | 0.11.0—current
| `infer_hint()` | — | 0.19.0—0.21.0
| `is_bearable()` | — | 0.11.0—current
| `is_subhint()` | — | 0.11.0—current
`beartype.peps` | `resolve_pep563()` | — | 0.11.0—current
`beartype.typing` | all | — | 0.10.0—current
`beartype.vale` | `Is` | — | 0.7.0—current
| `IsAttr` | — | 0.7.0—current
| `IsEqual` | — | 0.7.0—current
| `IsInstance` | — | 0.10.0—current
| `IsSubclass` | — | 0.9.0—current
builtins | `None` | — | 0.6.0—current
| `NotImplemented` | — | 0.7.1—current
| `dict` | — | 0.18.0—current
| `frozenset` | — | 0.19.0—current
| `list` | — | 0.5.0—current
| `set` | — | 0.19.0—current
| `tuple` | — | 0.5.0—current
| `type` | — | 0.9.0—current
click | all | — | 0.20.0—current
`collections` | `ChainMap` | — | 0.19.0—current
| `Counter` | — | 0.19.0—current
| `OrderedDict` | — | 0.18.0—current
| `defaultdict` | — | 0.18.0—current
| `deque` | — | 0.19.0—current
celery.Celery | @task | – | 0.22.0—current
`collections.abc` | `AsyncGenerator` | 0.5.0—current | none
| `AsyncIterable` | 0.5.0—current | none
| `AsyncIterator` | 0.5.0—current | none
| `Awaitable` | 0.5.0—current | none
| `Buffer` | — | 0.1.0—current
| `ByteString` | — | 0.5.0—current
| `Callable` | 0.5.0—current | none
| `Collection` | – | 0.19.0—current
| `Container` | — | 0.20.0—current
| `Coroutine` | 0.9.0—current | none
| `Generator` | 0.5.0—current | none
| `ItemsView` | — | 0.19.0—current
| `Iterable` | — | 0.20.0—current
| `Iterator` | 0.5.0—current | none
| `KeysView` | – | 0.19.0—current
| `Mapping` | – | 0.18.0—current
| `MappingView` | 0.5.0—current | none
| `MutableMapping` | – | 0.18.0—current
| `MutableSequence` | — | 0.5.0—current
| `MutableSet` | — | 0.19.0—current
| `Reversible` | — | 0.20.0—current
| `Sequence` | — | 0.5.0—current
| `Set` | — | 0.19.0—current
| `ValuesView` | — | 0.19.0—current
`contextlib` | `AbstractAsyncContextManager` | 0.5.0—current | none
| `AbstractContextManager` | 0.5.0—current | none
| `asynccontextmanager` | — | 0.20.0—current
| `contextmanager` | — | 0.15.0—current
`dataclasses` | `InitVar` | — | 0.10.0—current
| `dataclass` | 0.10.0—current | none
`enum` | `Enum` | 0.16.0—current | none
| `StrEnum` | 0.16.0—current | none
equinox | Module | — | 0.17.0—0.19.0
| @filter_jit | — | 0.19.0—current
gradio | all | – | 0.22.7—current
inspect | isasyncgenfunction | – | 0.22.7—current
| isgeneratorfunction | – | 0.22.6—current
jax | @jit | — | 0.19.0—current
jaxtyping | @jaxtyped | — | 0.22.0—current
langchain | most | 0.20.0—current | none
langchain_core.runnables | @chain | – | 0.22.0—current
`functools` | `lru_cache` | — | 0.15.0—current
nuitka | all | — | 0.12.0—current
numba | @njit | — | 0.19.0—current
nptyping | all | — | 0.17.0—current
numpy.typing | numpy.typing.NDArray | — | 0.8.0—current
`os` | `PathLike` | 0.17.0—current | none
PyInstaller | all | — | 0.22.9—current
pandera | all | — | 0.13.0—current
pydantic | all | 0.20.0—current | none
`re` | `Match` | 0.5.0—current | none
| `Pattern` | 0.5.0—current | none
redis | redis.Redis | — | 0.22.3—current
rich_click | all | — | 0.20.1—current
sphinx | sphinx.ext.autodoc | — | 0.9.0—current
`typing` | `AbstractSet` | — | 0.19.0—current
| `Annotated` | — | 0.4.0—current
| `Any` | — | 0.2.0—current
| `AnyStr` | 0.4.0—current | none
| `AsyncContextManager` | 0.4.0—current | none
| `AsyncGenerator` | 0.2.0—current | none
| `AsyncIterable` | 0.2.0—current | none
| `AsyncIterator` | 0.2.0—current | none
| `Awaitable` | 0.2.0—current | none
| `BinaryIO` | — | 0.10.0—current
| `ByteString` | — | 0.2.0—current
| `Callable` | 0.2.0—current | none
| `ChainMap` | — | 0.19.0—current
| `ClassVar` | none | none
| `Collection` | — | 0.19.0—current
| `Concatenate` | none | none
| `Container` | — | 0.20.0—current
| `ContextManager` | 0.4.0—current | none
| `Coroutine` | 0.9.0—current | none
| `Counter` | — | 0.19.0—current*
| `DefaultDict` | — | 0.18.0—current
| `Deque` | — | 0.19.0—current
| `Dict` | — | 0.18.0—current*
| `Final` | 0.13.0—current | none
| `ForwardRef` | — | 0.16.0—current
| `FrozenSet` | — | 0.19.0—current
| `Generator` | 0.2.0—current | none
| `Generic` | — | 0.4.0—current
| `Hashable` | 0.2.0—current | none
| `IO` | — | 0.10.0—current
| `ItemsView` | — | 0.19.0—current
| `Iterable` | — | 0.20.0—current
| `Iterator` | 0.2.0—current | none
| `KeysView` | — | 0.19.0—current
| `List` | — | 0.3.0—current
| `Literal` | — | 0.7.0—current
| `LiteralString` | 0.14.0—current | none
| `Mapping` | – | 0.18.0—current*
| `MappingView` | 0.2.0—current | none
| `Match` | 0.4.0—current | none
| `MutableMapping` | – | 0.18.0—current
| `MutableSequence` | — | 0.3.0—current
| `MutableSet` | — | 0.19.0—current
| `NamedTuple` | — | 0.12.0—current
| `NewType` | — | 0.4.0—current
| `NoDefault` | — | 0.22.0—current
| `NoReturn` | — | 0.4.0—current
| `Optional` | — | 0.2.0—current
| `OrderedDict` | – | 0.18.0—current
| `ParamSpec` | none | none
| `ParamSpecArgs` | 0.19.0—current | none
| `ParamSpecKwargs` | 0.19.0—current | none
| `Pattern` | 0.4.0—current | none
| `Protocol` | — | 0.4.0—current
| `ReadOnly` | none | none
| `Reversible` | — | 0.20.0—current
| `Self` | — | 0.14.0—current
| `Sequence` | — | 0.3.0—current
| `Set` | — | 0.190—current
| `Sized` | — | 0.2.0—current
| `SupportsAbs` | — | 0.4.0—current
| `SupportsBytes` | — | 0.4.0—current
| `SupportsComplex` | — | 0.4.0—current
| `SupportsFloat` | — | 0.4.0—current
| `SupportsIndex` | — | 0.4.0—current
| `SupportsInt` | — | 0.4.0—current
| `SupportsRound` | — | 0.4.0—current
| `Text` | — | 0.1.0—current
| `TextIO` | — | 0.10.0—current
| `Tuple` | — | 0.4.0—current
| `Type` | — | 0.9.0—current
| `TypeAlias` | — | 0.18.0—current
| `TypeGuard` | — | 0.13.0—current
| `TypeIs` | — | 0.20.0—current
| `TypedDict` | 0.9.0—current | none
| `TypeVar` | 0.4.0—current | none
| `TypeVarTuple` | 0.19.0—current | none
| `Union` | — | 0.2.0—current
| `Unpack` | 0.19.0—current | none
| `ValuesView` | — | 0.19.0—current
| `TYPE_CHECKING` | — | 0.5.0—current
| `final` | none | none
| `no_type_check` | — | 0.5.0—current
| `override` | none | none
typing_extensions | all attributes | — | 0.8.0—current
xarray | all | 0.20.0—current | none
`weakref` | `ref` | 0.17.0—current | none

[1]

They now suffer crippling RSI so that you may appear knowledgeable before colleagues.