1 from __future__
import annotations
3 from dataclasses
import dataclass
4 from typing
import Iterable
6 PLANNER_CANDIDATE_SCHEMA_VERSION =
"phase3_planner_calibration_candidate_v1" 7 PLANNER_FAMILY_SPAN_BUDGET =
"phase3_span_budget" 8 SUPPORTED_CANDIDATE_PARTITION_QUBITS = (2, 3, 4)
11 @dataclass(frozen=
True)
17 max_partition_qubits: int
21 return {
"max_partition_qubits": self.max_partition_qubits}
25 "schema_version": self.schema_version,
26 "candidate_id": self.candidate_id,
27 "planner_family": self.planner_family,
28 "planner_variant": self.planner_variant,
30 "max_partition_qubits": self.max_partition_qubits,
36 max_partition_qubits_values: Iterable[int] = SUPPORTED_CANDIDATE_PARTITION_QUBITS,
37 ) -> tuple[PlannerCandidate, ...]:
38 normalized_values = tuple(sorted({
int(value)
for value
in max_partition_qubits_values}))
39 if not normalized_values:
40 raise ValueError(
"Planner-candidate surface requires at least one candidate")
41 if normalized_values[0] <= 0:
43 "Planner-candidate surface requires max_partition_qubits > 0 for every candidate" 48 schema_version=PLANNER_CANDIDATE_SCHEMA_VERSION,
49 candidate_id=f
"span_budget_q{max_partition_qubits}",
50 planner_family=PLANNER_FAMILY_SPAN_BUDGET,
51 planner_variant=f
"max_partition_qubits_{max_partition_qubits}",
52 max_partition_qubits=max_partition_qubits,
54 for max_partition_qubits
in normalized_values
59 PLANNER_CALIBRATION_CANDIDATE_SCHEMA_VERSION = PLANNER_CANDIDATE_SCHEMA_VERSION
60 PLANNER_CALIBRATION_PLANNER_FAMILY_SPAN_BUDGET = PLANNER_FAMILY_SPAN_BUDGET
61 PLANNER_CALIBRATION_SUPPORTED_CANDIDATE_PARTITION_QUBITS = SUPPORTED_CANDIDATE_PARTITION_QUBITS
62 PlannerCalibrationPlannerCandidate = PlannerCandidate
67 max_partition_qubits_values: Iterable[int] = SUPPORTED_CANDIDATE_PARTITION_QUBITS,
68 ) -> tuple[PlannerCandidate, ...]:
def planner_settings(self)
def build_planner_calibration_planner_candidates
def build_planner_candidates