private-lab-bench 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- private_lab_bench-0.1.0/LICENSE +21 -0
- private_lab_bench-0.1.0/PKG-INFO +268 -0
- private_lab_bench-0.1.0/README.md +218 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/PKG-INFO +268 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/SOURCES.txt +166 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/dependency_links.txt +1 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/entry_points.txt +3 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/requires.txt +32 -0
- private_lab_bench-0.1.0/private_lab_bench.egg-info/top_level.txt +1 -0
- private_lab_bench-0.1.0/privatelabbench/__init__.py +1 -0
- private_lab_bench-0.1.0/privatelabbench/adapters/__init__.py +12 -0
- private_lab_bench-0.1.0/privatelabbench/adapters/base.py +41 -0
- private_lab_bench-0.1.0/privatelabbench/adapters/external_predictions.py +25 -0
- private_lab_bench-0.1.0/privatelabbench/adapters/fingerprints.py +55 -0
- private_lab_bench-0.1.0/privatelabbench/adapters/sklearn_adapter.py +97 -0
- private_lab_bench-0.1.0/privatelabbench/aggregate.py +623 -0
- private_lab_bench-0.1.0/privatelabbench/attestation.py +51 -0
- private_lab_bench-0.1.0/privatelabbench/audit.py +21 -0
- private_lab_bench-0.1.0/privatelabbench/benchmark_packs.py +174 -0
- private_lab_bench-0.1.0/privatelabbench/cli.py +1033 -0
- private_lab_bench-0.1.0/privatelabbench/compare.py +252 -0
- private_lab_bench-0.1.0/privatelabbench/config.py +123 -0
- private_lab_bench-0.1.0/privatelabbench/core/__init__.py +35 -0
- private_lab_bench-0.1.0/privatelabbench/core/interfaces.py +75 -0
- private_lab_bench-0.1.0/privatelabbench/core/local_io.py +57 -0
- private_lab_bench-0.1.0/privatelabbench/core/public_data.py +55 -0
- private_lab_bench-0.1.0/privatelabbench/core/registry.py +151 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/README.md +7 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/molecules-regression/README.md +13 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/molecules-regression/config.yaml +55 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/molecules-regression/expected_receipt.json +78 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/molecules-regression/pack.yaml +15 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/molecules-regression/predictions.csv +21 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/proteins-binary/README.md +11 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/proteins-binary/config.yaml +56 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/proteins-binary/expected_receipt.json +82 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/proteins-binary/pack.yaml +15 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/proteins-binary/predictions.csv +13 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/tabular-regression/README.md +11 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/tabular-regression/config.yaml +51 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/tabular-regression/expected_receipt.json +79 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/tabular-regression/pack.yaml +15 -0
- private_lab_bench-0.1.0/privatelabbench/data/benchmark_packs/tabular-regression/predictions.csv +9 -0
- private_lab_bench-0.1.0/privatelabbench/data/integrations/matbench-reference.json +71 -0
- private_lab_bench-0.1.0/privatelabbench/data/integrations/proteingym-assays.json +74 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/generic-binary-1.0.1.yaml +53 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/generic-regression-1.0.0.yaml +58 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/matbench-expt-is-metal-1.0.0.yaml +58 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/matbench-jdft2d-1.0.0.yaml +57 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/matbench-steels-1.0.0.yaml +57 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/proteingym-dms-substitutions-spearman-1.0.0.yaml +60 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/tdc-caco2_wang-1.0.0.yaml +57 -0
- private_lab_bench-0.1.0/privatelabbench/data/protocols/tdc-pgp_broccatelli-1.0.0.yaml +59 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/benchmark-leaderboard-v1.schema.json +20 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/benchmark-submission-v1.schema.json +15 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/cross-site-aggregate-v1.schema.json +39 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/degradation-summary-v1.schema.json +458 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/evaluation-design-audit-summary-v1.schema.json +189 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/evaluation-design-audit-v1.schema.json +33 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/evaluation-design-v1.schema.json +378 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/evaluation-protocol-v1.schema.json +277 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/evaluation-receipt-v1.schema.json +113 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/external-validation-profile-v1.schema.json +39 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/external-validation-v1.schema.json +19 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/hidden-benchmark-v1.schema.json +19 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/longitudinal-series-v1.schema.json +42 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/matbench-evaluation-v1.schema.json +23 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/model-manifest-v1.schema.json +41 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/multiplicity-policy-v1.schema.json +15 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/paired-comparison-artifact-v1.schema.json +108 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/proteingym-evaluation-v1.schema.json +26 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/quality-policy-v1.schema.json +306 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/release-policy-v1.schema.json +54 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/sampling-design-v1.schema.json +25 -0
- private_lab_bench-0.1.0/privatelabbench/data/schemas/submission-manifest-v1.schema.json +11 -0
- private_lab_bench-0.1.0/privatelabbench/design_audit.py +1139 -0
- private_lab_bench-0.1.0/privatelabbench/eval/__init__.py +0 -0
- private_lab_bench-0.1.0/privatelabbench/eval/degradation.py +918 -0
- private_lab_bench-0.1.0/privatelabbench/eval/metrics.py +204 -0
- private_lab_bench-0.1.0/privatelabbench/eval/paired_comparison.py +825 -0
- private_lab_bench-0.1.0/privatelabbench/eval/predictions.py +537 -0
- private_lab_bench-0.1.0/privatelabbench/eval/sampling.py +818 -0
- private_lab_bench-0.1.0/privatelabbench/eval/shift.py +13 -0
- private_lab_bench-0.1.0/privatelabbench/eval/slices.py +48 -0
- private_lab_bench-0.1.0/privatelabbench/eval/uncertainty.py +251 -0
- private_lab_bench-0.1.0/privatelabbench/evaluate.py +485 -0
- private_lab_bench-0.1.0/privatelabbench/external_validation.py +278 -0
- private_lab_bench-0.1.0/privatelabbench/federated/__init__.py +0 -0
- private_lab_bench-0.1.0/privatelabbench/federated/evaluator.py +107 -0
- private_lab_bench-0.1.0/privatelabbench/hidden_benchmarks.py +608 -0
- private_lab_bench-0.1.0/privatelabbench/identity.py +47 -0
- private_lab_bench-0.1.0/privatelabbench/integrations/__init__.py +1 -0
- private_lab_bench-0.1.0/privatelabbench/integrations/matbench.py +614 -0
- private_lab_bench-0.1.0/privatelabbench/integrations/proteingym.py +661 -0
- private_lab_bench-0.1.0/privatelabbench/integrations/tdc.py +369 -0
- private_lab_bench-0.1.0/privatelabbench/leaderboards.py +463 -0
- private_lab_bench-0.1.0/privatelabbench/models/__init__.py +0 -0
- private_lab_bench-0.1.0/privatelabbench/models/sklearn_baseline.py +9 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/__init__.py +41 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/aggregation.py +30 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/attack_registry.py +62 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/attacks.py +109 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/dp.py +171 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/export.py +524 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/formal.py +225 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/policy.py +92 -0
- private_lab_bench-0.1.0/privatelabbench/privacy/release.py +62 -0
- private_lab_bench-0.1.0/privatelabbench/protocols.py +278 -0
- private_lab_bench-0.1.0/privatelabbench/quality.py +219 -0
- private_lab_bench-0.1.0/privatelabbench/reports/__init__.py +0 -0
- private_lab_bench-0.1.0/privatelabbench/reports/integrity.py +96 -0
- private_lab_bench-0.1.0/privatelabbench/reports/json.py +78 -0
- private_lab_bench-0.1.0/privatelabbench/reports/manifest.py +190 -0
- private_lab_bench-0.1.0/privatelabbench/reports/markdown.py +257 -0
- private_lab_bench-0.1.0/privatelabbench/reports/paired_comparison.py +225 -0
- private_lab_bench-0.1.0/privatelabbench/reports/receipt.py +397 -0
- private_lab_bench-0.1.0/privatelabbench/reports/trust.py +175 -0
- private_lab_bench-0.1.0/privatelabbench/runner.py +748 -0
- private_lab_bench-0.1.0/privatelabbench/scoring.py +562 -0
- private_lab_bench-0.1.0/privatelabbench/tasks/__init__.py +0 -0
- private_lab_bench-0.1.0/privatelabbench/tasks/molecules.py +70 -0
- private_lab_bench-0.1.0/privatelabbench/trends.py +773 -0
- private_lab_bench-0.1.0/privatelabbench/validation.py +330 -0
- private_lab_bench-0.1.0/pyproject.toml +90 -0
- private_lab_bench-0.1.0/setup.cfg +4 -0
- private_lab_bench-0.1.0/tests/test_adapters_and_compare.py +59 -0
- private_lab_bench-0.1.0/tests/test_aggregate.py +436 -0
- private_lab_bench-0.1.0/tests/test_attestation.py +33 -0
- private_lab_bench-0.1.0/tests/test_benchmark_packs.py +133 -0
- private_lab_bench-0.1.0/tests/test_case_study.py +136 -0
- private_lab_bench-0.1.0/tests/test_design_audit.py +867 -0
- private_lab_bench-0.1.0/tests/test_export_boundary.py +189 -0
- private_lab_bench-0.1.0/tests/test_external_validation.py +304 -0
- private_lab_bench-0.1.0/tests/test_federated_eval.py +22 -0
- private_lab_bench-0.1.0/tests/test_functional_regressions.py +310 -0
- private_lab_bench-0.1.0/tests/test_hidden_benchmarks.py +601 -0
- private_lab_bench-0.1.0/tests/test_integrity.py +49 -0
- private_lab_bench-0.1.0/tests/test_manifest.py +85 -0
- private_lab_bench-0.1.0/tests/test_matbench_integration.py +276 -0
- private_lab_bench-0.1.0/tests/test_molecule_eval.py +20 -0
- private_lab_bench-0.1.0/tests/test_paired_comparison.py +297 -0
- private_lab_bench-0.1.0/tests/test_paired_comparison_schema.py +15 -0
- private_lab_bench-0.1.0/tests/test_prediction_eval.py +225 -0
- private_lab_bench-0.1.0/tests/test_prediction_table_config.py +136 -0
- private_lab_bench-0.1.0/tests/test_privacy_attacks.py +87 -0
- private_lab_bench-0.1.0/tests/test_privacy_mechanisms.py +125 -0
- private_lab_bench-0.1.0/tests/test_privacy_reporting.py +135 -0
- private_lab_bench-0.1.0/tests/test_proteingym_integration.py +377 -0
- private_lab_bench-0.1.0/tests/test_protocols.py +161 -0
- private_lab_bench-0.1.0/tests/test_public_release_audit.py +105 -0
- private_lab_bench-0.1.0/tests/test_quality_gates.py +153 -0
- private_lab_bench-0.1.0/tests/test_receipt.py +196 -0
- private_lab_bench-0.1.0/tests/test_receipt_trust.py +167 -0
- private_lab_bench-0.1.0/tests/test_release_policy.py +31 -0
- private_lab_bench-0.1.0/tests/test_release_version.py +69 -0
- private_lab_bench-0.1.0/tests/test_repository_hygiene.py +64 -0
- private_lab_bench-0.1.0/tests/test_runner.py +280 -0
- private_lab_bench-0.1.0/tests/test_sampling_design.py +644 -0
- private_lab_bench-0.1.0/tests/test_scoring.py +411 -0
- private_lab_bench-0.1.0/tests/test_shift.py +392 -0
- private_lab_bench-0.1.0/tests/test_simple_evaluation.py +355 -0
- private_lab_bench-0.1.0/tests/test_smoke.py +44 -0
- private_lab_bench-0.1.0/tests/test_spearman_metrics.py +214 -0
- private_lab_bench-0.1.0/tests/test_task_registry.py +133 -0
- private_lab_bench-0.1.0/tests/test_tdc_integration.py +209 -0
- private_lab_bench-0.1.0/tests/test_trends.py +412 -0
- private_lab_bench-0.1.0/tests/test_uncertainty.py +192 -0
- private_lab_bench-0.1.0/tests/test_validation.py +137 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Dipesh Tharu Mahato
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: private-lab-bench
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Local-first evaluation for scientific machine learning on private data.
|
|
5
|
+
Author: Dipesh Tharu Mahato
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/dipeshbabu/private-lab-bench
|
|
8
|
+
Project-URL: Repository, https://github.com/dipeshbabu/private-lab-bench
|
|
9
|
+
Project-URL: Issues, https://github.com/dipeshbabu/private-lab-bench/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/dipeshbabu/private-lab-bench/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Documentation, https://github.com/dipeshbabu/private-lab-bench/tree/main/docs
|
|
12
|
+
Keywords: scientific machine learning,evaluation,private data,reproducibility,privacy auditing,benchmarking
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Requires-Python: >=3.10
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
License-File: LICENSE
|
|
24
|
+
Requires-Dist: numpy>=1.21
|
|
25
|
+
Requires-Dist: pandas>=1.3
|
|
26
|
+
Requires-Dist: scikit-learn>=1.0
|
|
27
|
+
Requires-Dist: PyYAML>=6.0
|
|
28
|
+
Provides-Extra: proteingym
|
|
29
|
+
Requires-Dist: biopython<2,>=1.81; extra == "proteingym"
|
|
30
|
+
Provides-Extra: matbench
|
|
31
|
+
Requires-Dist: matminer<0.11,>=0.9.3; extra == "matbench"
|
|
32
|
+
Provides-Extra: signing
|
|
33
|
+
Requires-Dist: cryptography>=41.0; extra == "signing"
|
|
34
|
+
Provides-Extra: rdkit
|
|
35
|
+
Requires-Dist: rdkit>=2023.9.1; extra == "rdkit"
|
|
36
|
+
Provides-Extra: tdc
|
|
37
|
+
Requires-Dist: PyTDC==0.4.1; extra == "tdc"
|
|
38
|
+
Requires-Dist: numpy<2,>=1.26.4; extra == "tdc"
|
|
39
|
+
Requires-Dist: pandas<3,>=2.1.4; extra == "tdc"
|
|
40
|
+
Requires-Dist: huggingface-hub<0.26,>=0.20.3; extra == "tdc"
|
|
41
|
+
Requires-Dist: setuptools<81,>=77; extra == "tdc"
|
|
42
|
+
Provides-Extra: dev
|
|
43
|
+
Requires-Dist: pytest>=7.0; extra == "dev"
|
|
44
|
+
Requires-Dist: jsonschema>=4.0; extra == "dev"
|
|
45
|
+
Requires-Dist: cryptography>=41.0; extra == "dev"
|
|
46
|
+
Provides-Extra: docs
|
|
47
|
+
Requires-Dist: mkdocs<2,>=1.6; extra == "docs"
|
|
48
|
+
Requires-Dist: mkdocs-material<10,>=9.7; extra == "docs"
|
|
49
|
+
Dynamic: license-file
|
|
50
|
+
|
|
51
|
+
<h1 align="center">PrivateLabBench</h1>
|
|
52
|
+
|
|
53
|
+
<p align="center">
|
|
54
|
+
Evaluate scientific models on private data, from your terminal.
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="https://github.com/dipeshbabu/private-lab-bench/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/dipeshbabu/private-lab-bench/ci.yml?branch=main&label=build&style=flat-square"></a>
|
|
59
|
+
<a href="https://pypi.org/project/private-lab-bench/"><img alt="PyPI" src="https://img.shields.io/pypi/v/private-lab-bench?style=flat-square"></a>
|
|
60
|
+
<a href="https://github.com/dipeshbabu/private-lab-bench/blob/main/pyproject.toml"><img alt="Python 3.10, 3.11, and 3.12" src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue?style=flat-square"></a>
|
|
61
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-green?style=flat-square"></a>
|
|
62
|
+
</p>
|
|
63
|
+
|
|
64
|
+
<p align="center">
|
|
65
|
+
<a href="docs/quickstart.md">Quickstart</a> ·
|
|
66
|
+
<a href="docs/prediction_tables.md">Prediction tables</a> ·
|
|
67
|
+
<a href="docs/evaluation_receipts.md">Receipts</a> ·
|
|
68
|
+
<a href="CONTRIBUTING.md">Contributing</a>
|
|
69
|
+
</p>
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
PrivateLabBench is a local evaluation framework for scientific machine learning. Bring a prediction table, measure performance across datasets and subgroups, estimate uncertainty, and compare models on matched samples. Keep the underlying data in your environment and exchange aggregate evaluation receipts with collaborators.
|
|
74
|
+
|
|
75
|
+
Evaluation runs locally without an account, hosted service, or data upload.
|
|
76
|
+
|
|
77
|
+
## Installation
|
|
78
|
+
|
|
79
|
+
Use **Python 3.10 or later**. Create an environment for **v0.1.0**:
|
|
80
|
+
|
|
81
|
+
```sh
|
|
82
|
+
python -m venv .venv
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
Activate the environment and install:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
# macOS / Linux
|
|
89
|
+
source .venv/bin/activate
|
|
90
|
+
|
|
91
|
+
# Windows PowerShell
|
|
92
|
+
.venv\Scripts\Activate.ps1
|
|
93
|
+
|
|
94
|
+
python -m pip install private-lab-bench==0.1.0
|
|
95
|
+
plb --help
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
The `privatelabbench` command is also available. Optional molecular featurization uses `python -m pip install 'private-lab-bench[rdkit]==0.1.0'`. See the [installation guide](docs/install.md) for source/development installs, or run the [quickstart notebook in Colab](https://colab.research.google.com/github/dipeshbabu/private-lab-bench/blob/v0.1.0/examples/notebooks/quickstart.ipynb).
|
|
99
|
+
|
|
100
|
+
## Run Your First Evaluation
|
|
101
|
+
|
|
102
|
+
Start with a bundled synthetic benchmark pack:
|
|
103
|
+
|
|
104
|
+
```sh
|
|
105
|
+
plb list-packs
|
|
106
|
+
plb run-pack community-tabular-regression@1.0.0
|
|
107
|
+
plb verify reports/benchmark_packs/tabular_regression_receipt.shareable.json
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Packs include example predictions and versioned evaluation settings. They work from installed wheels and require no model downloads or training. Other packs cover molecular regression and protein binary classification.
|
|
111
|
+
|
|
112
|
+
## Evaluate Your Predictions
|
|
113
|
+
|
|
114
|
+
Use `prediction-table/v1` to evaluate outputs from your own model:
|
|
115
|
+
|
|
116
|
+
```csv
|
|
117
|
+
sample_id,target,prediction,site,batch
|
|
118
|
+
s01,0.12,0.14,lab-a,b1
|
|
119
|
+
s02,0.20,0.23,lab-a,b1
|
|
120
|
+
s03,0.33,0.31,lab-b,b2
|
|
121
|
+
s04,0.41,0.45,lab-b,b2
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Save the table as `predictions.csv`, then run:
|
|
125
|
+
|
|
126
|
+
```sh
|
|
127
|
+
plb evaluate predictions.csv --slice site --slice batch
|
|
128
|
+
plb verify reports/evaluation/evaluation_receipt.json
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Regression, binary classification, and multiclass probability tables are supported. Ambiguous columns or task types require explicit flags; binary probabilities with named labels require ordered negative/positive classes. Results stay local until a reviewed release policy permits export. This four-row example is too small for the default bootstrap interval or slice minimum. See the [5-minute quickstart](docs/quickstart.md) for defaults and the [prediction-table reference](docs/prediction_tables.md) for classification schemas.
|
|
132
|
+
|
|
133
|
+
## Make Runs Reproducible
|
|
134
|
+
|
|
135
|
+
Store task, input, slice, uncertainty, and reporting settings in YAML:
|
|
136
|
+
|
|
137
|
+
```sh
|
|
138
|
+
plb init predictions.csv --slice site --out evaluation.yaml
|
|
139
|
+
plb run evaluation.yaml
|
|
140
|
+
plb validate-config configs/tabular_uncertainty_eval.yaml
|
|
141
|
+
plb run configs/tabular_uncertainty_eval.yaml
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Config runs write local JSON and Markdown reports, an artifact manifest, and evaluation receipts. Review the uncertainty settings and choose a sampling method appropriate to your data. See [statistical uncertainty](docs/uncertainty.md) for assumptions and limits.
|
|
145
|
+
|
|
146
|
+
Use `plb list-protocols` and `plb run local.yaml --protocol plb://generic/regression@1.0.0` to apply fixed, versioned evaluation rules across private datasets. Receipts record the exact protocol digest. See [evaluation protocols](docs/protocols.md) for local definitions, package providers, and release controls.
|
|
147
|
+
|
|
148
|
+
## Compare Models
|
|
149
|
+
|
|
150
|
+
Compare two prediction tables containing the same sample IDs and targets:
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
plb compare model-a.csv model-b.csv --target target --task-type regression --metric rmse --resamples 1000 --practical-threshold 0.01
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Paired comparisons report metric differences, bootstrap intervals, and a decision relative to your practical threshold. Optional slice comparisons help locate differences across groups. See the [paired-comparison guide](docs/paired_comparison.md).
|
|
157
|
+
|
|
158
|
+
Combine compatible shared receipts with `plb aggregate lab-a.shareable.json lab-b.shareable.json --model model@revision`. The [aggregation guide](docs/aggregation.md) covers site identities, signer verification, and the metrics that support pooled point estimates.
|
|
159
|
+
|
|
160
|
+
Inspect cohort changes with `plb evaluate current.csv --reference reference.csv --slice site`. [Reference/current diagnostics](docs/degradation.md) report performance degradation, slice prevalence, and selected distribution changes, with explicit uncertainty and release controls.
|
|
161
|
+
|
|
162
|
+
Track the same model over repeated evaluations with [`plb trend`](docs/trends.md). It compares verified shareable receipts at declared collection times, retains uncertainty and quality decisions, and reports changing slices without needing prior raw datasets.
|
|
163
|
+
|
|
164
|
+
For repeated or nested observations, declare a [sampling design](docs/sampling_design.md) to resample independent clusters and keep paired models aligned. Optional slice-test families record dependence assumptions and multiplicity adjustments.
|
|
165
|
+
|
|
166
|
+
Check declared split integrity before scoring with `plb audit-design` or `plb evaluate --evaluation-design design.yaml`. [Evaluation-design audits](docs/evaluation_design.md) detect supported overlap/group/time violations and keep unavailable training evidence explicit.
|
|
167
|
+
|
|
168
|
+
Evaluate real Caco2 and PGP benchmark predictions with the optional [TDC ADMET integration](docs/tdc_admet.md). It preserves the pinned official test sets and metrics, checks upstream score agreement, and supports the same evaluation protocols on private ADMET tables.
|
|
169
|
+
|
|
170
|
+
The [Matbench integration](docs/matbench.md) supports composition and structure tasks with pinned official folds, units, corrected probability ROC-AUC, and verified upstream fold aggregation.
|
|
171
|
+
|
|
172
|
+
The [ProteinGym integration](docs/proteingym.md) evaluates DMS substitution scores within each assay, with tied-rank Spearman and explicit protein/function aggregation.
|
|
173
|
+
|
|
174
|
+
Describe evaluations of released models with the [external-validation profile](docs/external_validation.md): immutable model identity, declared evaluator relationship and dataset provenance, plus explicitly approved aggregate receipts that can be compared across labs.
|
|
175
|
+
|
|
176
|
+
When predictions need to be generated inside the lab, use the [trusted local scorer](docs/trusted_scoring.md) with a reviewed numeric model, pinned digest, and explicit feature units. Its optional evaluation pipeline reuses the normal protocol and release controls.
|
|
177
|
+
|
|
178
|
+
Operate a [hidden benchmark](docs/hidden_benchmarks.md) with owner-held labels, strict prediction submissions, approved result receipts, and a verified results table. Ranking requires an explicit rule in the pinned scientific protocol.
|
|
179
|
+
|
|
180
|
+
## Inspect Evaluation Receipts
|
|
181
|
+
|
|
182
|
+
Follow the [Caco2 model-selection case](docs/case_study.md) from a fresh environment to a paired decision, critical-group diagnosis, release check, and signed receipt. It distinguishes real public benchmark evidence from its synthetic measurement-shift proxy; independent researcher trials remain pending.
|
|
183
|
+
|
|
184
|
+
`evaluation-receipt/v1` separates local context from aggregate information intended for exchange:
|
|
185
|
+
|
|
186
|
+
| Artifact | Contents |
|
|
187
|
+
| --- | --- |
|
|
188
|
+
| `<run>_receipt.json` | Local receipt, including paths, configuration, and exact results |
|
|
189
|
+
| `<run>_receipt.shareable.json` | Approved aggregate receipt, written only when the export policy allows it |
|
|
190
|
+
| `<run>_receipt.md` | Human-readable receipt summary |
|
|
191
|
+
|
|
192
|
+
```sh
|
|
193
|
+
plb verify reports/tabular_uncertainty_demo_receipt.shareable.json
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Shareable receipts require an explicit `release-policy/v1` policy. A blocked export leaves local results and a release audit, and removes any previous shareable file. The bundled synthetic packs include reviewed example policies; private-data runs need their own review. Use `plb release-check <local-receipt.json> --policy release.yaml` for a dry run.
|
|
197
|
+
|
|
198
|
+
Verification checks artifact integrity and optional signatures. A matching self-contained hash alone does not establish authorship, correct execution, or scientific validity. See [evaluation receipts](docs/evaluation_receipts.md) and [report integrity](docs/report_integrity.md).
|
|
199
|
+
|
|
200
|
+
For offline signer authentication, use optional Ed25519 signatures and pinned public keys:
|
|
201
|
+
|
|
202
|
+
```sh
|
|
203
|
+
plb verify receipt.shareable.json --trust-store trusted-labs.yaml --require-trusted-signer --json
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
See the [receipt trust guide](docs/receipt_trust.md) for signing, key rotation, protocol binding, and the limits of these checks.
|
|
207
|
+
|
|
208
|
+
## Privacy and Sharing
|
|
209
|
+
|
|
210
|
+
Keeping data local limits data movement; aggregate results can still disclose sensitive information. PrivateLabBench provides separate tools for exact reporting, empirical privacy audits, release-policy checks, and heuristic `metric_perturbation`.
|
|
211
|
+
|
|
212
|
+
Metric perturbation, including the deprecated `dp` alias, **does not provide a formal differential privacy guarantee**. Bounded-query DP reference primitives have their own sensitivity and accounting requirements. Read the [privacy guide](docs/privacy.md) before selecting a release method.
|
|
213
|
+
|
|
214
|
+
## Reference
|
|
215
|
+
|
|
216
|
+
Enforce explicit model thresholds in CI with `plb gate <receipt> --policy quality.yaml`.
|
|
217
|
+
See [quality gates](docs/quality_gates.md) for confidence, baseline, slice, and privacy requirements.
|
|
218
|
+
|
|
219
|
+
Use `--help` to explore commands and options:
|
|
220
|
+
|
|
221
|
+
```sh
|
|
222
|
+
plb eval-predictions --help
|
|
223
|
+
plb compare --help
|
|
224
|
+
plb list-tasks
|
|
225
|
+
plb list-privacy-attacks
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
- [Five-minute quickstart](docs/quickstart.md)
|
|
229
|
+
- [Core concepts](docs/concepts.md)
|
|
230
|
+
- [Tasks and plugins](docs/tasks.md)
|
|
231
|
+
- [Community benchmark packs](docs/benchmark_packs.md)
|
|
232
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
233
|
+
- [Project scope](docs/project_scope.md) and [roadmap](docs/roadmap.md)
|
|
234
|
+
|
|
235
|
+
## Developing
|
|
236
|
+
|
|
237
|
+
Install the development and documentation tools:
|
|
238
|
+
|
|
239
|
+
```sh
|
|
240
|
+
python -m pip install -e '.[dev,docs]' build twine
|
|
241
|
+
python -m pytest -q
|
|
242
|
+
python -m build
|
|
243
|
+
python -m twine check dist/*
|
|
244
|
+
mkdocs build
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
CI tests Python 3.10, 3.11, and 3.12, validates packages and documentation, and exercises the Docker runner. It also installs the wheel in a clean environment and runs a bundled pack outside the checkout. Release publishing uses the [tag-based release workflow](docs/releases.md).
|
|
248
|
+
|
|
249
|
+
Useful source entry points:
|
|
250
|
+
|
|
251
|
+
| Path | Purpose |
|
|
252
|
+
| --- | --- |
|
|
253
|
+
| `privatelabbench/cli.py` | Command-line interface |
|
|
254
|
+
| `privatelabbench/core/` | Task registry and extension interfaces |
|
|
255
|
+
| `privatelabbench/eval/` | Metrics, slices, uncertainty, and paired comparisons |
|
|
256
|
+
| `privatelabbench/privacy/` | Privacy audits and release policies |
|
|
257
|
+
| `privatelabbench/reports/` | Reports, receipts, and artifact integrity |
|
|
258
|
+
| `privatelabbench/data/` | Bundled benchmark packs and schemas |
|
|
259
|
+
|
|
260
|
+
## Contributing
|
|
261
|
+
|
|
262
|
+
Focused fixes, scientific-domain plugins, benchmark packs, and documentation improvements are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup, extension boundaries, and validation requirements. Discuss new tasks, privacy methods, or schema changes in an issue before implementation.
|
|
263
|
+
|
|
264
|
+
The project follows its [Code of Conduct](CODE_OF_CONDUCT.md) and [governance guide](GOVERNANCE.md). Report sensitive vulnerabilities through the process in [SECURITY.md](SECURITY.md).
|
|
265
|
+
|
|
266
|
+
## License
|
|
267
|
+
|
|
268
|
+
Released under the [MIT license](LICENSE). Use [CITATION.cff](CITATION.cff) to cite PrivateLabBench in research.
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
<h1 align="center">PrivateLabBench</h1>
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
Evaluate scientific models on private data, from your terminal.
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<a href="https://github.com/dipeshbabu/private-lab-bench/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/dipeshbabu/private-lab-bench/ci.yml?branch=main&label=build&style=flat-square"></a>
|
|
9
|
+
<a href="https://pypi.org/project/private-lab-bench/"><img alt="PyPI" src="https://img.shields.io/pypi/v/private-lab-bench?style=flat-square"></a>
|
|
10
|
+
<a href="https://github.com/dipeshbabu/private-lab-bench/blob/main/pyproject.toml"><img alt="Python 3.10, 3.11, and 3.12" src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue?style=flat-square"></a>
|
|
11
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/license-MIT-green?style=flat-square"></a>
|
|
12
|
+
</p>
|
|
13
|
+
|
|
14
|
+
<p align="center">
|
|
15
|
+
<a href="docs/quickstart.md">Quickstart</a> ·
|
|
16
|
+
<a href="docs/prediction_tables.md">Prediction tables</a> ·
|
|
17
|
+
<a href="docs/evaluation_receipts.md">Receipts</a> ·
|
|
18
|
+
<a href="CONTRIBUTING.md">Contributing</a>
|
|
19
|
+
</p>
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
PrivateLabBench is a local evaluation framework for scientific machine learning. Bring a prediction table, measure performance across datasets and subgroups, estimate uncertainty, and compare models on matched samples. Keep the underlying data in your environment and exchange aggregate evaluation receipts with collaborators.
|
|
24
|
+
|
|
25
|
+
Evaluation runs locally without an account, hosted service, or data upload.
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
Use **Python 3.10 or later**. Create an environment for **v0.1.0**:
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
python -m venv .venv
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Activate the environment and install:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
# macOS / Linux
|
|
39
|
+
source .venv/bin/activate
|
|
40
|
+
|
|
41
|
+
# Windows PowerShell
|
|
42
|
+
.venv\Scripts\Activate.ps1
|
|
43
|
+
|
|
44
|
+
python -m pip install private-lab-bench==0.1.0
|
|
45
|
+
plb --help
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The `privatelabbench` command is also available. Optional molecular featurization uses `python -m pip install 'private-lab-bench[rdkit]==0.1.0'`. See the [installation guide](docs/install.md) for source/development installs, or run the [quickstart notebook in Colab](https://colab.research.google.com/github/dipeshbabu/private-lab-bench/blob/v0.1.0/examples/notebooks/quickstart.ipynb).
|
|
49
|
+
|
|
50
|
+
## Run Your First Evaluation
|
|
51
|
+
|
|
52
|
+
Start with a bundled synthetic benchmark pack:
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
plb list-packs
|
|
56
|
+
plb run-pack community-tabular-regression@1.0.0
|
|
57
|
+
plb verify reports/benchmark_packs/tabular_regression_receipt.shareable.json
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Packs include example predictions and versioned evaluation settings. They work from installed wheels and require no model downloads or training. Other packs cover molecular regression and protein binary classification.
|
|
61
|
+
|
|
62
|
+
## Evaluate Your Predictions
|
|
63
|
+
|
|
64
|
+
Use `prediction-table/v1` to evaluate outputs from your own model:
|
|
65
|
+
|
|
66
|
+
```csv
|
|
67
|
+
sample_id,target,prediction,site,batch
|
|
68
|
+
s01,0.12,0.14,lab-a,b1
|
|
69
|
+
s02,0.20,0.23,lab-a,b1
|
|
70
|
+
s03,0.33,0.31,lab-b,b2
|
|
71
|
+
s04,0.41,0.45,lab-b,b2
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Save the table as `predictions.csv`, then run:
|
|
75
|
+
|
|
76
|
+
```sh
|
|
77
|
+
plb evaluate predictions.csv --slice site --slice batch
|
|
78
|
+
plb verify reports/evaluation/evaluation_receipt.json
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Regression, binary classification, and multiclass probability tables are supported. Ambiguous columns or task types require explicit flags; binary probabilities with named labels require ordered negative/positive classes. Results stay local until a reviewed release policy permits export. This four-row example is too small for the default bootstrap interval or slice minimum. See the [5-minute quickstart](docs/quickstart.md) for defaults and the [prediction-table reference](docs/prediction_tables.md) for classification schemas.
|
|
82
|
+
|
|
83
|
+
## Make Runs Reproducible
|
|
84
|
+
|
|
85
|
+
Store task, input, slice, uncertainty, and reporting settings in YAML:
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
plb init predictions.csv --slice site --out evaluation.yaml
|
|
89
|
+
plb run evaluation.yaml
|
|
90
|
+
plb validate-config configs/tabular_uncertainty_eval.yaml
|
|
91
|
+
plb run configs/tabular_uncertainty_eval.yaml
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Config runs write local JSON and Markdown reports, an artifact manifest, and evaluation receipts. Review the uncertainty settings and choose a sampling method appropriate to your data. See [statistical uncertainty](docs/uncertainty.md) for assumptions and limits.
|
|
95
|
+
|
|
96
|
+
Use `plb list-protocols` and `plb run local.yaml --protocol plb://generic/regression@1.0.0` to apply fixed, versioned evaluation rules across private datasets. Receipts record the exact protocol digest. See [evaluation protocols](docs/protocols.md) for local definitions, package providers, and release controls.
|
|
97
|
+
|
|
98
|
+
## Compare Models
|
|
99
|
+
|
|
100
|
+
Compare two prediction tables containing the same sample IDs and targets:
|
|
101
|
+
|
|
102
|
+
```sh
|
|
103
|
+
plb compare model-a.csv model-b.csv --target target --task-type regression --metric rmse --resamples 1000 --practical-threshold 0.01
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Paired comparisons report metric differences, bootstrap intervals, and a decision relative to your practical threshold. Optional slice comparisons help locate differences across groups. See the [paired-comparison guide](docs/paired_comparison.md).
|
|
107
|
+
|
|
108
|
+
Combine compatible shared receipts with `plb aggregate lab-a.shareable.json lab-b.shareable.json --model model@revision`. The [aggregation guide](docs/aggregation.md) covers site identities, signer verification, and the metrics that support pooled point estimates.
|
|
109
|
+
|
|
110
|
+
Inspect cohort changes with `plb evaluate current.csv --reference reference.csv --slice site`. [Reference/current diagnostics](docs/degradation.md) report performance degradation, slice prevalence, and selected distribution changes, with explicit uncertainty and release controls.
|
|
111
|
+
|
|
112
|
+
Track the same model over repeated evaluations with [`plb trend`](docs/trends.md). It compares verified shareable receipts at declared collection times, retains uncertainty and quality decisions, and reports changing slices without needing prior raw datasets.
|
|
113
|
+
|
|
114
|
+
For repeated or nested observations, declare a [sampling design](docs/sampling_design.md) to resample independent clusters and keep paired models aligned. Optional slice-test families record dependence assumptions and multiplicity adjustments.
|
|
115
|
+
|
|
116
|
+
Check declared split integrity before scoring with `plb audit-design` or `plb evaluate --evaluation-design design.yaml`. [Evaluation-design audits](docs/evaluation_design.md) detect supported overlap/group/time violations and keep unavailable training evidence explicit.
|
|
117
|
+
|
|
118
|
+
Evaluate real Caco2 and PGP benchmark predictions with the optional [TDC ADMET integration](docs/tdc_admet.md). It preserves the pinned official test sets and metrics, checks upstream score agreement, and supports the same evaluation protocols on private ADMET tables.
|
|
119
|
+
|
|
120
|
+
The [Matbench integration](docs/matbench.md) supports composition and structure tasks with pinned official folds, units, corrected probability ROC-AUC, and verified upstream fold aggregation.
|
|
121
|
+
|
|
122
|
+
The [ProteinGym integration](docs/proteingym.md) evaluates DMS substitution scores within each assay, with tied-rank Spearman and explicit protein/function aggregation.
|
|
123
|
+
|
|
124
|
+
Describe evaluations of released models with the [external-validation profile](docs/external_validation.md): immutable model identity, declared evaluator relationship and dataset provenance, plus explicitly approved aggregate receipts that can be compared across labs.
|
|
125
|
+
|
|
126
|
+
When predictions need to be generated inside the lab, use the [trusted local scorer](docs/trusted_scoring.md) with a reviewed numeric model, pinned digest, and explicit feature units. Its optional evaluation pipeline reuses the normal protocol and release controls.
|
|
127
|
+
|
|
128
|
+
Operate a [hidden benchmark](docs/hidden_benchmarks.md) with owner-held labels, strict prediction submissions, approved result receipts, and a verified results table. Ranking requires an explicit rule in the pinned scientific protocol.
|
|
129
|
+
|
|
130
|
+
## Inspect Evaluation Receipts
|
|
131
|
+
|
|
132
|
+
Follow the [Caco2 model-selection case](docs/case_study.md) from a fresh environment to a paired decision, critical-group diagnosis, release check, and signed receipt. It distinguishes real public benchmark evidence from its synthetic measurement-shift proxy; independent researcher trials remain pending.
|
|
133
|
+
|
|
134
|
+
`evaluation-receipt/v1` separates local context from aggregate information intended for exchange:
|
|
135
|
+
|
|
136
|
+
| Artifact | Contents |
|
|
137
|
+
| --- | --- |
|
|
138
|
+
| `<run>_receipt.json` | Local receipt, including paths, configuration, and exact results |
|
|
139
|
+
| `<run>_receipt.shareable.json` | Approved aggregate receipt, written only when the export policy allows it |
|
|
140
|
+
| `<run>_receipt.md` | Human-readable receipt summary |
|
|
141
|
+
|
|
142
|
+
```sh
|
|
143
|
+
plb verify reports/tabular_uncertainty_demo_receipt.shareable.json
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Shareable receipts require an explicit `release-policy/v1` policy. A blocked export leaves local results and a release audit, and removes any previous shareable file. The bundled synthetic packs include reviewed example policies; private-data runs need their own review. Use `plb release-check <local-receipt.json> --policy release.yaml` for a dry run.
|
|
147
|
+
|
|
148
|
+
Verification checks artifact integrity and optional signatures. A matching self-contained hash alone does not establish authorship, correct execution, or scientific validity. See [evaluation receipts](docs/evaluation_receipts.md) and [report integrity](docs/report_integrity.md).
|
|
149
|
+
|
|
150
|
+
For offline signer authentication, use optional Ed25519 signatures and pinned public keys:
|
|
151
|
+
|
|
152
|
+
```sh
|
|
153
|
+
plb verify receipt.shareable.json --trust-store trusted-labs.yaml --require-trusted-signer --json
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
See the [receipt trust guide](docs/receipt_trust.md) for signing, key rotation, protocol binding, and the limits of these checks.
|
|
157
|
+
|
|
158
|
+
## Privacy and Sharing
|
|
159
|
+
|
|
160
|
+
Keeping data local limits data movement; aggregate results can still disclose sensitive information. PrivateLabBench provides separate tools for exact reporting, empirical privacy audits, release-policy checks, and heuristic `metric_perturbation`.
|
|
161
|
+
|
|
162
|
+
Metric perturbation, including the deprecated `dp` alias, **does not provide a formal differential privacy guarantee**. Bounded-query DP reference primitives have their own sensitivity and accounting requirements. Read the [privacy guide](docs/privacy.md) before selecting a release method.
|
|
163
|
+
|
|
164
|
+
## Reference
|
|
165
|
+
|
|
166
|
+
Enforce explicit model thresholds in CI with `plb gate <receipt> --policy quality.yaml`.
|
|
167
|
+
See [quality gates](docs/quality_gates.md) for confidence, baseline, slice, and privacy requirements.
|
|
168
|
+
|
|
169
|
+
Use `--help` to explore commands and options:
|
|
170
|
+
|
|
171
|
+
```sh
|
|
172
|
+
plb eval-predictions --help
|
|
173
|
+
plb compare --help
|
|
174
|
+
plb list-tasks
|
|
175
|
+
plb list-privacy-attacks
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
- [Five-minute quickstart](docs/quickstart.md)
|
|
179
|
+
- [Core concepts](docs/concepts.md)
|
|
180
|
+
- [Tasks and plugins](docs/tasks.md)
|
|
181
|
+
- [Community benchmark packs](docs/benchmark_packs.md)
|
|
182
|
+
- [Troubleshooting](docs/troubleshooting.md)
|
|
183
|
+
- [Project scope](docs/project_scope.md) and [roadmap](docs/roadmap.md)
|
|
184
|
+
|
|
185
|
+
## Developing
|
|
186
|
+
|
|
187
|
+
Install the development and documentation tools:
|
|
188
|
+
|
|
189
|
+
```sh
|
|
190
|
+
python -m pip install -e '.[dev,docs]' build twine
|
|
191
|
+
python -m pytest -q
|
|
192
|
+
python -m build
|
|
193
|
+
python -m twine check dist/*
|
|
194
|
+
mkdocs build
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
CI tests Python 3.10, 3.11, and 3.12, validates packages and documentation, and exercises the Docker runner. It also installs the wheel in a clean environment and runs a bundled pack outside the checkout. Release publishing uses the [tag-based release workflow](docs/releases.md).
|
|
198
|
+
|
|
199
|
+
Useful source entry points:
|
|
200
|
+
|
|
201
|
+
| Path | Purpose |
|
|
202
|
+
| --- | --- |
|
|
203
|
+
| `privatelabbench/cli.py` | Command-line interface |
|
|
204
|
+
| `privatelabbench/core/` | Task registry and extension interfaces |
|
|
205
|
+
| `privatelabbench/eval/` | Metrics, slices, uncertainty, and paired comparisons |
|
|
206
|
+
| `privatelabbench/privacy/` | Privacy audits and release policies |
|
|
207
|
+
| `privatelabbench/reports/` | Reports, receipts, and artifact integrity |
|
|
208
|
+
| `privatelabbench/data/` | Bundled benchmark packs and schemas |
|
|
209
|
+
|
|
210
|
+
## Contributing
|
|
211
|
+
|
|
212
|
+
Focused fixes, scientific-domain plugins, benchmark packs, and documentation improvements are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) for setup, extension boundaries, and validation requirements. Discuss new tasks, privacy methods, or schema changes in an issue before implementation.
|
|
213
|
+
|
|
214
|
+
The project follows its [Code of Conduct](CODE_OF_CONDUCT.md) and [governance guide](GOVERNANCE.md). Report sensitive vulnerabilities through the process in [SECURITY.md](SECURITY.md).
|
|
215
|
+
|
|
216
|
+
## License
|
|
217
|
+
|
|
218
|
+
Released under the [MIT license](LICENSE). Use [CITATION.cff](CITATION.cff) to cite PrivateLabBench in research.
|