Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
test_partitioned_runtime.py
Go to the documentation of this file.
1 from pathlib import Path
2 import sys
3 
4 import pytest
5 
6 REPO_ROOT = Path(__file__).resolve().parents[2]
7 if str(REPO_ROOT) not in sys.path:
8  sys.path.insert(0, str(REPO_ROOT))
9 
10 from squander.partitioning.noisy_planner import (
11  PARTITIONED_DENSITY_MODE,
12  build_canonical_planner_surface_from_operation_specs,
13  build_partition_descriptor_set,
14  build_phase3_continuity_partition_descriptor_set,
15 )
16 from squander.partitioning import noisy_runtime as noisy_runtime_mod
17 from squander.partitioning.noisy_runtime import (
18  PHASE3_RUNTIME_PATH_BASELINE,
19  PHASE3_RUNTIME_PATH_FUSED_UNITARY_ISLANDS,
20  build_runtime_audit_record,
21  execute_partitioned_density,
22 )
23 from tests.partitioning.fixtures.continuity import build_phase2_continuity_vqe
25  PHASE3_RUNTIME_DENSITY_TOL,
26  PHASE3_RUNTIME_ENERGY_TOL,
27  build_initial_parameters,
28  density_energy,
29  execute_partitioned_with_reference,
30 )
32  MANDATORY_NOISE_PATTERNS,
33  STRUCTURED_FAMILY_NAMES,
34  STRUCTURED_QUBITS,
35  build_microcase_descriptor_set,
36  build_structured_descriptor_set,
37  iter_microcase_descriptor_sets,
38  _noise,
39  _noise_value,
40  _u3,
41 )
42 
43 
44 @pytest.mark.parametrize("qbit_num", [4, 6])
46  vqe, _, _ = build_phase2_continuity_vqe(qbit_num)
48  parameters = build_initial_parameters(vqe.get_Parameter_Num())
49  result = execute_partitioned_density(descriptor_set, parameters)
50 
51  assert result.requested_mode == PARTITIONED_DENSITY_MODE
52  assert result.source_type == "generated_hea"
53  assert result.workload_id == f"phase2_xxz_hea_q{qbit_num}_continuity"
54  assert result.runtime_path == PHASE3_RUNTIME_PATH_BASELINE
55  assert result.requested_runtime_path == PHASE3_RUNTIME_PATH_BASELINE
56  assert result.partition_count > 0
57  assert result.exact_output_present is True
58  assert result.rho_is_valid is True
59 
60 
61 @pytest.mark.parametrize("qbit_num", [4, 6])
63  vqe, hamiltonian, _ = build_phase2_continuity_vqe(qbit_num)
65  parameters = build_initial_parameters(vqe.get_Parameter_Num())
66  result = execute_partitioned_density(descriptor_set, parameters)
67 
68  partitioned_energy_real, partitioned_energy_imag = density_energy(
69  hamiltonian, result.density_matrix_numpy()
70  )
71  continuity_energy = float(vqe.Optimization_Problem(parameters))
72 
73  assert abs(partitioned_energy_real - continuity_energy) <= PHASE3_RUNTIME_ENERGY_TOL
74  assert abs(partitioned_energy_imag) <= PHASE3_RUNTIME_DENSITY_TOL
75 
76 
78  for metadata, descriptor_set in iter_microcase_descriptor_sets():
79  parameters = build_initial_parameters(descriptor_set.parameter_count)
80  result = execute_partitioned_density(descriptor_set, parameters)
81 
82  assert result.requested_mode == PARTITIONED_DENSITY_MODE
83  assert result.source_type == "microcase_builder"
84  assert result.workload_id == metadata["case_name"]
85  assert result.partition_count > 0
86  assert result.runtime_path == PHASE3_RUNTIME_PATH_BASELINE
87  assert result.requested_runtime_path == PHASE3_RUNTIME_PATH_BASELINE
88  assert result.exact_output_present is True
89 
90 
92  descriptor_set = build_structured_descriptor_set(
93  STRUCTURED_FAMILY_NAMES[0],
94  qbit_num=STRUCTURED_QUBITS[0],
95  noise_pattern=MANDATORY_NOISE_PATTERNS[0],
96  )
97  parameters = build_initial_parameters(descriptor_set.parameter_count)
98  result = execute_partitioned_density(descriptor_set, parameters)
99 
100  assert result.source_type == "structured_family_builder"
101  assert result.partition_count > 0
102  assert result.runtime_path == PHASE3_RUNTIME_PATH_BASELINE
103  assert result.requested_runtime_path == PHASE3_RUNTIME_PATH_BASELINE
104  assert result.rho_is_valid is True
105 
106 
108  vqe, _, _ = build_phase2_continuity_vqe(4)
110  parameters = build_initial_parameters(descriptor_set.parameter_count)
111  result = execute_partitioned_density(descriptor_set, parameters)
112  audit = build_runtime_audit_record(result, metadata={"case_kind": "continuity"})
113 
114  assert audit["provenance"]["source_type"] == "generated_hea"
115  assert audit["summary"]["partition_count"] == result.partition_count
116  assert audit["summary"]["descriptor_member_count"] == result.descriptor_member_count
117  assert audit["metadata"]["case_kind"] == "continuity"
118  assert audit["requested_runtime_path"] == PHASE3_RUNTIME_PATH_BASELINE
119  assert audit["qbit_num"] == result.qbit_num
120  assert audit["parameter_count"] == result.parameter_count
121 
122 
124  descriptor_set = build_microcase_descriptor_set(
125  "microcase_4q_partition_boundary_triplet"
126  )
127  parameters = build_initial_parameters(descriptor_set.parameter_count)
128  result, _, density_metrics = execute_partitioned_with_reference(
129  descriptor_set, parameters
130  )
131 
132  assert result.partition_count > 0
133  assert result.remapped_partition_count > 0
134  assert result.parameter_routing_segment_count > 0
135  assert density_metrics["frobenius_norm_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
136  assert density_metrics["max_abs_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
137 
138 
140  descriptor_set = build_structured_descriptor_set(
141  STRUCTURED_FAMILY_NAMES[0],
142  qbit_num=STRUCTURED_QUBITS[0],
143  noise_pattern=MANDATORY_NOISE_PATTERNS[0],
144  )
145  parameters = build_initial_parameters(descriptor_set.parameter_count)
146  result, _, density_metrics = execute_partitioned_with_reference(
147  descriptor_set, parameters
148  )
149 
150  assert result.partition_count > 0
151  assert result.parameter_routing_segment_count > 0
152  assert density_metrics["frobenius_norm_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
153  assert density_metrics["max_abs_diff"] <= PHASE3_RUNTIME_DENSITY_TOL
154 
155 
157  """allow_fusion upgrades the request to fused path, but singleton unitary segments never fuse."""
159  qbit_num=2,
160  source_type="test",
161  workload_id="story3_singleton_unitary_segments",
162  operation_specs=[
163  _u3(0),
164  _noise(
165  "local_depolarizing",
166  0,
167  0,
168  _noise_value("local_depolarizing"),
169  ),
170  _u3(1),
171  ],
172  )
173  descriptor_set = build_partition_descriptor_set(surface)
174  parameters = build_initial_parameters(descriptor_set.parameter_count)
175  result = execute_partitioned_density(descriptor_set, parameters, allow_fusion=True)
176 
177  assert result.requested_runtime_path == PHASE3_RUNTIME_PATH_FUSED_UNITARY_ISLANDS
178  assert result.runtime_path == PHASE3_RUNTIME_PATH_BASELINE
179  assert not result.actual_fused_execution
180 
181 
183  descriptor_set = build_microcase_descriptor_set("microcase_2q_entangler_local_depolarizing")
184  parameters = build_initial_parameters(descriptor_set.parameter_count)
185  validated, _ = noisy_runtime_mod.validate_runtime_request(
186  descriptor_set, parameters, runtime_path=noisy_runtime_mod.PHASE3_RUNTIME_PATH_BASELINE
187  )
188  partition = validated.partitions[0]
189  rp = noisy_runtime_mod.PHASE3_RUNTIME_PATH_BASELINE
190 
191  circuit_full, ordered_full = noisy_runtime_mod._build_runtime_circuit(
192  validated,
193  partition.members,
194  qbit_num=validated.qbit_num,
195  runtime_path=rp,
196  )
197  noisy_runtime_mod._validate_runtime_operation_alignment(
198  validated,
199  circuit_full,
200  ordered_full,
201  runtime_path=rp,
202  member_sequence_kind="descriptor",
203  param_start_policy="from_member_attr",
204  param_start_attr="local_param_start",
205  )
206 
207  segment = partition.members[:3]
208  assert all(validated.canonical_operation_for(m).is_unitary for m in segment)
209  circuit_seg, ordered_seg = noisy_runtime_mod._build_runtime_circuit(
210  validated,
211  segment,
212  qbit_num=validated.qbit_num,
213  runtime_path=rp,
214  )
215  noisy_runtime_mod._validate_runtime_operation_alignment(
216  validated,
217  circuit_seg,
218  ordered_seg,
219  runtime_path=rp,
220  member_sequence_kind="segment",
221  param_start_policy="segment_accumulated",
222  )
def build_phase2_continuity_vqe
def test_partitioned_runtime_continuity_energy_matches_existing_density_backend(qbit_num)
def build_phase3_continuity_partition_descriptor_set
def execute_partitioned_with_reference
def test_phase3_partitioned_runtime_continuity_runtime_executes_supported_anchor(qbit_num)