Exemplo n.º 1
0
 def optimization_at(self, circuit, index, op):
     converted = self.convert(op)
     if len(converted) == 1 and converted[0] is op:
         return None
     return PointOptimizationSummary(clear_span=1,
                                     new_operations=converted,
                                     clear_qubits=op.qubits)
Exemplo n.º 2
0
    def optimization_at(self, circuit, index, op):
        decomposition = self._decompose(op)
        if decomposition is op:
            return None

        return PointOptimizationSummary(clear_span=1,
                                        clear_qubits=op.qubits,
                                        new_operations=decomposition)
Exemplo n.º 3
0
 def optimization_at(self, circuit, index, op):
     if not (isinstance(op.gate, ops.BoundedEffectGate) and
             op.gate.trace_distance_bound() <= self.tolerance):
         return None
     return PointOptimizationSummary(
         clear_span=1,
         new_operations=(),
         clear_qubits=op.qubits)
Exemplo n.º 4
0
 def optimization_at(
         self, circuit: 'cirq.Circuit', index: int,
         op: 'cirq.Operation') -> Optional['cirq.PointOptimizationSummary']:
     converted = self.convert(op)
     if len(converted) == 1 and converted[0] is op:
         return None
     return PointOptimizationSummary(clear_span=1,
                                     new_operations=converted,
                                     clear_qubits=op.qubits)
Exemplo n.º 5
0
    def optimization_at(self, circuit: Circuit, index: int, op: ops.Operation
                        ) -> Optional[PointOptimizationSummary]:
        converted = self.convert(op)
        if converted is op:
            return None

        return PointOptimizationSummary(
            clear_span=1,
            new_operations=converted,
            clear_qubits=op.qubits)
Exemplo n.º 6
0
    def optimization_at(self, circuit, index, op):
        decomposition = protocols.decompose(op, keep=self.no_decomp,
                                            on_stuck_raise=None)
        if decomposition is op:
            return None

        return PointOptimizationSummary(
            clear_span=1,
            clear_qubits=op.qubits,
            new_operations=decomposition)
Exemplo n.º 7
0
    def optimization_at(
            self, circuit: 'cirq.Circuit', index: int,
            op: 'cirq.Operation') -> Optional['cirq.PointOptimizationSummary']:
        decomposition = protocols.decompose(op,
                                            keep=self.no_decomp,
                                            on_stuck_raise=None)
        if decomposition == [op]:
            return None

        return PointOptimizationSummary(clear_span=1,
                                        clear_qubits=op.qubits,
                                        new_operations=decomposition)
Exemplo n.º 8
0
    def optimization_at(
            self, circuit: Circuit, index: int,
            op: ops.Operation) -> Optional[PointOptimizationSummary]:
        converted = protocols.decompose(
            op,
            intercepting_decomposer=self._decompose_two_qubit_unitaries,
            keep=self._keep,
            on_stuck_raise=(None
                            if self.ignore_failures else self._on_stuck_raise))
        if converted == [op]:
            return None

        return PointOptimizationSummary(clear_span=1,
                                        new_operations=converted,
                                        clear_qubits=op.qubits)
    def optimization_at(
            self, circuit: Circuit, index: int,
            op: ops.Operation) -> Optional[PointOptimizationSummary]:
        if len(op.qubits) != 1:
            return None
        q = op.qubits[0]

        indices, operations = _scan_single_qubit_ops(circuit, index, q)
        if not operations:
            return None

        single_op = _merge_into_matrix_gate_op(q, operations)

        return PointOptimizationSummary(clear_span=max(indices) + 1 - index,
                                        clear_qubits=op.qubits,
                                        new_operations=[single_op])
Exemplo n.º 10
0
    def optimization_at(
            self, circuit: Circuit, index: int,
            op: ops.Operation) -> Optional[PointOptimizationSummary]:
        if len(op.qubits) != 1:
            return None

        indices, gates = self._scan_single_qubit_ops(circuit, index,
                                                     op.qubits[0])
        if not gates:
            return None

        # Replace the gates with a max-2-op XY + Z construction.
        operations = self._merge_rotations(op.qubits[0], gates)

        return PointOptimizationSummary(clear_span=max(indices) + 1 - index,
                                        clear_qubits=op.qubits,
                                        new_operations=operations)