Ejemplo n.º 1
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     if not args.use_unicode_characters:
         return gate_features.TextDiagramInfo(wire_symbols=('swap', 'swap'),
                                              exponent=self._exponent)
     return gate_features.TextDiagramInfo(wire_symbols=('×', '×'),
                                          exponent=self._exponent)
Ejemplo n.º 2
0
    def text_diagram_info(
        self, args: gate_features.TextDiagramInfoArgs
    ) -> gate_features.TextDiagramInfo:
        if self.half_turns in [-0.25, 0.25]:
            return gate_features.TextDiagramInfo(
                wire_symbols=('T', ), exponent=cast(float, self._exponent) * 4)

        if self.half_turns in [-0.5, 0.5]:
            return gate_features.TextDiagramInfo(
                wire_symbols=('S', ), exponent=cast(float, self._exponent) * 2)

        return gate_features.TextDiagramInfo(wire_symbols=('Z', ),
                                             exponent=self._exponent)
Ejemplo n.º 3
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     well_known_map = {
         CliffordGate.I: 'I',
         CliffordGate.H: 'H',
         CliffordGate.X: 'X',
         CliffordGate.Y: 'Y',
         CliffordGate.Z: 'Z',
         CliffordGate.X_sqrt: 'X',
         CliffordGate.Y_sqrt: 'Y',
         CliffordGate.Z_sqrt: 'Z',
         CliffordGate.X_nsqrt: 'X',
         CliffordGate.Y_nsqrt: 'Y',
         CliffordGate.Z_nsqrt: 'Z',
     }
     if self in well_known_map:
         symbol = well_known_map[self]
     else:
         rotations = self.decompose_rotation()
         symbol = '-'.join(
             str(r) + ('^' + str(qt / 2)) * (qt % 4 != 2)
             for r, qt in rotations)
         symbol = '({})'.format(symbol)
     return gate_features.TextDiagramInfo(wire_symbols=(symbol, ),
                                          exponent={
                                              CliffordGate.X_sqrt: 0.5,
                                              CliffordGate.Y_sqrt: 0.5,
                                              CliffordGate.Z_sqrt: 0.5,
                                              CliffordGate.X_nsqrt: -0.5,
                                              CliffordGate.Y_nsqrt: -0.5,
                                              CliffordGate.Z_nsqrt: -0.5,
                                          }.get(self, 1))
Ejemplo n.º 4
0
 def text_diagram_info(self, args: gate_features.TextDiagramInfoArgs
                       ) -> gate_features.TextDiagramInfo:
     cast_sub_gate = self._cast_sub_gate(gate_features.TextDiagrammable)
     sub_info = cast_sub_gate.text_diagram_info(args)
     return gate_features.TextDiagramInfo(
         wire_symbols=('@',) + sub_info.wire_symbols,
         exponent=sub_info.exponent)
Ejemplo n.º 5
0
 def text_diagram_info(self, args: gate_features.TextDiagramInfoArgs):
     if args.known_qubit_count is None:
         return NotImplemented
     direction_symbols = (('╲', '╱') if args.use_unicode_characters else
                          ('\\', '/'))
     wire_symbols = tuple(direction_symbols[int(i >= self.shift)] + str(i) +
                          direction_symbols[int(i < self.shift)]
                          for i in range(args.known_qubit_count))
     return gate_features.TextDiagramInfo(wire_symbols=wire_symbols)
Ejemplo n.º 6
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     labels = {Pauli.X: 'X', Pauli.Y: 'Y', Pauli.Z: '@'}
     l0 = labels[self.pauli0]
     l1 = labels[self.pauli1]
     # Add brackets around letter if inverted
     l0, l1 = ('(-{})'.format(l) if inv else l
               for l, inv in ((l0, self.invert0), (l1, self.invert1)))
     return gate_features.TextDiagramInfo(wire_symbols=(l0, l1),
                                          exponent=self._exponent)
Ejemplo n.º 7
0
    def text_diagram_info(
        self, args: gate_features.TextDiagramInfoArgs
    ) -> gate_features.TextDiagramInfo:
        n = (max(1, len(self.invert_mask))
             if args.known_qubit_count is None else args.known_qubit_count)
        symbols = ['M'] * n

        # Show which output bits are negated.
        if self.invert_mask:
            for i, b in enumerate(self.invert_mask):
                if b:
                    symbols[i] = '!M'

        # Mention the measurement key.
        if (not args.known_qubits
                or self.key != _default_measurement_key(args.known_qubits)):
            symbols[0] += "('{}')".format(self.key)

        return gate_features.TextDiagramInfo(tuple(symbols))
Ejemplo n.º 8
0
 def text_diagram_info(self, args: gate_features.TextDiagramInfoArgs
                       ) -> gate_features.TextDiagramInfo:
     if not args.use_unicode_characters:
         return gate_features.TextDiagramInfo(('@', 'swap', 'swap'))
     return gate_features.TextDiagramInfo(('@', '×', '×'))
Ejemplo n.º 9
0
 def text_diagram_info(self, args: gate_features.TextDiagramInfoArgs
                       ) -> gate_features.TextDiagramInfo:
     return gate_features.TextDiagramInfo(('@', '@', 'X'),
                                          exponent=self._exponent)
Ejemplo n.º 10
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     return gate_features.TextDiagramInfo(wire_symbols=('iSwap', 'iSwap'),
                                          exponent=self._exponent)
Ejemplo n.º 11
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     return gate_features.TextDiagramInfo(('H', ))
Ejemplo n.º 12
0
 def text_diagram_info(
     self, args: gate_features.TextDiagramInfoArgs
 ) -> gate_features.TextDiagramInfo:
     return gate_features.TextDiagramInfo(
         wire_symbols=(_matrix_to_diagram_symbol(self.matrix(), args), ))