Source code for qiskit_addon_cutting.utils.transpiler_passes
# This code is a Qiskit project.# (C) Copyright IBM 2023.# This code is licensed under the Apache License, Version 2.0. You may# obtain a copy of this license in the LICENSE.txt file in the root directory# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.# Any modifications or derivative works of this code must retain this# copyright notice, and modified files need to carry a notice indicating# that they have been altered from the originals.# Reminder: update the RST file in docs/apidocs when adding new interfaces."""Transpiler passes useful for circuit knitting."""fromqiskit.circuitimportReset,Qubitfromqiskit.dagcircuitimportDAGOpNodefromqiskit.transpiler.basepassesimportTransformationPass
[docs]classRemoveFinalReset(TransformationPass):"""Remove reset when it is the final instruction on a qubit wire."""
[docs]defrun(self,dag):"""Run the RemoveFinalReset pass on ``dag``. Args: dag (DAGCircuit): the DAG to be optimized. Returns: DAGCircuit: the optimized DAG. """foroutput_nodeindag.output_map.values():ifisinstance(output_node.wire,Qubit):pred=next(dag.predecessors(output_node))ifisinstance(pred,DAGOpNode)andisinstance(pred.op,Reset):dag.remove_op_node(pred)returndag
[docs]classConsolidateResets(TransformationPass):"""Consolidate a run duplicate resets in to a single reset."""
[docs]defrun(self,dag):"""Run the ConsolidateResets pass on ``dag``. Args: dag (DAGCircuit): the DAG to be optimized. Returns: DAGCircuit: the optimized DAG. """resets=dag.op_nodes(Reset)forresetinresets:successor=next(dag.successors(reset))ifisinstance(successor,DAGOpNode)andisinstance(successor.op,Reset):dag.remove_op_node(reset)returndag