equiframe-benchmark 0.12.4__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.
Files changed (62) hide show
  1. equiframe_benchmark/PROTOCOL_V2.md +172 -0
  2. equiframe_benchmark/__init__.py +284 -0
  3. equiframe_benchmark/__main__.py +3 -0
  4. equiframe_benchmark/_scale_workload.py +375 -0
  5. equiframe_benchmark/calibration_types.py +112 -0
  6. equiframe_benchmark/cli.py +196 -0
  7. equiframe_benchmark/commands.py +149 -0
  8. equiframe_benchmark/commands_scale.py +38 -0
  9. equiframe_benchmark/commands_step10.py +275 -0
  10. equiframe_benchmark/commands_v2.py +206 -0
  11. equiframe_benchmark/cost_table.py +62 -0
  12. equiframe_benchmark/costs.py +788 -0
  13. equiframe_benchmark/distribution.py +932 -0
  14. equiframe_benchmark/evaluation.py +614 -0
  15. equiframe_benchmark/evaluation_v2.py +428 -0
  16. equiframe_benchmark/fixtures.py +299 -0
  17. equiframe_benchmark/freeze.py +869 -0
  18. equiframe_benchmark/freeze_v2.py +412 -0
  19. equiframe_benchmark/integration.py +655 -0
  20. equiframe_benchmark/io.py +29 -0
  21. equiframe_benchmark/models.py +313 -0
  22. equiframe_benchmark/models_v2.py +13 -0
  23. equiframe_benchmark/mutations.py +34 -0
  24. equiframe_benchmark/oracle.py +264 -0
  25. equiframe_benchmark/pairwise.py +248 -0
  26. equiframe_benchmark/pilot.py +254 -0
  27. equiframe_benchmark/py.typed +0 -0
  28. equiframe_benchmark/reconciliation.py +294 -0
  29. equiframe_benchmark/reproduction.py +542 -0
  30. equiframe_benchmark/scale_io.py +19 -0
  31. equiframe_benchmark/scale_process.py +1077 -0
  32. equiframe_benchmark/scale_types.py +120 -0
  33. equiframe_benchmark/scaling.py +529 -0
  34. equiframe_benchmark/schemas/protocol-v2/CommonSupportV2-2.0.schema.json +327 -0
  35. equiframe_benchmark/schemas/protocol-v2/ContrastSpecV2-2.0.schema.json +37 -0
  36. equiframe_benchmark/schemas/protocol-v2/EvaluationConfigV2-2.0.schema.json +184 -0
  37. equiframe_benchmark/schemas/protocol-v2/EvaluationReportV2-2.0.schema.json +1237 -0
  38. equiframe_benchmark/schemas/protocol-v2/EvaluationStratumV2-2.0.schema.json +747 -0
  39. equiframe_benchmark/schemas/protocol-v2/FreezeDefinitionV2-2.0.schema.json +5951 -0
  40. equiframe_benchmark/schemas/protocol-v2/FreezeManifestV2-2.0.schema.json +6222 -0
  41. equiframe_benchmark/schemas/protocol-v2/PrincipalContrastV2-2.0.schema.json +578 -0
  42. equiframe_benchmark/schemas/protocol-v2/ProtocolReviewV2-2.0.schema.json +56 -0
  43. equiframe_benchmark/schemas/protocol-v2/SignedMetricV2-2.0.schema.json +51 -0
  44. equiframe_benchmark/schemas/protocol-v2/StudyCaseResultV2-2.0.schema.json +4881 -0
  45. equiframe_benchmark/schemas/protocol-v2/StudyResultV2-2.0.schema.json +8370 -0
  46. equiframe_benchmark/schemas/protocol-v2/TableExportV2-2.0.schema.json +75 -0
  47. equiframe_benchmark/selection.py +178 -0
  48. equiframe_benchmark/snapshot.py +24 -0
  49. equiframe_benchmark/splits.py +92 -0
  50. equiframe_benchmark/study.py +526 -0
  51. equiframe_benchmark/study_bundle.py +379 -0
  52. equiframe_benchmark/study_bundle_v2.py +388 -0
  53. equiframe_benchmark/study_v2.py +544 -0
  54. equiframe_benchmark/tables.py +347 -0
  55. equiframe_benchmark/tables_v2.py +340 -0
  56. equiframe_benchmark/training_types.py +52 -0
  57. equiframe_benchmark-0.12.4.dist-info/METADATA +343 -0
  58. equiframe_benchmark-0.12.4.dist-info/RECORD +62 -0
  59. equiframe_benchmark-0.12.4.dist-info/WHEEL +4 -0
  60. equiframe_benchmark-0.12.4.dist-info/entry_points.txt +3 -0
  61. equiframe_benchmark-0.12.4.dist-info/licenses/LICENSE +21 -0
  62. equiframe_benchmark-0.12.4.dist-info/licenses/THIRD_PARTY_NOTICES.md +8 -0
@@ -0,0 +1,172 @@
1
+ # Protocolo principal pareado V2
2
+
3
+ Esta versión implementa el recorrido de ingeniería de T19: congelación,
4
+ captura de casos retenidos, evaluación principal por contraste, incertidumbre
5
+ por grupos, tablas y reproducción. No cambia los documentos, algoritmos,
6
+ lectores ni fingerprints del protocolo V1. Los reportes suplementarios
7
+ `evaluate_pairwise` de V1 conservan su significado anterior.
8
+
9
+ Es desarrollo solicitado el 26 de octubre de 2026. Su validación acotada,
10
+ autorizada posteriormente, supera 24 casos nuevos y tres regresiones V1 pequeñas.
11
+ Incluye dos recorridos de un caso nativo DuckDB ficticio retenido: uno mediante
12
+ API y otro mediante los ocho comandos V2. Comprueba lectura del estudio,
13
+ reproducción portable y salidas/errores CLI; no entrena detectores ni acredita
14
+ resultados científicos o aprobación académica. Ruff, formato y mypy estricto
15
+ se completan para los archivos de la integración. Los 13 esquemas V2 generados
16
+ coinciden con los modelos actuales. Datos y decisiones de los tests son fixtures.
17
+
18
+ ## Alcance y soporte
19
+
20
+ `EvaluationConfigV2` fija las familias principales `nulls_types`, `joins` y
21
+ `aggregations`, y las parejas `pandas-polars`, `pandas-duckdb` y `polars-duckdb`.
22
+ Hay nueve estratos familia/pareja, además de los resúmenes global, por familia
23
+ y por pareja. Los estratos sin observaciones se muestran con denominadores
24
+ cero y motivos explícitos; no se descartan del informe.
25
+
26
+ Los contrastes entre R (reglas), M (Isolation Forest), B (MAD) y H (reglas OR M)
27
+ se declaran explícitamente en `contrasts`, sin repetir una pareja en sentido
28
+ inverso. Cada contraste utiliza sólo casos con O confirmado y decisiones
29
+ completas de **los dos métodos comparados**. La disponibilidad de B no elimina
30
+ un caso del contraste H–R, por ejemplo. El informe conserva exclusiones,
31
+ alertas parciales, grupos y cobertura respecto de casos confirmados y de
32
+ casos programados. Una indisponibilidad no equivale a ausencia de alerta.
33
+
34
+ La intersección completa R/M/B/H se mantiene en `stratum.common`, con el rol
35
+ explícito `additional_common_R_M_B_H`; no sustituye el soporte principal.
36
+ Las cinco familias genéricas de la biblioteca siguen disponibles mediante
37
+ las interfaces existentes, pero no se agregan al protocolo principal V2.
38
+
39
+ ## API de configuración
40
+
41
+ ```python
42
+ import equiframe_benchmark as eb
43
+
44
+ config = eb.EvaluationConfigV2(
45
+ mode="pilot",
46
+ freeze_sha256=None,
47
+ bootstrap=bootstrap_plan, # BootstrapPlan explícito, justificado antes de prueba.
48
+ contrasts=(
49
+ eb.ContrastSpecV2(left="H", right="R"),
50
+ eb.ContrastSpecV2(left="M", right="R"),
51
+ eb.ContrastSpecV2(left="M", right="B"),
52
+ ),
53
+ )
54
+ protocol_sha256 = eb.evaluation_protocol_sha256_v2(config)
55
+ ```
56
+
57
+ La lista mostrada ilustra la sintaxis; no es una selección científica ya
58
+ aprobada. Puede declararse cualquier subconjunto no vacío de las seis parejas
59
+ distintas de métodos. Las hipótesis, contrastes, confianza, soporte mínimo e
60
+ independencia deben revisarse y fijarse antes del estudio.
61
+
62
+ `FreezeDefinitionV2` conserva los campos de catálogo, splits, casos, modelos,
63
+ fuentes, entorno, decisiones y costos, pero requiere exactamente los tres
64
+ modelos de familia principales. Reutiliza los tipos `FrozenFamilyModel`,
65
+ `TestCaseDefinition`, `FrozenInput` y los registros de selección existentes.
66
+ La evaluación precongelación debe seguir siendo `mode="pilot"` y no llevar
67
+ un hash circular de freeze.
68
+
69
+ La nueva revisión explícita es obligatoria:
70
+
71
+ ```python
72
+ review = eb.ProtocolReviewV2(
73
+ status="pending",
74
+ protocol_sha256=None,
75
+ reviewer=None,
76
+ rationale="Protocolo nuevo pendiente de revisión antes del estudio final.",
77
+ )
78
+ ```
79
+
80
+ Un piloto puede conservar esa revisión pendiente. Un freeze final exige una
81
+ revisión declarada `approved` con el SHA exacto del protocolo y el revisor,
82
+ además de todas las barreras científicas originales. Declarar metadatos no
83
+ autentica a un revisor. El código no genera una aprobación ni rellena etiquetas,
84
+ cohorte, licencias, entrenamiento o decisiones pendientes.
85
+
86
+ También bloquean el freeze final los nueve estratos sin casos programados.
87
+ Esta condición no fija cuotas de potencia, grupos o perfiles: la suficiencia
88
+ científica sigue dependiendo del protocolo y de los datos reales.
89
+
90
+ ## Ejecución y regeneración
91
+
92
+ ```python
93
+ manifest = eb.create_freeze_v2(definition, rule_registry=rules)
94
+ study = eb.run_study_v2(manifest, registry=transformations, rule_registry=rules)
95
+ report = eb.evaluate_records_v2(study.evaluation.records, study.evaluation.config)
96
+ tables = eb.write_tables_v2(report, output_directory)
97
+ ```
98
+
99
+ `run_study_v2` consume transformaciones registradas explícitamente y ejecuta
100
+ cada caso nativo retenido una vez. No ajusta ni selecciona parámetros. Conserva
101
+ fallos y cancelaciones, reaudita fuentes antes/después y sólo reutiliza una
102
+ etiqueta cuando la salida nativa vuelve a coincidir con el candidato revisado.
103
+ Un cambio de fuentes impide mantener un reporte final y conserva la captura
104
+ como piloto. Los splits usan los mismos componentes transitivos y no permiten
105
+ separar dependencias entre entrenamiento, calibración y prueba.
106
+
107
+ `read_freeze_v2`, `read_study_v2` y `read_tables_v2` verifican documentos e
108
+ integridad de las fuentes capturadas. Su recorrido y el rechazo de alteraciones
109
+ de tablas se incluyen en los controles acotados de ingeniería citados arriba.
110
+
111
+ Comandos equivalentes, separados de V1:
112
+
113
+ ```text
114
+ equiframe-benchmark freeze-v2 definition-v2.json --output freeze-v2.json
115
+ equiframe-benchmark verify-freeze-v2 freeze-v2.json
116
+ equiframe-benchmark run-study-v2 freeze-v2.json --registry proyecto:registry --output studies
117
+ equiframe-benchmark verify-study-v2 studies/study_v2_ID
118
+ equiframe-benchmark evaluate-v2 studies/study_v2_ID --output evaluation-v2.json
119
+ equiframe-benchmark tables-v2 studies/study_v2_ID --output tables-v2
120
+ equiframe-benchmark bundle-study-v2 studies/study_v2_ID --output portable-v2
121
+ equiframe-benchmark reproduce-study-v2 portable-v2
122
+ ```
123
+
124
+ Estas instrucciones no relanzan campañas automáticamente. Los comandos de
125
+ ejecución sólo actúan cuando el usuario los invoca.
126
+
127
+ ## Métricas e incertidumbre
128
+
129
+ Cada contraste incluye precisión, recall, F1 y tasa de falsos positivos para
130
+ ambos métodos en el mismo soporte. Registra sus diferencias con signo
131
+ izquierda menos derecha, y detecciones adicionales verdaderas/falsas en ambos
132
+ sentidos. AP se calcula para M/B sólo con scores comparables del mismo modelo
133
+ y familia y con ambas clases; de otro modo queda indefinida con su motivo.
134
+
135
+ El bootstrap remuestrea **grupos completos** con reemplazo, usando la misma
136
+ selección de grupos para ambos métodos en cada réplica. Recalcula las métricas
137
+ y las diferencias a partir de esas mismas observaciones, preservando el
138
+ emparejamiento. Semilla, repeticiones, confianza, soporte e independencia son
139
+ parte de la configuración fijada. No se eliminan réplicas indefinidas para
140
+ producir un intervalo artificial: el resultado conserva sus conteos y motivo.
141
+ Sin independencia justificada o grupos suficientes no se calcula un intervalo.
142
+
143
+ Los intervalos son de agregados de ejecuciones; no convierten repeticiones o
144
+ reutilizaciones entre parejas en nuevas unidades independientes. No se añaden
145
+ tests de hipótesis, correcciones por multiplicidad ni garantías de potencia
146
+ sin una decisión metodológica posterior.
147
+
148
+ ## Tablas y reproducción
149
+
150
+ V2 produce siete tablas, todas ligadas al documento de evaluación:
151
+
152
+ | Archivo | Contenido |
153
+ |---|---|
154
+ | `coverage.csv` | Denominadores, grupos, clases, exclusiones y alertas parciales por contraste. |
155
+ | `metrics.csv` | Métricas de ambos métodos, diferencias y tasas incrementales. |
156
+ | `bootstrap.csv` | Intervalos pareados, rangos y réplicas definidas/indefinidas. |
157
+ | `exclusions.csv` | Caso, estado O y todos los motivos de exclusión aplicables. |
158
+ | `common_metrics.csv` | Intersección R/M/B/H adicional con rol explícito. |
159
+ | `common_bootstrap.csv` | Incertidumbre de esa intersección adicional. |
160
+ | `cases.csv` | Todos los casos, disponibilidad de componentes y procedencia. |
161
+
162
+ `bundle_study_v2` conserva los bytes originales y los insumos fijados.
163
+ `regenerate_study_record_v2` y `reproduce_study_bundle_v2` regeneran las
164
+ métricas e intervalos y cada CSV desde las decisiones capturadas, sin repetir
165
+ ETL ni reescribir hashes de procedencia. La reproducción técnica no afirma
166
+ que otra persona haya repetido independientemente el experimento.
167
+
168
+ Los modelos V2 son documentos estrictos con `schema_version="2.0"`. Se pueden
169
+ exportar sus esquemas mediante `model_json_schema()` o la herramienta
170
+ `tools/generate_assets_v2.py --output NUEVA_CARPETA`; los 13 esquemas generados
171
+ se conservan en `schemas/protocol-v2`. La herramienta exige un destino nuevo.
172
+ Los esquemas, reportes y tablas V1 permanecen separados.
@@ -0,0 +1,284 @@
1
+ """Experimental boundary: no detector imports or labels in the EquiFrame core."""
2
+
3
+ from importlib.metadata import version as _distribution_version
4
+
5
+ from equiframe_benchmark.calibration_types import (
6
+ CalibrationManifest,
7
+ CalibrationSelection,
8
+ DetectorSelectionAudit,
9
+ audit_detector_selections,
10
+ )
11
+ from equiframe_benchmark.cost_table import write_cost_table
12
+ from equiframe_benchmark.costs import (
13
+ CostComparisonResult,
14
+ CostProtocol,
15
+ CostSpec,
16
+ ProfileMCostResult,
17
+ ResourceMeasurement,
18
+ ResourceSample,
19
+ measure_costs,
20
+ read_costs,
21
+ )
22
+ from equiframe_benchmark.distribution import (
23
+ DistributionReadiness,
24
+ NameCheck,
25
+ inspect_distribution,
26
+ )
27
+ from equiframe_benchmark.evaluation import (
28
+ BootstrapPlan,
29
+ EvaluationConfig,
30
+ EvaluationRecord,
31
+ EvaluationReport,
32
+ evaluate_records,
33
+ evaluation_protocol_sha256,
34
+ )
35
+ from equiframe_benchmark.evaluation_v2 import (
36
+ CommonSupportV2,
37
+ ContrastSpecV2,
38
+ EvaluationConfigV2,
39
+ EvaluationReportV2,
40
+ EvaluationStratumV2,
41
+ PrincipalContrastV2,
42
+ SignedMetricV2,
43
+ evaluate_records_v2,
44
+ evaluation_protocol_sha256_v2,
45
+ )
46
+ from equiframe_benchmark.freeze import (
47
+ EnvironmentPin,
48
+ ExperimentalDecision,
49
+ FreezeAudit,
50
+ FreezeDefinition,
51
+ FreezeManifest,
52
+ FrozenFamilyModel,
53
+ FrozenInput,
54
+ SelectionEvidence,
55
+ TestCaseDefinition,
56
+ audit_freeze,
57
+ create_freeze,
58
+ read_freeze,
59
+ )
60
+ from equiframe_benchmark.freeze_v2 import (
61
+ FreezeDefinitionV2,
62
+ FreezeManifestV2,
63
+ ProtocolReviewV2,
64
+ audit_freeze_v2,
65
+ create_freeze_v2,
66
+ read_freeze_v2,
67
+ )
68
+ from equiframe_benchmark.integration import (
69
+ IntegrationComparison,
70
+ IntegrationResult,
71
+ IntegrationRun,
72
+ IntegrationSpec,
73
+ read_integration,
74
+ run_integration,
75
+ )
76
+ from equiframe_benchmark.io import load_document, save_document
77
+ from equiframe_benchmark.models import (
78
+ Assignment,
79
+ Candidate,
80
+ Catalog,
81
+ InputBinding,
82
+ OracleResult,
83
+ OracleVerificationBridge,
84
+ Review,
85
+ ReviewAssignment,
86
+ ReviewPacket,
87
+ Scenario,
88
+ SplitManifest,
89
+ digest,
90
+ )
91
+ from equiframe_benchmark.oracle import evaluate_oracle, oracle_verification_bridge, review_packet
92
+ from equiframe_benchmark.pairwise import PairwiseReport, evaluate_pairwise
93
+ from equiframe_benchmark.reconciliation import (
94
+ AwardReconciliationResult,
95
+ AwardReconciliationSpec,
96
+ CurrencyReconciliation,
97
+ ReconciliationCheck,
98
+ reconcile_awards,
99
+ )
100
+ from equiframe_benchmark.reproduction import (
101
+ BundleLimits,
102
+ ComparisonReceipt,
103
+ ReproductionBundle,
104
+ ReproductionRecord,
105
+ bundle_artifact,
106
+ compare_reproductions,
107
+ create_bundle,
108
+ make_reproduction_record,
109
+ read_bundle,
110
+ reproduce_bundle,
111
+ )
112
+ from equiframe_benchmark.scale_types import ScaleSpec, ScaleTrial
113
+ from equiframe_benchmark.scaling import ScaleRun, measure_scale, read_scale, summarize_scale
114
+ from equiframe_benchmark.selection import select_normal_calibration, select_normal_training
115
+ from equiframe_benchmark.snapshot import (
116
+ SnapshotClient,
117
+ SnapshotColumn,
118
+ SnapshotDataSource,
119
+ SnapshotManifest,
120
+ SnapshotTable,
121
+ snapshot_fingerprint,
122
+ )
123
+ from equiframe_benchmark.splits import dependency_groups, make_splits, split_counts, validate_splits
124
+ from equiframe_benchmark.study import StudyCaseResult, StudyResult, read_study, run_study
125
+ from equiframe_benchmark.study_bundle import (
126
+ bundle_study,
127
+ regenerate_study_record,
128
+ reproduce_study_bundle,
129
+ )
130
+ from equiframe_benchmark.study_bundle_v2 import (
131
+ bundle_study_v2,
132
+ regenerate_study_record_v2,
133
+ reproduce_study_bundle_v2,
134
+ )
135
+ from equiframe_benchmark.study_v2 import (
136
+ StudyCaseResultV2,
137
+ StudyResultV2,
138
+ read_study_v2,
139
+ run_study_v2,
140
+ )
141
+ from equiframe_benchmark.tables import TableExport, read_tables, table_payloads, write_tables
142
+ from equiframe_benchmark.tables_v2 import (
143
+ TableExportV2,
144
+ read_tables_v2,
145
+ table_payloads_v2,
146
+ write_tables_v2,
147
+ )
148
+ from equiframe_benchmark.training_types import TrainingManifest, TrainingRecord, TrainingSelection
149
+
150
+ __version__ = _distribution_version("equiframe-benchmark")
151
+ __all__ = [
152
+ "Assignment",
153
+ "AwardReconciliationResult",
154
+ "AwardReconciliationSpec",
155
+ "BootstrapPlan",
156
+ "BundleLimits",
157
+ "CalibrationManifest",
158
+ "CalibrationSelection",
159
+ "Candidate",
160
+ "Catalog",
161
+ "CommonSupportV2",
162
+ "ComparisonReceipt",
163
+ "ContrastSpecV2",
164
+ "CostComparisonResult",
165
+ "CostProtocol",
166
+ "CostSpec",
167
+ "CurrencyReconciliation",
168
+ "DetectorSelectionAudit",
169
+ "DistributionReadiness",
170
+ "EnvironmentPin",
171
+ "EvaluationConfig",
172
+ "EvaluationConfigV2",
173
+ "EvaluationRecord",
174
+ "EvaluationReport",
175
+ "EvaluationReportV2",
176
+ "EvaluationStratumV2",
177
+ "ExperimentalDecision",
178
+ "FreezeAudit",
179
+ "FreezeDefinition",
180
+ "FreezeDefinitionV2",
181
+ "FreezeManifest",
182
+ "FreezeManifestV2",
183
+ "FrozenFamilyModel",
184
+ "FrozenInput",
185
+ "InputBinding",
186
+ "IntegrationComparison",
187
+ "IntegrationResult",
188
+ "IntegrationRun",
189
+ "IntegrationSpec",
190
+ "NameCheck",
191
+ "OracleResult",
192
+ "OracleVerificationBridge",
193
+ "PairwiseReport",
194
+ "PrincipalContrastV2",
195
+ "ProfileMCostResult",
196
+ "ProtocolReviewV2",
197
+ "ReconciliationCheck",
198
+ "ReproductionBundle",
199
+ "ReproductionRecord",
200
+ "ResourceMeasurement",
201
+ "ResourceSample",
202
+ "Review",
203
+ "ReviewAssignment",
204
+ "ReviewPacket",
205
+ "ScaleRun",
206
+ "ScaleSpec",
207
+ "ScaleTrial",
208
+ "Scenario",
209
+ "SelectionEvidence",
210
+ "SignedMetricV2",
211
+ "SnapshotClient",
212
+ "SnapshotColumn",
213
+ "SnapshotDataSource",
214
+ "SnapshotManifest",
215
+ "SnapshotTable",
216
+ "SplitManifest",
217
+ "StudyCaseResult",
218
+ "StudyCaseResultV2",
219
+ "StudyResult",
220
+ "StudyResultV2",
221
+ "TableExport",
222
+ "TableExportV2",
223
+ "TestCaseDefinition",
224
+ "TrainingManifest",
225
+ "TrainingRecord",
226
+ "TrainingSelection",
227
+ "audit_detector_selections",
228
+ "audit_freeze",
229
+ "audit_freeze_v2",
230
+ "bundle_artifact",
231
+ "bundle_study",
232
+ "bundle_study_v2",
233
+ "compare_reproductions",
234
+ "create_bundle",
235
+ "create_freeze",
236
+ "create_freeze_v2",
237
+ "dependency_groups",
238
+ "digest",
239
+ "evaluate_oracle",
240
+ "evaluate_pairwise",
241
+ "evaluate_records",
242
+ "evaluate_records_v2",
243
+ "evaluation_protocol_sha256",
244
+ "evaluation_protocol_sha256_v2",
245
+ "inspect_distribution",
246
+ "load_document",
247
+ "make_reproduction_record",
248
+ "make_splits",
249
+ "measure_costs",
250
+ "measure_scale",
251
+ "oracle_verification_bridge",
252
+ "read_bundle",
253
+ "read_costs",
254
+ "read_freeze",
255
+ "read_freeze_v2",
256
+ "read_integration",
257
+ "read_scale",
258
+ "read_study",
259
+ "read_study_v2",
260
+ "read_tables",
261
+ "read_tables_v2",
262
+ "reconcile_awards",
263
+ "regenerate_study_record",
264
+ "regenerate_study_record_v2",
265
+ "reproduce_bundle",
266
+ "reproduce_study_bundle",
267
+ "reproduce_study_bundle_v2",
268
+ "review_packet",
269
+ "run_integration",
270
+ "run_study",
271
+ "run_study_v2",
272
+ "save_document",
273
+ "select_normal_calibration",
274
+ "select_normal_training",
275
+ "snapshot_fingerprint",
276
+ "split_counts",
277
+ "summarize_scale",
278
+ "table_payloads",
279
+ "table_payloads_v2",
280
+ "validate_splits",
281
+ "write_cost_table",
282
+ "write_tables",
283
+ "write_tables_v2",
284
+ ]
@@ -0,0 +1,3 @@
1
+ from equiframe_benchmark.cli import main
2
+
3
+ main()