コード例 #1
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_add():
    first_addend = ccgd.UndirectedHypergraph(labelled_edges={('a', 'b'): None})
    second_addend = ccgd.UndirectedHypergraph(
        labelled_edges={('c', 'b'): None})
    graph_sum = first_addend + second_addend
    assert sorted(first_addend.vertices) == list('ab')
    assert sorted(second_addend.vertices) == list('bc')
    assert sorted(graph_sum.vertices) == list('abc')
    assert sorted(first_addend.edges) == [frozenset('ab')]
    assert sorted(second_addend.edges) == [frozenset('bc')]
    assert set(graph_sum.edges) == set(frozenset(e) for e in ('ab', 'bc'))
コード例 #2
0
def test_is_undirected_device_graph():
    assert not ccgd.is_undirected_device_graph('abc')
    graph = ccgd.UndirectedHypergraph()
    assert ccgd.is_undirected_device_graph(graph)
    a, b, c, d, e = cirq.LineQubit.range(5)
    graph.add_edge((a, b))
    assert ccgd.is_undirected_device_graph(graph)
    graph.add_edge((b, c), ccgd.UnconstrainedUndirectedGraphDeviceEdge)
    assert ccgd.is_undirected_device_graph(graph)
    graph.add_edge((d, e), 'abc')
    assert not ccgd.is_undirected_device_graph(graph)
    graph = ccgd.UndirectedHypergraph(vertices=(0, 1))
    assert not ccgd.is_undirected_device_graph(graph)
コード例 #3
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_eq(vertices, edges):
    vertices = set(vertices).union(*edges)
    graph_initialized = ccgd.UndirectedHypergraph(vertices=vertices,
                                                  labelled_edges=edges)
    graph_added_parallel = ccgd.UndirectedHypergraph()
    graph_added_parallel.add_vertices(vertices)
    graph_added_parallel.add_edges(edges)
    graph_added_sequential = ccgd.UndirectedHypergraph()
    for vertex in vertices:
        graph_added_sequential.add_vertex(vertex)
    for edge, label in edges.items():
        graph_added_sequential.add_edge(edge, label)
    assert graph_initialized == graph_added_parallel == graph_added_sequential
コード例 #4
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_hypergraph():
    vertices = range(4)
    graph = ccgd.UndirectedHypergraph(vertices=vertices)
    assert graph.vertices == tuple(vertices)

    edges = [(0, 1), (2, 3)]
    graph = ccgd.UndirectedHypergraph(
        labelled_edges={edge: str(edge)
                        for edge in edges})
    assert graph.vertices == tuple(vertices)
    graph.remove_vertex(0)
    assert graph.vertices == (1, 2, 3)
    assert graph.edges == (frozenset((2, 3)), )
    graph.remove_vertices((1, 3))
    assert graph.vertices == (2, )
    assert graph.edges == ()
コード例 #5
0
def test_qubit_set():
    a, b, c, d = cirq.LineQubit.range(4)
    device_graph = ccgd.UndirectedHypergraph(labelled_edges={
        (a, b): None,
        (c, d): None
    })
    device = ccgd.UndirectedGraphDevice(device_graph=device_graph)
    assert device.qubit_set() == {a, b, c, d}
コード例 #6
0
ファイル: graph_device_test.py プロジェクト: towynlin/Cirq
def test_qubit_set_deprecated():
    a, b, c, d = cirq.LineQubit.range(4)
    device_graph = ccgd.UndirectedHypergraph(labelled_edges={
        (a, b): None,
        (c, d): None
    })
    device = ccgd.UndirectedGraphDevice(device_graph=device_graph)
    with cirq.testing.assert_deprecated('qubit_set', deadline='v0.15'):
        assert device.qubit_set() == {a, b, c, d}
コード例 #7
0
def test_graph_device_copy_and_add():
    a, b, c, d, e, f = cirq.LineQubit.range(6)
    device_graph = ccgd.UndirectedHypergraph(labelled_edges={(a, b): None, (c, d): None})
    crosstalk_graph = ccgd.UndirectedHypergraph(
        labelled_edges={(frozenset((a, b)), frozenset((c, d))): None}
    )
    device = ccgd.UndirectedGraphDevice(device_graph=device_graph, crosstalk_graph=crosstalk_graph)
    device_graph_addend = ccgd.UndirectedHypergraph(labelled_edges={(a, b): None, (e, f): None})
    crosstalk_graph_addend = ccgd.UndirectedHypergraph(
        labelled_edges={(frozenset((a, b)), frozenset((e, f))): None}
    )
    device_addend = ccgd.UndirectedGraphDevice(
        device_graph=device_graph_addend, crosstalk_graph=crosstalk_graph_addend
    )
    device_sum = device + device_addend
    device_copy = device.__copy__()
    device_copy += device_addend
    assert device != device_copy
    assert device_copy == device_sum
コード例 #8
0
ファイル: graph_device_test.py プロジェクト: towynlin/Cirq
def test_qid_pairs_deprecated():
    a, b, c, d = cirq.LineQubit.range(4)
    device_graph = ccgd.UndirectedHypergraph(labelled_edges={
        (a, b): None,
        (c, d): None
    })
    device = ccgd.UndirectedGraphDevice(device_graph=device_graph)
    with cirq.testing.assert_deprecated('device.metadata',
                                        deadline='v0.15',
                                        count=1):
        assert len(device.qid_pairs()) == 2
コード例 #9
0
def test_is_crosstalk_graph():
    a, b, c, d, e, f = cirq.LineQubit.range(6)
    assert not ccgd.is_crosstalk_graph('abc')
    graph = ccgd.UndirectedHypergraph()
    graph.add_vertex('abc')
    assert not ccgd.is_crosstalk_graph(graph)
    graph = ccgd.UndirectedHypergraph()
    graph.add_edge((frozenset((a, b)), frozenset((c, d))), 'abc')
    assert not ccgd.is_crosstalk_graph(graph)
    graph = ccgd.UndirectedHypergraph()
    graph.add_edge((frozenset((a, b)), frozenset((c, d))), None)
    graph.add_edge((frozenset((e, f)), frozenset((c, d))), lambda _: None)
    assert ccgd.is_crosstalk_graph(graph)
    graph = ccgd.UndirectedHypergraph()
    graph.add_edge((frozenset((a, b)), frozenset((c, d))), 'abc')
    assert not ccgd.is_crosstalk_graph(graph)
    graph = ccgd.UndirectedHypergraph()
    graph.add_edge((frozenset((a, b)), ), None)
    assert not ccgd.is_crosstalk_graph(graph)
    graph = ccgd.UndirectedHypergraph()
    graph.add_edge((frozenset((0, 1)), frozenset((2, 3))), None)
    assert not ccgd.is_crosstalk_graph(graph)
コード例 #10
0
def test_graph_device():
    one_qubit_duration = cirq.Duration(picos=10)
    two_qubit_duration = cirq.Duration(picos=1)
    one_qubit_edge = ccgd.FixedDurationUndirectedGraphDeviceEdge(
        one_qubit_duration)
    two_qubit_edge = ccgd.FixedDurationUndirectedGraphDeviceEdge(
        two_qubit_duration)

    empty_device = ccgd.UndirectedGraphDevice()
    assert not empty_device.qubits
    assert not empty_device.edges

    n_qubits = 4
    qubits = cirq.LineQubit.range(n_qubits)
    edges = {(cirq.LineQubit(i), cirq.LineQubit((i + 1) % n_qubits)):
             two_qubit_edge
             for i in range(n_qubits)}
    edges.update({(cirq.LineQubit(i), ): one_qubit_edge
                  for i in range(n_qubits)})
    device_graph = ccgd.UndirectedHypergraph(labelled_edges=edges)

    def not_cnots(first_op, second_op):
        if all(
                isinstance(op, cirq.GateOperation) and op.gate == cirq.CNOT
                for op in (first_op, second_op)):
            raise ValueError('Simultaneous CNOTs')

    assert ccgd.is_undirected_device_graph(device_graph)
    with pytest.raises(TypeError):
        ccgd.UndirectedGraphDevice('abc')
    constraint_edges = {
        (frozenset(cirq.LineQubit.range(2)),
         frozenset(cirq.LineQubit.range(2, 4))):
        None,
        (frozenset(cirq.LineQubit.range(1, 3)),
         frozenset((cirq.LineQubit(0), cirq.LineQubit(3)))):
        not_cnots
    }
    crosstalk_graph = ccgd.UndirectedHypergraph(
        labelled_edges=constraint_edges)
    assert ccgd.is_crosstalk_graph(crosstalk_graph)

    with pytest.raises(TypeError):
        ccgd.UndirectedGraphDevice(device_graph, crosstalk_graph='abc')

    graph_device = ccgd.UndirectedGraphDevice(device_graph)
    assert graph_device.crosstalk_graph == ccgd.UndirectedHypergraph()

    graph_device = ccgd.UndirectedGraphDevice(device_graph,
                                              crosstalk_graph=crosstalk_graph)
    assert sorted(graph_device.edges) == sorted(device_graph.edges)
    assert graph_device.qubits == tuple(qubits)
    assert graph_device.device_graph == device_graph
    assert graph_device.labelled_edges == device_graph.labelled_edges

    assert graph_device.duration_of(cirq.X(qubits[2])) == one_qubit_duration
    assert (graph_device.duration_of(
        cirq.CNOT(*qubits[:2])) == two_qubit_duration)
    with pytest.raises(KeyError):
        graph_device.duration_of(cirq.CNOT(qubits[0], qubits[2]))
    with pytest.raises(ValueError):
        graph_device.validate_operation(cirq.CNOT(qubits[0], qubits[2]))
    with pytest.raises(AttributeError):
        graph_device.validate_operation(list((2, 3)))

    moment = cirq.Moment([cirq.CNOT(*qubits[:2]), cirq.CNOT(*qubits[2:])])
    with pytest.raises(ValueError):
        graph_device.validate_moment(moment)

    moment = cirq.Moment(
        [cirq.CNOT(qubits[0], qubits[3]),
         cirq.CZ(qubits[1], qubits[2])])
    graph_device.validate_moment(moment)

    moment = cirq.Moment(
        [cirq.CNOT(qubits[0], qubits[3]),
         cirq.CNOT(qubits[1], qubits[2])])
    with pytest.raises(ValueError):
        graph_device.validate_moment(moment)
コード例 #11
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_iadd():
    graph = ccgd.UndirectedHypergraph(labelled_edges={(0, 1): None})
    addend = ccgd.UndirectedHypergraph(labelled_edges={(1, 2): None})
    graph += addend
    assert set(graph.edges) == set(frozenset(e) for e in ((0, 1), (1, 2)))
    assert sorted(graph.vertices) == [0, 1, 2]
コード例 #12
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_copy():
    graph_original = ccgd.UndirectedHypergraph(labelled_edges={(0, 1): None})
    graph_copy = graph_original.__copy__()
    assert graph_copy == graph_original
    graph_original.add_edge((1, 2))
    assert graph_copy != graph_original
コード例 #13
0
ファイル: hypergraph_test.py プロジェクト: ybc1991/Cirq
def test_update_edge_label():
    edge = frozenset(range(3))
    graph = ccgd.UndirectedHypergraph(labelled_edges={edge: 'a'})
    assert graph.labelled_edges[edge] == 'a'
    graph.add_edge(edge, 'b')
    assert graph.labelled_edges[edge] == 'b'
コード例 #14
0
ファイル: graph_device_test.py プロジェクト: ybc1991/Cirq
def test_qid_pairs():
    a, b, c, d = cirq.LineQubit.range(4)
    device_graph = ccgd.UndirectedHypergraph(labelled_edges={(a, b): None, (c, d): None})
    device = ccgd.UndirectedGraphDevice(device_graph=device_graph)
    assert len(device.qid_pairs()) == 2