Bearshape
Runtime shape and dtype checking for NumPy, JAX, PyTorch, CuPy, and tree-structured containers, powered by beartype.
from beartype import beartype
from bearshape import N, C
from bearshape.numpy import F32
@beartype
def normalize(x: F32[N, C]) -> F32[N, C]:
return x / x.sum(axis=1, keepdims=True)
Bearshape turns annotations such as F32[N, C], F32Like[~B, C],
F32[Value("size")], and Tree[F32[N], T] into runtime-validated contracts.
Named dimensions are shared within a function call, so mismatched shapes fail at
the boundary instead of later in array code.
Install
pip install bearshape
Bearshape keeps the root import lightweight. Install the array backend packages you use explicitly:
pip install bearshape numpy
pip install bearshape numpy torch
pip install bearshape numpy jax
pip install bearshape numpy cupy
pip install bearshape numpy optree
What It Checks
- strict array type, dtype, and shape contracts
- backend-aware
Like[...]conversion checks - scalar-like values and constrained runtime
Value(...)dimensions - tree leaf and structure annotations through JAX or OpTree
- annotation syntax exercised by pyright, mypy, and ty fixtures
Public Surface
Import dimensions, Value, Scalar, DtypeSpec, check, and check_context
from bearshape.
Import backend aliases from backend modules:
from bearshape.numpy import F32, F32Like
from bearshape.jax import Tree
from bearshape.torch import I64
The root package does not import NumPy or any backend. Backend modules require their own runtime dependencies.
Development
uv sync
uv run prek run -a
uv run pytest -n auto tests/
uv run pytest -n auto tests/test_typecheck.py
uv run pyright src tests/typing
uv run mypy src tests/typing
uv run ty check src tests/typing
CuPy runtime tests require a CUDA-capable environment and are deferred on CPU-only machines.
See the documentation site for the full user guide and API reference.
Metadata
Release files for bearshape 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bearshape-0.0.1.tar.gz | 37.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bearshape-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 86.3 kB
Release files / bearshape-0.0.1.tar.gz
| Download URL | bearshape-0.0.1.tar.gz |
|---|---|
| Size | 37.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f9ead28b049001e1134c0d9b79aa50579c8430b253651ce0691d446efb3e9055
|
|
BLAKE2b-256 checksum How to use checksums |
69f4128557b40f1c77fc45f1ddfe13a0c479be0a6b2b93e2206f08beaa2d84c7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / bearshape-0.0.1-py3-none-any.whl
| Download URL | bearshape-0.0.1-py3-none-any.whl |
|---|---|
| Size | 48.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3424e6a1b0ab1ed15ad2f6638852128328cd88b4aaa27aac649f0a114b815597
|
|
BLAKE2b-256 checksum How to use checksums |
ac7894c79d3b5e1713f8291704bf011abff89ac39d483a0e0aa23d68227caee8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.15 {"installer":{"name":"uv","version":"0.11.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|