24 Commits
Author SHA1 Message Date
Roman Knyazhitskiy 172b83b4fc Adding a test for generator support (#171)
* Add a test for generators

* Remove output annotations from decorators

Also guarded torch imports for better compatibility with
requirements.txt

* Add flag to the main meta class to skip the typecheck

* Return to the old solution

* Make async tests work

* Minor adjustments/fixing typos

* Correct Python path for new tests

* Remove some jax-dependent code

* Implement equality for MetaArrays

* Make all Dim variations frozen dataclasses

* Shorten AbstractArray methods

* Final touches

* Removing get_origin use

* Update tests with @jaxtyp
2024-02-25 12:07:01 +00:00
jianlijianli 9beb5f2d29 Add int4/uint4 support in jaxtyping. (#174)
* Add int4/uint4 support in jaxtyping.

* Fix a typo and update api docs.
2024-02-25 12:07:01 +00:00
Patrick Kidger 33cf4fcdac Simplified internals by removing jaxtyping_raise; jaxtyping_malformed. 2023-12-05 19:06:00 -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 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 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 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 1a048b1f2f Fixed Float[ArrayLike, "#*foo"] leaving out bool/int/float/complex. 2023-10-21 12:01:21 -07:00
Patrick Kidger 849b15db3b Added better docs; added PRNGKeys. Packaging with pyproject.toml.
Also added support for matching dtypes using regexes, and for nesting e.g. Shaped[Float[Array, "dim1 dim2"], "dim3"].
2023-05-10 15:27:25 -07:00
Patrick Kidger c92b0d0ab1 Some improvements (#77)
* Various improvements.

- Added support for functions in symbolic dimensions, e.g. "min(foo,bar)", which were previously disallowed due to the presence of a comma. (#51)
- Added support for adding ignored names to dimensions, e.g. "cols=4". (#76)

* Now works with Python 3.10 A | B union types.
2023-04-13 19:18:55 +01:00
Patrick Kidger e03c1c329e We now have Float[np.ndarray, ...] <: np.ndarray. Added basic torch tests. (#68)
This required quite a lot of refactoring! JAX supports virtual subclass registration (its metaclass is ABCMeta) but NumPy does not, so we have to actually subclass `np.ndarray`.
Simple stuff like __base__ hacking fails due to deallocator conflicts.
2023-03-04 17:29:04 +00:00
Patrick Kidger 5600a1aac8 Fixed cloudpickle breaking, mark 2 2023-03-02 17:37:53 -08:00
Patrick Kidger e2f004afd4 Added support for jax.typing.ArrayLike; now works with PyTorch's bool 2023-02-25 17:01:27 -08:00
Patrick Kidger 01f8f20bf5 Fixed a few names 2022-09-07 12:20:42 -07:00
Patrick Kidger a53fe6af57 Changes from feedback:
- Float32 introduced to replace f32 (etc.)
- Old f32 aliases were previously around for backward-compatibility, but
  the code is pretty hideous, and all stakeholders are now on board
  through RFC #13.
- Overall feedback was that Int{Sign,Unsign} was too long and not enough
  like numpy. Changed to Int, UInt, and Integer.
2022-09-07 11:09:48 -07:00
Patrick Kidger 48e8131247 Added jaxtyping.Array=jnp.ndarray 2022-08-30 12:56:47 -07:00
Patrick Kidger 903000f3d5 Rewrote syntax 2022-08-30 12:47:45 -07:00
Patrick Kidger 07259aa5c8 Added support for symbolic expressions in axes. Closes #9. 2022-08-01 01:00:18 +01:00
Patrick Kidger 6ff4620d1a Broadcast+variadic is now more lenient, and supports anything broadcastable together. Closes #8 2022-07-31 23:59:20 +01:00
Patrick Kidger 6e2837e5b7 Tidied up _#* into acting as prefixes, regardless of order. Closes #10 2022-07-31 23:45:40 +01:00
Patrick Kidger 9f75958b2d Make test/helpers.py a relative import 2022-07-12 10:03:19 +01:00
Patrick Kidger 0800e5fa38 renamed tests->test so release workflow works 2022-07-11 13:06:54 +01:00