def test_text_diagram_info(): assert CY.text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( wire_symbols=('@', 'Y'), exponent=1) assert cirq.ControlledGate(cirq.Y**0.5).text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( wire_symbols=('@', 'Y'), exponent=0.5) assert cirq.ControlledGate(cirq.S).text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( wire_symbols=('@', 'S'), exponent=1)
def text_diagram_info( self, args: cirq.TextDiagramInfoArgs) -> cirq.TextDiagramInfo: if args.use_unicode_characters: wire_symbols = ('×ᶠ', '×ᶠ') else: wire_symbols = ('fswap', 'fswap') return cirq.TextDiagramInfo(wire_symbols=wire_symbols)
def text_diagram_info(self, args: cirq.TextDiagramInfoArgs ) -> cirq.TextDiagramInfo: if args.known_qubit_count is None: raise ValueError('args.known_qubit_count is None') wire_symbols = ('Diag',) * args.known_qubit_count return cirq.TextDiagramInfo( wire_symbols=wire_symbols)
def test_TextToQCircuitDiagrammable(): qubits = cirq.NamedQubit('x'), cirq.NamedQubit('y') g = cirq.SwapGate(half_turns=0.5) f = _TextToQCircuitDiagrammable(g) qubit_map = {q: i for i, q in enumerate(qubits)} actual_info = f.qcircuit_diagram_info( cirq.TextDiagramInfoArgs(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.TextDiagramInfo( ('\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.TextDiagramInfoArgs(known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=qubit_map)) expected_info = cirq.TextDiagramInfo( ('\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.TextDiagramInfoArgs(known_qubits=qubits, known_qubit_count=None, use_unicode_characters=True, precision=3, qubit_map=qubit_map)) expected_info = cirq.TextDiagramInfo(('\\gate{\\text{×}}',) * 2) assert actual_info == expected_info actual_info = f.qcircuit_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) assert actual_info == expected_info
def text_diagram_info( self, args: cirq.TextDiagramInfoArgs) -> cirq.TextDiagramInfo: if args.use_unicode_characters: wire_symbols = ('⇊⇈', ) * 4 else: wire_symbols = ('a*a*aa', ) * 4 return cirq.TextDiagramInfo(wire_symbols=wire_symbols, exponent=self.half_turns)
def text_diagram_info( self, args: cirq.TextDiagramInfoArgs) -> cirq.TextDiagramInfo: if args.use_unicode_characters: wire_symbols = ('⇅', '⇅', '⇵', '⇵') else: wire_symbols = ('/\\ \/', '/\\ \/', '\/ /\\', '\/ /\\') return cirq.TextDiagramInfo(wire_symbols=wire_symbols, exponent=self.half_turns)
def test_measurement_gate_diagram(): # Shows key. assert cirq.MeasurementGate().text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( ("M('')",)) assert cirq.MeasurementGate(key='test').text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( ("M('test')",)) # Uses known qubit count. assert cirq.MeasurementGate().text_diagram_info( cirq.TextDiagramInfoArgs( known_qubits=None, known_qubit_count=3, use_unicode_characters=True, precision=None, qubit_map=None )) == cirq.TextDiagramInfo(("M('')", 'M', 'M')) # Shows invert mask. assert cirq.MeasurementGate(invert_mask=(False, True)).text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( ("M('')", "!M")) # Omits key when it is the default. a = cirq.NamedQubit('a') b = cirq.NamedQubit('b') cirq.testing.assert_has_diagram( cirq.Circuit.from_ops(cirq.measure(a, b)), """ a: ───M─── │ b: ───M─── """) cirq.testing.assert_has_diagram( cirq.Circuit.from_ops(cirq.measure(a, b, invert_mask=(True,))), """ a: ───!M─── │ b: ───M──── """) cirq.testing.assert_has_diagram( cirq.Circuit.from_ops(cirq.measure(a, b, key='test')), """ a: ───M('test')─── │ b: ───M─────────── """)
def test_FallbackQCircuitSymbolsGate(): class TestGate(cirq.Gate): def __str__(self): return 'T' g = TestGate() f = _FallbackQCircuitGate(g) actual_info = f.qcircuit_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) expected_info = cirq.TextDiagramInfo(('\\text{T:0}',)) assert actual_info == expected_info actual_info = f.qcircuit_diagram_info(cirq.TextDiagramInfoArgs( known_qubits=None, known_qubit_count=2, use_unicode_characters=True, precision=None, qubit_map=None)) expected_info = cirq.TextDiagramInfo(('\\text{T:0}', '\\text{T:1}')) assert actual_info == expected_info
def test_text_diagrammable_via_extension(): ext = cirq.Extensions() ext.add_cast(cirq.TextDiagrammable, RestrictedGate, lambda _: cirq.Y**0.5) without_ext = cirq.ControlledGate(RestrictedGate()) with_ext = cirq.ControlledGate(RestrictedGate(), ext) args = cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT with pytest.raises(TypeError): _ = without_ext.text_diagram_info(args) assert with_ext.text_diagram_info(args) == cirq.TextDiagramInfo( wire_symbols=('@', 'Y'), exponent=0.5)
def test_text_diagram_info_eq(): eq = cirq.testing.EqualsTester() eq.make_equality_group(lambda: cirq.TextDiagramInfo(('X', ))) eq.add_equality_group(cirq.TextDiagramInfo(('X', 'Y')), cirq.TextDiagramInfo(('X', 'Y'), 1)) eq.add_equality_group(cirq.TextDiagramInfo(('Z', ), 2)) eq.add_equality_group(cirq.TextDiagramInfo(('Z', 'Z'), 2)) eq.add_equality_group(cirq.TextDiagramInfo(('Z', ), 3))
def test_text_diagram_info(gate, sym, exp): assert gate.text_diagram_info( cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo( wire_symbols=(sym, ), exponent=exp)
def test_text_diagram_info_repr(): info = cirq.TextDiagramInfo(('X', 'Y'), 2) assert repr(info) == ("cirq.TextDiagramInfo(wire_symbols=('X', 'Y')" ", exponent=2, connected=True)")
def text_diagram_info( self, args: cirq.TextDiagramInfoArgs) -> cirq.TextDiagramInfo: return cirq.TextDiagramInfo(wire_symbols=('@', '@', '@'), exponent=self.half_turns)
def text_diagram_info(self, args: cirq.TextDiagramInfoArgs ) -> cirq.TextDiagramInfo: return cirq.TextDiagramInfo( wire_symbols=self._wire_symbols)