tranchage
qiskit_addon_utils.slicing
Méthodes utilitaires pour le découpage de circuits.
Pour plus d'informations, consultez le guide pratique qui traite de ce sous-module.
combine_slices
combine_slices(slices, include_barriers=False)
Combiner des tranches de N-qubits d'un circuit en un seul circuit.
Paramètres
- slices (Sequence[QuantumCircuit]) – Les tranches du circuit N-qubit.
- include_barriers (bool) – Si
True, placer des barrières entre chaque tranche.
Retours
A QuantumCircuit avec les tranches annexées dans l'ordre séquentiel.
Augmentations
ValueError - Deux tranches d'entrée ont été définies sur des nombres différents de qubits.
Type de retour
QuantumCircuit | Aucun
slice_by_barriers
slice_by_barriers(circuit)
Diviser un site QuantumCircuit en tranches autour des barrières à circuit complet.
Les barrières qui n'agissent pas sur tous les qubits du circuit seront traitées comme des opérations normales et incluses dans les tranches. Les barrières qui agissent sur tous les qubits seront interprétées comme des emplacements de tranches et ne seront pas incluses dans les tranches de sortie.
Paramètres
circuit (QuantumCircuit) – Le circuit à diviser.
Retours
Une séquence d'objets QuantumCircuit d'objets, un pour chaque tranche.
Type de retour
liste [ QuantumCircuit ]
slice_by_coloring
slice_by_coloring(circuit, coloring)
Découpez un site QuantumCircuit en tranches en utilisant la coloration des bords prévue à cet effet.
Les portes à deux qubits agissant sur des connexions de qubits (arêtes) de même couleur seront regroupées de manière « gloutonne » en tranches à l'aide de CollectOpColor. Cette opération sera effectuée par ordre croissant de valeur de couleur (les valeurs entières auxquelles chaque arête est associée).
Notez que cela ne signifie pas que les tranches de couleur de faible valeur sont garanties d'être les plus à gauche de votre circuit. Voici un exemple pour illustrer ce point.
>>> from qiskit import QuantumCircuit
>>> circuit = QuantumCircuit(5)
>>> _ = circuit.cx(0, 1)
>>> _ = circuit.cx(3, 4)
>>> _ = circuit.cx(2, 3)
>>> circuit.draw()
q_0: ──■───────
┌─┴─┐
q_1: ┤ X ├─────
└───┘
q_2: ───────■──
┌─┴─┐
q_3: ──■──┤ X ├
┌─┴─┐└───┘
q_4: ┤ X ├─────
└───┘
>>> coloring = {(0, 1): 0, (2, 3): 0, (3, 4): 1}
>>> from qiskit_addon_utils.slicing import combine_slices, slice_by_coloring
>>> slices = slice_by_coloring(circuit, coloring)
# for illustration purposes, we are recombining the slices with barriers
>>> recombined = combine_slices(slices, include_barriers=True)
>>> recombined.draw()
░
q_0: ──────░───■──
░ ┌─┴─┐
q_1: ──────░─┤ X ├
░ └───┘
q_2: ──────░───■──
░ ┌─┴─┐
q_3: ──■───░─┤ X ├
┌─┴─┐ ░ └───┘
q_4: ┤ X ├─░──────
└───┘ ░Les portes à un seul qubit seront regroupées dans une seule tranche à l'aide de CollectOpSize.
Paramètres
- circuit (QuantumCircuit) – Le circuit à diviser.
- coloring (dict[tuple[int, int], int]) – Un dictionnaire associant les arêtes (paires d'entiers) aux valeurs de couleur.
Retours
Une séquence d'objets QuantumCircuit d'objets, un pour chaque tranche.
Augmentations
- ValueError - La coloration du bord d'entrée n'est pas valide.
- ValueError - Impossible d'attribuer une couleur à l'instruction de circuit.
Type de retour
liste [ QuantumCircuit ]
slice_by_depth
slice_by_depth(circuit, max_slice_depth)
Diviser un site QuantumCircuit en tranches en fonction de la profondeur.
Cette fonction transforme le circuit d'entrée en un circuit de sortie DAGCircuit et met en lots la séquence de couches depth-1 en sortie de layers() en tranches dont la profondeur ne dépasse pas max_slice_depth. Pour ce faire, les couches sont composées en tranches jusqu'à ce que la profondeur maximale de la tranche soit atteinte, puis une nouvelle tranche est créée avec la couche suivante. La tranche finale peut être composée de moins de max_slice_depth couches.
Paramètres
- circuit (QuantumCircuit) – Le circuit à diviser.
- max_slice_depth (int) – La profondeur maximale d'une tranche donnée.
Retours
Une séquence d'objets QuantumCircuit d'objets, un pour chaque tranche.
Type de retour
liste [ QuantumCircuit ]
slice_by_gate_types
slice_by_gate_types(circuit)
Découper un site QuantumCircuit en depth-1 tranches d'opérations de même type.
Remarque : les tranches adjacentes ne partageant aucun qubit peuvent être ordonnées de manière arbitraire.
Paramètres
circuit (QuantumCircuit) – Le circuit à diviser.
Retours
Une séquence d'objets QuantumCircuit d'objets, un pour chaque tranche.
Type de retour
liste [ QuantumCircuit ]