def test_update_mapping(): gate = SwapPermutationGate() a, b, c = (cirq.NamedQubit(s) for s in 'abc') mapping = {s: i for i, s in enumerate((a, b, c))} ops = [gate(a, b), gate(b, c)] update_mapping(mapping, ops) assert mapping == {a: 1, b: 2, c: 0}
def test_swap_network_gate_permutation(part_lens, acquaintance_size): n_qubits = sum(part_lens) qubits = cirq.LineQubit.range(n_qubits) swap_network_gate = SwapNetworkGate(part_lens, acquaintance_size) operations = cirq.decompose_once_with_qubits(swap_network_gate, qubits) operations = list(cirq.flatten_op_tree(operations)) mapping = {q: i for i, q in enumerate(qubits)} update_mapping(mapping, operations) assert mapping == {q: i for i, q in enumerate(reversed(qubits))}
def assert_permutation_decomposition_equivalence(gate: PermutationGate, n_qubits: int) -> None: qubits = line.LineQubit.range(n_qubits) operations = protocols.decompose_once_with_qubits(gate, qubits) operations = list( cast(Sequence[ops.Operation], ops.flatten_op_tree(operations))) mapping = {cast(ops.Qid, q): i for i, q in enumerate(qubits)} update_mapping(mapping, operations) expected_mapping = {qubits[j]: i for i, j in gate.permutation().items()} assert mapping == expected_mapping, ( "{!r}.permutation({}) doesn't match decomposition.\n" '\n' 'Actual mapping:\n' '{}\n' '\n' 'Expected mapping:\n' '{}\n'.format(gate, n_qubits, [mapping[q] for q in qubits], [expected_mapping[q] for q in qubits]))