Esempio n. 1
0
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}
Esempio n. 2
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))}
Esempio n. 3
0
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]))