Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
with:
enable-cache: true
python-version: ${{ matrix.py }}
- uses: dtolnay/rust-toolchain@1.79.0
- uses: dtolnay/rust-toolchain@1.91.0
- uses: Swatinem/rust-cache@v2
- run: uv sync --extra test --locked
- run: uv run pytest --benchmark-disable -vvv --durations=10
Expand All @@ -41,11 +41,12 @@ jobs:
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- uses: dtolnay/rust-toolchain@1.79.0
- uses: dtolnay/rust-toolchain@1.91.0
- uses: Swatinem/rust-cache@v2
- run: uv sync --extra test --locked
- run: make mypy
- run: make stubtest
- run: cargo test --locked --lib

benchmark:
runs-on: ${{ matrix.runner }}
Expand All @@ -64,7 +65,7 @@ jobs:
with:
enable-cache: true
python-version: "3.12"
- uses: dtolnay/rust-toolchain@1.79.0
- uses: dtolnay/rust-toolchain@1.91.0
- uses: Swatinem/rust-cache@v2
- run: |
export UV_PROJECT_ENVIRONMENT="${pythonLocation}"
Expand All @@ -83,7 +84,7 @@ jobs:
- uses: astral-sh/setup-uv@v7
with:
enable-cache: true
- uses: dtolnay/rust-toolchain@1.79.0
- uses: dtolnay/rust-toolchain@1.91.0
- uses: Swatinem/rust-cache@v2
- name: Install graphviz
run: |
Expand Down
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ build:
python: "3.12"
# # You can also specify other tool versions:
# # nodejs: "16"
rust: "1.78"
rust: "1.91"
# golang: "1.17"
apt_packages:
- graphviz
Expand Down
9 changes: 8 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,19 @@

- Use the Context7 MCP server for egglog documentation instead of copying external doc summaries into this file.
- Keep general workflows in the how-to guides, and keep Python-specific runtime/reference examples in `docs/reference/python-integration.md`.
- Keep high-level docs focused on current public APIs and observable behavior. Put low-level binding details in `docs/reference/bindings.md`, and migration-only details in `docs/changelog.md`.
- If a PR adds or updates a changelog entry in `docs/changelog.md`, keep it aligned with the final code changes.
- For a clean docs rebuild, clear `docs/_build/`; the MyST-NB execution cache lives in `docs/_build/.jupyter_cache`.

## Python bindings

- Prefer relative imports inside `python/egglog`.
- When changing public high-level APIs, update the public docs, stubs, and pretty/freeze round-trip expectations together.
- Higher-order callable type probing should stay isolated from the live ruleset: copy declarations and run with no current ruleset so inference does not register temporary unnamed functions or rewrites.
- Keep `builtins.py` limited to operations implemented by Egglog primitives. Compose derived expressions at their domain call sites, without private runtime plumbing in public APIs.
- Pretty-print declaration structure directly; do not evaluate runtime expressions merely to canonicalize their output.
- Higher-order callable type probing should stay isolated from the live ruleset:
copy declarations and run with no current ruleset so inference does not
register temporary unnamed declarations or eager bodies.

## Array API

Expand All @@ -41,6 +46,8 @@
## Verification

- Prefer the minimal code change and the minimal diff that solves the task; only broaden the change if the smaller fix is not sufficient.
- High-level tests should assert observable behavior through public APIs. Avoid private `_` APIs and exact generated names unless serialized output is itself the public contract.
- Keep white-box `EGraphState` transcript, cleanup, and fault-injection tests in `python/tests/test_egraph_state.py`; keep `test_high_level.py` focused on public behavior.
- Run `make mypy` for typing changes.
- Run targeted pytest for touched modules.
- Run `make docs` for docs or public API changes.
Loading
Loading