2 """Unsupported partition-descriptor boundary validation. 4 Exercises representative unsupported or lossy descriptor-generation situations 5 and records the stable no-fallback outcome for each one. Unsupported descriptor 6 requests fail before runtime and are not silently relabeled as supported 10 python benchmarks/density_matrix/planner_surface/unsupported_descriptor_validation.py 13 from __future__
import annotations
18 from dataclasses
import replace
19 from pathlib
import Path
21 REPO_ROOT = Path(__file__).resolve().parents[3]
22 if str(REPO_ROOT)
not in sys.path:
23 sys.path.insert(0, str(REPO_ROOT))
25 from benchmarks.density_matrix.planner_surface.common
import (
26 build_phase2_continuity_vqe,
27 build_software_metadata,
29 from benchmarks.density_matrix.planner_surface.workloads
import (
30 build_microcase_descriptor_set,
31 build_microcase_surface,
33 from squander.partitioning.noisy_planner
import (
35 PLANNER_OP_KIND_NOISE,
36 preflight_descriptor_request,
37 validate_partition_descriptor_set_against_surface,
40 SUITE_NAME =
"phase3_planner_surface_unsupported_descriptors" 41 ARTIFACT_FILENAME =
"unsupported_descriptor_bundle.json" 42 DEFAULT_OUTPUT_DIR = (
48 /
"unsupported_descriptor" 50 ARTIFACT_CORE_FIELDS = (
62 except Exception
as err:
63 payload = err.to_dict()
if hasattr(err,
"to_dict")
else {
"reason": str(err)}
66 "case_name": case_name,
67 "status":
"unsupported",
68 "supported_descriptor_case_recorded":
False,
73 "case_name": case_name,
74 "status":
"unexpected_pass",
75 "supported_descriptor_case_recorded":
False,
76 "reason":
"unsupported descriptor case unexpectedly passed",
82 bridge = continuity_vqe.describe_density_bridge()
83 return continuity_vqe, bridge
89 "microcase_4q_partition_boundary_triplet" 91 partitions = list(descriptor_set.partitions)
92 last_partition = partitions[-1]
93 partitions[-1] = replace(last_partition, members=last_partition.members[:-1])
94 tampered = replace(descriptor_set, partitions=tuple(partitions))
101 "microcase_4q_partition_boundary_triplet" 103 partitions = list(descriptor_set.partitions)
104 for partition_index, partition
in enumerate(partitions):
105 for member_index, member
in enumerate(partition.members):
107 descriptor_set.operations[member.canonical_operation_index].kind
108 == PLANNER_OP_KIND_NOISE
110 ops = list(descriptor_set.operations)
111 idx = member.canonical_operation_index
114 kind=PLANNER_OP_KIND_GATE,
117 tampered = replace(descriptor_set, operations=tuple(ops))
121 raise ValueError(
"No noise member available for hidden-noise negative case")
127 "microcase_4q_partition_boundary_triplet" 129 partitions = list(descriptor_set.partitions)
130 for partition_index, partition
in enumerate(partitions):
131 if not partition.requires_remap
or len(partition.local_to_global_qbits) < 2:
133 for member_index, member
in enumerate(partition.members):
134 if member.local_target_qbit
is None:
136 wrong_local_target = (member.local_target_qbit + 1) % len(
137 partition.local_to_global_qbits
139 if wrong_local_target == member.local_target_qbit:
141 members = list(partition.members)
142 members[member_index] = replace(
143 member, local_target_qbit=wrong_local_target
145 partitions[partition_index] = replace(partition, members=tuple(members))
146 tampered = replace(descriptor_set, partitions=tuple(partitions))
150 raise ValueError(
"No remapped partition available for incomplete-remap case")
156 "microcase_4q_partition_boundary_triplet" 158 partitions = list(descriptor_set.partitions)
159 for partition_index, partition
in enumerate(partitions):
160 for member_index, member
in enumerate(partition.members):
162 descriptor_set.operations[member.canonical_operation_index].param_count
166 members = list(partition.members)
167 members[member_index] = replace(
168 member, local_param_start=member.local_param_start + 1
170 partitions[partition_index] = replace(partition, members=tuple(members))
171 tampered = replace(descriptor_set, partitions=tuple(partitions))
175 raise ValueError(
"No parameterized member available for ambiguous-routing case")
181 "microcase_4q_partition_boundary_triplet" 183 partitions = list(descriptor_set.partitions)
184 for partition_index, partition
in enumerate(partitions):
186 descriptor_set.partition_noise_count(partition) == 0
187 or partition.member_count < 2
190 members = list(partition.members)
191 members[0], members[1] = members[1], members[0]
192 partitions[partition_index] = replace(partition, members=tuple(members))
193 tampered = replace(descriptor_set, partitions=tuple(partitions))
197 raise ValueError(
"No mixed partition available for reordering negative case")
204 "partition_qubits_too_small",
206 source_type=
"generated_hea",
207 workload_id=
"phase2_xxz_hea_q4_continuity",
208 bridge_metadata=continuity_bridge,
209 max_partition_qubits=1,
225 unsupported_cases = sum(case[
"status"] ==
"unsupported" for case
in cases)
226 unexpected_passes = sum(case[
"status"] ==
"unexpected_pass" for case
in cases)
228 "suite_name": SUITE_NAME,
230 if unsupported_cases == len(cases)
and unexpected_passes == 0
234 "total_cases": len(cases),
235 "unsupported_cases": unsupported_cases,
236 "unexpected_passes": unexpected_passes,
240 missing = [field
for field
in ARTIFACT_CORE_FIELDS
if field
not in bundle]
243 "Unsupported descriptor bundle missing required fields: {}".format(
251 output_dir.mkdir(parents=
True, exist_ok=
True)
252 output_path = output_dir / ARTIFACT_FILENAME
253 output_path.write_text(json.dumps(bundle, indent=2, sort_keys=
True) +
"\n")
257 def main(argv: list[str] |
None =
None) -> int:
258 parser = argparse.ArgumentParser(description=__doc__)
262 default=DEFAULT_OUTPUT_DIR,
263 help=
"Directory to write the unsupported descriptor bundle into.",
268 help=
"Suppress per-case console output.",
270 args = parser.parse_args(argv)
278 print(
"{case_name}: {status}".format(**case))
279 print(
"Wrote {}".format(output_path))
281 return 0
if bundle[
"status"] ==
"pass" else 1
284 if __name__ ==
"__main__":
285 raise SystemExit(
main())
def build_unsupported_descriptor_cases()
def build_microcase_descriptor_set
def build_phase2_continuity_vqe
def _build_continuity_bridge_request()
def _reordered_descriptor_runner()
def _incomplete_remap_runner()
def build_microcase_surface
def _drop_last_descriptor_member_runner()
def _ambiguous_parameter_routing_runner()
def build_software_metadata()
def write_artifact_bundle
def build_artifact_bundle
def validate_partition_descriptor_set_against_surface
def _hide_noise_member_runner()
def preflight_descriptor_request