Build, test, and "adding an operator" details are in
docs/development.md. This is the short version.
Behavior on the ANE is per-chip and per-OS, so include:
- The chip (M1 through M5, or the A-series equivalent) and the macOS version.
- A minimal graph that reproduces it: ops, shapes, dtypes.
- Expected versus actual: numbers, traceback, or compile error.
Two things are expected rather than bugs: a graph that compiles for one family
but overflows a dimension cap on another (caps are per family, see
docs/capabilities.md), and small CPU/ANE divergence at
boundary fp16 values. A wrong result well inside the fp16 range is a real bug.
Report security issues privately, not in a public issue: see
SECURITY.md.
Operator-coverage gaps are the place to start: anything in
docs/capabilities.md not yet covered, via the four-step
path in docs/development.md. Open an
issue first for larger or architectural changes.
pip install -e ".[dev]" # ruff + pytest
sh aneforge/_lib/build.sh # build the dispatch dylib (needs the Mac)
git config core.hooksPath .githooks # off-hardware pre-commit checksThe corpus is the gate and must pass before a change lands:
PYTHONPATH=. python3 tests/run_corpus.pyMost tests need a real ANE, so CI runs only the off-hardware checks. Run the corpus and the pytest suite on your Mac before opening a pull request.
Python 3.10+, linted with ruff. Match the surrounding packed style; do not
reformat existing code.
Contributions are licensed under the MIT License.