eval-toolkit 0.27.1__py3-none-any.whl
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.
- eval_toolkit/__init__.py +238 -0
- eval_toolkit/__main__.py +156 -0
- eval_toolkit/_version.py +5 -0
- eval_toolkit/analysis.py +196 -0
- eval_toolkit/artifacts.py +376 -0
- eval_toolkit/bootstrap.py +1344 -0
- eval_toolkit/calibration.py +1143 -0
- eval_toolkit/claims.py +670 -0
- eval_toolkit/config.py +112 -0
- eval_toolkit/docs.py +305 -0
- eval_toolkit/evidence.py +90 -0
- eval_toolkit/harness.py +1193 -0
- eval_toolkit/leakage.py +1052 -0
- eval_toolkit/loaders.py +424 -0
- eval_toolkit/manifest.py +622 -0
- eval_toolkit/metrics.py +1720 -0
- eval_toolkit/operating_points.py +192 -0
- eval_toolkit/paths.py +125 -0
- eval_toolkit/plotting.py +991 -0
- eval_toolkit/protocols.py +98 -0
- eval_toolkit/provenance.py +255 -0
- eval_toolkit/py.typed +0 -0
- eval_toolkit/schemas/manifest.v1.json +155 -0
- eval_toolkit/schemas/manifest.v2.json +186 -0
- eval_toolkit/schemas/manifest.v3.json +186 -0
- eval_toolkit/schemas/results.v1.json +87 -0
- eval_toolkit/schemas/results_full.v1.json +83 -0
- eval_toolkit/seeds.py +119 -0
- eval_toolkit/splits.py +520 -0
- eval_toolkit/text_dedup.py +1403 -0
- eval_toolkit/thresholds.py +819 -0
- eval_toolkit-0.27.1.dist-info/METADATA +314 -0
- eval_toolkit-0.27.1.dist-info/RECORD +36 -0
- eval_toolkit-0.27.1.dist-info/WHEEL +4 -0
- eval_toolkit-0.27.1.dist-info/entry_points.txt +2 -0
- eval_toolkit-0.27.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: eval-toolkit
|
|
3
|
+
Version: 0.27.1
|
|
4
|
+
Summary: Reusable evaluation contracts for binary classification: metrics, bootstrap CIs, calibration, artifacts, and evidence gates.
|
|
5
|
+
Project-URL: Homepage, https://github.com/brandon-behring/eval-toolkit
|
|
6
|
+
Project-URL: Repository, https://github.com/brandon-behring/eval-toolkit.git
|
|
7
|
+
Project-URL: Issues, https://github.com/brandon-behring/eval-toolkit/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/brandon-behring/eval-toolkit/blob/main/CHANGELOG.md
|
|
9
|
+
Author: Brandon Behring
|
|
10
|
+
License-Expression: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: binary-classification,bootstrap,calibration,evaluation,machine-learning,metrics
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.13
|
|
24
|
+
Requires-Dist: jsonschema>=4.21
|
|
25
|
+
Requires-Dist: numpy>=1.26
|
|
26
|
+
Requires-Dist: scikit-learn>=1.4
|
|
27
|
+
Requires-Dist: scipy>=1.11
|
|
28
|
+
Provides-Extra: all
|
|
29
|
+
Requires-Dist: hypothesis>=6.100; extra == 'all'
|
|
30
|
+
Requires-Dist: matplotlib>=3.8; extra == 'all'
|
|
31
|
+
Requires-Dist: pandas>=2.0; extra == 'all'
|
|
32
|
+
Requires-Dist: pillow>=10.0; extra == 'all'
|
|
33
|
+
Requires-Dist: pyarrow>=15.0; extra == 'all'
|
|
34
|
+
Requires-Dist: pyyaml>=6.0; extra == 'all'
|
|
35
|
+
Provides-Extra: dataframe
|
|
36
|
+
Requires-Dist: pandas>=2.0; extra == 'dataframe'
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: black>=24.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: hypothesis>=6.100; extra == 'dev'
|
|
40
|
+
Requires-Dist: matplotlib>=3.8; extra == 'dev'
|
|
41
|
+
Requires-Dist: mypy>=1.10; extra == 'dev'
|
|
42
|
+
Requires-Dist: pandas>=2.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: pillow>=10.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pre-commit>=3.7; extra == 'dev'
|
|
45
|
+
Requires-Dist: pyarrow>=15.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: pytest-cov>=5.0; extra == 'dev'
|
|
47
|
+
Requires-Dist: pytest-mpl>=0.16; extra == 'dev'
|
|
48
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
49
|
+
Requires-Dist: pyyaml>=6.0; extra == 'dev'
|
|
50
|
+
Requires-Dist: ruff>=0.5; extra == 'dev'
|
|
51
|
+
Requires-Dist: sybil>=10.0; extra == 'dev'
|
|
52
|
+
Provides-Extra: parquet
|
|
53
|
+
Requires-Dist: pyarrow>=15.0; extra == 'parquet'
|
|
54
|
+
Provides-Extra: plotting
|
|
55
|
+
Requires-Dist: matplotlib>=3.8; extra == 'plotting'
|
|
56
|
+
Requires-Dist: pillow>=10.0; extra == 'plotting'
|
|
57
|
+
Provides-Extra: property
|
|
58
|
+
Requires-Dist: hypothesis>=6.100; extra == 'property'
|
|
59
|
+
Provides-Extra: validation
|
|
60
|
+
Provides-Extra: yaml
|
|
61
|
+
Requires-Dist: pyyaml>=6.0; extra == 'yaml'
|
|
62
|
+
Description-Content-Type: text/markdown
|
|
63
|
+
|
|
64
|
+
# eval-toolkit
|
|
65
|
+
|
|
66
|
+
A **methodology-aware evaluation harness for binary classification**:
|
|
67
|
+
metrics, bootstrap CIs, calibration, leakage detection, splitting,
|
|
68
|
+
threshold selection, dataset loading, reproducibility manifests, and a
|
|
69
|
+
slice-aware orchestrator that ties them together. Pure
|
|
70
|
+
numpy/scipy/sklearn core; pandas/matplotlib/hypothesis are optional
|
|
71
|
+
extras; PyTorch / HuggingFace / `datasets` are *consumer-side* (never
|
|
72
|
+
required).
|
|
73
|
+
|
|
74
|
+
Library-grade by design — every public function is type-annotated,
|
|
75
|
+
every math kernel is documented with LaTeX + literature references,
|
|
76
|
+
statistical validity (bootstrap CIs, MDE estimates, paired-difference
|
|
77
|
+
tests) is built in, and the JSON outputs (`results.json` /
|
|
78
|
+
`results_full.json` / `manifest.json`) ship with versioned [JSON
|
|
79
|
+
Schemas](src/eval_toolkit/schemas/) so downstream parsers can gate on
|
|
80
|
+
format changes.
|
|
81
|
+
|
|
82
|
+
## Three-tier architecture
|
|
83
|
+
|
|
84
|
+
```
|
|
85
|
+
┌─ Tier 3 ─ Reproducibility scaffolding ─────────────────┐
|
|
86
|
+
│ manifest.json + seeds + git_sha + data_hashes + │
|
|
87
|
+
│ gpu_info + leakage_report (NeurIPS-aligned) │
|
|
88
|
+
├─ Tier 2 ─ Protocol-based orchestration ────────────────┤
|
|
89
|
+
│ Scorer / SliceAwareScorer / LeakageCheck / Splitter │
|
|
90
|
+
│ ThresholdSelector / DatasetLoader / SimilarityStrategy│
|
|
91
|
+
│ Versioned (opt-in: per-object versions in manifest) │
|
|
92
|
+
├─ Tier 1 ─ Functional core ─────────────────────────────┤
|
|
93
|
+
│ pr_auc / roc_auc / ECE variants / Brier / bootstrap_ci│
|
|
94
|
+
│ paired_bootstrap_diff / cv_clt_ci / mde_from_ci │
|
|
95
|
+
│ reliability_curve / fit_temperature / fit_isotonic │
|
|
96
|
+
└────────────────────────────────────────────────────────┘
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Pick the tier your task needs. Ad-hoc analysis: just call the
|
|
100
|
+
functional core. Full eval pipelines: implement the Protocols. Every
|
|
101
|
+
run: capture the manifest.
|
|
102
|
+
|
|
103
|
+
## Documentation
|
|
104
|
+
|
|
105
|
+
- **[Getting started](docs/getting-started.md)** — end-to-end
|
|
106
|
+
walkthrough for new users: install, define a Scorer, build slices,
|
|
107
|
+
run `evaluate()`, persist results, add a claim, render a plot.
|
|
108
|
+
- **[Methodology curriculum](docs/methodology/README.md)** — 16
|
|
109
|
+
chapters on splits, metrics, calibration, evidence gates,
|
|
110
|
+
prediction artifacts, and more.
|
|
111
|
+
- **[Schema reference](docs/schemas.md)** — field-by-field semantics
|
|
112
|
+
for `results.v1.json`, `results_full.v1.json`, `manifest.v1.json`.
|
|
113
|
+
- **[Migration guides](docs/MIGRATION.md)** — v0.6→v0.7, v0.7→v0.8,
|
|
114
|
+
v0.8→v0.9.
|
|
115
|
+
- **[Extending](docs/extending.md)** — Protocol-by-Protocol guide for
|
|
116
|
+
custom Scorers, Splitters, LeakageChecks, ThresholdSelectors,
|
|
117
|
+
DatasetLoaders, EvidenceGates.
|
|
118
|
+
- **[Repo strategy](docs/repo-strategy.md)** — how the package is
|
|
119
|
+
organized, the 6-bucket target shape, and the checklist that
|
|
120
|
+
governs when to extract a sub-package into its own repo.
|
|
121
|
+
|
|
122
|
+
## Methodology
|
|
123
|
+
|
|
124
|
+
What good binary-classification evaluation looks like, with each
|
|
125
|
+
concern mapped to the toolkit primitive that operationalizes it.
|
|
126
|
+
|
|
127
|
+
- [`docs/methodology/`](docs/methodology/README.md) — the curriculum
|
|
128
|
+
(16 chapters). Recommended reading order:
|
|
129
|
+
[`leakage`](docs/methodology/leakage.md) →
|
|
130
|
+
[`splits`](docs/methodology/splits.md) →
|
|
131
|
+
[`thresholds`](docs/methodology/thresholds.md) →
|
|
132
|
+
[`calibration`](docs/methodology/calibration.md) →
|
|
133
|
+
[`comparison`](docs/methodology/comparison.md) →
|
|
134
|
+
[`bootstrap`](docs/methodology/bootstrap.md) →
|
|
135
|
+
[`length_stratification`](docs/methodology/length_stratification.md) →
|
|
136
|
+
[`text_dedup`](docs/methodology/text_dedup.md) →
|
|
137
|
+
[`versioning`](docs/methodology/versioning.md) →
|
|
138
|
+
[`fairness`](docs/methodology/fairness.md) →
|
|
139
|
+
[`reproducibility`](docs/methodology/reproducibility.md) →
|
|
140
|
+
[`testing`](docs/methodology/testing.md) →
|
|
141
|
+
[`reading_list`](docs/methodology/reading_list.md).
|
|
142
|
+
- [`docs/MIGRATION.md`](docs/MIGRATION.md) — per-version migration
|
|
143
|
+
guides (v0.6→v0.7, v0.7→v0.8).
|
|
144
|
+
- [`docs/roadmap.md`](docs/roadmap.md) — forward-looking tracker;
|
|
145
|
+
v1.0.0 path; consumer gap-doc cross-links.
|
|
146
|
+
|
|
147
|
+
## Extending eval-toolkit
|
|
148
|
+
|
|
149
|
+
How to plug your own scorers / leakage checks / splitters / loaders /
|
|
150
|
+
threshold selectors into the harness.
|
|
151
|
+
|
|
152
|
+
- [`docs/extending.md`](docs/extending.md) — Protocol-by-Protocol
|
|
153
|
+
guide, ~50-line full-harness recipe, project-layout pointer.
|
|
154
|
+
|
|
155
|
+
## Worked examples
|
|
156
|
+
|
|
157
|
+
- [`docs/examples/prompt_injection_walkthrough.md`](docs/examples/prompt_injection_walkthrough.md)
|
|
158
|
+
— End-to-end prompt-injection eval on a synthetic OWASP LLM01:2025
|
|
159
|
+
fixture; cross-links to the
|
|
160
|
+
[showcase repo](https://github.com/brandon-behring/prompt_injection_classifier_showcase)
|
|
161
|
+
for the real Lakera PINT walkthrough.
|
|
162
|
+
- [`docs/examples/pytorch_scorer_example.md`](docs/examples/pytorch_scorer_example.md)
|
|
163
|
+
— HuggingFace transformer + LoRA `Scorer` adapter (batched inference,
|
|
164
|
+
GPU/CPU placement, deterministic-mode setup).
|
|
165
|
+
|
|
166
|
+
## Install
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
uv venv
|
|
170
|
+
uv pip install -e .[dev]
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
For consumers who only need the math kernels (no plotting, no pandas):
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
pip install eval-toolkit # core only: numpy/scipy/sklearn
|
|
177
|
+
pip install "eval-toolkit[plotting]" # adds matplotlib + pillow
|
|
178
|
+
pip install "eval-toolkit[dataframe]" # adds pandas
|
|
179
|
+
pip install "eval-toolkit[all]" # everything
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
## Quick examples
|
|
183
|
+
|
|
184
|
+
### Metrics
|
|
185
|
+
|
|
186
|
+
```python
|
|
187
|
+
import numpy as np
|
|
188
|
+
from eval_toolkit import pr_auc, roc_auc, expected_calibration_error
|
|
189
|
+
|
|
190
|
+
rng = np.random.default_rng(42)
|
|
191
|
+
y = rng.integers(0, 2, size=200)
|
|
192
|
+
# Clip to [0, 1] — ECE only meaningful on calibrated probabilities.
|
|
193
|
+
s = np.clip(y + rng.normal(0, 0.3, size=200), 0, 1)
|
|
194
|
+
|
|
195
|
+
print(f"PR-AUC: {pr_auc(y, s):.3f}")
|
|
196
|
+
print(f"ROC-AUC: {roc_auc(y, s):.3f}")
|
|
197
|
+
print(f"ECE (10 bins): {expected_calibration_error(y, s, n_bins=10):.3f}")
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Bootstrap confidence intervals
|
|
201
|
+
|
|
202
|
+
```python
|
|
203
|
+
from eval_toolkit import bootstrap_ci, paired_bootstrap_diff, pr_auc
|
|
204
|
+
|
|
205
|
+
ci = bootstrap_ci(y, s, pr_auc, n_resamples=1000, seed=42)
|
|
206
|
+
print(f"PR-AUC: {ci.point_estimate:.3f} 95% CI: [{ci.ci_low:.3f}, {ci.ci_high:.3f}]")
|
|
207
|
+
|
|
208
|
+
# Paired bootstrap on the lift between two scorers (s_baseline must be in [0, 1] too).
|
|
209
|
+
s_baseline = np.clip(rng.normal(0.5, 0.3, size=200), 0, 1)
|
|
210
|
+
diff = paired_bootstrap_diff(y, s_baseline, s, pr_auc, n_resamples=1000, seed=42)
|
|
211
|
+
print(f"Δ PR-AUC: {diff.delta:.3f} overlaps zero: {diff.overlaps_zero}")
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Temperature scaling (Guo et al. 2017)
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
from eval_toolkit import fit_temperature
|
|
218
|
+
|
|
219
|
+
logits = rng.normal(size=(500, 2))
|
|
220
|
+
labels = (logits[:, 1] > logits[:, 0]).astype(int)
|
|
221
|
+
result = fit_temperature(logits, labels)
|
|
222
|
+
print(f"Optimal T: {result['temperature']:.3f}")
|
|
223
|
+
print(f"NLL: {result['nll_pre']:.3f} -> {result['nll_post']:.3f}")
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Reproducibility manifest (NeurIPS-aligned)
|
|
227
|
+
|
|
228
|
+
```python
|
|
229
|
+
import tempfile
|
|
230
|
+
from pathlib import Path
|
|
231
|
+
from eval_toolkit import build_manifest, write_manifest
|
|
232
|
+
|
|
233
|
+
with tempfile.TemporaryDirectory() as run_dir:
|
|
234
|
+
# data_files: {name: path} → eval_toolkit hashes the files for you;
|
|
235
|
+
# versioned: any object with a `version` attribute (e.g. a scorer or
|
|
236
|
+
# leakage check) is captured by name → version in the manifest.
|
|
237
|
+
manifest = build_manifest(
|
|
238
|
+
run_id="quickstart-demo",
|
|
239
|
+
config={"threshold_criterion": "max_f1", "seed": 42},
|
|
240
|
+
seeds={"global": 42, "bootstrap": 42},
|
|
241
|
+
)
|
|
242
|
+
write_manifest(manifest, Path(run_dir))
|
|
243
|
+
# → run_dir/manifest.json: schema_version, git_sha, dirty_flag, code_versions,
|
|
244
|
+
# env (python+platform), seeds, data_hashes, versioned_objects, gpu_info
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## Modules
|
|
248
|
+
|
|
249
|
+
| Module | Purpose |
|
|
250
|
+
|---|---|
|
|
251
|
+
| `eval_toolkit.metrics` | PR-AUC, ROC-AUC, ECE variants, Brier decomposition, prior-shift projection |
|
|
252
|
+
| `eval_toolkit.thresholds` | `ThresholdSelector` Protocol + 6 reference impls (max-F1, target-recall/precision/FPR, Youden-J, cost-sensitive) |
|
|
253
|
+
| `eval_toolkit.operating_points` | Fit thresholds on mixed-class slices and apply them to mixed or single-class target slices with provenance |
|
|
254
|
+
| `eval_toolkit.bootstrap` | BCa + paired bootstrap, MDE estimates, two-level operating-point bootstrap, K-fold CLT-corrected CI |
|
|
255
|
+
| `eval_toolkit.calibration` | Reliability curves, Bayes-optimal thresholds, isotonic/Platt/temperature scaling |
|
|
256
|
+
| `eval_toolkit.harness` | `Scorer` Protocol + `evaluate(...)` + `evaluate_folded(...)` slice-aware orchestrators |
|
|
257
|
+
| `eval_toolkit.leakage` | `LeakageCheck` Protocol + 7 reference impls (exact / near / encoding-obfuscated / cross-split / label-conflict / group / temporal); `Versioned` opt-in Protocol |
|
|
258
|
+
| `eval_toolkit.splits` | `Splitter` Protocol + 5 reference impls (holdout / stratified / group / source-disjoint / time-series) |
|
|
259
|
+
| `eval_toolkit.loaders` | `DatasetLoader` Protocol + 4 reference impls (DataFrame / SingleSlice / ParquetGlob / HF datasets) with Croissant-compatible `describe()` |
|
|
260
|
+
| `eval_toolkit.manifest` | `RunManifest` (NeurIPS-aligned) + source-role / guardrail metadata + `build_manifest` / `write_manifest` |
|
|
261
|
+
| `eval_toolkit.claims` | Generic evidence gates and `ClaimReport` for claim-mode vs exploratory-mode checks |
|
|
262
|
+
| `eval_toolkit.text_dedup` | `SimilarityStrategy` Protocol + 5 strategies (TF-IDF / hash / embedding / Jaccard / MinHash-LSH); `near_dedup` / `cross_dedup` orchestrators |
|
|
263
|
+
| `eval_toolkit.plotting` | PR curves, reliability diagrams, confusion matrices, score histograms, lift CIs |
|
|
264
|
+
| `eval_toolkit.provenance` | File hashing, run-directory layout, figure metadata sidecar |
|
|
265
|
+
| `eval_toolkit/schemas/` | Bundled JSON Schemas (`results.v1.json`, `results_full.v1.json`, `manifest.v1.json`) — load via `importlib.resources.files("eval_toolkit") / "schemas"` (not an importable Python module) |
|
|
266
|
+
| `eval_toolkit.paths` | Repo-relative path normalization |
|
|
267
|
+
| `eval_toolkit.seeds` | `set_global_seeds` (random + numpy + optional torch) |
|
|
268
|
+
| `eval_toolkit.config` | `frozen_config` decorator + `from_yaml` loader |
|
|
269
|
+
| `eval_toolkit.docs` | Anchor-based markdown rendering with formatter registry |
|
|
270
|
+
|
|
271
|
+
## Fast iteration loop
|
|
272
|
+
|
|
273
|
+
For development, skip slow tests with:
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
make fast # or: nox -s fast
|
|
277
|
+
# under the hood: uv run pytest -m "not slow" -q
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
CI runs the full suite (including `slow`) on every push. The `slow`
|
|
281
|
+
marker is applied to tests exceeding ~2s (mostly Hypothesis property
|
|
282
|
+
tests with large `max_examples` and a few bootstrap tests with
|
|
283
|
+
`n_resamples >= 200`). `make fast` keeps the developer iteration loop
|
|
284
|
+
under ~30 seconds.
|
|
285
|
+
|
|
286
|
+
## Downstream contract testing (v4 sibling-smoke)
|
|
287
|
+
|
|
288
|
+
A separate CI workflow (`.github/workflows/v4-smoke.yml`) checks out
|
|
289
|
+
the downstream consumer `prompt-injection-v4` at `main`, installs it
|
|
290
|
+
with this branch's eval-toolkit as an editable sibling dep (via v4's
|
|
291
|
+
`[tool.uv.sources]`), and runs v4's fast `-m smoke` suite. This catches
|
|
292
|
+
contract regressions at PR time rather than in v4's own CI post-merge.
|
|
293
|
+
|
|
294
|
+
The workflow requires a `HF_TOKEN` repo secret (gated HuggingFace
|
|
295
|
+
datasets used by v4's smoke fixtures). Set it at:
|
|
296
|
+
`https://github.com/brandon-behring/eval-toolkit/settings/secrets/actions`
|
|
297
|
+
|
|
298
|
+
The workflow runs with `continue-on-error: true` during a 2-3 week
|
|
299
|
+
trial period; it'll be promoted to a required gate once the false-
|
|
300
|
+
positive rate (from independent v4 main breakage or HF rate-limits)
|
|
301
|
+
is characterized.
|
|
302
|
+
|
|
303
|
+
## Standards
|
|
304
|
+
|
|
305
|
+
See [`STYLE.md`](STYLE.md) for the full reconciled coding standards (formatting,
|
|
306
|
+
naming, errors, docstrings, tests, packaging).
|
|
307
|
+
|
|
308
|
+
## Versioning
|
|
309
|
+
|
|
310
|
+
Semver from v0.1.0. See [`CHANGELOG.md`](CHANGELOG.md).
|
|
311
|
+
|
|
312
|
+
## License
|
|
313
|
+
|
|
314
|
+
MIT — see [`LICENSE`](LICENSE).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
eval_toolkit/__init__.py,sha256=jXtUumPAckGEUq6yKzouWeV6Ijm0VwS6CWc12tbpGpg,11202
|
|
2
|
+
eval_toolkit/__main__.py,sha256=vvpb6rCQBjEJm1dTR0smtByrlJhx8RUvvIdrOm8mtvg,5807
|
|
3
|
+
eval_toolkit/_version.py,sha256=Vn17cRk3n5FrF8Qk1_y919scG-HD6basX1ieIMZkVes,92
|
|
4
|
+
eval_toolkit/analysis.py,sha256=LdO-SQNZTqD9OGBHX-HiLGTq89DvZ5j_Vp5K7Iy0t8Q,6798
|
|
5
|
+
eval_toolkit/artifacts.py,sha256=s4ShmEiHj3vdb1t3medzh9nEav5QQEFfiXvDIZN3lfM,14107
|
|
6
|
+
eval_toolkit/bootstrap.py,sha256=XrOzy1q6COHBGTlw3oSIiR3lEpy5KnXWssV0r_S-fLQ,47964
|
|
7
|
+
eval_toolkit/calibration.py,sha256=zk8cW-q9vAyQZb3Rr-PdPuqhVhq29ITl0h7NDhMozF0,41960
|
|
8
|
+
eval_toolkit/claims.py,sha256=CGVyltfCAs4PkyIp5R59qGCHpyEO1e7L0OsEt7vHAw8,23796
|
|
9
|
+
eval_toolkit/config.py,sha256=GTRI5kY7manl4GDnfCzIsO8k90OiLBtt77SD1KEINC4,3253
|
|
10
|
+
eval_toolkit/docs.py,sha256=stk1F_nyX3nBgdJN_Hwk88_mh9aCgHfGQdTduq1Qis4,8754
|
|
11
|
+
eval_toolkit/evidence.py,sha256=uHRYrIp7YxadojRnz0jdznvySgJWtdOYFcnHp_d20xI,2475
|
|
12
|
+
eval_toolkit/harness.py,sha256=F0lILnlVdSpJPUBNcOpkYfpf8i2AHUGOVrxR47DH_5I,46684
|
|
13
|
+
eval_toolkit/leakage.py,sha256=xborrDqdf8hWHBjbcSXEcgKr2F8C3J0Itg5AZ7J4gBc,42271
|
|
14
|
+
eval_toolkit/loaders.py,sha256=IPgapA97G3u7uOsG6JRyZ5HKaGf97LMl09MzdXIuSE4,15789
|
|
15
|
+
eval_toolkit/manifest.py,sha256=FqhTvAedzKwq9bTU43KVLIhbKtX6bSyotK9jZGtqBxA,25385
|
|
16
|
+
eval_toolkit/metrics.py,sha256=i0Jla2dolGQ3Dqor3OgvPrCEGt-sesC40eKjGE1podg,59625
|
|
17
|
+
eval_toolkit/operating_points.py,sha256=IAOiOIMuGGE61q_z10VKAzPsjmGltzH0RKV2sYPpSag,6646
|
|
18
|
+
eval_toolkit/paths.py,sha256=oS3nsqXLQJpyI6l73PKsCQe9vM2icw6gSEopgfuw35s,4156
|
|
19
|
+
eval_toolkit/plotting.py,sha256=I8caaWUXM6G9FV3TiFDAs_zqrQkdWSEUzCkhodsQw4A,32867
|
|
20
|
+
eval_toolkit/protocols.py,sha256=QobXqvqI3esfznwlMQZ7qoGN3fV-APMDcEvmaJPnzbU,2654
|
|
21
|
+
eval_toolkit/provenance.py,sha256=mG5E7h1uBp1nQpgNuERC2OxUzTymkdYbn5QzKWzqFV8,7897
|
|
22
|
+
eval_toolkit/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
23
|
+
eval_toolkit/seeds.py,sha256=54fhkO0V6mjTcy1f5nKWY3u4_NQamfW9LaGywPIlwO4,4180
|
|
24
|
+
eval_toolkit/splits.py,sha256=rkU6XHFpntTU354SGe_ppSL7PSu7Qm1gaaSAFra5kjI,18168
|
|
25
|
+
eval_toolkit/text_dedup.py,sha256=8_jYYdxL-_sXgKNLCglYNEmXiWCSRjpL3blVQOX1R6w,52902
|
|
26
|
+
eval_toolkit/thresholds.py,sha256=uxnDYCPEQ2YxVHnM7IWtqsccLoyoHhOYdNqRgWWkYeM,30220
|
|
27
|
+
eval_toolkit/schemas/manifest.v1.json,sha256=hNoyOqcsvxJMHm_fvNRc7hLAYe5UMy90-UVEZNDgV_4,5390
|
|
28
|
+
eval_toolkit/schemas/manifest.v2.json,sha256=fW8PqIRHy3VCrfniiFz4DyJbz1B1Z0PCqr4nImhXJTs,7044
|
|
29
|
+
eval_toolkit/schemas/manifest.v3.json,sha256=lca1u9PbSYpBAQ_8melv4OUhBqn57ZhRs6qLXSKWcWA,5924
|
|
30
|
+
eval_toolkit/schemas/results.v1.json,sha256=jDK9bs4VECZwP2PEAAGhQYFGJANDglHkXsTjgxLPvGM,3182
|
|
31
|
+
eval_toolkit/schemas/results_full.v1.json,sha256=gFQa5vG8lRJR2lJORojB-ltI5sCGaLIfwseoHEbNHOI,2760
|
|
32
|
+
eval_toolkit-0.27.1.dist-info/METADATA,sha256=Z23WDxq8fg8c1uTPpMz6IdSz1LjVPHmJHaVkwy_jVHI,14312
|
|
33
|
+
eval_toolkit-0.27.1.dist-info/WHEEL,sha256=QccIxa26bgl1E6uMy58deGWi-0aeIkkangHcxk2kWfw,87
|
|
34
|
+
eval_toolkit-0.27.1.dist-info/entry_points.txt,sha256=sMt5QJp6AXbj6k1oMIFXNY5jqzmpzQK0loqqAWzamGo,60
|
|
35
|
+
eval_toolkit-0.27.1.dist-info/licenses/LICENSE,sha256=ILekgpB5bjyOq3gi8MyG43Bd0fdQSoylFnWdeJgw5AA,1072
|
|
36
|
+
eval_toolkit-0.27.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Brandon Behring
|
|
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.
|