예제 #1
0
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)
예제 #2
0
 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)
예제 #3
0
 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)
예제 #4
0
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)
예제 #7
0
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───────────
""")
예제 #8
0
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
예제 #9
0
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)
예제 #10
0
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))
예제 #11
0
def test_text_diagram_info(gate, sym, exp):
    assert gate.text_diagram_info(
        cirq.TextDiagramInfoArgs.UNINFORMED_DEFAULT) == cirq.TextDiagramInfo(
            wire_symbols=(sym, ), exponent=exp)
예제 #12
0
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)
예제 #14
0
 def text_diagram_info(self, args: cirq.TextDiagramInfoArgs
                       ) -> cirq.TextDiagramInfo:
     return cirq.TextDiagramInfo(
             wire_symbols=self._wire_symbols)