haliax 1.4.dev410__tar.gz → 1.4.dev411__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.agents/projects/api_parity.md +1 -1
- {haliax-1.4.dev410 → haliax-1.4.dev411}/PKG-INFO +1 -1
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/api.md +1 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/__about__.py +1 -1
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/__init__.py +2 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/ops.py +24 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_ops.py +23 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.coveragerc +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.flake8 +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.github/workflows/publish_dev.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.github/workflows/run_pre_commit.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.github/workflows/run_quick_levanter_tests.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.github/workflows/run_tests.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.gitignore +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.playbooks/add-types.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.playbooks/wrap-non-named.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.pre-commit-config.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/.readthedocs.yaml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/AGENTS.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/AUTHORS.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/CONTRIBUTING.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/CONTRIBUTORS.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/LICENSE +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/README.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/broadcasting.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/cheatsheet.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/css/material.css +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/css/mkdocstrings.css +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/faq.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/data_parallel_mesh.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/data_parallel_mesh_replicated.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_1d.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_1d_zero.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d_batch_partitioned.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d_data_replicated.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d_data_replicated_mlp_partitioned.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d_intermediate_fully_partitioned.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/figures/device_mesh_2d_zero.png +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/fp8.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/index.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/indexing.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/matmul.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/nn.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/partitioning.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/primer.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/rearrange.ipynb +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/rearrange.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/requirements.txt +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/scan.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/state-dict.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/tutorial.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/typing.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/docs/vmap.md +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/etc/license_header.txt +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/mkdocs.yml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/pyproject.toml +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/__init__.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/compile_utils.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/dot.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/einsum.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/fp8.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/parsing.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/rearrange.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/scan.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/state_dict.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/_src/util.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/axis.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/core.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/debug.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/field.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/haxtyping.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/hof.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/jax_utils.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/__init__.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/activations.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/attention.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/conv.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/dropout.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/embedding.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/linear.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/loss.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/mlp.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/normalization.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/pool.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/nn/scan.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/partitioning.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/quantization.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/random.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/specialized_fns.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/state_dict.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/tree_util.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/types.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/util.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/src/haliax/wrap.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/core_test.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_attention.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_axis.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_bitwise_ops.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_conv.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_debug.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_dot.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_dtype_typing.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_einsum.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_field.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_fp8.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_hof.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_int8.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_moe_linear.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_namedarray_typing.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_nan_reductions.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_nn.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_parsing.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_partitioning.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_pool.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_random.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_rearrange.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_scan.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_scatter_gather.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_specialized_fns.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_state_dict.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_tree_util.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_utils.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/tests/test_visualize_sharding.py +0 -0
- {haliax-1.4.dev410 → haliax-1.4.dev411}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: haliax
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.dev411
|
|
4
4
|
Summary: Named Tensors for Legible Deep Learning in JAX
|
|
5
5
|
Project-URL: Homepage, https://github.com/stanford-crfm/haliax
|
|
6
6
|
Project-URL: Bug Tracker, https://github.com/stanford-crfm/haliax/issues/
|
|
@@ -84,6 +84,7 @@ from .ops import (
|
|
|
84
84
|
trace,
|
|
85
85
|
tril,
|
|
86
86
|
triu,
|
|
87
|
+
nonzero,
|
|
87
88
|
unique,
|
|
88
89
|
unique_values,
|
|
89
90
|
unique_counts,
|
|
@@ -1199,6 +1200,7 @@ __all__ = [
|
|
|
1199
1200
|
"map",
|
|
1200
1201
|
"vmap",
|
|
1201
1202
|
"trace",
|
|
1203
|
+
"nonzero",
|
|
1202
1204
|
"where",
|
|
1203
1205
|
"unique",
|
|
1204
1206
|
"unique_values",
|
|
@@ -108,6 +108,30 @@ def where(
|
|
|
108
108
|
return NamedArray(raw, condition.axes)
|
|
109
109
|
|
|
110
110
|
|
|
111
|
+
def nonzero(array: NamedArray, *, size: Axis, fill_value: int = 0) -> tuple[NamedArray, ...]:
|
|
112
|
+
"""Like :func:`jax.numpy.nonzero`, but with named axes.
|
|
113
|
+
|
|
114
|
+
Args:
|
|
115
|
+
array: The input array to test for nonzero values. Must be a :class:`NamedArray`.
|
|
116
|
+
size: Axis specifying the size of the output axis. This is required because
|
|
117
|
+
JAX requires the size of the result at tracing time.
|
|
118
|
+
fill_value: Value used to fill the output when fewer than ``size`` elements are
|
|
119
|
+
nonzero. Defaults to ``0``.
|
|
120
|
+
|
|
121
|
+
Returns:
|
|
122
|
+
A tuple of :class:`NamedArray` objects, one for each axis of ``array``. Each
|
|
123
|
+
returned array has ``size`` as its only axis and contains the indices of the
|
|
124
|
+
nonzero elements along the corresponding input axis.
|
|
125
|
+
"""
|
|
126
|
+
|
|
127
|
+
if not isinstance(array, NamedArray):
|
|
128
|
+
raise ValueError("array must be a NamedArray")
|
|
129
|
+
|
|
130
|
+
return tuple(
|
|
131
|
+
NamedArray(idx, (size,)) for idx in jnp.nonzero(array.array, size=size.size, fill_value=fill_value)
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
|
|
111
135
|
def clip(array: NamedOrNumeric, a_min: NamedOrNumeric, a_max: NamedOrNumeric) -> NamedArray:
|
|
112
136
|
"""Like jnp.clip, but with named axes. This version currently only accepts the three argument form."""
|
|
113
137
|
(array, a_min, a_max), axes = broadcast_arrays_and_return_axes(array, a_min, a_max)
|
|
@@ -161,6 +161,29 @@ def test_where(use_jit):
|
|
|
161
161
|
assert jnp.all(unnamed_8 == named8.array)
|
|
162
162
|
|
|
163
163
|
|
|
164
|
+
@pytest.mark.parametrize("use_jit", [False, True])
|
|
165
|
+
def test_nonzero(use_jit):
|
|
166
|
+
Height = Axis("Height", 3)
|
|
167
|
+
Width = Axis("Width", 4)
|
|
168
|
+
|
|
169
|
+
data = jnp.array([[0, 1, 0, 2], [3, 0, 4, 0], [0, 0, 5, 6]])
|
|
170
|
+
named = hax.named(data, (Height, Width))
|
|
171
|
+
|
|
172
|
+
Nonzero = Axis("Nonzero", Height.size * Width.size)
|
|
173
|
+
|
|
174
|
+
hax_nonzero: Callable = hax.nonzero
|
|
175
|
+
if use_jit:
|
|
176
|
+
hax_nonzero = hax.named_jit(hax_nonzero)
|
|
177
|
+
|
|
178
|
+
i, j = hax_nonzero(named, size=Nonzero, fill_value=-1)
|
|
179
|
+
ui, uj = jnp.nonzero(data, size=Nonzero.size, fill_value=-1)
|
|
180
|
+
|
|
181
|
+
assert i.axes == (Nonzero,)
|
|
182
|
+
assert j.axes == (Nonzero,)
|
|
183
|
+
assert jnp.all(i.array == ui)
|
|
184
|
+
assert jnp.all(j.array == uj)
|
|
185
|
+
|
|
186
|
+
|
|
164
187
|
def test_clip():
|
|
165
188
|
Height = Axis("Height", 10)
|
|
166
189
|
Width = Axis("Width", 3)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|