Note
Cette page a été générée à partir de `tutorials/circuits_advanced/4_transpiler_passes_and_passmanager.ipynb`__.
Passes du transpileur et gestionnaire de passes¶
Introduction¶
Le transpileur est un composant central de Qiskit Terra, il est conçu pour être modulaire et extensible. L’objectif est d’être en mesure de créer de nouvelles transformations de circuit (appelées passes du transpileur), et de les combiner avec les autres passes existantes. La manière dont les passes sont combinées entre elles et l’ordre dans lequel elle sont appliquées a un effet déterminant sur le résultat final. C’est le pass manager (gestionnaire de passes), qui ordonnance les différentes passes et leur permet de communiquer ensemble au travers d’un espace de communication spécifique. Le transpileur ouvre ainsi la porte sur un champ de recherche vers une optimisation significative des circuits quantiques.
Dans ce notebook, nous examinons les passes pré-programmées, comment utiliser le gestionnaire de passes, et nous allons développer une passe personnalisée simple de transpileur. Pour le dernier point, nous avons besoin d’introduire préalablement la notion de représentation interne de circuit quantique dans Qiskit, sous la forme d’un Graphe Acyclique Directionnel GAD (en anglais DAG pour Direct Acyclic Graph). Ensuite nous prendrons l’exemple de la passe d’échanges simples, qui permet de transformer un circuit pour l’adapter à un appareil dont la connectivité entre les qubits est limitée.
Avant de commencer : Vous devrez peut-être installer la bibliothèque pydot
et la bibliothèque graphviz
pour les routines de tracé des DAG. Si vous utilisez Anaconda Python, vous pouvez installer les deux bibliothèques avec la commande conda
. Si vous utilisez l’interpréteur Python natif de votre système, installez pydot
en utilisant la commande pip
et installez graphviz
en utilisant le gestionnaire de paquets natif de votre système (e. . yum
, apt
, dnf
, brew
, etc.).
[1]:
from qiskit import QuantumCircuit
from qiskit.compiler import transpile
from qiskit.transpiler import PassManager
L’objet PassManager¶
Il permet de spécifier le nombre de passes désirées.
[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]:

La liste des types de passes disponibles pour le transpileur de Qiskit peut être accédée à l’aide de qiskit.transpiler.passes
.
[4]:
from qiskit.transpiler import passes
[pass_ for pass_ in dir(passes) if pass_[0].isupper()]
[4]:
['ALAPSchedule',
'ALAPScheduleAnalysis',
'ASAPSchedule',
'ASAPScheduleAnalysis',
'AlignMeasures',
'ApplyLayout',
'BIPMapping',
'BarrierBeforeFinalMeasurements',
'BasicSwap',
'BasisTranslator',
'CSPLayout',
'CXCancellation',
'CXDirection',
'CheckCXDirection',
'CheckGateDirection',
'CheckMap',
'Collect1qRuns',
'Collect2qBlocks',
'CollectLinearFunctions',
'CollectMultiQBlocks',
'CommutationAnalysis',
'CommutativeCancellation',
'CommutativeInverseCancellation',
'Commuting2qGateRouter',
'ConsolidateBlocks',
'ConstrainedReschedule',
'ContainsInstruction',
'ConvertConditionsToIfOps',
'CountOps',
'CountOpsLongestPath',
'CrosstalkAdaptiveSchedule',
'DAGFixedPoint',
'DAGLongestPath',
'Decompose',
'DenseLayout',
'Depth',
'DynamicalDecoupling',
'EchoRZXWeylDecomposition',
'EnlargeWithAncilla',
'Error',
'FixedPoint',
'FullAncillaAllocation',
'GateDirection',
'GatesInBasis',
'HLSConfig',
'HighLevelSynthesis',
'HoareOptimizer',
'InstructionDurationCheck',
'InverseCancellation',
'Layout2qDistance',
'LayoutTransformation',
'LinearFunctionsSynthesis',
'LinearFunctionsToPermutations',
'LookaheadSwap',
'MergeAdjacentBarriers',
'NoiseAdaptiveLayout',
'NumTensorFactors',
'Optimize1qGates',
'Optimize1qGatesDecomposition',
'Optimize1qGatesSimpleCommutation',
'OptimizeCliffords',
'OptimizeSwapBeforeMeasure',
'PadDelay',
'PadDynamicalDecoupling',
'PulseGates',
'RZXCalibrationBuilder',
'RZXCalibrationBuilderNoEcho',
'RemoveBarriers',
'RemoveDiagonalGatesBeforeMeasure',
'RemoveFinalMeasurements',
'RemoveResetInZeroState',
'ResetAfterMeasureSimplification',
'ResourceEstimation',
'SabreLayout',
'SabreSwap',
'SetIOLatency',
'SetLayout',
'Size',
'StochasticSwap',
'TemplateOptimization',
'TimeUnitConversion',
'TrivialLayout',
'UnitarySynthesis',
'Unroll3qOrMore',
'UnrollCustomDefinitions',
'Unroller',
'VF2Layout',
'VF2PostLayout',
'ValidatePulseGates',
'Width']
Différentes variétés d’une même passe¶
Il peut se trouver des passes qui font la même chose, mais de manière différente. Par exemple : TrivialLayout
, DenseLayout
et NoiseAdaptiveLayout
permettent toutes de choisir un layout (relation entre les qubits virtuels et les qubits physiques), mais elles utilisent des algorithmes différents pour des objectifs différents. De même BasicSwap
, LookaheadSwap
et StochasticSwap
ont toutes pour effet d’insérer des swap (échanges) pour rendre un circuit compatible avec la carte de couplage. Le caractère modulaire du transpileur permet de faire des substitutions de ces passes.
Ci-dessous nous montrons les passes de swap appliquées à un seul et même circuit pour le transformer en une topologie correspondant à une chaine linéaire.
On peut voir que la performance la meilleure est atteinte lorsque StochasticSwap
est utilisée. Mais ceci peut varier en fonction de votre 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]:

Gestionnaires de passes pré-configurées¶
Qiskit inclut plusieurs gestionnaires de passes prédéfinis qui correspondent à différents niveaux d’optimisation obtenus selon différents arrangement de passes. Actuellement les niveaux d’optimisation 0 à 3 sont implémentés. Le niveau le plus haut (3) correspond à l’optimisation la meilleure, mais le temps d’optimisation est également le plus élevé. Le choix du meilleur gestionnaire de passes peut-être fait à l’aide d’essais, tant l’optimisation dépend du circuit lui même et de la plateforme sur lequel il va être exécuté.
Nous illustrons ici les différents niveaux d’optimisation en regardant un circuit de synthèse d’état. Il s’agit d’initialiser quatre qubits dans un état arbitraire, et d’optimiser le circuit qui y parvient.
optimization_level=0
: fait correspondre le circuit à la carte de connection des qubits de la plateforme ciblée, sans optimisation explicite (sauf celles issues de la correspondance entre les qubits logiques et physiques afin de minimiser les swaps).optimization_level=1
: optimisation légère, en plus d’établir la correspondance décrite ci dessus, ce niveau ajoute un premier niveau d’optimisation par réduction des portes adjacentes lorsque c’est possible.optimization_level=2
: optimisation moyenne, qui ajoute un système d’adaptation au bruit ainsi qu’une procédure de réduction des portes en utilisant des relations de commutation.optimization_level=3
: optimisation lourde, qui ajoute aux étapes précédentes la synthèse par blocs de portes sur deux qubits dans le circuit.
[10]:
import math
from qiskit.providers.fake_provider 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: ────────────────────────────────────────────────────────────────────────────── «
A présent, voici ce que donnerait la transpilation sur la plateforme « Tokyo » de 20 qubit, avec les différents niveaux d’optimisation :
[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 = 87
[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', 22), ('u3', 15), ('u1', 6)])
depth = 40
[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', 20), ('u3', 15), ('u1', 6)])
depth = 38
[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
Introduction au GAD (Graphe Acyclique Direct)¶
Dans Qiskit, la représentation interne des circuit se fait en utilisant un Graphe Acyclique Direct (GAD). Par rapport à une liste de portes (netlist), cette représentation a l’avantage de rendre explicite le flot d’information entre les opérations, ce qui rend les décisions de transformation plus faciles pour les passes, sans changer la signification du circuit.
Commençons par construire un circuit simple, et examinons son DAG (Direct Acylcic Graph).
[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]:

Dans le GAD, il y a trois types de noeuds différents : les qubits/cbits (en vert), les opérations (en bleu) et les sorties (en rouge). Chaque arête indique le flot (ou la dépendance) entre deux noeuds. (note: on utilise l’acronyme en anglais dag dans le code suivant).
[17]:
from qiskit.converters import circuit_to_dag
from qiskit.tools.visualization import dag_drawer
dag = circuit_to_dag(circ)
dag_drawer(dag)
[17]:

Ainsi, l’écriture d’une passe de transpilation implique que l’on utilise l’API DAGCircuit de Qiskit afin d’analyser ou transformer le circuit. Voyons des exemples.
a. Obtenir les noeuds opérationnels du GAD :
[18]:
dag.op_nodes()
[18]:
[DAGOpNode(op=Instruction(name='h', num_qubits=1, num_clbits=0, params=[]), qargs=(Qubit(QuantumRegister(3, 'q'), 0),), cargs=()),
DAGOpNode(op=Instruction(name='cx', num_qubits=2, num_clbits=0, params=[]), qargs=(Qubit(QuantumRegister(3, 'q'), 0), Qubit(QuantumRegister(3, 'q'), 1)), cargs=()),
DAGOpNode(op=Instruction(name='measure', num_qubits=1, num_clbits=1, params=[]), qargs=(Qubit(QuantumRegister(3, 'q'), 0),), cargs=(Clbit(ClassicalRegister(3, 'c'), 0),)),
DAGOpNode(op=Instruction(name='rz', num_qubits=1, num_clbits=0, params=[0.5]), qargs=(Qubit(QuantumRegister(3, 'q'), 1),), cargs=())]
Chaque noeud est une instance de la classe DAGOpNode
. Examinons les informations stockées dans le 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.op.condition)
node name: rz
node op: Instruction(name='rz', num_qubits=1, num_clbits=0, params=[0.5])
node qargs: (Qubit(QuantumRegister(3, 'q'), 1),)
node cargs: ()
node condition: (ClassicalRegister(3, 'c'), 2)
**b. Ajouter une opération à la fin : **
[20]:
from qiskit.circuit.library import HGate
dag.apply_operation_back(HGate(), qargs=[q[0]])
dag_drawer(dag)
[20]:

c. Ajouter une opération au début :
[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. Remplacez un noeud par un sous-circuit: **
[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]:

Finalement, après avoir effectué toutes ces transformations, on peut reconvertir le GAD en un objet de type QuantumCircuit. C’est ce que fait le transpileur ! Il prend un circuit, travaille dessus sous sa forme de GAD, et fournit comme résultat un circuit transformé.
[23]:
from qiskit.converters import dag_to_circuit
circuit = dag_to_circuit(dag)
circuit.draw(output='mpl')
[23]:

Implémentation d’une passe BasicMapper¶
Maintenant que nous sommes familiers du principe du DAG, utilisons le pour construire une passe de transpilation. Ici nous allons implémenter une passe de base pour faire correspondre un circuit quelconque à une machine dont la connectivité entre les qubits est limitée. Ceci s’appelle le BasicMapper. Cette passe est également incluse dans Qiskit Terra.
Le premier choix à effectuer est de décider si le type de passe est du type TransformationPass ou du type AnalysisPass. Les passes de type transformation modifient le circuit, alors que les passes de type analyse ne font que collecter de l’information (qui pourra être utilisée par les autres passes). Puis la méthode run(dag) est appelée, elle exécute la tâche principale. Enfin la passe est enregistrée dans le module qiskit.transpiler.passes.
Cette passe fonctionne de la manière suivante : elle traverse le GAD (Graphe Acyclique Direct) couche après couche (chaque couche est un ensemble d’opérations qui n’ont pas d’action sur des qubits indépendants, donc théoriquement toutes les opérations d’une couche peuvent être exécutées indépendamment les unes des autres). Pour chacune des opérations, si elle ne correspond pas aux contraintes de la carte de couplage, la passe identifie une possibilité d’échange (swap) pour amener les qubits l’un à coté de l’autre.
Regardez les commentaires dans le code ci-dessous pour plus de détails.
[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
Essayons cette passe sur un petit 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 0x7ff990428370>
Maintenant nous construisons un gestionnaire de passes qui contient notre nouvelle passe. Nous lui fournissons le circuit example ci-dessus en paramètre pour obtenir un nouveau circuit après qu’il ait été transformé.
[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]:

Notons que cette passe ne fait que les échanges nécessaires pour que les opérations sur deux qubits soient possibles compte tenu de la carte de couplage des qubits. Par exemple cette passe ne tient pas compte de la direction des interactions entre les deux qubits, ni du jeu de portes natives. Ceci est conforme à la philosophie du développement du transpileur de Qiskit : chacune des passes effectue une action simple et bien définie, ensuite l’optimisation significative du circuit est obtenue par le gestionnaire de passes qui en combine plusieurs.
Journal du Transpileur¶
Du fait de la complexité des opérations internes qui sont effectuées par le transpileur, il est probable que vous soyez confronté à une situation où vous souhaiterez corriger un problème ou simplement que vous souhaitiez mieux comprendre ce qu’il se passe lorsque vous invoquez le transpileur. Afin de faciliter cela, le transpileur écrit un journal de messages lors de son exécution normale. Ce journal est écrit à l’aide du module logging de la bibliothèque standard de Python. La journalisation standard de Python a été choisie car elle permet au module Terra de Qiskit de s’intégrer de manière naturelle avec d’autres bibliothèques ou applications.
Pour une description plus précise de la journalisation de Python vous pouvez vous référer à la `documentation officielle<https://docs.python.org/3/library/logging.html>`__ et aux tutoriels et exemples que vous y trouverez.
Remarque: La plupart des fonctions de module de journalisation utilisées dans cette section adaptent les paramètres globaux. Si vous exécutez des commandes dans cette section, elle peut effectuer la sortie d’autres cellules si elles sont exécutées dans un ordre différent.
Configuration de la bibliothèque standard de journalisation¶
Par défaut la bibliothèque de journalisation standard de Python ne produit que les messages de niveau WARNING, ERROR ou CRITICAL. Dans la mesure où aucun des messages générés par le transpileur n’utilise ces niveaux (ils sont tous informatifs) il faut reconfigurer les paramètres de journalisation.
La manière la plus simple d’y parvenir est d’executer :
[29]:
import logging
logging.basicConfig(level='DEBUG')
La fonction basicConfig() (voir la documentation ici: https://docs.python.org/3/library/logging.html#logging.basicConfig) configure un capteur et un formateur de message. Nous spécifions également le niveau de journal à afficher avec l’argument de mot clef level. Le choix d’un niveau de journalisation implique la journalisation des niveaux supérieurs. Par exemple, si on règle le niveau de journalisation INFO
, alors en plus de ce niveau on récupèrera les messages des niveaux supérieurs : WARNING
, ERROR
, et CRITICAL
.
A présent, l’environnement Python de ce notebook est configuré de manière à émettre les messages de journalisation vers la sortie standard lorsque le transpileur est exécuté. Par exemple :
Note: basicConfig() ne fonctionnera que si elle est appelée la première fois. Il détecte si un gestionnaire root et un formateur ont déjà été configurés (soit en utilisant un appel antérieur à basicConfig() ou autrement) et ne fait rien s’ils l’ont fait. D’autres ajustements devront être effectués en interagissant directement avec le gestionnaire.
[30]:
from qiskit.providers.fake_provider 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);
DEBUG:stevedore.extension:found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.01121 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.07796 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 1.30749 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.02146 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00739 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.06509 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.09203 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.18358 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.11158 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.24843 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.01645 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.08273 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.14734 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 2.12932 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.18430 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate r generated using rule
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate u generated using rule
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate tdg generated using rule
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate s generated using rule
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate rz generated using rule
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate z generated using rule
┌───────┐
q: ┤ U1(π) ├
└───────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate ry generated using rule
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate x generated using rule
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate t generated using rule
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate p generated using rule
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate h generated using rule
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:p/1 => [Parameter(theta)]
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:t/1 => []
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:ry/1 => [Parameter(theta)]
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:z/1 => []
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:rz/1 => [Parameter(theta)]
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:s/1 => []
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:tdg/1 => []
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:u/1 => [Parameter(theta), Parameter(phi), Parameter(lam)]
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:r/1 => [Parameter(theta), Parameter(phi)]
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.079s.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q270: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q270: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: p/1 [Parameter(theta)] =>
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: t/1 [] =>
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q268: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q268: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: ry/1 [Parameter(theta)] =>
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: z/1 [] =>
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: rz/1 [Parameter(theta)] =>
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: s/1 [] =>
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: tdg/1 [] =>
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: u/1 [Parameter(theta), Parameter(phi), Parameter(lam)] =>
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: r/1 [Parameter(theta), Parameter(phi)] =>
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.045s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 127.81143 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.14639 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.28825 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.03529 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.06032 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.05436 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.51093 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02146 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 3.89552 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.05627 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.06032 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.07224 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01645 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.05436 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01717 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 2.38466 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.10848 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.08154 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.10681 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01884 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.08702 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02027 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.07558 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 205.91760 (ms)
Comme vous pouvez le voir clairement, lorsque que nous appelons transpile()
il se produit deux types de messages. D’une part ceux qui sont de niveau INFO
en provenance du gestionnaire de passes. Ces derniers indiquent les passes qui sont exécutées et leur durée d’execution. D’autre part ceux de niveau DEBUG
et qui proviennent de la passe StochasticSwap et qui en décrivent les opérations internes. Ils sont utiles pour corriger des problèmes de cette passe.
Réglage du niveau de journalisation du transpileur¶
Le transpileur qiskit utilise un espace de noms unique qiskit.transpiler
, tel qu’utilisé par logging.getLogger('qiskit.transpiler')
. Il est donc très facile de régler le niveau de le logging pour le transpilateur spécifiquement. Par exemple, si vous souhaitez seulement voir les messages de log au niveau INFO ou supérieur, vous pouvez exécuter :
[31]:
logging.getLogger('qiskit.transpiler').setLevel('INFO')
transpile(log_circ, backend);
DEBUG:stevedore.extension:found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.00882 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.04649 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 3.08633 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.03195 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00644 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.05007 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.09489 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.09966 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.06652 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.28276 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.01192 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.06318 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.12589 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 1.47748 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.05245 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
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.002s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation instructions replaced in 0.000s.
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 7.40910 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.07319 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.15426 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.02313 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.08106 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01669 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.04125 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02027 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 4.40145 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.13161 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.08607 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.05746 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01931 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.13041 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02146 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 1.33228 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.07725 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.10133 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.10204 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02313 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.06318 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01836 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.04482 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 79.09131 (ms)
Réglage de la journalisation pour gérer l’exécution en parallèle¶
Lorsque l’on execute le transpileur avec plusieurs circuits, le réglage par défaut fait que la transpilation de ces circuits se fait en parallèle. Si vous faites ceci avec la journalisation activée, et que vous voulez pouvoir comprendre la sortie, il y a quelques étapes supplémentaires à accomplir.
Si vous ne faisiez qu’activer la journalisation comme ci-dessus et que vous envoyez plusieurs circuits à transpile()
, vous obtiendrez des messages difficiles à interpréter. Par exemple :
[32]:
# Change log level back to DEBUG
logging.getLogger('qiskit.transpiler').setLevel('DEBUG')
# Transpile multiple circuits
circuits = [log_circ, log_circ]
transpile(circuits, backend);
DEBUG:stevedore.extension:found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
DEBUG:stevedore.extension:found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.11110 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.27680 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.14544 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.21100 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 3.80325 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 3.51930 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.07844 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Unroll3qOrMore - 0.07057 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.02217 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: SetLayout - 0.00978 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.27537 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: TrivialLayout - 0.20695 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.25034 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.25201 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.17428 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.14925 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FullAncillaAllocation - 0.25582 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: EnlargeWithAncilla - 0.23961 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 0.50950 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.08559 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ApplyLayout - 1.11890 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.11158 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.01860 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckMap - 0.09012 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.16379 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: UnitarySynthesis - 0.11730 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 3.08251 (ms)
DEBUG:stevedore.extension:found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.16665 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: HighLevelSynthesis - 2.89869 (ms)
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
INFO:qiskit.transpiler.runningpassmanager:Pass: UnrollCustomDefinitions - 0.64802 (ms)
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
INFO:qiskit.transpiler.passes.basis.basis_translator:Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Begining basis search from {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate r generated using rule
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate r generated using rule
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate u generated using rule
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate u generated using rule
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate tdg generated using rule
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate s generated using rule
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate tdg generated using rule
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate s generated using rule
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate rz generated using rule
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate z generated using rule
┌───────┐
q: ┤ U1(π) ├
└───────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate rz generated using rule
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate ry generated using rule
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate z generated using rule
┌───────┐
q: ┤ U1(π) ├
└───────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate x generated using rule
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate ry generated using rule
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate x generated using rule
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate t generated using rule
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate p generated using rule
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate t generated using rule
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate h generated using rule
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate p generated using rule
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Gate h generated using rule
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
with total cost of 1.0.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Transformation path:
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:h/1 => []
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:p/1 => [Parameter(theta)]
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:t/1 => []
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:p/1 => [Parameter(theta)]
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:t/1 => []
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:ry/1 => [Parameter(theta)]
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:x/1 => []
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:z/1 => []
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:ry/1 => [Parameter(theta)]
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:z/1 => []
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:rz/1 => [Parameter(theta)]
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:s/1 => []
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:rz/1 => [Parameter(theta)]
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:tdg/1 => []
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:s/1 => []
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:u/1 => [Parameter(theta), Parameter(phi), Parameter(lam)]
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:tdg/1 => []
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:u/1 => [Parameter(theta), Parameter(phi), Parameter(lam)]
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:r/1 => [Parameter(theta), Parameter(phi)]
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.096s.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:r/1 => [Parameter(theta), Parameter(phi)]
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation path search completed in 0.092s.
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: h/1 [] =>
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q284: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q284: ┤ h ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q284: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: p/1 [Parameter(theta)] =>
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q284: ┤ U2(0,π) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: t/1 [] =>
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: p/1 [Parameter(theta)] =>
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: t/1 [] =>
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: x/1 [] =>
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q282: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q282: ┤ x ├
└───┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q282: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q282: ┤ U3(π,0,π) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: ry/1 [Parameter(theta)] =>
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: ry/1 [Parameter(theta)] =>
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: z/1 [] =>
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: z/1 [] =>
┌───────┐
q: ┤ U1(π) ├
└───────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: rz/1 [Parameter(theta)] =>
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: rz/1 [Parameter(theta)] =>
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: s/1 [] =>
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: s/1 [] =>
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: tdg/1 [] =>
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: tdg/1 [] =>
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: u/1 [Parameter(theta), Parameter(phi), Parameter(lam)] =>
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: u/1 [Parameter(theta), Parameter(phi), Parameter(lam)] =>
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: r/1 [Parameter(theta), Parameter(phi)] =>
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
DEBUG:qiskit.transpiler.passes.basis.basis_translator:Composing transform step: r/1 [Parameter(theta), Parameter(phi)] =>
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.054s.
INFO:qiskit.transpiler.passes.basis.basis_translator:Basis translation paths composed in 0.059s.
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 - 157.53222 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: BasisTranslator - 164.86216 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.11420 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CheckGateDirection - 0.15402 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.24891 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GateDirection - 0.38290 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.12541 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: RemoveResetInZeroState - 0.08464 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.13971 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.09847 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.04601 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.03552 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.10777 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.07534 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.03409 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02384 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 5.46145 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.15616 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.17238 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.06294 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 6.20103 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02456 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.20838 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.05889 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.08988 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02050 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.09155 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 1.33586 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02384 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.11396 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.06008 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01812 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.07248 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.12565 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Optimize1qGatesDecomposition - 1.33085 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.01884 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: CXCancellation - 0.10204 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.06866 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: GatesInBasis - 0.05865 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02265 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Depth - 0.11039 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.06700 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.02861 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: Size - 0.07248 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: FixedPoint - 0.05746 (ms)
INFO:qiskit.transpiler.runningpassmanager:Pass: ContainsInstruction - 0.06485 (ms)
INFO:qiskit.compiler.transpiler:Total Transpile Time - 401.94011 (ms)
Comme on peut le voir ici, nous obtenons des messages de journal des 3 circuits qui sont transpilés ensemble. Il n’y a pas de moyen de savoir de savoir à quel circuit correspond une passe. Par chance Python fournit des outils qui peuvent nous aider. Le plus simple est de changer le formateur du journal de manière à inclure les informations supplémentaires permettant d’associer un message au processus dont il provient.
[33]:
formatter = logging.Formatter('%(name)s - %(processName)-10s - %(levelname)s: %(message)s')
handler = logging.getLogger().handlers[0]
handler.setFormatter(formatter)
Vous pouvez alors recommencer l’execution de transpile()
et voir le nouveau journal de messages.
[34]:
transpile(circuits, backend);
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='basic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:BasicSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='lookahead', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:LookaheadSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='none', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:NoneRoutingPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='sabre', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:SabreSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='stochastic', value='qiskit.transpiler.preset_passmanagers.builtin_plugins:StochasticSwapPassManager', group='qiskit.transpiler.routing')
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: ContainsInstruction - 0.03219 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: ContainsInstruction - 0.03409 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: UnitarySynthesis - 0.22340 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: UnitarySynthesis - 0.22054 (ms)
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: HighLevelSynthesis - 4.45032 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: HighLevelSynthesis - 3.88885 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Unroll3qOrMore - 0.06819 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Unroll3qOrMore - 0.09251 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: SetLayout - 0.02050 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: SetLayout - 0.03481 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: TrivialLayout - 0.19765 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: TrivialLayout - 0.20719 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: CheckMap - 0.23437 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: CheckMap - 0.21529 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FullAncillaAllocation - 0.22936 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FullAncillaAllocation - 0.19598 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: EnlargeWithAncilla - 0.20957 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: EnlargeWithAncilla - 0.20599 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: ApplyLayout - 1.73903 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: ApplyLayout - 1.93524 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: ContainsInstruction - 0.16189 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: ContainsInstruction - 0.08154 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: CheckMap - 0.11396 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: CheckMap - 0.10371 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: UnitarySynthesis - 0.12875 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: UnitarySynthesis - 0.09084 (ms)
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='clifford.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisClifford', group='qiskit.synthesis')
stevedore.extension - ForkProcess-7 - DEBUG: found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
stevedore.extension - ForkProcess-8 - DEBUG: found extension EntryPoint(name='linear_function.default', value='qiskit.transpiler.passes.synthesis.high_level_synthesis:DefaultSynthesisLinearFunction', group='qiskit.synthesis')
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: HighLevelSynthesis - 7.49135 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: HighLevelSynthesis - 10.27989 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: UnrollCustomDefinitions - 0.27299 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: UnrollCustomDefinitions - 0.24176 (ms)
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - INFO: Begin BasisTranslator from source basis {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to target basis {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Begining basis search from {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Begining basis search from {('cx', 2), ('x', 1), ('measure', 1), ('h', 1)} to {'snapshot', 'u1', 'u3', 'u2', 'measure', 'reset', 'id', 'barrier', 'cx', 'delay'}.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate r generated using rule
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate r generated using rule
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate u generated using rule
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate u generated using rule
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate tdg generated using rule
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate tdg generated using rule
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate s generated using rule
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate s generated using rule
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate rz generated using rule
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate rz generated using rule
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate z generated using rule
┌───────┐
q: ┤ U1(π) ├
└───────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate z generated using rule
┌───────┐
q: ┤ U1(π) ├
└───────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate ry generated using rule
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate ry generated using rule
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate x generated using rule
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate x generated using rule
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate t generated using rule
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate t generated using rule
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate p generated using rule
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Gate h generated using rule
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate p generated using rule
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Gate h generated using rule
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
with total cost of 1.0.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: h/1 => []
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Transformation path:
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: h/1 => []
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: p/1 => [Parameter(theta)]
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: p/1 => [Parameter(theta)]
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: t/1 => []
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: t/1 => []
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: x/1 => []
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: x/1 => []
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: ry/1 => [Parameter(theta)]
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: ry/1 => [Parameter(theta)]
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: z/1 => []
┌───────┐
q: ┤ U1(π) ├
└───────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: z/1 => []
┌───────┐
q: ┤ U1(π) ├
└───────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: rz/1 => [Parameter(theta)]
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: s/1 => []
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: rz/1 => [Parameter(theta)]
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: tdg/1 => []
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: s/1 => []
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: tdg/1 => []
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: u/1 => [Parameter(theta), Parameter(phi), Parameter(lam)]
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: u/1 => [Parameter(theta), Parameter(phi), Parameter(lam)]
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: r/1 => [Parameter(theta), Parameter(phi)]
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: r/1 => [Parameter(theta), Parameter(phi)]
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - INFO: Basis translation path search completed in 0.089s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - INFO: Basis translation path search completed in 0.092s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: h/1 [] =>
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: h/1 [] =>
┌─────────┐
q: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q284: ┤ h ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Updating transform for mapped instr ('h', 1) h, [] from
┌───┐
q284: ┤ h ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q284: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Updated transform for mapped instr ('h', 1) h, [] to
┌─────────┐
q284: ┤ U2(0,π) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: p/1 [Parameter(theta)] =>
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: p/1 [Parameter(theta)] =>
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: t/1 [] =>
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: t/1 [] =>
┌─────────┐
q: ┤ U1(π/4) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: x/1 [] =>
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q282: ┤ x ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: x/1 [] =>
┌───────────┐
q: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Updating transform for mapped instr ('x', 1) x, [] from
┌───┐
q282: ┤ x ├
└───┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q282: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: ry/1 [Parameter(theta)] =>
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Updated transform for mapped instr ('x', 1) x, [] to
┌───────────┐
q282: ┤ U3(π,0,π) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: z/1 [] =>
┌───────┐
q: ┤ U1(π) ├
└───────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: ry/1 [Parameter(theta)] =>
┌──────────────┐
q: ┤ R(theta,π/2) ├
└──────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: z/1 [] =>
┌───────┐
q: ┤ U1(π) ├
└───────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: rz/1 [Parameter(theta)] =>
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: rz/1 [Parameter(theta)] =>
global phase: -0.5*theta
┌───────────┐
q: ┤ U1(theta) ├
└───────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: s/1 [] =>
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: s/1 [] =>
┌─────────┐
q: ┤ U1(π/2) ├
└─────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: tdg/1 [] =>
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: tdg/1 [] =>
┌──────────┐
q: ┤ U1(-π/4) ├
└──────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: u/1 [Parameter(theta), Parameter(phi), Parameter(lam)] =>
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: u/1 [Parameter(theta), Parameter(phi), Parameter(lam)] =>
┌───────────────────┐
q: ┤ U3(theta,phi,lam) ├
└───────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - DEBUG: Composing transform step: r/1 [Parameter(theta), Parameter(phi)] =>
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - DEBUG: Composing transform step: r/1 [Parameter(theta), Parameter(phi)] =>
┌───────────────────────────────────┐
q: ┤ U3(theta,phi - π/2,π/2 - 1.0*phi) ├
└───────────────────────────────────┘
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - INFO: Basis translation paths composed in 0.047s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - INFO: Basis translation paths composed in 0.045s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-8 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.passes.basis.basis_translator - ForkProcess-7 - INFO: Basis translation instructions replaced in 0.000s.
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: BasisTranslator - 142.57407 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: BasisTranslator - 144.40155 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: CheckGateDirection - 0.15712 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: CheckGateDirection - 0.17142 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: GateDirection - 0.28253 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: RemoveResetInZeroState - 0.07534 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: GateDirection - 0.24128 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Depth - 0.14544 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: RemoveResetInZeroState - 0.08249 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.04268 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Depth - 0.16069 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Size - 0.14091 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.03624 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.01359 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Size - 0.10967 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.02694 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Optimize1qGatesDecomposition - 4.01998 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: CXCancellation - 0.13161 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Optimize1qGatesDecomposition - 3.88145 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: GatesInBasis - 0.12183 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: CXCancellation - 0.20623 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Depth - 0.06962 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: GatesInBasis - 0.06723 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.02122 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Size - 0.04506 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.03147 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Depth - 0.11611 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.01955 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Optimize1qGatesDecomposition - 1.07360 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Size - 0.06151 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: CXCancellation - 0.10633 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.02623 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: GatesInBasis - 0.07534 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Optimize1qGatesDecomposition - 1.08242 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Depth - 0.07391 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.02074 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: Size - 0.05603 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: FixedPoint - 0.02646 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-8 - INFO: Pass: ContainsInstruction - 0.05937 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: CXCancellation - 0.08416 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: GatesInBasis - 0.05841 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Depth - 0.06700 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.02432 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: Size - 0.04792 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: FixedPoint - 0.02933 (ms)
qiskit.transpiler.runningpassmanager - ForkProcess-7 - INFO: Pass: ContainsInstruction - 0.06461 (ms)
qiskit.compiler.transpiler - MainProcess - INFO: Total Transpile Time - 393.94832 (ms)
A présent, le format des messages du journal a été modifié et il inclut le nom du process de transpilation qui l’émet, ainsi il est facile de voir quels sont les messages qui ont un lien entre eux.
Il y a de nombreuses manières de paramétrer le contenu du journal de messages. L’exemple précédent est assez limité, vous pouvez vous reporter à la documentation pour d’autres examples et options pour construire des configurations qui correspondent à vos préférences et aux cas d’usage que vous avez.
[35]:
import qiskit.tools.jupyter
%qiskit_version_table
%qiskit_copyright
Version Information
Qiskit Software | Version |
---|---|
qiskit-terra | 0.22.3 |
qiskit-aer | 0.11.2 |
qiskit-ignis | 0.7.0 |
qiskit-ibmq-provider | 0.19.2 |
qiskit | 0.39.4 |
System information | |
Python version | 3.10.6 |
Python compiler | GCC 11.3.0 |
Python build | main, Nov 14 2022 16:10:14 |
OS | Linux |
CPUs | 4 |
Memory (Gb) | 3.7695083618164062 |
Thu Dec 22 18:19:13 2022 JST |
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.
[ ]: