Skip to content

Commit 4eb501d

Browse files
ci: repair PR122 Hausman parser autofix carrier
1 parent e80e8ed commit 4eb501d

1 file changed

Lines changed: 3 additions & 191 deletions

File tree

.github/workflows/pr122-autofix-hausman-parser.yml

Lines changed: 3 additions & 191 deletions
Original file line numberDiff line numberDiff line change
@@ -18,208 +18,20 @@ jobs:
1818
with:
1919
ref: agent/panel-p1-stage-b-diagnostics
2020
fetch-depth: 0
21-
2221
- uses: actions/setup-python@v5
2322
with:
2423
python-version: '3.11'
25-
26-
- name: Patch parser and regression contract
27-
run: |
28-
python - <<'PY'
29-
from pathlib import Path
30-
31-
parser_path = Path('dev/benchmarks/frontend_data/parsers/panel_stage_b.py')
32-
text = parser_path.read_text(encoding='utf-8')
33-
old = ''' for diagnostic_id, diagnostic in backend_result.get("diagnostics", {}).items():
34-
balance = "unbalanced" if diagnostic_id.endswith("unbalanced") else "balanced"
35-
explicit_re_constant = diagnostic_id.startswith(
36-
"hausman_explicit_re_constant_"
37-
)
38-
parameterization = (
39-
"re-explicit-constant" if explicit_re_constant else "standard"
40-
)
41-
variant = (
42-
f"hausman-re-explicit-constant-{balance}"
43-
if explicit_re_constant
44-
else f"hausman-{balance}"
45-
)
46-
n_samples = 49 if balance == "unbalanced" else 54
47-
scale = {
48-
"scale_key": make_scale_key(n_samples, 2),
49-
"n_samples": n_samples,
50-
"n_features": 2,
51-
"label": make_scale_label(n_samples, 2),
52-
}
53-
status = str(diagnostic.get("status", "failed"))
54-
validation = _apply_aggregate_validation_contract(
55-
_validation(
56-
["hausman_backend_consistency", "backend_provenance"],
57-
status,
58-
filepath,
59-
),
60-
schema_ok=schema_ok,
61-
source_ok=source_ok,
62-
backend_ok=backend_ok,
63-
executed_backend_ok=executed_backend_ok,
64-
)
65-
method_parts: list[object] = [
66-
"panel-stage-b-physical-validation",
67-
"hausman",
68-
balance,
69-
]
70-
if explicit_re_constant:
71-
method_parts.append(parameterization)
72-
'''
73-
new = ''' for diagnostic_id, diagnostic in backend_result.get("diagnostics", {}).items():
74-
applicable_fixture = diagnostic_id == "hausman_applicable_nonzero_effect"
75-
explicit_re_constant = diagnostic_id.startswith(
76-
"hausman_explicit_re_constant_"
77-
)
78-
parameterization = (
79-
"re-explicit-constant" if explicit_re_constant else "standard"
80-
)
81-
if applicable_fixture:
82-
balance = "dedicated"
83-
variant = "hausman-applicable-nonzero-effect"
84-
n_samples, n_features = 48, 1
85-
validation_checks = [
86-
"hausman_backend_consistency",
87-
"hausman_applicable_statistic_pvalue_df",
88-
"backend_provenance",
89-
]
90-
method_parts: list[object] = [
91-
"panel-stage-b-physical-validation",
92-
"hausman",
93-
"applicable-nonzero-effect",
94-
]
95-
else:
96-
balance = (
97-
"unbalanced" if diagnostic_id.endswith("unbalanced") else "balanced"
98-
)
99-
variant = (
100-
f"hausman-re-explicit-constant-{balance}"
101-
if explicit_re_constant
102-
else f"hausman-{balance}"
103-
)
104-
n_samples = 49 if balance == "unbalanced" else 54
105-
n_features = 2
106-
validation_checks = [
107-
"hausman_backend_consistency",
108-
"backend_provenance",
109-
]
110-
method_parts = [
111-
"panel-stage-b-physical-validation",
112-
"hausman",
113-
balance,
114-
]
115-
if explicit_re_constant:
116-
method_parts.append(parameterization)
117-
scale = {
118-
"scale_key": make_scale_key(n_samples, n_features),
119-
"n_samples": n_samples,
120-
"n_features": n_features,
121-
"label": make_scale_label(n_samples, n_features),
122-
}
123-
status = str(diagnostic.get("status", "failed"))
124-
validation = _apply_aggregate_validation_contract(
125-
_validation(validation_checks, status, filepath),
126-
schema_ok=schema_ok,
127-
source_ok=source_ok,
128-
backend_ok=backend_ok,
129-
executed_backend_ok=executed_backend_ok,
130-
)
131-
'''
132-
if old not in text:
133-
raise RuntimeError('diagnostic parser block anchor not found')
134-
text = text.replace(old, new, 1)
135-
136-
old_params = ''' "parameterization": parameterization,
137-
"applicable": bool(diagnostic.get("applicable")),
138-
"measurement_git_sha": data.get("git_sha"),
139-
'''
140-
new_params = ''' "parameterization": parameterization,
141-
"applicable": bool(diagnostic.get("applicable")),
142-
**(
143-
{"diagnostic_fixture": "nonzero-effect-applicable"}
144-
if applicable_fixture
145-
else {}
146-
),
147-
"measurement_git_sha": data.get("git_sha"),
148-
'''
149-
if old_params not in text:
150-
raise RuntimeError('diagnostic parameter anchor not found')
151-
text = text.replace(old_params, new_params, 1)
152-
parser_path.write_text(text, encoding='utf-8')
153-
154-
test_path = Path('dev/tests/test_panel_stage_b_frontend_source.py')
155-
test = test_path.read_text(encoding='utf-8')
156-
test += '''
157-
158-
159-
def test_pr122_parser_distinguishes_dedicated_applicable_hausman_fixture(tmp_path) -> None:
160-
from dev.benchmarks.frontend_data.parsers import (
161-
parse_panel_stage_b_physical_validation,
162-
)
163-
164-
data = json.loads(SOURCE_PATH.read_text(encoding="utf-8"))
165-
for backend in ("cupy", "torch"):
166-
diagnostics = data["backend_results"][backend]["diagnostics"]
167-
template = dict(next(iter(diagnostics.values())))
168-
template["status"] = "success"
169-
template["applicable"] = True
170-
diagnostics["hausman_applicable_nonzero_effect"] = template
171-
172-
synthetic = tmp_path / "panel_stage_b_with_applicable_hausman.json"
173-
synthetic.write_text(json.dumps(data, indent=2) + "\\n", encoding="utf-8")
174-
runs, _models, warnings = parse_panel_stage_b_physical_validation(
175-
synthetic, "synthetic-pr122-applicable"
176-
)
177-
178-
assert warnings == []
179-
dedicated = [
180-
run for run in runs if run["variant"] == "hausman-applicable-nonzero-effect"
181-
]
182-
assert len(dedicated) == 2
183-
assert {run["backend"] for run in dedicated} == {"cupy", "torch"}
184-
assert {run["scale"]["n_samples"] for run in dedicated} == {48}
185-
assert {run["scale"]["n_features"] for run in dedicated} == {1}
186-
assert {run["parameters"]["parameterization"] for run in dedicated} == {"standard"}
187-
assert {
188-
run["parameters"]["diagnostic_fixture"] for run in dedicated
189-
} == {"nonzero-effect-applicable"}
190-
assert all(run["parameters"]["applicable"] is True for run in dedicated)
191-
assert all(
192-
"hausman_applicable_statistic_pvalue_df"
193-
in {check["metric"] for check in run["metrics"]["validation"]["checks"]}
194-
for run in dedicated
195-
)
196-
197-
standard_balanced = [
198-
run for run in runs if run["variant"] == "hausman-balanced"
199-
]
200-
assert len(standard_balanced) == 2
201-
dedicated_methods = {run["method_config_id"] for run in dedicated}
202-
standard_methods = {run["method_config_id"] for run in standard_balanced}
203-
assert dedicated_methods.isdisjoint(standard_methods)
204-
'''
205-
test_path.write_text(test, encoding='utf-8')
206-
PY
207-
24+
- name: Apply parser fix
25+
run: python -c "import base64; exec(base64.b64decode('CmZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAoKcGFyc2VyX3BhdGggPSBQYXRoKCJkZXYvYmVuY2htYXJrcy9mcm9udGVuZF9kYXRhL3BhcnNlcnMvcGFuZWxfc3RhZ2VfYi5weSIpCnRleHQgPSBwYXJzZXJfcGF0aC5yZWFkX3RleHQoZW5jb2Rpbmc9InV0Zi04IikKb2xkID0gIiIiICAgICAgICBmb3IgZGlhZ25vc3RpY19pZCwgZGlhZ25vc3RpYyBpbiBiYWNrZW5kX3Jlc3VsdC5nZXQoImRpYWdub3N0aWNzIiwge30pLml0ZW1zKCk6CiAgICAgICAgICAgIGJhbGFuY2UgPSAidW5iYWxhbmNlZCIgaWYgZGlhZ25vc3RpY19pZC5lbmRzd2l0aCgidW5iYWxhbmNlZCIpIGVsc2UgImJhbGFuY2VkIgogICAgICAgICAgICBleHBsaWNpdF9yZV9jb25zdGFudCA9IGRpYWdub3N0aWNfaWQuc3RhcnRzd2l0aCgKICAgICAgICAgICAgICAgICJoYXVzbWFuX2V4cGxpY2l0X3JlX2NvbnN0YW50XyIKICAgICAgICAgICAgKQogICAgICAgICAgICBwYXJhbWV0ZXJpemF0aW9uID0gKAogICAgICAgICAgICAgICAgInJlLWV4cGxpY2l0LWNvbnN0YW50IiBpZiBleHBsaWNpdF9yZV9jb25zdGFudCBlbHNlICJzdGFuZGFyZCIKICAgICAgICAgICAgKQogICAgICAgICAgICB2YXJpYW50ID0gKAogICAgICAgICAgICAgICAgZiJoYXVzbWFuLXJlLWV4cGxpY2l0LWNvbnN0YW50LXtiYWxhbmNlfSIKICAgICAgICAgICAgICAgIGlmIGV4cGxpY2l0X3JlX2NvbnN0YW50CiAgICAgICAgICAgICAgICBlbHNlIGYiaGF1c21hbi17YmFsYW5jZX0iCiAgICAgICAgICAgICkKICAgICAgICAgICAgbl9zYW1wbGVzID0gNDkgaWYgYmFsYW5jZSA9PSAidW5iYWxhbmNlZCIgZWxzZSA1NAogICAgICAgICAgICBzY2FsZSA9IHsKICAgICAgICAgICAgICAgICJzY2FsZV9rZXkiOiBtYWtlX3NjYWxlX2tleShuX3NhbXBsZXMsIDIpLAogICAgICAgICAgICAgICAgIm5fc2FtcGxlcyI6IG5fc2FtcGxlcywKICAgICAgICAgICAgICAgICJuX2ZlYXR1cmVzIjogMiwKICAgICAgICAgICAgICAgICJsYWJlbCI6IG1ha2Vfc2NhbGVfbGFiZWwobl9zYW1wbGVzLCAyKSwKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGF0dXMgPSBzdHIoZGlhZ25vc3RpYy5nZXQoInN0YXR1cyIsICJmYWlsZWQiKSkKICAgICAgICAgICAgdmFsaWRhdGlvbiA9IF9hcHBseV9hZ2dyZWdhdGVfdmFsaWRhdGlvbl9jb250cmFjdCgKICAgICAgICAgICAgICAgIF92YWxpZGF0aW9uKAogICAgICAgICAgICAgICAgICAgIFsiaGF1c21hbl9iYWNrZW5kX2NvbnNpc3RlbmN5IiwgImJhY2tlbmRfcHJvdmVuYW5jZSJdLAogICAgICAgICAgICAgICAgICAgIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICBmaWxlcGF0aCwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBzY2hlbWFfb2s9c2NoZW1hX29rLAogICAgICAgICAgICAgICAgc291cmNlX29rPXNvdXJjZV9vaywKICAgICAgICAgICAgICAgIGJhY2tlbmRfb2s9YmFja2VuZF9vaywKICAgICAgICAgICAgICAgIGV4ZWN1dGVkX2JhY2tlbmRfb2s9ZXhlY3V0ZWRfYmFja2VuZF9vaywKICAgICAgICAgICAgKQogICAgICAgICAgICBtZXRob2RfcGFydHM6IGxpc3Rbb2JqZWN0XSA9IFsKICAgICAgICAgICAgICAgICJwYW5lbC1zdGFnZS1iLXBoeXNpY2FsLXZhbGlkYXRpb24iLAogICAgICAgICAgICAgICAgImhhdXNtYW4iLAogICAgICAgICAgICAgICAgYmFsYW5jZSwKICAgICAgICAgICAgXQogICAgICAgICAgICBpZiBleHBsaWNpdF9yZV9jb25zdGFudDoKICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJ0cy5hcHBlbmQocGFyYW1ldGVyaXphdGlvbikKIiIiCm5ldyA9ICIiIiAgICAgICAgZm9yIGRpYWdub3N0aWNfaWQsIGRpYWdub3N0aWMgaW4gYmFja2VuZF9yZXN1bHQuZ2V0KCJkaWFnbm9zdGljcyIsIHt9KS5pdGVtcygpOgogICAgICAgICAgICBhcHBsaWNhYmxlX2ZpeHR1cmUgPSBkaWFnbm9zdGljX2lkID09ICJoYXVzbWFuX2FwcGxpY2FibGVfbm9uemVyb19lZmZlY3QiCiAgICAgICAgICAgIGV4cGxpY2l0X3JlX2NvbnN0YW50ID0gZGlhZ25vc3RpY19pZC5zdGFydHN3aXRoKAogICAgICAgICAgICAgICAgImhhdXNtYW5fZXhwbGljaXRfcmVfY29uc3RhbnRfIgogICAgICAgICAgICApCiAgICAgICAgICAgIHBhcmFtZXRlcml6YXRpb24gPSAoCiAgICAgICAgICAgICAgICAicmUtZXhwbGljaXQtY29uc3RhbnQiIGlmIGV4cGxpY2l0X3JlX2NvbnN0YW50IGVsc2UgInN0YW5kYXJkIgogICAgICAgICAgICApCiAgICAgICAgICAgIGlmIGFwcGxpY2FibGVfZml4dHVyZToKICAgICAgICAgICAgICAgIGJhbGFuY2UgPSAiZGVkaWNhdGVkIgogICAgICAgICAgICAgICAgdmFyaWFudCA9ICJoYXVzbWFuLWFwcGxpY2FibGUtbm9uemVyby1lZmZlY3QiCiAgICAgICAgICAgICAgICBuX3NhbXBsZXMsIG5fZmVhdHVyZXMgPSA0OCwgMQogICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9jaGVja3MgPSBbCiAgICAgICAgICAgICAgICAgICAgImhhdXNtYW5fYmFja2VuZF9jb25zaXN0ZW5jeSIsCiAgICAgICAgICAgICAgICAgICAgImhhdXNtYW5fYXBwbGljYWJsZV9zdGF0aXN0aWNfcHZhbHVlX2RmIiwKICAgICAgICAgICAgICAgICAgICAiYmFja2VuZF9wcm92ZW5hbmNlIiwKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgIG1ldGhvZF9wYXJ0czogbGlzdFtvYmplY3RdID0gWwogICAgICAgICAgICAgICAgICAgICJwYW5lbC1zdGFnZS1iLXBoeXNpY2FsLXZhbGlkYXRpb24iLAogICAgICAgICAgICAgICAgICAgICJoYXVzbWFuIiwKICAgICAgICAgICAgICAgICAgICAiYXBwbGljYWJsZS1ub256ZXJvLWVmZmVjdCIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBiYWxhbmNlID0gKAogICAgICAgICAgICAgICAgICAgICJ1bmJhbGFuY2VkIiBpZiBkaWFnbm9zdGljX2lkLmVuZHN3aXRoKCJ1bmJhbGFuY2VkIikgZWxzZSAiYmFsYW5jZWQiCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICB2YXJpYW50ID0gKAogICAgICAgICAgICAgICAgICAgIGYiaGF1c21hbi1yZS1leHBsaWNpdC1jb25zdGFudC17YmFsYW5jZX0iCiAgICAgICAgICAgICAgICAgICAgaWYgZXhwbGljaXRfcmVfY29uc3RhbnQKICAgICAgICAgICAgICAgICAgICBlbHNlIGYiaGF1c21hbi17YmFsYW5jZX0iCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICBuX3NhbXBsZXMgPSA0OSBpZiBiYWxhbmNlID09ICJ1bmJhbGFuY2VkIiBlbHNlIDU0CiAgICAgICAgICAgICAgICBuX2ZlYXR1cmVzID0gMgogICAgICAgICAgICAgICAgdmFsaWRhdGlvbl9jaGVja3MgPSBbCiAgICAgICAgICAgICAgICAgICAgImhhdXNtYW5fYmFja2VuZF9jb25zaXN0ZW5jeSIsCiAgICAgICAgICAgICAgICAgICAgImJhY2tlbmRfcHJvdmVuYW5jZSIsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICBtZXRob2RfcGFydHMgPSBbCiAgICAgICAgICAgICAgICAgICAgInBhbmVsLXN0YWdlLWItcGh5c2ljYWwtdmFsaWRhdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgImhhdXNtYW4iLAogICAgICAgICAgICAgICAgICAgIGJhbGFuY2UsCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICBpZiBleHBsaWNpdF9yZV9jb25zdGFudDoKICAgICAgICAgICAgICAgICAgICBtZXRob2RfcGFydHMuYXBwZW5kKHBhcmFtZXRlcml6YXRpb24pCiAgICAgICAgICAgIHNjYWxlID0gewogICAgICAgICAgICAgICAgInNjYWxlX2tleSI6IG1ha2Vfc2NhbGVfa2V5KG5fc2FtcGxlcywgbl9mZWF0dXJlcyksCiAgICAgICAgICAgICAgICAibl9zYW1wbGVzIjogbl9zYW1wbGVzLAogICAgICAgICAgICAgICAgIm5fZmVhdHVyZXMiOiBuX2ZlYXR1cmVzLAogICAgICAgICAgICAgICAgImxhYmVsIjogbWFrZV9zY2FsZV9sYWJlbChuX3NhbXBsZXMsIG5fZmVhdHVyZXMpLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0YXR1cyA9IHN0cihkaWFnbm9zdGljLmdldCgic3RhdHVzIiwgImZhaWxlZCIpKQogICAgICAgICAgICB2YWxpZGF0aW9uID0gX2FwcGx5X2FnZ3JlZ2F0ZV92YWxpZGF0aW9uX2NvbnRyYWN0KAogICAgICAgICAgICAgICAgX3ZhbGlkYXRpb24odmFsaWRhdGlvbl9jaGVja3MsIHN0YXR1cywgZmlsZXBhdGgpLAogICAgICAgICAgICAgICAgc2NoZW1hX29rPXNjaGVtYV9vaywKICAgICAgICAgICAgICAgIHNvdXJjZV9vaz1zb3VyY2Vfb2ssCiAgICAgICAgICAgICAgICBiYWNrZW5kX29rPWJhY2tlbmRfb2ssCiAgICAgICAgICAgICAgICBleGVjdXRlZF9iYWNrZW5kX29rPWV4ZWN1dGVkX2JhY2tlbmRfb2ssCiAgICAgICAgICAgICkKIiIiCmlmIG9sZCBub3QgaW4gdGV4dDoKICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZGlhZ25vc3RpYyBwYXJzZXIgYmxvY2sgYW5jaG9yIG5vdCBmb3VuZCIpCnRleHQgPSB0ZXh0LnJlcGxhY2Uob2xkLCBuZXcsIDEpCgpvbGRfcGFyYW1zID0gIiIiICAgICAgICAgICAgICAgICAgICAgICAgInBhcmFtZXRlcml6YXRpb24iOiBwYXJhbWV0ZXJpemF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAiYXBwbGljYWJsZSI6IGJvb2woZGlhZ25vc3RpYy5nZXQoImFwcGxpY2FibGUiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICJtZWFzdXJlbWVudF9naXRfc2hhIjogZGF0YS5nZXQoImdpdF9zaGEiKSwKIiIiCm5ld19wYXJhbXMgPSAiIiIgICAgICAgICAgICAgICAgICAgICAgICAicGFyYW1ldGVyaXphdGlvbiI6IHBhcmFtZXRlcml6YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICJhcHBsaWNhYmxlIjogYm9vbChkaWFnbm9zdGljLmdldCgiYXBwbGljYWJsZSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgKiooCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ImRpYWdub3N0aWNfZml4dHVyZSI6ICJub256ZXJvLWVmZmVjdC1hcHBsaWNhYmxlIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGFwcGxpY2FibGVfZml4dHVyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7fQogICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAibWVhc3VyZW1lbnRfZ2l0X3NoYSI6IGRhdGEuZ2V0KCJnaXRfc2hhIiksCiIiIgppZiBvbGRfcGFyYW1zIG5vdCBpbiB0ZXh0OgogICAgcmFpc2UgUnVudGltZUVycm9yKCJkaWFnbm9zdGljIHBhcmFtZXRlciBhbmNob3Igbm90IGZvdW5kIikKdGV4dCA9IHRleHQucmVwbGFjZShvbGRfcGFyYW1zLCBuZXdfcGFyYW1zLCAxKQpwYXJzZXJfcGF0aC53cml0ZV90ZXh0KHRleHQsIGVuY29kaW5nPSJ1dGYtOCIpCgoKdGVzdF9wYXRoID0gUGF0aCgiZGV2L3Rlc3RzL3Rlc3RfcGFuZWxfc3RhZ2VfYl9mcm9udGVuZF9zb3VyY2UucHkiKQp0ZXN0ID0gdGVzdF9wYXRoLnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKQptYXJrZXIgPSAiZGVmIHRlc3RfcHIxMjJfcGFyc2VyX2Rpc3Rpbmd1aXNoZXNfZGVkaWNhdGVkX2FwcGxpY2FibGVfaGF1c21hbl9maXh0dXJlIgppZiBtYXJrZXIgbm90IGluIHRlc3Q6CiAgICB0ZXN0ICs9IHIiIgoKCmRlZiB0ZXN0X3ByMTIyX3BhcnNlcl9kaXN0aW5ndWlzaGVzX2RlZGljYXRlZF9hcHBsaWNhYmxlX2hhdXNtYW5fZml4dHVyZSh0bXBfcGF0aCkgLT4gTm9uZToKICAgIGZyb20gZGV2LmJlbmNobWFya3MuZnJvbnRlbmRfZGF0YS5wYXJzZXJzIGltcG9ydCAoCiAgICAgICAgcGFyc2VfcGFuZWxfc3RhZ2VfYl9waHlzaWNhbF92YWxpZGF0aW9uLAogICAgKQoKICAgIGRhdGEgPSBqc29uLmxvYWRzKFNPVVJDRV9QQVRILnJlYWRfdGV4dChlbmNvZGluZz0idXRmLTgiKSkKICAgIGZvciBiYWNrZW5kIGluICgiY3VweSIsICJ0b3JjaCIpOgogICAgICAgIGRpYWdub3N0aWNzID0gZGF0YVsiYmFja2VuZF9yZXN1bHRzIl1bYmFja2VuZF1bImRpYWdub3N0aWNzIl0KICAgICAgICB0ZW1wbGF0ZSA9IGRpY3QobmV4dChpdGVyKGRpYWdub3N0aWNzLnZhbHVlcygpKSkpCiAgICAgICAgdGVtcGxhdGVbInN0YXR1cyJdID0gInN1Y2Nlc3MiCiAgICAgICAgdGVtcGxhdGVbImFwcGxpY2FibGUiXSA9IFRydWUKICAgICAgICBkaWFnbm9zdGljc1siaGF1c21hbl9hcHBsaWNhYmxlX25vbnplcm9fZWZmZWN0Il0gPSB0ZW1wbGF0ZQoKICAgIHN5bnRoZXRpYyA9IHRtcF9wYXRoIC8gInBhbmVsX3N0YWdlX2Jfd2l0aF9hcHBsaWNhYmxlX2hhdXNtYW4uanNvbiIKICAgIHN5bnRoZXRpYy53cml0ZV90ZXh0KGpzb24uZHVtcHMoZGF0YSwgaW5kZW50PTIpICsgIlxuIiwgZW5jb2Rpbmc9InV0Zi04IikKICAgIHJ1bnMsIF9tb2RlbHMsIHdhcm5pbmdzID0gcGFyc2VfcGFuZWxfc3RhZ2VfYl9waHlzaWNhbF92YWxpZGF0aW9uKAogICAgICAgIHN5bnRoZXRpYywgInN5bnRoZXRpYy1wcjEyMi1hcHBsaWNhYmxlIgogICAgKQoKICAgIGFzc2VydCB3YXJuaW5ncyA9PSBbXQogICAgZGVkaWNhdGVkID0gWwogICAgICAgIHJ1biBmb3IgcnVuIGluIHJ1bnMgaWYgcnVuWyJ2YXJpYW50Il0gPT0gImhhdXNtYW4tYXBwbGljYWJsZS1ub256ZXJvLWVmZmVjdCIKICAgIF0KICAgIGFzc2VydCBsZW4oZGVkaWNhdGVkKSA9PSAyCiAgICBhc3NlcnQge3J1blsiYmFja2VuZCJdIGZvciBydW4gaW4gZGVkaWNhdGVkfSA9PSB7ImN1cHkiLCAidG9yY2gifQogICAgYXNzZXJ0IHtydW5bInNjYWxlIl1bIm5fc2FtcGxlcyJdIGZvciBydW4gaW4gZGVkaWNhdGVkfSA9PSB7NDh9CiAgICBhc3NlcnQge3J1blsic2NhbGUiXVsibl9mZWF0dXJlcyJdIGZvciBydW4gaW4gZGVkaWNhdGVkfSA9PSB7MX0KICAgIGFzc2VydCB7cnVuWyJwYXJhbWV0ZXJzIl1bInBhcmFtZXRlcml6YXRpb24iXSBmb3IgcnVuIGluIGRlZGljYXRlZH0gPT0geyJzdGFuZGFyZCJ9CiAgICBhc3NlcnQgewogICAgICAgIHJ1blsicGFyYW1ldGVycyJdWyJkaWFnbm9zdGljX2ZpeHR1cmUiXSBmb3IgcnVuIGluIGRlZGljYXRlZAogICAgfSA9PSB7Im5vbnplcm8tZWZmZWN0LWFwcGxpY2FibGUifQogICAgYXNzZXJ0IGFsbChydW5bInBhcmFtZXRlcnMiXVsiYXBwbGljYWJsZSJdIGlzIFRydWUgZm9yIHJ1biBpbiBkZWRpY2F0ZWQpCiAgICBhc3NlcnQgYWxsKAogICAgICAgICJoYXVzbWFuX2FwcGxpY2FibGVfc3RhdGlzdGljX3B2YWx1ZV9kZiIKICAgICAgICBpbiB7Y2hlY2tbIm1ldHJpYyJdIGZvciBjaGVjayBpbiBydW5bIm1ldHJpY3MiXVsidmFsaWRhdGlvbiJdWyJjaGVja3MiXX0KICAgICAgICBmb3IgcnVuIGluIGRlZGljYXRlZAogICAgKQoKICAgIHN0YW5kYXJkX2JhbGFuY2VkID0gWwogICAgICAgIHJ1biBmb3IgcnVuIGluIHJ1bnMgaWYgcnVuWyJ2YXJpYW50Il0gPT0gImhhdXNtYW4tYmFsYW5jZWQiCiAgICBdCiAgICBhc3NlcnQgbGVuKHN0YW5kYXJkX2JhbGFuY2VkKSA9PSAyCiAgICBkZWRpY2F0ZWRfbWV0aG9kcyA9IHtydW5bIm1ldGhvZF9jb25maWdfaWQiXSBmb3IgcnVuIGluIGRlZGljYXRlZH0KICAgIHN0YW5kYXJkX21ldGhvZHMgPSB7cnVuWyJtZXRob2RfY29uZmlnX2lkIl0gZm9yIHJ1biBpbiBzdGFuZGFyZF9iYWxhbmNlZH0KICAgIGFzc2VydCBkZWRpY2F0ZWRfbWV0aG9kcy5pc2Rpc2pvaW50KHN0YW5kYXJkX21ldGhvZHMpCiIKdGVzdF9wYXRoLndyaXRlX3RleHQodGVzdCwgZW5jb2Rpbmc9InV0Zi04IikK'))"
20826
- name: Install test dependencies
20927
run: |
21028
python -m pip install --upgrade pip
21129
python -m pip install -e . pytest
212-
21330
- name: Run targeted frontend evidence gates
21431
run: |
215-
python -m pytest -q \
216-
dev/tests/test_panel_stage_b_frontend_source.py \
217-
dev/tests/test_panel_stage_b_ready_review_regressions.py \
218-
dev/tests/test_frontend_domain_coverage.py \
219-
dev/tests/test_benchmark_catalog.py
32+
python -m pytest -q dev/tests/test_panel_stage_b_frontend_source.py dev/tests/test_panel_stage_b_ready_review_regressions.py dev/tests/test_frontend_domain_coverage.py dev/tests/test_benchmark_catalog.py
22033
python -m compileall -q dev/benchmarks/frontend_data/parsers/panel_stage_b.py
22134
git diff --check
222-
22335
- name: Commit parser fix and remove temporary carrier
22436
run: |
22537
rm .github/workflows/pr122-autofix-hausman-parser.yml

0 commit comments

Comments
 (0)