def test_circuit_diagram_info_args_eq(): eq = cirq.testing.EqualsTester() eq.add_equality_group(cirq.CircuitDiagramInfoArgs.UNINFORMED_DEFAULT) eq.add_equality_group(cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=False, precision=None, qubit_map=None)) eq.add_equality_group(cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=True, precision=None, qubit_map=None)) eq.add_equality_group(cirq.CircuitDiagramInfoArgs( known_qubits=cirq.LineQubit.range(3), known_qubit_count=3, use_unicode_characters=False, precision=None, qubit_map=None)) eq.add_equality_group(cirq.CircuitDiagramInfoArgs( known_qubits=cirq.LineQubit.range(2), known_qubit_count=2, use_unicode_characters=False, precision=None, qubit_map=None)) eq.add_equality_group(cirq.CircuitDiagramInfoArgs( known_qubits=cirq.LineQubit.range(2), known_qubit_count=2, use_unicode_characters=False, precision=None, qubit_map={cirq.LineQubit(0): 5, cirq.LineQubit(1): 7}))
def test_get_qcircuit_diagram_info(): qubits = cirq.NamedQubit('x'), cirq.NamedQubit('y') gate = cirq.SwapPowGate(exponent=0.5) op = gate(*qubits) qubit_map = {q: i for i, q in enumerate(qubits)} args = cirq.CircuitDiagramInfoArgs( known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, label_map=qubit_map, ) actual_info = ccq.get_qcircuit_diagram_info(op, args) name = r'{\text{SWAP}^{0.5}}' expected_info = cirq.CircuitDiagramInfo( (r'\multigate{1}' + name, r'\ghost' + name), exponent=1, connected=False) assert actual_info == expected_info gate = cirq.SWAP op = gate(*qubits) qubit_map = {q: i for q, i in zip(qubits, (4, 3))} args = cirq.CircuitDiagramInfoArgs( known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, label_map=qubit_map, ) actual_info = ccq.get_qcircuit_diagram_info(op, args) expected_info = cirq.CircuitDiagramInfo( (r'\ghost{\text{SWAP}}', r'\multigate{1}{\text{SWAP}}'), connected=False) assert actual_info == expected_info qubit_map = {q: i for q, i in zip(qubits, (2, 5))} args = cirq.CircuitDiagramInfoArgs( known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, label_map=qubit_map, ) actual_info = ccq.get_qcircuit_diagram_info(op, args) expected_info = cirq.CircuitDiagramInfo((r'\gate{\text{Swap}}', ) * 2) assert actual_info == expected_info actual_info = ccq.get_qcircuit_diagram_info( op, cirq.CircuitDiagramInfoArgs.UNINFORMED_DEFAULT) assert actual_info == expected_info
def test_circuit_diagram(): class TaggyTag: """Tag with a custom repr function to test circuit diagrams.""" def __repr__(self): return 'TaggyTag()' h = cirq.H(cirq.GridQubit(1, 1)) tagged_h = h.with_tags('tag1') non_string_tag_h = h.with_tags(TaggyTag()) expected = cirq.CircuitDiagramInfo( wire_symbols=("H['tag1']",), exponent=1.0, connected=True, exponent_qubit_index=None, auto_exponent_parens=True, ) args = cirq.CircuitDiagramInfoArgs(None, None, None, None, None, False) assert cirq.circuit_diagram_info(tagged_h) == expected assert cirq.circuit_diagram_info(tagged_h, args) == cirq.circuit_diagram_info(h) c = cirq.Circuit(tagged_h) diagram_with_tags = "(1, 1): ───H['tag1']───" diagram_without_tags = "(1, 1): ───H───" assert str(cirq.Circuit(tagged_h)) == diagram_with_tags assert c.to_text_diagram() == diagram_with_tags assert c.to_text_diagram(include_tags=False) == diagram_without_tags c = cirq.Circuit(non_string_tag_h) diagram_with_non_string_tag = "(1, 1): ───H[TaggyTag()]───" assert c.to_text_diagram() == diagram_with_non_string_tag assert c.to_text_diagram(include_tags=False) == diagram_without_tags
def test_bad_args(): gate = cca.BipartiteSwapNetworkGate(cca.BipartiteGraphType.COMPLETE, 2) qubits = cirq.LineQubit.range(4) gate.subgraph = 'not a subgraph' args = cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=None, ) with pytest.raises(NotImplementedError): gate._circuit_diagram_info_(args) args.known_qubit_count = 3 with pytest.raises(ValueError): gate._circuit_diagram_info_(args) with pytest.raises(ValueError): gate._decompose_(qubits[:3]) gate.subgraph = 'unimplemented subgraph' with pytest.raises(NotImplementedError): gate._decompose_(qubits) args.known_qubit_count = None with pytest.raises(NotImplementedError): gate._circuit_diagram_info_(args)
def test_format_radians_with_precision(): args = cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=False, precision=3, label_map=None, ) assert args.format_radians(np.pi) == 'pi' assert args.format_radians(-np.pi) == '-pi' assert args.format_radians(np.pi / 2) == '0.5pi' assert args.format_radians(-3 * np.pi / 4) == '-0.75pi' assert args.format_radians(1.1) == '0.35pi' assert args.format_radians(1.234567) == '0.393pi' assert args.format_radians(sympy.Symbol('t')) == 't' assert args.format_radians(sympy.Symbol('t') * 2 + 1) == '2*t + 1' args.use_unicode_characters = True assert args.format_radians(np.pi) == 'π' assert args.format_radians(-np.pi) == '-π' assert args.format_radians(np.pi / 2) == '0.5π' assert args.format_radians(-3 * np.pi / 4) == '-0.75π' assert args.format_radians(1.1) == '0.35π' assert args.format_radians(1.234567) == '0.393π' assert args.format_radians(sympy.Symbol('t')) == 't' assert args.format_radians(sympy.Symbol('t') * 2 + 1) == '2*t + 1'
def test_text_to_qcircuit_diagrammable(): qubits = cirq.NamedQubit('x'), cirq.NamedQubit('y') g = cirq.SwapPowGate(exponent=0.5) f = _TextToQCircuitDiagrammable(g) qubit_map = {q: i for i, q in enumerate(qubits)} actual_info = f.qcircuit_diagram_info( cirq.CircuitDiagramInfoArgs(known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=qubit_map)) name = '{\\text{SWAP}^{0.5}}' expected_info = cirq.CircuitDiagramInfo( ('\multigate{1}' + name, '\ghost' + name), exponent=0.5, connected=False) assert actual_info == expected_info g = cirq.SWAP f = _TextToQCircuitDiagrammable(g) qubit_map = {q: i for q, i in zip(qubits, (4, 3))} actual_info = f.qcircuit_diagram_info( cirq.CircuitDiagramInfoArgs(known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=qubit_map)) expected_info = cirq.CircuitDiagramInfo( ('\ghost{\\text{SWAP}}', '\multigate{1}{\\text{SWAP}}'), connected=False) assert actual_info == expected_info qubit_map = {q: i for q, i in zip(qubits, (2, 5))} actual_info = f.qcircuit_diagram_info( cirq.CircuitDiagramInfoArgs(known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=qubit_map)) expected_info = cirq.CircuitDiagramInfo(('\\gate{\\text{×}}', ) * 2) assert actual_info == expected_info actual_info = f.qcircuit_diagram_info( cirq.CircuitDiagramInfoArgs.UNINFORMED_DEFAULT) assert actual_info == expected_info
def test_circuit_diagram_info_args_repr(): cirq.testing.assert_equivalent_repr( cirq.CircuitDiagramInfoArgs( known_qubits=cirq.LineQubit.range(2), known_qubit_count=2, use_unicode_characters=True, precision=5, qubit_map={cirq.LineQubit(0): 5, cirq.LineQubit(1): 7}))
def test_measurement_gate_diagram(): # Shows key. assert cirq.circuit_diagram_info(cirq.MeasurementGate(1)) == cirq.CircuitDiagramInfo(("M('')",)) assert cirq.circuit_diagram_info( cirq.MeasurementGate(1, key='test') ) == cirq.CircuitDiagramInfo(("M('test')",)) # Uses known qubit count. assert ( cirq.circuit_diagram_info( cirq.MeasurementGate(3), cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=3, use_unicode_characters=True, precision=None, qubit_map=None, ), ) == cirq.CircuitDiagramInfo(("M('')", 'M', 'M')) ) # Shows invert mask. assert cirq.circuit_diagram_info( cirq.MeasurementGate(2, invert_mask=(False, True)) ) == cirq.CircuitDiagramInfo(("M('')", "!M")) # Omits key when it is the default. a = cirq.NamedQubit('a') b = cirq.NamedQubit('b') cirq.testing.assert_has_diagram( cirq.Circuit(cirq.measure(a, b)), """ a: ───M─── │ b: ───M─── """, ) cirq.testing.assert_has_diagram( cirq.Circuit(cirq.measure(a, b, invert_mask=(True,))), """ a: ───!M─── │ b: ───M──── """, ) cirq.testing.assert_has_diagram( cirq.Circuit(cirq.measure(a, b, key='test')), """ a: ───M('test')─── │ b: ───M─────────── """, )
def test_circuit_diagram(): h = cirq.H(cirq.GridQubit(1, 1)) tagged_h = h.with_tags('tag1') expected = cirq.CircuitDiagramInfo(wire_symbols=("H['tag1']", ), exponent=1.0, connected=True, exponent_qubit_index=None, auto_exponent_parens=True) args = cirq.CircuitDiagramInfoArgs(None, None, None, None, None, False) assert cirq.circuit_diagram_info(tagged_h) == expected assert (cirq.circuit_diagram_info(tagged_h, args) == cirq.circuit_diagram_info(h)) c = cirq.Circuit(tagged_h) diagram_with_tags = "(1, 1): ───H['tag1']───" diagram_without_tags = "(1, 1): ───H───" assert str(cirq.Circuit(tagged_h)) == diagram_with_tags assert c.to_text_diagram() == diagram_with_tags assert c.to_text_diagram(include_tags=False) == diagram_without_tags
def test_format_radians_without_precision(): args = cirq.CircuitDiagramInfoArgs(known_qubits=None, known_qubit_count=None, use_unicode_characters=False, precision=None, qubit_map=None) assert args.format_radians(np.pi) == 'pi' assert args.format_radians(-np.pi) == '-pi' assert args.format_radians(1.1) == '1.1' assert args.format_radians(1.234567) == '1.234567' assert args.format_radians(1 / 7) == repr(1 / 7) assert args.format_radians(sympy.Symbol('t')) == 't' assert args.format_radians(sympy.Symbol('t') * 2 + 1) == '2*t + 1' args.use_unicode_characters = True assert args.format_radians(np.pi) == 'π' assert args.format_radians(-np.pi) == '-π' assert args.format_radians(1.1) == '1.1' assert args.format_radians(1.234567) == '1.234567' assert args.format_radians(1 / 7) == repr(1 / 7) assert args.format_radians(sympy.Symbol('t')) == 't' assert args.format_radians(sympy.Symbol('t') * 2 + 1) == '2*t + 1'
import re import numpy as np import pytest import cirq X = np.array([[0, 1], [1, 0]]) Y = np.array([[0, -1j], [1j, 0]]) Z = np.array([[1, 0], [0, -1]]) no_precision = cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=True, precision=None, qubit_map=None, ) round_to_6_prec = cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None, use_unicode_characters=True, precision=6, qubit_map=None, ) round_to_2_prec = cirq.CircuitDiagramInfoArgs( known_qubits=None, known_qubit_count=None,