Exemplo n.º 1
0
def test_to_text_diagram_teleportation_to_diagram():
    ali = cirq.NamedQubit('(0, 0)')
    bob = cirq.NamedQubit('(0, 1)')
    msg = cirq.NamedQubit('(1, 0)')
    tmp = cirq.NamedQubit('(1, 1)')

    c = Circuit([
        Moment([cirq.H(ali)]),
        Moment([cirq.CNOT(ali, bob)]),
        Moment([cirq.X(msg)**0.5]),
        Moment([cirq.CNOT(msg, ali)]),
        Moment([cirq.H(msg)]),
        Moment([cirq.measure(msg), cirq.measure(ali)]),
        Moment([cirq.CNOT(ali, bob)]),
        Moment([cirq.CNOT(msg, tmp)]),
        Moment([cirq.CZ(bob, tmp)]),
    ])

    assert c.to_text_diagram().strip() == """
(0, 0): ───H───@───────────X───────M───@───────────
               │           │           │
(0, 1): ───────X───────────┼───────────X───────@───
                           │                   │
(1, 0): ───────────X^0.5───@───H───M───────@───┼───
                                           │   │
(1, 1): ───────────────────────────────────X───@───
    """.strip()
    assert c.to_text_diagram(use_unicode_characters=False).strip() == """
(0, 0): ---H---@-----------X-------M---@-----------
               |           |           |
(0, 1): -------X-----------|-----------X-------@---
                           |                   |
(1, 0): -----------X^0.5---@---H---M-------@---|---
                                           |   |
(1, 1): -----------------------------------X---@---
        """.strip()

    assert c.to_text_diagram(transpose=True,
                             use_unicode_characters=False).strip() == """
(0, 0) (0, 1) (1, 0) (1, 1)
|      |      |      |
H      |      |      |
|      |      |      |
@------X      |      |
|      |      |      |
|      |      X^0.5  |
|      |      |      |
X-------------@      |
|      |      |      |
|      |      H      |
|      |      |      |
M      |      M      |
|      |      |      |
@------X      |      |
|      |      |      |
|      |      @------X
|      |      |      |
|      @-------------@
|      |      |      |
        """.strip()
Exemplo n.º 2
0
def test_to_text_diagram_many_qubits_gate_but_multiple_wire_symbols():
    class BadGate(cirq.TextDiagrammableGate):
        def text_diagram_wire_symbols(self,
                                      qubit_count=None,
                                      use_unicode_characters=True,
                                      precision=3):
            return 'a', 'a'

    q1 = cirq.NamedQubit('(0, 0)')
    q2 = cirq.NamedQubit('(0, 1)')
    q3 = cirq.NamedQubit('(0, 2)')
    c = Circuit([Moment([BadGate().on(q1, q2, q3)])])
    with pytest.raises(ValueError, match='BadGate'):
        c.to_text_diagram()
Exemplo n.º 3
0
def test_diagram_custom_precision():
    qa = cirq.NamedQubit('a')
    c = Circuit([Moment([cirq.X(qa)**0.12341234])])
    diagram = c.to_text_diagram(use_unicode_characters=False, precision=5)
    assert diagram.strip() == """
a: ---X^0.12341---
    """.strip()
Exemplo n.º 4
0
def test_diagram_wgate_none_precision():
    qa = cirq.NamedQubit('a')
    test_wgate = ExpWGate(half_turns=0.12341234, axis_half_turns=0.43214321)
    c = Circuit([Moment([test_wgate.on(qa)])])
    diagram = c.to_text_diagram(use_unicode_characters=False, precision=None)
    assert diagram.strip() == """
a: ---W(0.43214321)^0.12341234---
    """.strip()
Exemplo n.º 5
0
def test_none_precision_diagram():
    # Test default precision of 3
    qa = cirq.NamedQubit('a')
    c = Circuit([Moment([cirq.X(qa)**0.4921875])])
    diagram = c.to_text_diagram(use_unicode_characters=False, precision=None)
    assert diagram.strip() == """
a: ---X^0.4921875---
    """.strip()
Exemplo n.º 6
0
def test_overly_precise_diagram():
    # Test default precision of 3
    qa = cirq.NamedQubit('a')
    c = Circuit([Moment([cirq.X(qa)**0.12345678])])
    diagram = c.to_text_diagram(use_unicode_characters=False)
    assert diagram.strip() == """
a: ---X^0.123---
    """.strip()
Exemplo n.º 7
0
def test_to_text_diagram_extended_gate():
    q = cirq.NamedQubit('(0, 0)')
    q2 = cirq.NamedQubit('(0, 1)')
    q3 = cirq.NamedQubit('(0, 2)')

    class FGate(cirq.Gate):
        def __repr__(self):
            return 'python-object-FGate:arbitrary-digits'

    f = FGate()
    c = Circuit([
        Moment([f.on(q)]),
    ])

    # Fallback to repr without extension.
    diagram = Circuit([
        Moment([f.on(q)]),
    ]).to_text_diagram(use_unicode_characters=False)
    assert diagram.strip() == """
(0, 0): ---python-object-FGate:arbitrary-digits---
        """.strip()

    # When used on multiple qubits, show the qubit order as a digit suffix.
    diagram = Circuit([
        Moment([f.on(q, q3, q2)]),
    ]).to_text_diagram(use_unicode_characters=False)
    assert diagram.strip() == """
(0, 0): ---python-object-FGate:arbitrary-digits:0---
           |
(0, 1): ---python-object-FGate:arbitrary-digits:2---
           |
(0, 2): ---python-object-FGate:arbitrary-digits:1---
            """.strip()

    # Succeeds with extension.
    class FGateAsText(cirq.TextDiagrammableGate):
        def __init__(self, f_gate):
            self.f_gate = f_gate

        def text_diagram_wire_symbols(self,
                                      qubit_count=None,
                                      use_unicode_characters=True,
                                      precision=3):
            return 'F'

    diagram = c.to_text_diagram(Extensions(
        {cirq.TextDiagrammableGate: {
            FGate: FGateAsText
        }}),
                                use_unicode_characters=False)

    assert diagram.strip() == """
(0, 0): ---F---
        """.strip()
Exemplo n.º 8
0
def test_to_text_diagram_custom_order():
    qa = cirq.NamedQubit('2')
    qb = cirq.NamedQubit('3')
    qc = cirq.NamedQubit('4')

    c = Circuit([Moment([cirq.X(qa), cirq.X(qb), cirq.X(qc)])])
    diagram = c.to_text_diagram(
        qubit_order=cirq.QubitOrder.sorted_by(lambda e: int(str(e)) % 3),
        use_unicode_characters=False)
    assert diagram.strip() == """
3: ---X---

4: ---X---

2: ---X---
    """.strip()