def test_greedy_search_method_calls_all(): q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) qubits = [q00, q01] length = 2 method = greedy.GreedySequenceSearchStrategy() assert len(method.place_line(_create_device(qubits), length)) == 2
def test_largest_sequence_search_traverses_grid(): q00 = cirq.GridQubit(0, 0) q10 = cirq.GridQubit(1, 0) q11 = cirq.GridQubit(1, 1) q20 = cirq.GridQubit(2, 0) q30 = cirq.GridQubit(3, 0) q40 = cirq.GridQubit(4, 0) q41 = cirq.GridQubit(4, 1) q42 = cirq.GridQubit(4, 2) q50 = cirq.GridQubit(5, 0) qubits = [q00, q10, q11, q20, q30, q40, q50, q41, q42] device = _create_device(qubits) search = greedy._PickLargestArea(device, q20) # + + +-+-+ + # | # + + # | # + assert search._choose_next_qubit(q20, {q20}) == q30 assert search._choose_next_qubit(q30, {q20, q30}) == q40 assert search._choose_next_qubit(q40, {q20, q30, q40}) == q41 assert search._choose_next_qubit(q41, {q20, q30, q40, q41}) == q42 assert search._choose_next_qubit(q42, {q20, q30, q40, q41, q42}) is None method = greedy.GreedySequenceSearchStrategy('largest_area') assert method.place_line(device, 7) == GridQubitLineTuple( [q00, q10, q20, q30, q40, q41, q42]) with pytest.raises(NotFoundError): _ = method.place_line(device, 8)
def test_greedy_search_method_returns_longest(): q00 = cirq.GridQubit(0, 0) q10 = cirq.GridQubit(1, 0) device = _create_device([q00, q10]) length = 1 method = greedy.GreedySequenceSearchStrategy() assert method.place_line(device, length) == GridQubitLineTuple([q00])
def test_greedy_search_method_fails_when_unknown(): q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) qubits = [q00, q01] length = 2 method = greedy.GreedySequenceSearchStrategy('fail') with pytest.raises(ValueError): method.place_line(_create_device(qubits), length)
def test_minimal_sequence_search_traverses_grid(): q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) q11 = cirq.GridQubit(1, 1) q02 = cirq.GridQubit(0, 2) q03 = cirq.GridQubit(0, 3) q04 = cirq.GridQubit(0, 4) q14 = cirq.GridQubit(1, 4) q24 = cirq.GridQubit(2, 4) q05 = cirq.GridQubit(0, 5) qubits = [q00, q01, q11, q02, q03, q04, q05, q14, q24] device = _create_device(qubits) search = greedy._PickFewestNeighbors(device, q02) # (0,0)╌╌(0,1)╌╌START══(0,3)══(0,4)╌╌(0,5) # ╎ ║ # (1,1) (1,4) # ║ # (2,4) assert search._choose_next_qubit(q02, {q02}) == q03 assert search._choose_next_qubit(q03, {q02, q03}) == q04 assert search._choose_next_qubit(q04, {q02, q03, q04}) == q14 assert search._choose_next_qubit(q14, {q02, q03, q04, q14}) == q24 assert search._choose_next_qubit(q24, {q02, q03, q04, q14, q24}) is None # (0,0)╌╌(0,1)══(0,2)══(0,3)══(0,4)╌╌(0,5) # ║ ║ # (1,1) (1,4) # ║ # START assert search._choose_next_qubit(q24, {q24}) == q14 assert search._choose_next_qubit(q14, {q24, q14}) == q04 assert search._choose_next_qubit(q04, {q24, q14, q04}) == q03 assert search._choose_next_qubit(q03, {q24, q14, q04, q03}) == q02 assert search._choose_next_qubit(q02, {q24, q14, q04, q03, q02}) == q01 assert search._choose_next_qubit( q01, {q24, q14, q04, q03, q02, q01}) in [q00, q11] assert search._choose_next_qubit( q00, {q24, q14, q04, q03, q02, q01, q00}) is None assert search._choose_next_qubit( q11, {q24, q14, q04, q03, q02, q01, q11}) is None # START══(0,1)══(0,2)══(0,3)══(0,4)╌╌(0,5) # ║ # (1,4) # ║ # (2,4) qubits = [q00, q01, q02, q03, q04, q05, q14, q24] device = _create_device(qubits) method = greedy.GreedySequenceSearchStrategy('minimal_connectivity') assert method.place_line(device, 4) == (q00, q01, q02, q03) assert method.place_line(device, 7) == (q00, q01, q02, q03, q04, q14, q24) with pytest.raises(NotFoundError): _ = method.place_line(device, 8)
def test_greedy_search_method_calls_minimal_only(minimal, largest): q00 = cirq.GridQubit(0, 0) q01 = cirq.GridQubit(0, 1) device = _create_device([q00, q01]) length = 2 sequence = [q00, q01] minimal.return_value.get_or_search.return_value = sequence method = greedy.GreedySequenceSearchStrategy('minimal_connectivity') assert method.place_line(device, length) == GridQubitLineTuple(sequence) largest.return_value.get_or_search.assert_not_called() minimal.return_value.get_or_search.assert_called_once_with()
def line_on_device( device: 'cirq_google.GridDevice', length: int, method: LinePlacementStrategy = greedy.GreedySequenceSearchStrategy(), ) -> GridQubitLineTuple: """Searches for linear sequence of qubits on device. Args: device: Google Xmon device instance. length: Desired number of qubits making up the line. method: Line placement method. Defaults to cirq.greedy.GreedySequenceSearchMethod. Returns: Line sequences search results. """ return method.place_line(device, length)
def test_greedy_search_method_returns_empty_when_empty(): device = _create_device([]) length = 0 method = greedy.GreedySequenceSearchStrategy() assert method.place_line(device, length) == GridQubitLineTuple()