Commit Graph
151 Commits
Author SHA1 Message Date
Patrick Kidger d7fd59a34c Added print_bindings. 2024-02-25 12:07:01 +00:00
Afroz Mohiuddin 8de8c0bb68 Correct pytree path in array.md
Correct pytree path in array.md
2024-02-12 15:27:03 +00:00
Patrick Kidger f18de2ce28 Added better docs on stringified type annotations 2024-01-08 05:45:32 -08:00
Patrick Kidger eb9a23df63 Update dataclass docs (#155)
* Update dataclass docs
2024-01-05 13:17:45 +00:00
Jérome Eertmans adf1a5e4e3 chore(docs): fix typos in docstrings
Hello!

This is a small PR to fix typos in docstrings.

Maybe, I would suggest adding an import for `dataclass` in the example (otherwise it will not run), and maybe indicate that it works with other dataclasses decorators, like the `dataclass` decorator from chex.
2024-01-05 04:36:08 -08:00
Patrick Kidger 272be74e01 Bump version v0.2.25 2023-12-15 10:34:45 -08:00
Patrick Kidger 7df267efa4 Upgrade to ruff-format 2023-12-10 15:27:42 -08:00
Patrick Kidger d43933f942 Updated to latest pyktdocs_tweaks 2023-12-09 14:55:30 -08:00
Patrick Kidger 1acc0d7153 Improved error messages a little bit, in particular to highlight individual problematic arguments. 2023-12-08 10:17:57 -08:00
Patrick Kidger 33cf4fcdac Simplified internals by removing jaxtyping_raise; jaxtyping_malformed. 2023-12-05 19:06:00 -08:00
Patrick Kidger e5cc75e4a3 Removed internal jaxtyped_fns registry that is no longer needed. 2023-12-05 19:06:00 -08:00
Patrick Kidger 125bc89ee9 Added environment config flags.
These flags are `JAXTYPING_DISABLE` and `JAXTYPING_REMOVE_TYPECHECKER_STACK`.

In addition, have now added warnings when using old-style double-decorator syntax, which also serves to guard against the easy mistake of
```python
@jaxtyped(typechecker)
def foo(...)
```
which actually decorates the `typechecker`, not `foo`.
2023-12-05 19:06:00 -08:00
Patrick Kidger 8e47c9081c version bump v0.2.24 2023-11-27 09:50:02 -08:00
Patrick Kidger 205978958f Fix install_import_hook(..., None) 2023-11-27 09:50:02 -08:00
Patrick Kidger 850f4e72cd Handle beartype doing isinstance(None, hint) 2023-11-27 09:50:02 -08:00
Patrick Kidger 0a76c9c70c Error message improvements 2023-11-27 09:50:02 -08:00
Patrick Kidger 5fbd6718ab Added support for 'self' in dataclass attribute annotations; switched from args and kwargs to just arguments. 2023-11-27 09:50:02 -08:00
Patrick Kidger 80a99568f7 Removed unused elements from unions, e.g. Float[ArrayLike, ...] will no longer include Float[np.bool, ...]. 2023-11-27 09:50:02 -08:00
Patrick Kidger baffbef5ca Doc fix 2023-11-27 09:50:02 -08:00
Patrick Kidger 127eae56b7 array shapes+dtypes no longer checked as part of pytree flattening. This avoids edge-case crash when using pytree-path dependent sizes 2023-11-27 09:50:02 -08:00
Patrick Kidger 58600d3fe0 Fixed new-style PRNG keys. 2023-11-27 09:50:02 -08:00
Patrick Kidger 7925e278f4 Symbolic expressions now support delayed binding to arguments. Fixes #93. 2023-11-27 09:50:02 -08:00
Patrick Kidger ba3b2027cc Standardised terminology: now using just "axis"/"axes", not "dimension" 2023-11-27 09:50:02 -08:00
Patrick Kidger 12d540794f Pretty error messages: fixes #6.
Phew, this ended up being a pretty complicated change!
The basic summary is that we now support the syntax
```
@jaxtyped(typechecker=typechecker)
def f(...): ...
```
and when using this, we now get pretty error messages about what went
wrong.

(
The old syntax, i.e.
```
@jaxtyped
@typechecker
def f(...): ...
```
is still supported, but doesn't give much information.
)

The internals of this do quite a lot of magic! In particular we
dynamically create quite a lot of functions and test the provided
arguments against their signatures. The overhead should still be
minimal under `jax.jit`, though.
(TODO: what's the overhead like in non-jit situations, e.g. PyTorch?
I've tried to minimise the overhead throughout just to be sure, but
perhaps PyTorch users should stick to the old syntax?)
2023-11-27 09:50:02 -08:00
Patrick Kidger 63e0fdff74 Typecheck errors now state the size of the stored axis and structure values. 2023-11-27 09:50:02 -08:00
Patrick Kidger d12291de7e Added support for treepath-dependent sizes. 2023-11-27 09:50:02 -08:00
Patrick Kidger 9e1ba8a77d Added support for declaring PyTree structures. 2023-11-27 09:50:02 -08:00
Patrick Kidger e4a93ee218 Added with jaxtyped("context"):, for now undocumented. 2023-11-07 11:34:40 -08:00
Patrick Kidger 260fb36876 Fixed mixing variadic+broadcast with variadic+nonbroadcast dimensions.
Previously, something like this would not raise an error, as
variadic+broadcast dimensions were stored in a separate namespace to
variadic+nonbroadcast dimensions:
```python
def f(x: Float[Array, "*foo"], y: Float[Array, "#*foo"]):
    pass

a, b = ...
assert a.shape == (3, 4)
assert b.shape == (5,)
f(a, b)
```
2023-11-07 11:34:40 -08:00
Patrick Kidger 9646eff7e1 Fixes for g3 2023-10-23 22:00:51 -07:00
Patrick Kidger 1a048b1f2f Fixed Float[ArrayLike, "#*foo"] leaving out bool/int/float/complex. 2023-10-21 12:01:21 -07:00
Patrick Kidger 338ca631c6 beartype error messages for dataclass attributes now use the correct name 2023-10-21 11:38:44 -07:00
Patrick Kidger 2ab8286c81 Error message for bad symbolic shapes is now useful. 2023-10-21 11:38:04 -07:00
Patrick Kidger 7f85a12a85 Added DTypeLike to match jax.typing 2023-10-17 09:43:31 -07:00
Patrick Kidger e55348a4b4 Added jaxtyping.Real 2023-10-17 09:33:03 -07:00
Patrick Kidger 7a84b27da9 Bump version v0.2.23 2023-10-11 11:25:06 -07:00
Roma Knyaz 77c263c3de Allow only typeguard lower than 3.x.x version 2023-10-10 10:18:49 -07:00
Patrick Kidger 91a36aaee4 dataclasses now have fields checked, not __init__.
Previously, using the import hook with dataclasses resulted in the `__init__` method of the dataclass being checked.
This was undesirable when using `eqx.field(converter=...)`, as the annotation didn't necessarily reflect the argument type.
A typical example was
```python
class Foo(eqx.Module):
    x: jax.Array = eqx.field(converter=jnp.ndarray)

Foo(1)  # 1 is not an array! But this code is valid.
```

After this change, we instead monkey-patch our checks to happen at the end of the `__init__` of the dataclass -- after conversion has run.

Note that this requires https://github.com/patrick-kidger/equinox/pull/524. Otherwise, Equinox does conversion too late (in `_ModuleMeta.__call__`, after `__init__` has been run).
2023-10-09 21:58:14 -07:00
Roma Knyaz 513a54b048 Better handling of user-defined typechecker 2023-10-09 10:21:07 -07:00
Patrick Kidger 9c9635d4f3 Add Orbax to ecosystem list. 2023-10-06 15:51:22 +01:00
Patrick Kidger c3e7fd35a2 Update ecosystem links 2023-10-06 15:43:29 +01:00
Roma Knyaz ef102f40b4 Bump up pre-commit ruff and black versions 2023-10-02 13:43:36 -07:00
Roma Knyaz 4917c2e30f Fix flakiness of transitive import hook test 2023-10-02 09:03:06 -07:00
Patrick Kidger 17092ad8d8 Simplified the import hook tests 2023-09-27 15:37:56 -07:00
Patrick Kidger 75392d6330 Added missing license headers 2023-09-27 15:37:56 -07:00
Patrick Kidger 18b8e76d67 Be tolerant of faulty IPython installs. 2023-09-25 18:15:02 -07:00
Patrick Kidger 1e5229c20e Should be more robust to jax/numpy/tensorflow version changes 2023-09-25 11:07:36 -07:00
Patrick Kidger e05985df2b Document IPython extension and version nump v0.2.22 2023-09-20 11:33:19 -07:00
Roma Knyaz f454cb797c Make jaxtyping an IPython extension 2023-09-20 10:34:32 -07:00
Patrick Kidger d2785baced Better suppotr for incomplete JAX installations. Supersedes #105. 2023-09-14 20:13:06 -07:00