Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
performance_evidence/case_selection.py
Go to the documentation of this file.
1 from __future__ import annotations
2 
3 from copy import deepcopy
4 from dataclasses import dataclass
5 from functools import lru_cache
6 from time import perf_counter
7 from typing import Any
8 
9 import numpy as np
10 
11 from benchmarks.density_matrix.correctness_evidence.common import build_selected_candidate
12 from benchmarks.density_matrix.performance_evidence.common import (
13  PERFORMANCE_EVIDENCE_ADDITIONAL_STRUCTURED_SEEDS,
14  PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_CONTINUITY,
15  PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_STRUCTURED,
16  PERFORMANCE_EVIDENCE_PHASE31_CASE_SCHEMA_VERSION,
17  PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED,
18  PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN,
19  build_phase31_counted_build_metadata,
20 )
21 from benchmarks.density_matrix.partitioned_runtime.common import build_initial_parameters
22 from benchmarks.density_matrix.planner_surface.common import build_phase2_continuity_vqe
23 from benchmarks.density_matrix.planner_surface.workloads import (
24  DEFAULT_STRUCTURED_SEED,
25  MANDATORY_NOISE_PATTERNS,
26  PHASE31_CONTROL_NOISE_PATTERNS,
27  PHASE31_CONTROL_STRUCTURED_FAMILY_NAMES,
28  PHASE31_PRIMARY_NOISE_PATTERNS,
29  PHASE31_PRIMARY_SEEDS,
30  PHASE31_PRIMARY_STRUCTURED_FAMILY_NAMES,
31  STRUCTURED_FAMILY_NAMES,
32  STRUCTURED_QUBITS,
33  build_phase31_structured_descriptor_set,
34  build_structured_descriptor_set,
35 )
36 from squander.partitioning.noisy_planner import (
37  NoisyPartitionDescriptorSet,
38  build_phase3_continuity_partition_descriptor_set,
39 )
40 
41 PERFORMANCE_EVIDENCE_CASE_KIND_CONTINUITY = "continuity"
42 PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED = "structured_family"
43 PERFORMANCE_EVIDENCE_CONTINUITY_QUBITS = (4, 6, 8, 10)
44 PERFORMANCE_EVIDENCE_EXTERNAL_REFERENCE_CONTINUITY_QUBITS = (4,)
45 
46 # Frozen Phase 3.1 hybrid performance pilot (P31-S09-E01); do not rename without updating docs/tests.
47 # Replaced dense with periodic so the pilot exercises mixed hybrid routing (nonzero channel-native partitions).
48 PHASE31_HYBRID_PILOT_WORKLOAD_ID = "phase31_pair_repeat_q8_periodic_seed20260318"
49 BENCHMARK_SLICE_PHASE31_HYBRID_PILOT = "phase31_hybrid_pilot"
50 BENCHMARK_SLICE_PHASE31_COUNTED_MATRIX = "phase31_counted_matrix"
51 
52 
53 @dataclass(frozen=True)
55  metadata: dict[str, Any]
56  descriptor_set: NoisyPartitionDescriptorSet
57  parameters: np.ndarray
58  hamiltonian: Any | None = None
59 
60 
61 def _selected_partition_qubits() -> int:
62  return int(build_selected_candidate()["max_partition_qubits"])
63 
64 
66  descriptor_set: NoisyPartitionDescriptorSet,
67  *,
68  case_kind: str,
69  benchmark_slice: str,
70  planning_time_ms: float,
71  representative_review_case: bool,
72  family_name: str | None = None,
73  noise_pattern: str | None = None,
74  seed: int | None = None,
75  topology: list[tuple[int, int]] | None = None,
76 ) -> dict[str, Any]:
77  selected_candidate = build_selected_candidate()
78  external_reference_required = (
79  case_kind == PERFORMANCE_EVIDENCE_CASE_KIND_CONTINUITY
80  and descriptor_set.qbit_num in PERFORMANCE_EVIDENCE_EXTERNAL_REFERENCE_CONTINUITY_QUBITS
81  )
82  return {
83  "case_name": descriptor_set.workload_id,
84  "case_kind": case_kind,
85  "benchmark_slice": benchmark_slice,
86  "candidate_id": selected_candidate["candidate_id"],
87  "planner_family": selected_candidate["planner_family"],
88  "planner_variant": selected_candidate["planner_variant"],
89  "max_partition_qubits": selected_candidate["max_partition_qubits"],
90  "planner_settings": dict(selected_candidate["planner_settings"]),
91  "planner_calibration_selected_candidate_id": selected_candidate["selected_candidate_id"],
92  "planner_calibration_claim_selection_schema_version": selected_candidate[
93  "claim_selection_schema_version"
94  ],
95  "planner_calibration_claim_selection_rule": selected_candidate["claim_selection_rule"],
96  "source_type": descriptor_set.source_type,
97  "workload_id": descriptor_set.workload_id,
98  "qbit_num": descriptor_set.qbit_num,
99  "parameter_count": descriptor_set.parameter_count,
100  "family_name": family_name,
101  "noise_pattern": noise_pattern,
102  "seed": seed,
103  "topology": list(topology) if topology is not None else None,
104  "planning_time_ms": planning_time_ms,
105  "representative_review_case": representative_review_case,
106  "review_group_id": (
107  None if family_name is None else f"{family_name}_q{descriptor_set.qbit_num}"
108  ),
109  "external_reference_required": external_reference_required,
110  }
111 
112 
114  max_partition_qubits = _selected_partition_qubits()
115  for qbit_num in PERFORMANCE_EVIDENCE_CONTINUITY_QUBITS:
116  vqe, hamiltonian, topology = build_phase2_continuity_vqe(qbit_num)
117  workload_id = f"phase2_xxz_hea_q{qbit_num}_continuity"
118  start = perf_counter()
120  vqe,
121  workload_id=workload_id,
122  max_partition_qubits=max_partition_qubits,
123  )
124  planning_time_ms = (perf_counter() - start) * 1000.0
126  descriptor_set,
127  case_kind=PERFORMANCE_EVIDENCE_CASE_KIND_CONTINUITY,
128  benchmark_slice=PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_CONTINUITY,
129  planning_time_ms=planning_time_ms,
130  representative_review_case=False,
131  topology=topology,
132  )
134  metadata=metadata,
135  descriptor_set=descriptor_set,
136  parameters=build_initial_parameters(vqe.get_Parameter_Num()),
137  hamiltonian=hamiltonian,
138  )
139 
140 
141 def _structured_seed_noise_pairs() -> tuple[tuple[int, str], ...]:
142  return (
143  (PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED, "sparse"),
144  (PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED, "periodic"),
145  (PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED, "dense"),
146  (PERFORMANCE_EVIDENCE_ADDITIONAL_STRUCTURED_SEEDS[0], PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN),
147  (PERFORMANCE_EVIDENCE_ADDITIONAL_STRUCTURED_SEEDS[1], PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN),
148  )
149 
150 
151 @lru_cache(maxsize=1)
152 def _build_performance_evidence_inventory_cases_cached() -> tuple[dict[str, Any], ...]:
153  selected_candidate = build_selected_candidate()
154  inventory_cases: list[dict[str, Any]] = []
155  for qbit_num in PERFORMANCE_EVIDENCE_CONTINUITY_QUBITS:
156  inventory_cases.append(
157  {
158  "case_name": f"phase2_xxz_hea_q{qbit_num}_continuity",
159  "case_kind": PERFORMANCE_EVIDENCE_CASE_KIND_CONTINUITY,
160  "benchmark_slice": PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_CONTINUITY,
161  "candidate_id": selected_candidate["candidate_id"],
162  "planner_family": selected_candidate["planner_family"],
163  "planner_variant": selected_candidate["planner_variant"],
164  "max_partition_qubits": selected_candidate["max_partition_qubits"],
165  "planner_settings": dict(selected_candidate["planner_settings"]),
166  "planner_calibration_selected_candidate_id": selected_candidate["selected_candidate_id"],
167  "planner_calibration_claim_selection_schema_version": selected_candidate[
168  "claim_selection_schema_version"
169  ],
170  "planner_calibration_claim_selection_rule": selected_candidate[
171  "claim_selection_rule"
172  ],
173  "qbit_num": qbit_num,
174  "family_name": None,
175  "noise_pattern": None,
176  "seed": None,
177  "topology": None,
178  "planning_time_ms": None,
179  "representative_review_case": False,
180  "review_group_id": None,
181  "external_reference_required": qbit_num
182  in PERFORMANCE_EVIDENCE_EXTERNAL_REFERENCE_CONTINUITY_QUBITS,
183  }
184  )
185  for family_name in STRUCTURED_FAMILY_NAMES:
186  for qbit_num in STRUCTURED_QUBITS:
187  for seed, noise_pattern in _structured_seed_noise_pairs():
188  inventory_cases.append(
189  {
190  "case_name": "{}_q{}_{}_seed{}".format(
191  family_name, qbit_num, noise_pattern, seed
192  ),
193  "case_kind": PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
194  "benchmark_slice": PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_STRUCTURED,
195  "candidate_id": selected_candidate["candidate_id"],
196  "planner_family": selected_candidate["planner_family"],
197  "planner_variant": selected_candidate["planner_variant"],
198  "max_partition_qubits": selected_candidate[
199  "max_partition_qubits"
200  ],
201  "planner_settings": dict(selected_candidate["planner_settings"]),
202  "planner_calibration_selected_candidate_id": selected_candidate[
203  "selected_candidate_id"
204  ],
205  "planner_calibration_claim_selection_schema_version": selected_candidate[
206  "claim_selection_schema_version"
207  ],
208  "planner_calibration_claim_selection_rule": selected_candidate[
209  "claim_selection_rule"
210  ],
211  "qbit_num": qbit_num,
212  "family_name": family_name,
213  "noise_pattern": noise_pattern,
214  "seed": seed,
215  "topology": None,
216  "planning_time_ms": None,
217  "representative_review_case": (
218  seed == PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED
219  and noise_pattern == PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN
220  ),
221  "review_group_id": f"{family_name}_q{qbit_num}",
222  "external_reference_required": False,
223  }
224  )
225  return tuple(inventory_cases)
226 
227 
228 def build_performance_evidence_inventory_cases() -> list[dict[str, Any]]:
230 
231 
233  max_partition_qubits = _selected_partition_qubits()
234  for family_name in STRUCTURED_FAMILY_NAMES:
235  for qbit_num in STRUCTURED_QUBITS:
236  for seed, noise_pattern in _structured_seed_noise_pairs():
237  start = perf_counter()
238  descriptor_set = build_structured_descriptor_set(
239  family_name,
240  qbit_num=qbit_num,
241  noise_pattern=noise_pattern,
242  seed=seed,
243  max_partition_qubits=max_partition_qubits,
244  )
245  planning_time_ms = (perf_counter() - start) * 1000.0
247  descriptor_set,
248  case_kind=PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
249  benchmark_slice=PERFORMANCE_EVIDENCE_BENCHMARK_SLICE_STRUCTURED,
250  planning_time_ms=planning_time_ms,
251  representative_review_case=(
252  seed == PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED
253  and noise_pattern == PERFORMANCE_EVIDENCE_REVIEW_NOISE_PATTERN
254  ),
255  family_name=family_name,
256  noise_pattern=noise_pattern,
257  seed=seed,
258  )
260  metadata=metadata,
261  descriptor_set=descriptor_set,
262  parameters=build_initial_parameters(descriptor_set.parameter_count),
263  )
264 
265 
266 def build_phase31_performance_inventory_cases() -> list[dict[str, Any]]:
267  """Planning helper inventory for the frozen Phase 3.1 counted slice.
268 
269  This inventory mirrors the contract closed in the Phase 3.1 docs but is not
270  wired into the default Phase 3 performance package builders.
271  """
272 
273  selected_candidate = build_selected_candidate()
274  inventory_cases: list[dict[str, Any]] = []
275  for family_name in PHASE31_PRIMARY_STRUCTURED_FAMILY_NAMES:
276  for qbit_num in STRUCTURED_QUBITS:
277  for noise_pattern in PHASE31_PRIMARY_NOISE_PATTERNS:
278  for seed in PHASE31_PRIMARY_SEEDS:
279  inventory_cases.append(
280  {
281  "case_name": f"{family_name}_q{qbit_num}_{noise_pattern}_seed{seed}",
282  "case_kind": PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
283  "benchmark_slice": "phase31_structured_performance",
284  "candidate_id": selected_candidate["candidate_id"],
285  "planner_family": selected_candidate["planner_family"],
286  "planner_variant": selected_candidate["planner_variant"],
287  "max_partition_qubits": selected_candidate[
288  "max_partition_qubits"
289  ],
290  "planner_settings": dict(selected_candidate["planner_settings"]),
291  "planner_calibration_selected_candidate_id": selected_candidate[
292  "selected_candidate_id"
293  ],
294  "planner_calibration_claim_selection_schema_version": selected_candidate[
295  "claim_selection_schema_version"
296  ],
297  "planner_calibration_claim_selection_rule": selected_candidate[
298  "claim_selection_rule"
299  ],
300  "qbit_num": qbit_num,
301  "family_name": family_name,
302  "noise_pattern": noise_pattern,
303  "seed": seed,
304  "topology": None,
305  "planning_time_ms": None,
306  "representative_review_case": (
307  seed == PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED
308  ),
309  "review_group_id": f"{family_name}_q{qbit_num}",
310  "external_reference_required": False,
311  "claim_surface_id": "phase31_bounded_mixed_motif_v1",
312  "representation_primary": "kraus_bundle",
313  "contains_noise": True,
314  "counted_phase31_case": True,
315  }
316  )
317  for family_name in PHASE31_CONTROL_STRUCTURED_FAMILY_NAMES:
318  for qbit_num in STRUCTURED_QUBITS:
319  for noise_pattern in PHASE31_CONTROL_NOISE_PATTERNS:
320  inventory_cases.append(
321  {
322  "case_name": f"{family_name}_q{qbit_num}_{noise_pattern}_seed{DEFAULT_STRUCTURED_SEED}",
323  "case_kind": PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
324  "benchmark_slice": "phase31_control_performance",
325  "candidate_id": selected_candidate["candidate_id"],
326  "planner_family": selected_candidate["planner_family"],
327  "planner_variant": selected_candidate["planner_variant"],
328  "max_partition_qubits": selected_candidate["max_partition_qubits"],
329  "planner_settings": dict(selected_candidate["planner_settings"]),
330  "planner_calibration_selected_candidate_id": selected_candidate[
331  "selected_candidate_id"
332  ],
333  "planner_calibration_claim_selection_schema_version": selected_candidate[
334  "claim_selection_schema_version"
335  ],
336  "planner_calibration_claim_selection_rule": selected_candidate[
337  "claim_selection_rule"
338  ],
339  "qbit_num": qbit_num,
340  "family_name": family_name,
341  "noise_pattern": noise_pattern,
342  "seed": DEFAULT_STRUCTURED_SEED,
343  "topology": None,
344  "planning_time_ms": None,
345  "representative_review_case": True,
346  "review_group_id": f"{family_name}_q{qbit_num}",
347  "external_reference_required": False,
348  "claim_surface_id": "phase31_bounded_mixed_motif_v1",
349  "representation_primary": "kraus_bundle",
350  "contains_noise": True,
351  "counted_phase31_case": True,
352  }
353  )
354  return inventory_cases
355 
356 
358  """Planning helper contexts for the frozen Phase 3.1 counted performance slice."""
359 
360  max_partition_qubits = _selected_partition_qubits()
361  for family_name in PHASE31_PRIMARY_STRUCTURED_FAMILY_NAMES:
362  for qbit_num in STRUCTURED_QUBITS:
363  for noise_pattern in PHASE31_PRIMARY_NOISE_PATTERNS:
364  for seed in PHASE31_PRIMARY_SEEDS:
365  start = perf_counter()
367  family_name,
368  qbit_num=qbit_num,
369  noise_pattern=noise_pattern,
370  seed=seed,
371  max_partition_qubits=max_partition_qubits,
372  )
373  planning_time_ms = (perf_counter() - start) * 1000.0
375  descriptor_set,
376  case_kind=PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
377  benchmark_slice="phase31_structured_performance",
378  planning_time_ms=planning_time_ms,
379  representative_review_case=(
380  seed == PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED
381  ),
382  family_name=family_name,
383  noise_pattern=noise_pattern,
384  seed=seed,
385  )
386  metadata.update(
387  {
388  "claim_surface_id": "phase31_bounded_mixed_motif_v1",
389  "representation_primary": "kraus_bundle",
390  "contains_noise": True,
391  "counted_phase31_case": True,
392  }
393  )
395  metadata=metadata,
396  descriptor_set=descriptor_set,
397  parameters=build_initial_parameters(
398  descriptor_set.parameter_count
399  ),
400  )
401  for family_name in PHASE31_CONTROL_STRUCTURED_FAMILY_NAMES:
402  for qbit_num in STRUCTURED_QUBITS:
403  for noise_pattern in PHASE31_CONTROL_NOISE_PATTERNS:
404  start = perf_counter()
406  family_name,
407  qbit_num=qbit_num,
408  noise_pattern=noise_pattern,
409  seed=DEFAULT_STRUCTURED_SEED,
410  max_partition_qubits=max_partition_qubits,
411  )
412  planning_time_ms = (perf_counter() - start) * 1000.0
414  descriptor_set,
415  case_kind=PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
416  benchmark_slice="phase31_control_performance",
417  planning_time_ms=planning_time_ms,
418  representative_review_case=True,
419  family_name=family_name,
420  noise_pattern=noise_pattern,
421  seed=DEFAULT_STRUCTURED_SEED,
422  )
423  metadata.update(
424  {
425  "claim_surface_id": "phase31_bounded_mixed_motif_v1",
426  "representation_primary": "kraus_bundle",
427  "contains_noise": True,
428  "counted_phase31_case": True,
429  }
430  )
432  metadata=metadata,
433  descriptor_set=descriptor_set,
434  parameters=build_initial_parameters(descriptor_set.parameter_count),
435  )
436 
437 
438 def build_phase31_hybrid_pilot_case_context() -> PerformanceEvidenceCaseContext:
439  """Single frozen structured workload for the Phase 3.1 hybrid performance pilot row."""
440  max_partition_qubits = _selected_partition_qubits()
441  family_name = "phase31_pair_repeat"
442  qbit_num = 8
443  noise_pattern = "periodic"
444  seed = PERFORMANCE_EVIDENCE_PRIMARY_STRUCTURED_SEED
445  start = perf_counter()
447  family_name,
448  qbit_num=qbit_num,
449  noise_pattern=noise_pattern,
450  seed=seed,
451  max_partition_qubits=max_partition_qubits,
452  )
453  planning_time_ms = (perf_counter() - start) * 1000.0
454  if descriptor_set.workload_id != PHASE31_HYBRID_PILOT_WORKLOAD_ID:
455  raise RuntimeError(
456  "Phase 3.1 hybrid pilot workload_id mismatch: expected {!r}, got {!r}".format(
457  PHASE31_HYBRID_PILOT_WORKLOAD_ID,
458  descriptor_set.workload_id,
459  )
460  )
462  descriptor_set,
463  case_kind=PERFORMANCE_EVIDENCE_CASE_KIND_STRUCTURED,
464  benchmark_slice=BENCHMARK_SLICE_PHASE31_HYBRID_PILOT,
465  planning_time_ms=planning_time_ms,
466  representative_review_case=True,
467  family_name=family_name,
468  noise_pattern=noise_pattern,
469  seed=seed,
470  )
471  metadata.update(
472  {
473  "claim_surface_id": "phase31_bounded_mixed_motif_v1",
474  "representation_primary": "kraus_bundle",
475  "contains_noise": True,
476  "counted_phase31_case": True,
477  "phase31_hybrid_pilot_case": True,
478  }
479  )
481  metadata=metadata,
482  descriptor_set=descriptor_set,
483  parameters=build_initial_parameters(descriptor_set.parameter_count),
484  )
485 
486 
487 @lru_cache(maxsize=1)
490  for case in inventory:
491  case["phase31_matrix_slice"] = BENCHMARK_SLICE_PHASE31_COUNTED_MATRIX
493  return tuple(inventory)
494 
495 
497  """Explicit sibling inventory for the full Phase 3.1 counted performance matrix."""
498 
500 
501 
502 @lru_cache(maxsize=1)
503 def _build_phase31_counted_performance_case_contexts_cached() -> tuple[PerformanceEvidenceCaseContext, ...]:
504  cases = list(iter_phase31_performance_cases())
505  for case_context in cases:
506  case_context.metadata["phase31_matrix_slice"] = BENCHMARK_SLICE_PHASE31_COUNTED_MATRIX
507  case_context.metadata.update(build_phase31_counted_build_metadata())
508  return tuple(cases)
509 
510 
511 def build_phase31_counted_performance_case_contexts() -> list[PerformanceEvidenceCaseContext]:
512  """Explicit sibling contexts for the full Phase 3.1 counted performance matrix."""
513 
515 
516 
517 @lru_cache(maxsize=1)
518 def _build_performance_evidence_case_contexts_cached() -> tuple[PerformanceEvidenceCaseContext, ...]:
519  cases: list[PerformanceEvidenceCaseContext] = []
522  return tuple(cases)
523 
524 
525 def build_performance_evidence_case_contexts() -> list[PerformanceEvidenceCaseContext]:
526  return deepcopy(list(_build_performance_evidence_case_contexts_cached()))
def build_phase31_counted_build_metadata()
def build_phase2_continuity_vqe
def build_phase3_continuity_partition_descriptor_set