コード例 #1
0
def test_shift_swap_network_gate_bad_part_lens():
    with pytest.raises(ValueError):
        cca.ShiftSwapNetworkGate((0, 1, 1), (2, 2))
    with pytest.raises(ValueError):
        cca.ShiftSwapNetworkGate((-1, 1, 1), (2, 2))
    with pytest.raises(ValueError):
        cca.ShiftSwapNetworkGate((1, 1), (2, 0, 2))
    with pytest.raises(ValueError):
        cca.ShiftSwapNetworkGate((1, 1), (2, -3))
コード例 #2
0
def test_shift_swap_network_gate_acquaintance_opps(left_part_lens,
                                                   right_part_lens):

    gate = cca.ShiftSwapNetworkGate(left_part_lens, right_part_lens)
    n_qubits = gate.qubit_count()
    qubits = cirq.LineQubit.range(n_qubits)
    strategy = cirq.Circuit(gate(*qubits),
                            device=cca.UnconstrainedAcquaintanceDevice)

    # actual_opps
    initial_mapping = {q: i for i, q in enumerate(qubits)}
    actual_opps = cca.get_logical_acquaintance_opportunities(
        strategy, initial_mapping)

    # expected opps
    i = 0
    sides = ('left', 'right')
    parts = {side: [] for side in sides}
    for side, part_lens in zip(sides, (left_part_lens, right_part_lens)):
        for part_len in part_lens:
            parts[side].append(set(range(i, i + part_len)))
            i += part_len

    expected_opps = set(
        frozenset(left_part | right_part) for left_part, right_part in
        itertools.product(parts['left'], parts['right']))
    assert actual_opps == expected_opps
コード例 #3
0
def test_shift_swap_network_gate_diagrams(left_part_lens, right_part_lens):

    gate = cca.ShiftSwapNetworkGate(left_part_lens, right_part_lens)
    n_qubits = gate.qubit_count()
    qubits = cirq.LineQubit.range(n_qubits)
    circuit = cirq.Circuit(gate(*qubits))

    diagram = circuit_diagrams['undecomposed', left_part_lens, right_part_lens]
    cirq.testing.assert_has_diagram(circuit, diagram)

    cca.expose_acquaintance_gates(circuit)
    diagram = circuit_diagrams['decomposed', left_part_lens, right_part_lens]
    cirq.testing.assert_has_diagram(circuit, diagram)
コード例 #4
0
def test_shift_swap_network_gate_permutation(left_part_lens, right_part_lens):
    gate = cca.ShiftSwapNetworkGate(left_part_lens, right_part_lens)
    n_qubits = gate.qubit_count()
    cca.testing.assert_permutation_decomposition_equivalence(gate, n_qubits)
コード例 #5
0
def test_shift_swap_network_gate_repr(left_part_lens, right_part_lens):
    gate = cca.ShiftSwapNetworkGate(left_part_lens, right_part_lens)
    cirq.testing.assert_equivalent_repr(gate)

    gate = cca.ShiftSwapNetworkGate(left_part_lens, right_part_lens, cirq.ZZ)
    cirq.testing.assert_equivalent_repr(gate)