Metadata-Version: 2.5
Name: oclp
Version: 0.3.0a0
Summary: Reference Python SDK for the Open Computation Lifecycle Protocol
Project-URL: Homepage, https://evanz.github.io/oclp-python/
Project-URL: Documentation, https://evanz.github.io/oclp-python/
Project-URL: Repository, https://github.com/EvanZ/oclp-python
Project-URL: Issues, https://github.com/EvanZ/oclp-python/issues
Project-URL: Changelog, https://github.com/EvanZ/oclp-python/releases
Author: Evan Zamir
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: artifacts,lineage,oclp,provenance,reproducibility
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.11
Requires-Dist: jsonschema<5,>=4.23
Requires-Dist: pydantic<3,>=2.10
Requires-Dist: rfc8785<1,>=0.1.4
Provides-Extra: arrow
Requires-Dist: pyarrow<24,>=18; extra == 'arrow'
Provides-Extra: catboost
Requires-Dist: catboost<2,>=1.2; extra == 'catboost'
Provides-Extra: duckdb
Requires-Dist: duckdb<2,>=1.1; extra == 'duckdb'
Provides-Extra: lightgbm
Requires-Dist: lightgbm<5,>=4.0; extra == 'lightgbm'
Provides-Extra: mlflow
Requires-Dist: mlflow<4,>=3.0; extra == 'mlflow'
Provides-Extra: numpy
Requires-Dist: numpy<3,>=1.26; extra == 'numpy'
Provides-Extra: parquet
Requires-Dist: pyarrow<24,>=18; extra == 'parquet'
Provides-Extra: sklearn
Requires-Dist: scikit-learn<2,>=1.6; extra == 'sklearn'
Requires-Dist: skops<1,>=0.12; extra == 'sklearn'
Provides-Extra: toml
Requires-Dist: tomli-w<2,>=1; extra == 'toml'
Provides-Extra: xgboost
Requires-Dist: xgboost<4,>=2.1; extra == 'xgboost'
Provides-Extra: xml
Requires-Dist: defusedxml<1,>=0.7; extra == 'xml'
Provides-Extra: yaml
Requires-Dist: pyyaml<7,>=6; extra == 'yaml'
Description-Content-Type: text/markdown

# OCLP Python SDK

The reference Python implementation of the [Open Computation Lifecycle
Protocol](https://github.com/EvanZ/open-computation-lifecycle).

OCLP is a language-neutral standard for durable computation provenance. This
package provides Python models, canonical JSON serialization, digest helpers,
validation, portable profile helpers, and an optional local DuckDB catalog.

The protocol specification, schemas, examples, and cross-language conformance
vectors live in the separate
[`open-computation-lifecycle`](https://github.com/EvanZ/open-computation-lifecycle)
repository. The SDK follows that specification; it does not define it.

Full SDK documentation is published at
[evanz.github.io/oclp-python](https://evanz.github.io/oclp-python/).

## Install

```bash
pip install "oclp[duckdb]"
```

Omit `[duckdb]` if the local record catalog is not needed. The SDK is an
experimental pre-1.0 package: APIs and protocol support may change between
minor releases. Pin a published version for reproducible deployments.

For unreleased changes, install directly from GitHub:

```bash
pip install "oclp[duckdb] @ git+https://github.com/EvanZ/oclp-python.git@main"
```

Replace `main` with a reviewed immutable commit SHA when testing an unreleased
build reproducibly.

For development:

```bash
git clone https://github.com/EvanZ/oclp-python.git
cd oclp-python
uv sync --group dev
uv run pytest
uv run ruff check .
```

## Scope

`oclp` is deliberately an SDK, not an orchestrator or a hosted provenance
service. Applications decide when to create records; consumers such as
[Cyclops](https://github.com/EvanZ/oclp-explorer) can then inspect them.

The `duckdb` extra supplies a simple local catalog for resolving
content-bound records and their locations. It is optional implementation
infrastructure, not a requirement of the OCLP standard.

## Releases

GitHub `main` contains ongoing development. PyPI receives intentional,
versioned releases published from a GitHub Release through PyPI Trusted
Publishing. Early releases use PEP 440 pre-release versions (such as
`0.3.0a0`) while the OCLP protocol and SDK API are still evolving. See the
[GitHub releases](https://github.com/EvanZ/oclp-python/releases) for changes
and installation versions. Maintainers can follow the
[release instructions](docs/releasing.md).

## End-to-end example

The [bike-demand service demo](examples/bike-demand-service/README.md) is a
staged, self-contained consumer project for returning to an end-to-end OCLP
design: source data, feature preparation, temporal model folds, evaluation,
model release packaging, and FastAPI inference. It has its own dependencies so
the SDK's core installation remains small.
