Metadata-Version: 2.4
Name: graphed
Version: 0.0.1
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Rust
Requires-Dist: executing>=2.0
Requires-Dist: cloudpickle
Requires-Dist: numpy>=1.24 ; extra == 'all'
Requires-Dist: awkward>=2.6 ; extra == 'all'
Requires-Dist: pyarrow>=15 ; extra == 'all'
Requires-Dist: cloudpickle ; extra == 'all'
Requires-Dist: correctionlib>=2.6 ; extra == 'all'
Requires-Dist: onnx>=1.15 ; extra == 'all'
Requires-Dist: onnxruntime>=1.17 ; extra == 'all'
Requires-Dist: perspective-python==4.5.1 ; extra == 'all'
Requires-Dist: tornado>=6.2 ; extra == 'all'
Requires-Dist: websocket-client>=1.6 ; extra == 'all'
Requires-Dist: awkward>=2.6 ; extra == 'awkward'
Requires-Dist: numpy>=1.24 ; extra == 'awkward'
Requires-Dist: perspective-python==4.5.1 ; extra == 'dashboard'
Requires-Dist: tornado>=6.2 ; extra == 'dashboard'
Requires-Dist: websocket-client>=1.6 ; extra == 'dashboard'
Requires-Dist: pytest ; extra == 'dev'
Requires-Dist: pytest-cov ; extra == 'dev'
Requires-Dist: pytest-xdist ; extra == 'dev'
Requires-Dist: coverage[toml] ; extra == 'dev'
Requires-Dist: hypothesis ; extra == 'dev'
Requires-Dist: mypy ; extra == 'dev'
Requires-Dist: ruff ; extra == 'dev'
Requires-Dist: numpy>=1.24 ; extra == 'dev'
Requires-Dist: awkward>=2.6 ; extra == 'dev'
Requires-Dist: pyarrow>=15 ; extra == 'dev'
Requires-Dist: cloudpickle ; extra == 'dev'
Requires-Dist: pandas ; extra == 'dev'
Requires-Dist: vector ; extra == 'dev'
Requires-Dist: correctionlib>=2.6 ; extra == 'dev'
Requires-Dist: onnx>=1.15 ; extra == 'dev'
Requires-Dist: onnxruntime>=1.17 ; extra == 'dev'
Requires-Dist: boost-histogram>=1.4 ; extra == 'dev'
Requires-Dist: hist>=2.7 ; extra == 'dev'
Requires-Dist: perspective-python==4.5.1 ; extra == 'dev'
Requires-Dist: tornado>=6.2 ; extra == 'dev'
Requires-Dist: websocket-client>=1.6 ; extra == 'dev'
Requires-Dist: sphinx ; extra == 'docs'
Requires-Dist: furo ; extra == 'docs'
Requires-Dist: myst-parser ; extra == 'docs'
Requires-Dist: graphviz ; extra == 'docs'
Requires-Dist: torch ; extra == 'ml'
Requires-Dist: xgboost ; extra == 'ml'
Requires-Dist: tritonclient[http] ; extra == 'ml'
Requires-Dist: tensorflow ; extra == 'ml'
Requires-Dist: jax ; extra == 'ml'
Requires-Dist: numpy>=1.24 ; extra == 'numpy'
Requires-Dist: pyarrow>=15 ; extra == 'parquet'
Requires-Dist: awkward>=2.6 ; extra == 'preserve'
Requires-Dist: numpy>=1.24 ; extra == 'preserve'
Requires-Dist: correctionlib>=2.6 ; extra == 'preserve'
Requires-Dist: onnx>=1.15 ; extra == 'preserve'
Requires-Dist: onnxruntime>=1.17 ; extra == 'preserve'
Requires-Dist: cloudpickle ; extra == 'preserve'
Provides-Extra: all
Provides-Extra: awkward
Provides-Extra: checkpoint
Provides-Extra: dashboard
Provides-Extra: dev
Provides-Extra: docs
Provides-Extra: ml
Provides-Extra: numpy
Provides-Extra: parquet
Provides-Extra: preserve
Summary: A schedulable, serializable, debuggable HEP task-graph system with an interned Rust IR and equality-saturation optimizer
Author: graphed-org
License-Expression: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://github.com/graphed-org/graphed

# graphed

A schedulable, serializable, debuggable HEP task-graph system. `graphed` reduces a task graph to a
concise set of stage-nodes **incrementally as you build it**, so a large un-reduced graph never
exists. Reduction runs in a Rust extension via **equality saturation over e-graphs**. The goal is to
minimize Python-interpreter touchpoints and maximize time inside array kernels (awkward by default).

> **Status: MVP.** This repository consolidates the `graphed-*-mvp` package prototypes into one
> pip-installable distribution. It is a packaging/presentation release — no new functionality over
> the prototypes it was assembled from. See [MIGRATION.md](MIGRATION.md).

## Install

```bash
pip install graphed                 # frontend + Rust core only (light)
pip install "graphed[awkward]"      # + awkward backend (the default HEP backend)
pip install "graphed[numpy]"        # + numpy backend
pip install "graphed[preserve]"     # + preservation bundle (correctionlib/onnx)
pip install "graphed[dashboard]"    # + live Perspective dashboard
pip install "graphed[all]"          # everything except the heavy ML frameworks
pip install "graphed[dev]"          # full test/lint/type toolchain
```

The base install stays light: it pulls only the compiled core and `executing`. Backend and
preservation dependencies are opt-in extras — importing `graphed.awkward` (etc.) without its extra
raises a clear `ImportError`.

## Package layout

| Import path         | What it is                                                              | Extra        |
|---------------------|-------------------------------------------------------------------------|--------------|
| `graphed`           | deferred-array frontend: `Session`, `Array`, `Backend`, provenance      | (base)       |
| `graphed.core`      | Rust+PyO3 interned IR, optimizer, plan serialization, exec protocol     | (base)       |
| `graphed.awkward`   | awkward-typetracer reference backend + column projection                | `[awkward]`  |
| `graphed.numpy`     | trivial numpy backend                                                   | `[numpy]`    |
| `graphed.debug`     | source-mapped tracebacks, opt-level lowering, live dashboard            | `[dashboard]`|
| `graphed.checkpoint`| content-addressed store, manifest, resume                               | `[checkpoint]`|
| `graphed.preserve`  | self-contained preservation bundle                                      | `[preserve]` |

Sibling packages that stay **separate**: [`graphed-histogram`](https://github.com/graphed-org/graphed-histogram-mvp),
[`graphed-exec-local`](https://github.com/graphed-org/graphed-exec-local-mvp) (executor), and the
standalone [`graphed-orchestrator`](https://github.com/graphed-org/graphed-orchestrator).

## Develop

```bash
pip install -e ".[dev]"     # builds the Rust extension via maturin
./scripts/run-tests.sh      # runs each package's frozen suite (per-subtree isolation)
```

`graphed.core` is a Rust crate (`src/*.rs`, `Cargo.toml` at the repo root); everything else is pure
Python under `python/graphed/`. The frozen acceptance suites live under `tests/frozen/<pkg>/` and are
run one subtree at a time (see [CONTRIBUTING.md](CONTRIBUTING.md) for why).

## Provenance

The consolidated history was stitched from the eight prototype repositories (`graphed`,
`graphed-core`, `graphed-awkward`, `graphed-numpy`, `graphed-debug`, `graphed-checkpoint`,
`graphed-preserve`, `graphed-corpus`); `git log --follow` reaches back into each.

