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))
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
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)
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)
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)