コード例 #1
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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
コード例 #2
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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)
コード例 #3
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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])
コード例 #4
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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)
コード例 #5
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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)
コード例 #6
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
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()
コード例 #7
0
ファイル: line.py プロジェクト: MichaelBroughton/Cirq
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)
コード例 #8
0
ファイル: greedy_test.py プロジェクト: towynlin/Cirq
def test_greedy_search_method_returns_empty_when_empty():
    device = _create_device([])
    length = 0
    method = greedy.GreedySequenceSearchStrategy()
    assert method.place_line(device, length) == GridQubitLineTuple()