Sequential Quantum Gate Decomposer  v1.9.6
Powerful decomposition of general unitarias into one- and two-qubit gates gates
test_wide_circuit_optimization.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 """
3 Tests for wide-circuit optimization flow.
4 """
5 
6 from pathlib import Path
7 
8 from squander import utils
9 import squander.decomposition.qgd_Wide_Circuit_Optimization as Wide_Circuit_Optimization
11 
12 
14  """Load a QASM file and normalize legacy/new utils return shapes."""
15  loaded = utils.qasm_to_squander_circuit(str(qasm_path))
16  if len(loaded) == 2:
17  circ, parameters = loaded
18  else:
19  circ, parameters, _ = loaded
20  return circ, parameters
21 
22 
24  """Run one wide-circuit optimization pass on bv_n14 and validate outputs."""
25  qasm_file = (
26  Path(__file__).resolve().parents[2]
27  / "examples"
28  / "decomposition"
29  / "bv_n14.qasm"
30  )
31  assert qasm_file.exists(), f"Missing test circuit file: {qasm_file}"
32 
33  circ, parameters = _load_qasm_as_squander_circuit(qasm_file)
34  config = {
35  "strategy": "TreeSearch",
36  "test_subcircuits": False,
37  "test_final_circuit": False,
38  "max_partition_size": 3,
39  "beam": None,
40  "use_osr": True,
41  "use_graph_search": True,
42  "pre-opt-strategy": "TreeSearch",
43  "routing-strategy": "seqpam-ilp",
44  "tolerance": 1e-10,
45  "topology": Wide_Circuit_Optimization.qgd_Wide_Circuit_Optimization.linear_topology(
46  circ.get_Qbit_Num()
47  ),
48  }
49 
50  optimizer = Wide_Circuit_Optimization.qgd_Wide_Circuit_Optimization({**config})
51  opt_circ, opt_params = optimizer.OptimizeWideCircuit(circ, parameters)
52 
53  assert opt_circ is not None
54  assert opt_params is not None
55  assert opt_circ.get_Qbit_Num() == circ.get_Qbit_Num()
56  assert CNOTGateCount(opt_circ, 0) >= 0