3 from squander
import Circuit
4 from squander
import utils
6 from squander.partitioning.partition
import PartitionCircuitQasm
7 from squander.partitioning.kahn
import kahn_partition
8 from squander.partitioning.tools
import get_qubits
16 @pytest.mark.parametrize(
"max_qubits", [3, 4, 5])
19 Test partitioning an empty circuit 23 assert len(top_c.get_Gates()) == 1
24 assert len(param_order) == 0
27 @pytest.mark.parametrize(
"max_qubits", [3, 4, 5])
30 Test partitioning a circuit with a single gate 33 single_c.add_CNOT(0, 1)
35 assert len(top_c.get_Gates()) == 1
36 assert len(param_order) == 1
39 @pytest.mark.parametrize(
"max_qubits", [3, 4, 5])
42 Test total gates after partitioning matches original 49 total_gates = sum(len(p.get_Gates())
for p
in top_c.get_Gates())
50 assert total_gates == len(c.get_Gates())
53 @pytest.mark.parametrize(
"max_qubits", [3, 4, 5])
56 Test that each partition respects max qubit constraint 63 for p
in top_c.get_Gates():
64 qubits = set.union(*(
get_qubits(gate)
for gate
in p.get_Gates()))
65 assert len(qubits) <= max_qubits
68 @pytest.mark.parametrize(
"max_qubits", [3, 4, 5])
71 Test partitioning when max qubits equals total qubits 73 c = Circuit(max_qubits)
77 c.add_CSWAP([1, 2], [0])
81 assert len(top_c.get_Gates()) == 1
86 Test correctness of partitioned circuit by comparing output states 88 filename =
"examples/partitioning/qasm_samples/heisenberg-16-20.qasm" 90 initial_circuit, initial_parameters, _ = utils.qasm_to_squander_circuit(filename)
92 max_partition_size = 4
94 filename, max_partition_size
98 qbit_num = initial_circuit.get_Qbit_Num()
100 matrix_size = 1 << qbit_num
101 initial_state_real = np.random.uniform(-1.0, 1.0, (matrix_size,))
102 initial_state_imag = np.random.uniform(-1.0, 1.0, (matrix_size,))
103 initial_state = initial_state_real + initial_state_imag * 1j
104 initial_state = initial_state / np.linalg.norm(initial_state)
106 transformed_state_1 = initial_state.copy()
107 transformed_state_2 = initial_state.copy()
109 initial_circuit.apply_to(initial_parameters, transformed_state_1)
110 partitined_circuit.apply_to(partitioned_parameters, transformed_state_2)
112 diff = np.linalg.norm(transformed_state_1 - transformed_state_2)
def kahn_partition(c, max_qubit, preparts=None)
def test_PartitionTotalGates(max_qubits)
def test_CorrectnessOfPartitionedCircuit()
def test_PartitionEmptyCircuit(max_qubits)
def test_PartitionMaxQubitConstraint(max_qubits)
def test_PartitionMaxQubitsEqualsTotalQubits(max_qubits)
def test_PartitionSingleGate(max_qubits)