Note
This page was generated from tutorials/circuits_advanced/04_transpiler_passes_and_passmanager.ipynb.
Transpiler Passes and Pass Manager¶
Introduction¶
A central component of Qiskit Terra is the transpiler, which is designed for modularity and extensibility. The goal is to be able to easily write new circuit transformations (known as transpiler passes), and combine them with other existing passes. Which passes are chained together and in which order has a major effect on the final outcome. This pipeline is determined by a pass manager, which schedules the passes and also allows passes to communicate with each other by providing a shared space. In this way, the transpiler opens up the door for research into aggressive optimization of quantum circuits.
In this notebook, we look at the built-in passes, how to use the pass manager, and develop a simple custom transpiler pass. In order to do the latter, we first need to introduce the internal representation of quantum circuits in Qiskit, in the form of a Directed Acyclic Graph, or DAG. Then, we illustrate a simple swap mapper pass, which transforms an input circuit to be compatible with a limited-connectivity quantum device.
Before you start: You may need to install the pydot
library and the graphviz
library for the DAG plotting routines. If you are using Anaconda Python, you can install both with the conda
command. If you use your system’s native Python interpreter, install pydot
using the pip
command, and install graphviz
using your system’s native package manager (e.g. yum
, apt
, dnf
, brew
, etc.).
[1]:
from qiskit import QuantumCircuit
from qiskit.compiler import transpile
from qiskit.transpiler import PassManager
PassManager object¶
Lets you specify the set of passes you want.
[2]:
circ = QuantumCircuit(3)
circ.ccx(0, 1, 2)
circ.draw(output='mpl')
[2]:

[3]:
from qiskit.transpiler.passes import Unroller
pass_ = Unroller(['u1', 'u2', 'u3', 'cx'])
pm = PassManager(pass_)
new_circ = pm.run(circ)
new_circ.draw(output='mpl')
[3]:

All of Qiskit’s transpiler passes are accessible from qiskit.transpiler.passes
.
[4]:
from qiskit.transpiler import passes
[pass_ for pass_ in dir(passes) if pass_[0].isupper()]
[4]:
['ALAPSchedule',
'ASAPSchedule',
'AlignMeasures',
'ApplyLayout',
'BIPMapping',
'BarrierBeforeFinalMeasurements',
'BasicSwap',
'BasisTranslator',
'CSPLayout',
'CXCancellation',
'CXDirection',
'CheckCXDirection',
'CheckGateDirection',
'CheckMap',
'Collect2qBlocks',
'CommutationAnalysis',
'CommutativeCancellation',
'ConsolidateBlocks',
'CountOps',
'CountOpsLongestPath',
'CrosstalkAdaptiveSchedule',
'DAGFixedPoint',
'DAGLongestPath',
'Decompose',
'DenseLayout',
'Depth',
'DynamicalDecoupling',
'EnlargeWithAncilla',
'Error',
'FixedPoint',
'FullAncillaAllocation',
'GateDirection',
'HoareOptimizer',
'Layout2qDistance',
'LayoutTransformation',
'LookaheadSwap',
'MergeAdjacentBarriers',
'NoiseAdaptiveLayout',
'NumTensorFactors',
'Optimize1qGates',
'Optimize1qGatesDecomposition',
'OptimizeSwapBeforeMeasure',
'RZXCalibrationBuilder',
'RZXCalibrationBuilderNoEcho',
'RemoveBarriers',
'RemoveDiagonalGatesBeforeMeasure',
'RemoveFinalMeasurements',
'RemoveResetInZeroState',
'ResourceEstimation',
'SabreLayout',
'SabreSwap',
'SetLayout',
'Size',
'StochasticSwap',
'TemplateOptimization',
'TimeUnitConversion',
'TrivialLayout',
'UnitarySynthesis',
'Unroll3qOrMore',
'UnrollCustomDefinitions',
'Unroller',
'ValidatePulseGates',
'Width']
Different Variants of the Same Pass¶
There can be passes that do the same job, but in different ways. For example, the TrivialLayout
, DenseLayout
and NoiseAdaptiveLayout
all choose a layout (binding of virtual qubits to physical qubits), but use different algorithms and objectives. Similarly, the BasicSwap
, LookaheadSwap
and StochasticSwap
all insert swaps to make the circuit compatible with the coupling map. The modularity of the transpiler allows plug-and-play replacements for each pass.
Below, we show the swapper passes all applied to the same circuit, to transform it to match a linear chain topology. You can see differences in performance, where the StochasticSwap
is clearly the best. However, this can vary depending on the input circuit.
[5]:
from qiskit.transpiler import CouplingMap, Layout
from qiskit.transpiler.passes import BasicSwap, LookaheadSwap, StochasticSwap
coupling = [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
circuit = QuantumCircuit(7)
circuit.h(3)
circuit.cx(0, 6)
circuit.cx(6, 0)
circuit.cx(0, 1)
circuit.cx(3, 1)
circuit.cx(3, 0)
coupling_map = CouplingMap(couplinglist=coupling)
bs = BasicSwap(coupling_map=coupling_map)
pass_manager = PassManager(bs)
basic_circ = pass_manager.run(circuit)
ls = LookaheadSwap(coupling_map=coupling_map)
pass_manager = PassManager(ls)
lookahead_circ = pass_manager.run(circuit)
ss = StochasticSwap(coupling_map=coupling_map)
pass_manager = PassManager(ss)
stochastic_circ = pass_manager.run(circuit)
[6]:
circuit.draw(output='mpl')
[6]:

[7]:
basic_circ.draw(output='mpl')
[7]:

[8]:
lookahead_circ.draw(output='mpl')
[8]:

[9]:
stochastic_circ.draw(output='mpl')
[9]:

Preset Pass Managers¶
Qiskit comes with several pre-defined pass managers, corresponding to various levels of optimization achieved through different pipelines of passes. Currently optimization_level
0 through 3 are supported; the higher the number, the more optimized it is, at the expense of more time. Choosing a good pass manager may take trial and error, as it depends heavily on the circuit being transpiled and the backend being targeted.
Here we illustrate the different levels by looking at a state synthesis circuit. We initialize four qubits to an arbitrary state, and then try to optimize the circuit that achieves this.
optimization_level=0
: just maps the circuit to the backend, with no explicit optimization (except whatever optimizations the mapper does).optimization_level=1
: maps the circuit, but also does light-weight optimizations by collapsing adjacent gates.optimization_level=2
: medium-weight optimization, including a noise-adaptive layout and a gate-cancellation procedure based on gate commutation relationships.optimization_level=3
: heavy-weight optimization, which in addition to previous steps, does resynthesis of two-qubit blocks of gates in the circuit.
[10]:
import math
from qiskit.test.mock import FakeTokyo
backend = FakeTokyo() # mimics the tokyo device in terms of coupling map and basis gates
[11]:
qc = QuantumCircuit(10)
random_state = [
1 / math.sqrt(4) * complex(0, 1),
1 / math.sqrt(8) * complex(1, 0),
0,
0,
0,
0,
0,
0,
1 / math.sqrt(8) * complex(1, 0),
1 / math.sqrt(8) * complex(0, 1),
0,
0,
0,
0,
1 / math.sqrt(4) * complex(1, 0),
1 / math.sqrt(8) * complex(1, 0)]
qc.initialize(random_state, range(4))
qc.draw()
[11]:
» q_0: » » q_1: » » q_2: » » q_3: » » q_4: » » q_5: » » q_6: » » q_7: » » q_8: » » q_9: » » « ┌────────────────────────────────────────────────────────────────────────────┐ «q_0: ┤0 ├ « │ │ «q_1: ┤1 ├ « │ Initialize(0.5j,0.35355,0,0,0,0,0,0,0.35355,0.35355j,0,0,0,0,0.5,0.35355) │ «q_2: ┤2 ├ « │ │ «q_3: ┤3 ├ « └────────────────────────────────────────────────────────────────────────────┘ «q_4: ────────────────────────────────────────────────────────────────────────────── « «q_5: ────────────────────────────────────────────────────────────────────────────── « «q_6: ────────────────────────────────────────────────────────────────────────────── « «q_7: ────────────────────────────────────────────────────────────────────────────── « «q_8: ────────────────────────────────────────────────────────────────────────────── « «q_9: ────────────────────────────────────────────────────────────────────────────── «
Now map this to the 20-qubit Tokyo device, with different optimization levels:
[12]:
optimized_0 = transpile(qc, backend=backend, seed_transpiler=11, optimization_level=0)
print('gates = ', optimized_0.count_ops())
print('depth = ', optimized_0.depth())
gates = OrderedDict([('cx', 70), ('u3', 15), ('u1', 15), ('reset', 4)])
depth = 73
[13]:
optimized_1 = transpile(qc, backend=backend, seed_transpiler=11, optimization_level=1)
print('gates = ', optimized_1.count_ops())
print('depth = ', optimized_1.depth())
gates = OrderedDict([('cx', 70), ('u3', 15), ('u1', 6)])
depth = 64
[14]:
optimized_2 = transpile(qc, backend=backend, seed_transpiler=11, optimization_level=2)
print('gates = ', optimized_2.count_ops())
print('depth = ', optimized_2.depth())
gates = OrderedDict([('cx', 64), ('u3', 15), ('u1', 6)])
depth = 60
[15]:
optimized_3 = transpile(qc, backend=backend, seed_transpiler=11, optimization_level=3)
print('gates = ', optimized_3.count_ops())
print('depth = ', optimized_3.depth())
gates = OrderedDict([('cx', 20), ('u3', 15), ('u1', 6)])
depth = 38
Introducing the DAG¶
In Qiskit, we represent circuits internally using a Directed Acyclic Graph (DAG). The advantage of this representation over a pure list of gates (i.e., netlist) is that the flow of information between operations are explicit, making it easier for passes to make transformation decisions without changing the semantics of the circuit.
Let’s start by building a simple circuit, and examining its DAG.
[16]:
from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit.dagcircuit import DAGCircuit
q = QuantumRegister(3, 'q')
c = ClassicalRegister(3, 'c')
circ = QuantumCircuit(q, c)
circ.h(q[0])
circ.cx(q[0], q[1])
circ.measure(q[0], c[0])
circ.rz(0.5, q[1]).c_if(c, 2)
circ.draw(output='mpl')
[16]:

In the DAG, there are three kinds of graph nodes: qubit/clbit input nodes (green), operation nodes (blue), and output nodes (red). Each edge indicates data flow (or dependency) between two nodes.
[17]:
from qiskit.converters import circuit_to_dag
from qiskit.tools.visualization import dag_drawer
dag = circuit_to_dag(circ)
dag_drawer(dag)
[17]:

Therefore, writing a transpiler pass means using Qiskit’s DAGCircuit API to analyze or transform the circuit. Let’s see some examples of this.
a. Get all op nodes in the DAG:
[18]:
dag.op_nodes()
[18]:
[<qiskit.dagcircuit.dagnode.DAGNode at 0x7fc746e58ec0>,
<qiskit.dagcircuit.dagnode.DAGNode at 0x7fc746e58750>,
<qiskit.dagcircuit.dagnode.DAGNode at 0x7fc746e58f30>,
<qiskit.dagcircuit.dagnode.DAGNode at 0x7fc746e586e0>]
Each node is an instance of the DAGNode
class. Let’s examine the information stored in the second op node.
[19]:
node = dag.op_nodes()[3]
print("node name: ", node.name)
print("node op: ", node.op)
print("node qargs: ", node.qargs)
print("node cargs: ", node.cargs)
print("node condition: ", node.condition)
node name: rz
node op: <qiskit.circuit.library.standard_gates.rz.RZGate object at 0x7fc720fb4bd0>
node qargs: [Qubit(QuantumRegister(3, 'q'), 1)]
node cargs: []
node condition: (ClassicalRegister(3, 'c'), 2)
/home/computertreker/git/qiskit/qiskit/.tox/docs/lib/python3.7/site-packages/ipykernel_launcher.py:6: DeprecationWarning: The DAGNode 'condition' attribute is deprecated as of 0.18.0 and will be removed no earlier than 3 months after the release date. You can use 'DAGNode.op.condition' if the DAGNode is of type 'op'.
b. Add an operation to the back:
[20]:
from qiskit.circuit.library import HGate
dag.apply_operation_back(HGate(), qargs=[q[0]])
dag_drawer(dag)
[20]:

c. Add an operation to the front:
[21]:
from qiskit.circuit.library import CCXGate
dag.apply_operation_front(CCXGate(), qargs=[q[0], q[1], q[2]], cargs=[])
dag_drawer(dag)
[21]:

d. Substitute a node with a subcircuit:
[22]:
from qiskit.circuit.library import CHGate, U2Gate, CXGate
mini_dag = DAGCircuit()
p = QuantumRegister(2, "p")
mini_dag.add_qreg(p)
mini_dag.apply_operation_back(CHGate(), qargs=[p[1], p[0]])
mini_dag.apply_operation_back(U2Gate(0.1, 0.2), qargs=[p[1]])
# substitute the cx node with the above mini-dag
cx_node = dag.op_nodes(op=CXGate).pop()
dag.substitute_node_with_dag(node=cx_node, input_dag=mini_dag, wires=[p[0], p[1]])
dag_drawer(dag)
[22]:

Finally, after all transformations are complete, we can convert back to a regular QuantumCircuit object. This is what the transpiler does! It takes a circuit, operates on it in DAG form, and outputs a transformed circuit.
[23]:
from qiskit.converters import dag_to_circuit
circuit = dag_to_circuit(dag)
circuit.draw(output='mpl')
[23]:

Implementing a BasicMapper Pass¶
Now that we are familiar with the DAG, let’s use it to write a transpiler pass. Here we will implement a basic pass for mapping an arbitrary circuit to a device with limited qubit connectivity. We call this the BasicMapper. This pass is included in Qiskit Terra as well.
The first thing to do when writing a transpiler pass is to decide whether the pass class derives from a TransformationPass
or AnalysisPass
. Transformation passes modify the circuit, while analysis passes only collect information about a circuit (to be used by other passes). Then, the run(dag)
method is implemented, which does the main task. Finally, the pass is registered inside the qiskit.transpiler.passes
module.
This pass functions as follows: it traverses the DAG layer-by-layer (each layer is a group of operations that does not act on independent qubits, so in theory all operations in a layer can be done independently). For each operation, if it does not already meet the coupling map constraints, the pass identifies a swap path and inserts swaps to bring the two qubits close to each other.
Follow the comments in the code for more details.
[24]:
from copy import copy
from qiskit.transpiler.basepasses import TransformationPass
from qiskit.transpiler import Layout
from qiskit.circuit.library import SwapGate
class BasicSwap(TransformationPass):
"""Maps (with minimum effort) a DAGCircuit onto a `coupling_map` adding swap gates."""
def __init__(self,
coupling_map,
initial_layout=None):
"""Maps a DAGCircuit onto a `coupling_map` using swap gates.
Args:
coupling_map (CouplingMap): Directed graph represented a coupling map.
initial_layout (Layout): initial layout of qubits in mapping
"""
super().__init__()
self.coupling_map = coupling_map
self.initial_layout = initial_layout
def run(self, dag):
"""Runs the BasicSwap pass on `dag`.
Args:
dag (DAGCircuit): DAG to map.
Returns:
DAGCircuit: A mapped DAG.
Raises:
TranspilerError: if the coupling map or the layout are not
compatible with the DAG.
"""
new_dag = DAGCircuit()
for qreg in dag.qregs.values():
new_dag.add_qreg(qreg)
for creg in dag.cregs.values():
new_dag.add_creg(creg)
if self.initial_layout is None:
if self.property_set["layout"]:
self.initial_layout = self.property_set["layout"]
else:
self.initial_layout = Layout.generate_trivial_layout(*dag.qregs.values())
if len(dag.qubits) != len(self.initial_layout):
raise TranspilerError('The layout does not match the amount of qubits in the DAG')
if len(self.coupling_map.physical_qubits) != len(self.initial_layout):
raise TranspilerError(
"Mappers require to have the layout to be the same size as the coupling map")
canonical_register = dag.qregs['q']
trivial_layout = Layout.generate_trivial_layout(canonical_register)
current_layout = trivial_layout.copy()
for layer in dag.serial_layers():
subdag = layer['graph']
for gate in subdag.two_qubit_ops():
physical_q0 = current_layout[gate.qargs[0]]
physical_q1 = current_layout[gate.qargs[1]]
if self.coupling_map.distance(physical_q0, physical_q1) != 1:
# Insert a new layer with the SWAP(s).
swap_layer = DAGCircuit()
swap_layer.add_qreg(canonical_register)
path = self.coupling_map.shortest_undirected_path(physical_q0, physical_q1)
for swap in range(len(path) - 2):
connected_wire_1 = path[swap]
connected_wire_2 = path[swap + 1]
qubit_1 = current_layout[connected_wire_1]
qubit_2 = current_layout[connected_wire_2]
# create the swap operation
swap_layer.apply_operation_back(SwapGate(),
qargs=[qubit_1, qubit_2],
cargs=[])
# layer insertion
order = current_layout.reorder_bits(new_dag.qubits)
new_dag.compose(swap_layer, qubits=order)
# update current_layout
for swap in range(len(path) - 2):
current_layout.swap(path[swap], path[swap + 1])
order = current_layout.reorder_bits(new_dag.qubits)
new_dag.compose(subdag, qubits=order)
return new_dag
Let’s test this pass on a small example circuit.
[25]:
q = QuantumRegister(7, 'q')
in_circ = QuantumCircuit(q)
in_circ.h(q[0])
in_circ.cx(q[0], q[4])
in_circ.cx(q[2], q[3])
in_circ.cx(q[6], q[1])
in_circ.cx(q[5], q[0])
in_circ.rz(0.1, q[2])
in_circ.cx(q[5], q[0])
[25]:
<qiskit.circuit.instructionset.InstructionSet at 0x7fc71fa10b10>
Now we construct a pass manager that contains our new pass. We pass the example circuit above to this pass manager, and obtain a new, transformed circuit.
[26]:
from qiskit.transpiler import PassManager
from qiskit.transpiler import CouplingMap
from qiskit import BasicAer
pm = PassManager()
coupling = [[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
coupling_map = CouplingMap(couplinglist=coupling)
pm.append([BasicSwap(coupling_map)])
out_circ = pm.run(in_circ)
[27]:
in_circ.draw(output='mpl')
[27]:

[28]:
out_circ.draw(output='mpl')
[28]:

Note that this pass only inserts the swaps necessary to make every two-qubit interaction conform to the device coupling map. It does not, for example, care about the direction of interactions, or the native gate set supported by the device. This is a design philosophy of Qiskit’s transpiler: every pass performs a small, well-defined action, and the aggressive circuit optimization is achieved by the pass manager through combining multiple passes.
Transpiler Logging¶
Due to the complexity of the internal operations that the transpiler is performing it’s likely that you’ll end up in a situation where you’d like to debug an issue or just understand more of what is happening inside the transpiler when you call it. To facilitate this the transpiler emits log messages as part of its normal operation. This logging uses the Python standard library logging
module to emit the log messages. Python’s standard logging was used because it allows Qiskit-Terra’s
logging to integrate in a standard way with other applications and libraries.
For a more thorough introduction to Python logging refer to the official documentation and the tutorials and cookbook linked off of there.
Note: Most of the logging module functions used in this section adjust global settings. If you run commands in this section it might effect the output from other cells if they are run in a different order.
Configuring Python Standard Library Logging¶
By default Python Standard Logging only prints log messages at the WARNING
, ERROR
, or CRITICAL
log levels. Since none of the logs emitted by the transpiler use these log levels (they’re all informative) you need to configure logging.
The simplest way to do this is to just run:
[29]:
import logging
logging.basicConfig(level='DEBUG')
The basicConfig()
function (see the docs here: https://docs.python.org/3/library/logging.html#logging.basicConfig) configures a root handler and formatter. We also specify the log level to display with the level
kwarg. Setting it to a level will also include and higher levels. For example, if you set it to 'INFO'
in addition to the INFO
level this will also include the WARNING
, ERROR
, and CRITICAL
log levels.
Now the python environment in this notebook is configured to emit log messages to stderr when you run the transpiler. For example:
Note: basicConfig() will only work when called the first time it’s called. It detects if a root handler and formatter have already been setup (either by using an earlier basicConfig() call or otherwise) and does nothing if they have. Further adjustments will have to by interacting with the handler directly.
[30]:
from qiskit.test.mock import FakeTenerife
log_circ = QuantumCircuit(2, 2)
log_circ.h(0)
log_circ.h(1)
log_circ.h(1)
log_circ.x(1)
log_circ.cx(0, 1)
log_circ.measure([0,1], [0,1])
backend = FakeTenerife()
transpile(log_circ, backend);
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00429 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.03505 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Layout2qDistance - 0.04220 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.05436 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.03767 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.15783 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.01025 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.02432 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.04077 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('measure', 1), ('h', 1), ('u3', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.002s.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q321_0: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q321_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q323_0: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q323_0: ┤ U2(0,π) ├
└─────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.003s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 6.73532 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.05007 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.11468 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.01025 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.01836 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00834 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.81944 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.02074 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01860 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.68824 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.00954 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00668 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.27633 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.01574 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01836 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.61958 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.00930 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00668 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.27418 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.01574 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01812 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.61409 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TimeUnitConversion - 0.10729 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ValidatePulseGates - 0.00358 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: AlignMeasures - 0.00525 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 27.88234 (ms)
As you can clearly see here when calling transpile()
it now prints 2 types of log messages. The first is at the INFO
log level and come from the pass manager. These indicate each pass that was executed and how long that took. The second are at the DEBUG
level and come from the StochasticSwap pass and describes the internal operation of that pass. It’s useful for debugging issues in the pass’s operation.
Adjusting the log level for the transpiler¶
The qiskit transpiler uses a single namespace qiskit.transpiler
, as used by logging.getLogger('qiskit.transpiler')
. This makes it very easy to adjust the log level for just the transpiler. For example if you only wish to see log messages at the INFO level or above you can run:
[31]:
logging.getLogger('qiskit.transpiler').setLevel('INFO')
transpile(log_circ, backend);
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00262 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.02575 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Layout2qDistance - 0.02885 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.04601 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.03529 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.29588 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.00739 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.02003 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02885 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.49894 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.04601 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.11230 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.00858 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.01049 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00739 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.68140 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.01645 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01907 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.18089 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.00906 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00668 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.30541 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.01645 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01836 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.16372 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.00906 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.00620 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.27180 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.02003 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.01740 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 1.14965 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TimeUnitConversion - 0.09370 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ValidatePulseGates - 0.00334 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: AlignMeasures - 0.00286 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 18.85033 (ms)
Setting up logging to deal with parallel execution¶
When running the transpiler with multiple circuits by default these circuits are transpiled in parallel. If you want to do this with logging enabled and be able to understand the output some additional steps are required.
If you were just to enable logging as above and then pass transpile()
multiple circuits you’ll get results that are difficult to decipher. For example:
[32]:
# Change log level back to DEBUG
logging.getLogger('qiskit.transpiler').setLevel('DEBUG')
# Transpile multiple circuits
circuits = [log_circ, log_circ]
transpile(circuits, backend);
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00453 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00358 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.09322 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.09370 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Layout2qDistance - 0.16665 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Layout2qDistance - 0.20051 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.14114 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.18072 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.11110 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.07319 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.28944 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.23603 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.02050 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.01574 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.03672 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.03839 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.06819 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.11706 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('measure', 1), ('h', 1), ('u3', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Inspecting basis frozenset({('cx', 2), ('measure', 1), ('h', 1), ('u3', 1)}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.005s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.006s.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q351_0: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q351_0: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q351_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q351_0: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q353_0: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q353_0: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q353_0: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q353_0: ┤ U2(0,π) ├
└─────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.007s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.007s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 14.53233 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 15.35845 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.10633 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.08631 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.20862 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.17095 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.02670 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.02360 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.03219 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01717 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.03290 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01264 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 1.32203 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.04816 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 1.45054 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02837 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.07582 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02718 (ms)
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 4.30918 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 3.78776 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.02766 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01097 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.03481 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01574 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.48828 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.04673 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.48542 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02670 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.02885 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02551 (ms)
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 4.14515 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 3.73578 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.01979 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.01740 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01431 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01121 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.62084 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 0.43607 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.03242 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.02337 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.02384 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.03433 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.001s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 3.86143 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 3.97897 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TimeUnitConversion - 0.17667 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TimeUnitConversion - 0.16952 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ValidatePulseGates - 0.00548 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ValidatePulseGates - 0.00834 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: AlignMeasures - 0.01311 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: AlignMeasures - 0.01168 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 284.68537 (ms)
As you can see here we get log messages from all 3 circuits being transpiled together. There is no way to know which pass is part of which circuit’s transpilation. Luckily Python logging provides tools to deal with this. The simplest one is to just change the log formatter so that includes additional information so we can associate a log message with the process it came from.
[33]:
formatter = logging.Formatter('%(name)s - %(processName)-10s - %(levelname)s: %(message)s')
handler = logging.getLogger().handlers[0]
handler.setFormatter(formatter)
Then rerun the transpile()
call and see the new log formatter.
[34]:
transpile(circuits, backend);
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: SetLayout - 0.00453 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: SetLayout - 0.00381 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: TrivialLayout - 0.09108 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: TrivialLayout - 0.09227 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Layout2qDistance - 0.14544 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Layout2qDistance - 0.19312 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: FullAncillaAllocation - 0.11587 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: FullAncillaAllocation - 0.16832 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: EnlargeWithAncilla - 0.10896 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: EnlargeWithAncilla - 0.12112 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: ApplyLayout - 0.24843 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: ApplyLayout - 0.30684 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Unroll3qOrMore - 0.02360 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Unroll3qOrMore - 0.02980 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: CheckMap - 0.03362 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: CheckMap - 0.05555 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: UnrollCustomDefinitions - 0.07772 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: UnrollCustomDefinitions - 0.07629 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Begining basis search from frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Inspecting basis frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Begining basis search from frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Inspecting basis frozenset({('cx', 2), ('measure', 1), ('h', 1), ('u3', 1)}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Inspecting basis frozenset({('cx', 2), ('x', 1), ('measure', 1), ('h', 1)}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Inspecting basis frozenset({('cx', 2), ('measure', 1), ('h', 1), ('u3', 1)}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: x/1 => []
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: x/1 => []
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: h/1 => []
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation path search completed in 0.005s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: h/1 => []
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation path search completed in 0.005s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Composing transform step: x/1 [] =>
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Composing transform step: x/1 [] =>
┌───────────┐
q_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q351_0: ┤ x ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q351_0: ┤ x ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q351_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q351_0: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Composing transform step: h/1 [] =>
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q353_0: ┤ h ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Composing transform step: h/1 [] =>
┌─────────┐
q_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q353_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q353_0: ┤ h ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation paths composed in 0.006s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q353_0: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: BasisTranslator - 13.50379 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation paths composed in 0.007s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: CheckGateDirection - 0.08607 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: BasisTranslator - 14.30440 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: GateDirection - 0.21744 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: CheckGateDirection - 0.08130 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: RemoveResetInZeroState - 0.03505 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: GateDirection - 0.15187 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Depth - 0.03552 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: RemoveResetInZeroState - 0.03242 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: FixedPoint - 0.02146 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Depth - 0.03457 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: FixedPoint - 0.01740 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Optimize1qGatesDecomposition - 1.44720 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Optimize1qGatesDecomposition - 1.31297 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: CXCancellation - 0.06294 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: CXCancellation - 0.04911 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: UnrollCustomDefinitions - 0.02861 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: UnrollCustomDefinitions - 0.02837 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: BasisTranslator - 3.84116 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: BasisTranslator - 4.24576 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Depth - 0.01836 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Depth - 0.02885 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: FixedPoint - 0.00596 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: FixedPoint - 0.01454 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Optimize1qGatesDecomposition - 0.33808 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Optimize1qGatesDecomposition - 0.40460 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: CXCancellation - 0.02480 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: CXCancellation - 0.02122 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: UnrollCustomDefinitions - 0.02694 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: UnrollCustomDefinitions - 0.02694 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: BasisTranslator - 3.48377 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Depth - 0.01669 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: BasisTranslator - 3.84665 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: FixedPoint - 0.01621 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Depth - 0.02408 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: FixedPoint - 0.01407 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: Optimize1qGatesDecomposition - 0.47064 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: CXCancellation - 0.02742 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: UnrollCustomDefinitions - 0.04959 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: Optimize1qGatesDecomposition - 0.65398 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: CXCancellation - 0.02956 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: UnrollCustomDefinitions - 0.02718 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('measure', 1), ('u2', 1)} to target basis {'id', 'measure', 'snapshot', 'delay', 'u1', 'cx', 'reset', 'u2', 'barrier', 'u3'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Begining basis search from frozenset({('cx', 2), ('measure', 1), ('u2', 1)}) to frozenset({'id', 'measure', 'cx', 'reset', 'snapshot', 'u2', 'u3', 'barrier', 'u1', 'delay'}).
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation path search completed in 0.001s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-33 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation paths composed in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: BasisTranslator - 3.95942 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-34 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: TimeUnitConversion - 0.19145 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: BasisTranslator - 3.75128 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: ValidatePulseGates - 0.00548 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: TimeUnitConversion - 0.17142 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-33 - INFO: Pass: AlignMeasures - 0.01335 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: ValidatePulseGates - 0.00501 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-34 - INFO: Pass: AlignMeasures - 0.01121 (ms)
qiskit.compiler.transpiler - MainProcess - INFO: Total Transpile Time - 284.61766 (ms)
Now the format for the log messages has been changed and it includes a process name for each of the transpilation processes so it’s at least clear which log messages go together.
There are many different options for how you can configure, this example is pretty limited. Refer to the documentation for more examples and options to build more sophisticated use cases that suit your specific use case or preferences.
[35]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
/home/computertreker/git/qiskit/qiskit/.tox/docs/lib/python3.7/site-packages/qiskit/aqua/__init__.py:86: DeprecationWarning: The package qiskit.aqua is deprecated. It was moved/refactored to qiskit-terra For more information see <https://github.com/Qiskit/qiskit-aqua/blob/main/README.md#migration-guide>
warn_package('aqua', 'qiskit-terra')
Version Information
Qiskit Software | Version |
---|---|
qiskit-terra | 0.18.2 |
qiskit-aer | 0.8.2 |
qiskit-ignis | 0.6.0 |
qiskit-ibmq-provider | 0.16.0 |
qiskit-aqua | 0.9.5 |
qiskit | 0.29.1 |
qiskit-nature | 0.2.2 |
qiskit-finance | 0.3.0 |
qiskit-optimization | 0.2.3 |
qiskit-machine-learning | 0.2.1 |
System information | |
Python | 3.7.12 (default, Nov 22 2021, 14:57:10) [GCC 11.1.0] |
OS | Linux |
CPUs | 32 |
Memory (Gb) | 125.71650314331055 |
Tue Jan 04 11:07:08 2022 EST |
This code is a part of Qiskit
© Copyright IBM 2017, 2022.
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.
[ ]: