invarlock 0.3.3__py3-none-any.whl → 0.3.5__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.
- invarlock/__init__.py +1 -1
- invarlock/adapters/auto.py +4 -4
- invarlock/adapters/hf_bert.py +6 -5
- invarlock/adapters/hf_gpt2.py +5 -4
- invarlock/adapters/hf_llama.py +4 -2
- invarlock/adapters/hf_mixin.py +88 -9
- invarlock/adapters/hf_t5.py +5 -3
- invarlock/cli/commands/certify.py +1 -1
- invarlock/cli/commands/run.py +560 -141
- invarlock/cli/commands/verify.py +12 -0
- invarlock/core/runner.py +40 -15
- invarlock/eval/bench_regression.py +1 -1
- invarlock/eval/data.py +59 -244
- invarlock/eval/metrics.py +130 -3
- invarlock/reporting/certificate.py +27 -0
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/METADATA +2 -2
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/RECORD +21 -21
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/WHEEL +0 -0
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/entry_points.txt +0 -0
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/licenses/LICENSE +0 -0
- {invarlock-0.3.3.dist-info → invarlock-0.3.5.dist-info}/top_level.txt +0 -0
|
@@ -614,6 +614,13 @@ def _enforce_pairing_and_coverage(
|
|
|
614
614
|
if not isinstance(stats, dict):
|
|
615
615
|
raise ValueError("Missing dataset window stats for CI/Release enforcement.")
|
|
616
616
|
|
|
617
|
+
pairing_reason = stats.get("window_pairing_reason")
|
|
618
|
+
if pairing_reason is not None:
|
|
619
|
+
raise ValueError(
|
|
620
|
+
"CI/Release requires paired baseline evidence "
|
|
621
|
+
f"(window_pairing_reason={pairing_reason!r})."
|
|
622
|
+
)
|
|
623
|
+
|
|
617
624
|
match_fraction = stats.get("window_match_fraction")
|
|
618
625
|
overlap_fraction = stats.get("window_overlap_fraction")
|
|
619
626
|
if not (
|
|
@@ -649,6 +656,12 @@ def _enforce_pairing_and_coverage(
|
|
|
649
656
|
return None
|
|
650
657
|
return int(round(val))
|
|
651
658
|
|
|
659
|
+
paired_windows = _coerce_count(stats.get("paired_windows"))
|
|
660
|
+
if paired_windows is None:
|
|
661
|
+
raise ValueError("CI/Release requires paired_windows metric.")
|
|
662
|
+
if paired_windows == 0:
|
|
663
|
+
raise ValueError("CI/Release requires paired_windows > 0.")
|
|
664
|
+
|
|
652
665
|
actual_preview = _coerce_count(stats.get("actual_preview"))
|
|
653
666
|
actual_final = _coerce_count(stats.get("actual_final"))
|
|
654
667
|
if actual_preview is None or actual_final is None:
|
|
@@ -1188,6 +1201,20 @@ def make_certificate(
|
|
|
1188
1201
|
_enforce_ratio_ci_alignment(ratio_ci_source, ratio_ci, logloss_delta_ci)
|
|
1189
1202
|
|
|
1190
1203
|
paired_windows = _fallback_paired_windows(paired_windows, coverage_summary)
|
|
1204
|
+
# Prefer runner-reported paired window count when available (signal used for
|
|
1205
|
+
# CI/Release enforcement); fall back to evidence-based pairing or coverage
|
|
1206
|
+
# heuristics when the metric is missing.
|
|
1207
|
+
try:
|
|
1208
|
+
paired_windows_signal = (
|
|
1209
|
+
report.get("metrics", {}).get("paired_windows")
|
|
1210
|
+
if isinstance(report.get("metrics"), dict)
|
|
1211
|
+
else None
|
|
1212
|
+
)
|
|
1213
|
+
except Exception: # pragma: no cover
|
|
1214
|
+
paired_windows_signal = None
|
|
1215
|
+
paired_windows_signal_int = _coerce_int(paired_windows_signal)
|
|
1216
|
+
if paired_windows_signal_int is not None and paired_windows_signal_int >= 0:
|
|
1217
|
+
paired_windows = paired_windows_signal_int
|
|
1191
1218
|
|
|
1192
1219
|
# Primary-metric stats for gating/summary (PM-only)
|
|
1193
1220
|
try:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: invarlock
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.5
|
|
4
4
|
Summary: Edit‑agnostic robustness certificates for weight edits (InvarLock framework)
|
|
5
5
|
Author-email: InvarLock Team <oss@invarlock.dev>
|
|
6
6
|
Maintainer-email: InvarLock Maintainers <support@invarlock.dev>
|
|
@@ -112,7 +112,7 @@ they don’t, roll back safely.
|
|
|
112
112
|
Technical: edit‑agnostic guard pipeline (invariants → spectral → RMT →
|
|
113
113
|
variance) producing a machine‑readable Safety Certificate.
|
|
114
114
|
|
|
115
|
-
> **Status:** 0.3.
|
|
115
|
+
> **Status:** 0.3.5 (pre‑1.0). Until 1.0, **minor** releases may be
|
|
116
116
|
> breaking. See CLI help and the CHANGELOG for updates.
|
|
117
117
|
|
|
118
118
|
[](https://github.com/invarlock/invarlock/actions/workflows/ci.yml)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
invarlock/__init__.py,sha256=
|
|
1
|
+
invarlock/__init__.py,sha256=qJbKFRR8oIyu0lQ-ycORqgm0nj0DNDNpojWXrLR-nP0,1268
|
|
2
2
|
invarlock/__main__.py,sha256=ffhoKctw89j-henmQXThbHDIdlvK9fBfsy8LpjhOEXc,146
|
|
3
3
|
invarlock/config.py,sha256=7BUOl7EW258YnsgRipjOx6lmWou5jNDzimREd35ewsQ,1725
|
|
4
4
|
invarlock/model_profile.py,sha256=sFHpK-1Q-1DjiZTWMolQBG4Dw9feLJgk3GnaD3ixgd8,12809
|
|
@@ -11,17 +11,17 @@ invarlock/_data/runtime/profiles/ci_cpu.yaml,sha256=FE5vxeemAFWW7oRxPvp_8hIcCO8q
|
|
|
11
11
|
invarlock/_data/runtime/profiles/release.yaml,sha256=xF0Qb0OTm904U6L3wK674JMTcDPegYvpKgwUB9pfq_w,482
|
|
12
12
|
invarlock/adapters/__init__.py,sha256=Bwj8aKjhFxCzvcdxTIl-nG7IXyIE4L3Nd_fsIghbZxA,3418
|
|
13
13
|
invarlock/adapters/_capabilities.py,sha256=FmzUR5BHsxWe92Z9W1As-G5_5wG1PvqF2sUpjZ2_CdY,1483
|
|
14
|
-
invarlock/adapters/auto.py,sha256=
|
|
14
|
+
invarlock/adapters/auto.py,sha256=4F3I63PRW604v_NtaTY7aGvUJVjGSjejVKFff-X_1t4,7693
|
|
15
15
|
invarlock/adapters/base.py,sha256=szSh1bECeDSDGQSr5oIWhs5RlI587gE4gzdt5cnOJ1s,16100
|
|
16
16
|
invarlock/adapters/base_types.py,sha256=3IuHt63_RjGZqoTOdkMpfGPiZTGqcvXXDq1KU-8QemQ,1612
|
|
17
17
|
invarlock/adapters/capabilities.py,sha256=oAK_zgCzAFmss8qAU2zgc8kcahtadGtbPTYR7StXiCo,15360
|
|
18
|
-
invarlock/adapters/hf_bert.py,sha256=
|
|
19
|
-
invarlock/adapters/hf_gpt2.py,sha256=
|
|
20
|
-
invarlock/adapters/hf_llama.py,sha256=
|
|
18
|
+
invarlock/adapters/hf_bert.py,sha256=KTEk2HRSPlH57bfdVjV6imn_-aYqXAlbnWfEFlRm8h4,35555
|
|
19
|
+
invarlock/adapters/hf_gpt2.py,sha256=TBn1cd_yZDSyVF5aJ-YNEwZzbVYI-m1c8U0CJl_74CM,14808
|
|
20
|
+
invarlock/adapters/hf_llama.py,sha256=P3T7m9j61EmHtzzhemIfM2I2e5nbl4RwXSdoaVsueGc,19141
|
|
21
21
|
invarlock/adapters/hf_loading.py,sha256=6hdSFRz_JMtBzQfHcwvyDlIVP2y-KwLwhDorg73DZ6c,2742
|
|
22
|
-
invarlock/adapters/hf_mixin.py,sha256=
|
|
22
|
+
invarlock/adapters/hf_mixin.py,sha256=3YGoamAG6OCubsbJ9S583yYiQEy2fZOsBJeBiLZTEbk,22307
|
|
23
23
|
invarlock/adapters/hf_onnx.py,sha256=kEqgQEEdGUeaXDF0EgaMHOQQMhc1xIvur0bQvdky-AY,4446
|
|
24
|
-
invarlock/adapters/hf_t5.py,sha256=
|
|
24
|
+
invarlock/adapters/hf_t5.py,sha256=sqHmi8io7oKlr7GrAk8tGo72zb-hmHGmXplCQSZgrA8,4774
|
|
25
25
|
invarlock/adapters/py.typed,sha256=LCPmZeE_vANVVJDNvuq9A07i7jg9Nxrq6f10UeuNfZc,37
|
|
26
26
|
invarlock/assurance/__init__.py,sha256=SFDT2klaUaKZejulL5cfBTW29ehJxyW5srE-LuqP7z0,1388
|
|
27
27
|
invarlock/calibration/__init__.py,sha256=M5lbkNQtLBuQjQJGeRzHovkpYI87fEWIm7a0b23jSp4,110
|
|
@@ -44,14 +44,14 @@ invarlock/cli/provenance.py,sha256=2E_8MxpSVEcxe5UewTb5Hlz6x4jXFwGd1567F4nIbEc,1
|
|
|
44
44
|
invarlock/cli/utils.py,sha256=R6IN21lGfko2lGUgspmkZyjA6Nl_dVRaP8F8nRtN5yw,1393
|
|
45
45
|
invarlock/cli/commands/__init__.py,sha256=afpKpU8hJI41Ol46oXxVwQgPwFBy4OmLaa_v4AAOdts,712
|
|
46
46
|
invarlock/cli/commands/calibrate.py,sha256=b_75wIuHuhQ-frVcKkSuA8W5AMN3acc63k6q9tZvNEE,20780
|
|
47
|
-
invarlock/cli/commands/certify.py,sha256=
|
|
47
|
+
invarlock/cli/commands/certify.py,sha256=J-8xifbkIjXP37z6vD9l2oELS60JfYoHebIIdMWxeUM,14888
|
|
48
48
|
invarlock/cli/commands/doctor.py,sha256=cz4uH8v77M74YhwlWEMgnmEpmqbsV5CN5-zkuDIBLS8,56897
|
|
49
49
|
invarlock/cli/commands/explain_gates.py,sha256=CajKcu6rNi57yBsM_EUhi8rlmTl-ymT1kUaznXzALSE,7624
|
|
50
50
|
invarlock/cli/commands/export_html.py,sha256=oUGtt6EpKhjlywdtz_0FqYqcmA219H4eSjPuSMDShgY,3095
|
|
51
51
|
invarlock/cli/commands/plugins.py,sha256=u5E6ThcWE5RUs2YKH-m6x7n-5K1jt2IudkF9kl9T5xg,53486
|
|
52
52
|
invarlock/cli/commands/report.py,sha256=I-B11k6cLLNUIaNiKlsWrGgZ2cTQQJsarN3oNf9Dt84,12988
|
|
53
|
-
invarlock/cli/commands/run.py,sha256=
|
|
54
|
-
invarlock/cli/commands/verify.py,sha256=
|
|
53
|
+
invarlock/cli/commands/run.py,sha256=nf9Y_BcgxQyaCjwQmGUt8ZojDXBDPSeEk4Ut4_uRggM,200772
|
|
54
|
+
invarlock/cli/commands/verify.py,sha256=WAgIzV_CAZSkzRJIxVFV5llZAL3n3-biTMXLm6YL_qs,46408
|
|
55
55
|
invarlock/core/__init__.py,sha256=4wb83Xv7NE5M1FgvaFUviiNtVSTVATiPH3gqavNmp2w,1490
|
|
56
56
|
invarlock/core/abi.py,sha256=gmU1F7LDd2HTcF4kcznn8vgG4zj9UCHSqhBk9jyu05k,484
|
|
57
57
|
invarlock/core/api.py,sha256=dg76wZaULo-T-_nZtq6rmDtWwSNLCSYXiQKVYySV6Fg,7545
|
|
@@ -64,7 +64,7 @@ invarlock/core/events.py,sha256=8XBAi-9A7ys7QJQwqlz8PVlfxF0TM_TvLqjcPtDwZm4,9428
|
|
|
64
64
|
invarlock/core/exceptions.py,sha256=b4OszJ0Fd0Ezy8s99AzprS7lAkqdZYGXaSj9fYaln4E,2077
|
|
65
65
|
invarlock/core/registry.py,sha256=a5hYHXl74MLnaPFbmpwJ-1OsJgY3SSe2Jisbzfr2rLM,19137
|
|
66
66
|
invarlock/core/retry.py,sha256=KTVkrTnWs60jwATOZDHinERH56GnOGjsKR0lmohagEo,4503
|
|
67
|
-
invarlock/core/runner.py,sha256=
|
|
67
|
+
invarlock/core/runner.py,sha256=Tep0CDT75PbE8bpGapR8J00-MXZ-T0JB4C6tsqOMs68,93567
|
|
68
68
|
invarlock/core/types.py,sha256=nVLMP4yqlxwhE1moQU7FWVeGJqTuud-cvTZiutdBGKk,3585
|
|
69
69
|
invarlock/edits/__init__.py,sha256=5CJTX6oJTLj79Vmks2_8mXRGFQH0oyKaZOrBLTlRtV0,277
|
|
70
70
|
invarlock/edits/_edit_utils.py,sha256=VGl32JAt7XsovxJbX1YvW9DJvtG-K2EKu-TjBFTQmDY,6329
|
|
@@ -75,10 +75,10 @@ invarlock/edits/quant_rtn.py,sha256=8rseGbF_-EFuL8MWCuzgGXYfzp9LsONhV72-OK56mlk,
|
|
|
75
75
|
invarlock/edits/registry.py,sha256=MmUfJhhvc3WxB03wQkPxFMS6nkT7YcXFPQqhbksfOUc,4523
|
|
76
76
|
invarlock/eval/__init__.py,sha256=GsKoszCysh3TT_UHiuJcqeoiXT7AUNZoqMuBmefnWtY,755
|
|
77
77
|
invarlock/eval/bench.py,sha256=85tGywzAeJSVlZ1Qsebk8FwIGUYhq9g6TxOW5XnL5X8,56335
|
|
78
|
-
invarlock/eval/bench_regression.py,sha256
|
|
78
|
+
invarlock/eval/bench_regression.py,sha256=GDphmdcH7NI8P_afSkQAPMChEgW15J0gqTZ4Kj3kxgw,456
|
|
79
79
|
invarlock/eval/bootstrap.py,sha256=CNn7W_MY716Wa_wn6cYRmbTYB9lT2X0yLOAIHCRw29k,1766
|
|
80
|
-
invarlock/eval/data.py,sha256=
|
|
81
|
-
invarlock/eval/metrics.py,sha256=
|
|
80
|
+
invarlock/eval/data.py,sha256=s05y3QNi2vO6X3DVg7RQCMxZE47FPfRI1XdY1ZnHn1o,67205
|
|
81
|
+
invarlock/eval/metrics.py,sha256=fcXnJ3Bx5A4mqaxf8cgfBOsBbZ1hQ_VzzzRlB9pjpCs,78908
|
|
82
82
|
invarlock/eval/primary_metric.py,sha256=ay8gB7xGjWahXpJP-o4OcZFNRNZKcUIHjKmSeOUWJNk,28701
|
|
83
83
|
invarlock/eval/py.typed,sha256=LCPmZeE_vANVVJDNvuq9A07i7jg9Nxrq6f10UeuNfZc,37
|
|
84
84
|
invarlock/eval/probes/__init__.py,sha256=KocOJmEWrD90c2HbDW3wDsdsibRyidskpI4rNNfLbZ0,593
|
|
@@ -117,7 +117,7 @@ invarlock/plugins/hf_bnb_adapter.py,sha256=g0ysWEi8dQzLtJy8iCszfTsYCOACuZMFYnTLM
|
|
|
117
117
|
invarlock/plugins/hf_gptq_adapter.py,sha256=ysugAcnjLqF5sqpijSNiim1xUpRmoIgBrG053X3S2hE,3743
|
|
118
118
|
invarlock/plugins/py.typed,sha256=LCPmZeE_vANVVJDNvuq9A07i7jg9Nxrq6f10UeuNfZc,37
|
|
119
119
|
invarlock/reporting/__init__.py,sha256=A0541EqxcdTpslNbZEWIO4q-LCqzCQcadev2IBKEBbM,232
|
|
120
|
-
invarlock/reporting/certificate.py,sha256=
|
|
120
|
+
invarlock/reporting/certificate.py,sha256=yoMfALyXYGK6BBHJfsrCFDxb07o-9J0KQqui35RHkhM,146382
|
|
121
121
|
invarlock/reporting/certificate_schema.py,sha256=ft58LrF4lfdXT08P0jjtiNvRPVs6TdgPU_cp9K4TMPw,8939
|
|
122
122
|
invarlock/reporting/dataset_hashing.py,sha256=b9LM2rtOtD0-1gQq_oJ0yI6oLleempwKinQtLupajwI,8680
|
|
123
123
|
invarlock/reporting/guards_analysis.py,sha256=7TTlF-OwgT7wGQ8zZ8oHHPuMdUMvKw7836WvO0J1GUc,42465
|
|
@@ -132,9 +132,9 @@ invarlock/reporting/utils.py,sha256=1aLYgSUR4XvgmhDvU9YK9ICd7W5sjft1qdsZC9JJSRY,
|
|
|
132
132
|
invarlock/reporting/validate.py,sha256=oh7w8VrLM2EYZSJ2ySDNi7WKKmF1SgS81VkOrcHMzaE,22427
|
|
133
133
|
invarlock/utils/__init__.py,sha256=DR2pBrgddLH2PW-6ninOE8CM7DNvlvgyYsCkckozbPU,4276
|
|
134
134
|
invarlock/utils/digest.py,sha256=sfnqGFRiRf7l950MjSIrWO1XbUfXlcEfNLeWFbBUr8I,1290
|
|
135
|
-
invarlock-0.3.
|
|
136
|
-
invarlock-0.3.
|
|
137
|
-
invarlock-0.3.
|
|
138
|
-
invarlock-0.3.
|
|
139
|
-
invarlock-0.3.
|
|
140
|
-
invarlock-0.3.
|
|
135
|
+
invarlock-0.3.5.dist-info/licenses/LICENSE,sha256=uFddaXYY02nEFdPpS7bam_bnm0st41BibzD0jHULPXw,10413
|
|
136
|
+
invarlock-0.3.5.dist-info/METADATA,sha256=1TwqQgCjwbAEaDNuLlAisQ6FnwaJHtatBoMZqM2_NSQ,21845
|
|
137
|
+
invarlock-0.3.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
138
|
+
invarlock-0.3.5.dist-info/entry_points.txt,sha256=i0e4ZzmJNMBGG-69lbgP-muEcn1je2TUIWwl9SJERm0,670
|
|
139
|
+
invarlock-0.3.5.dist-info/top_level.txt,sha256=GXfftc_YDHHcQC2vQgYbZ5cTO82YuWY3HusHMT3DuKs,10
|
|
140
|
+
invarlock-0.3.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|