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