Metadata-Version: 2.4
Name: pbg-emitters
Version: 0.2.1
Summary: Focused emitter library for process-bigraph composites — SQLite, Parquet, and beyond
License: MIT
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: process-bigraph>=1.4.12
Requires-Dist: bigraph-schema
Requires-Dist: numpy
Provides-Extra: sqlite
Provides-Extra: parquet
Requires-Dist: duckdb; extra == "parquet"
Requires-Dist: polars; extra == "parquet"
Requires-Dist: pyarrow; extra == "parquet"
Requires-Dist: fsspec; extra == "parquet"
Requires-Dist: tqdm; extra == "parquet"
Provides-Extra: xarray
Requires-Dist: xarray>=2026.04; extra == "xarray"
Requires-Dist: zarr~=3.1.6; extra == "xarray"
Requires-Dist: zarrs>=0.2; extra == "xarray"
Requires-Dist: pint; extra == "xarray"
Requires-Dist: unum; extra == "xarray"
Provides-Extra: dev
Requires-Dist: pytest; extra == "dev"
Requires-Dist: duckdb; extra == "dev"
Requires-Dist: polars; extra == "dev"
Requires-Dist: pyarrow; extra == "dev"
Requires-Dist: fsspec; extra == "dev"
Requires-Dist: tqdm; extra == "dev"
Requires-Dist: xarray>=2026.04; extra == "dev"
Requires-Dist: zarr~=3.1.6; extra == "dev"
Requires-Dist: zarrs>=0.2; extra == "dev"
Requires-Dist: pint; extra == "dev"
Requires-Dist: unum; extra == "dev"
Dynamic: license-file

# pbg-emitters

Focused emitter library for [process-bigraph](https://github.com/vivarium-collective/process-bigraph)
composites. Hosts the heavy-dependency emitters out-of-tree so the
process-bigraph core stays lean.

The zero-dependency built-ins — `RAMEmitter`, `ConsoleEmitter`, `JSONEmitter`
— continue to live in `process_bigraph.emitter`. This package adds:

| Emitter          | Extra        | What it does                                          |
| ---------------- | ------------ | ----------------------------------------------------- |
| `SQLiteEmitter`  | `[sqlite]`   | One row per tick into a single `.db` file (stdlib).   |
| `ParquetEmitter` | `[parquet]`  | Hive-partitioned Parquet dataset, batched writes.     |

## Install

```bash
pip install 'pbg-emitters[sqlite]'        # SQLiteEmitter only
pip install 'pbg-emitters[parquet]'       # ParquetEmitter only
pip install 'pbg-emitters[sqlite,parquet]'  # both
```

The `[sqlite]` extra is empty (Python's stdlib `sqlite3` is enough); it exists
for symmetry. The `[parquet]` extra pulls in `duckdb`, `polars`, `pyarrow`,
`fsspec`, and `tqdm`.

## Usage

```python
from pbg_emitters import SQLiteEmitter, ParquetEmitter

# Wire either as a step inside a process-bigraph Composite, e.g. via the
# usual emitter_from_wires helper:
#
#   from process_bigraph.emitter import emitter_from_wires
#   spec = emitter_from_wires(wires, address='local:SQLiteEmitter')
```

Reader helpers for the Parquet datasets (`create_duckdb_conn`,
`read_stacked_columns`, `named_idx`, `ndidx_to_duckdb_expr`, ...) are also
re-exported from the top-level package.

## Tests

```bash
pip install -e '.[parquet,dev]'
pytest
```

## License

MIT. See [LICENSE](LICENSE).
