Schnitte
qiskit_addon_utils.slicing
Utility-Methoden für Circuit Slicing.
Weitere Informationen finden Sie in der Anleitung, in der dieses Submodul beschrieben wird.
combine_slices
combine_slices(slices, include_barriers=False)
Kombinieren Sie N-Qubit-Scheiben einer Schaltung zu einer einzigen Schaltung.
Parameter
- slices (Sequence[QuantumCircuit]) – Die N-Qubit-Schaltkreisscheiben.
- include_barriers (bool) – Wenn
True, legen Sie Barrieren zwischen die einzelnen Scheiben.
Rückgabe
A QuantumCircuit wobei die Slices nacheinander angehängt werden.
Erhöht
ValueError - Zwei Input-Slices wurden für eine unterschiedliche Anzahl von Qubits definiert.
Rückgabetyp
QuantumCircuit | Keine
slice_by_barriers
slice_by_barriers(circuit)
Teilen Sie eine QuantumCircuit in Scheiben um Vollkreisbarrieren herum.
Barrieren, die nicht auf alle Schaltkreis-Qubits wirken, werden als normale Operationen behandelt und in die Slices einbezogen. Barrieren, die auf alle Qubits wirken, werden als Slice-Positionen interpretiert und nicht in die Ausgabe-Slices aufgenommen.
Parameter
circuit (QuantumCircuit) – Der aufzuteilende Stromkreis.
Rückgabe
Eine Folge von QuantumCircuit objekten, eines für jeden Slice.
Rückgabetyp
liste [ QuantumCircuit ]
slice_by_coloring
slice_by_coloring(circuit, coloring)
Teilen Sie eine QuantumCircuit in Scheiben auf, indem Sie die mitgelieferte Kantenfärbung verwenden.
CollectOpColorZwei-Qubit-Gatter, die auf gleichfarbige Qubit-Verbindungen (Kanten) wirken, werden mithilfe von gierig zu Schnitten gruppiert. Dies erfolgt in der Reihenfolge steigender Farbwerte (die ganzzahligen Werte, denen die einzelnen Kanten zugeordnet sind).
Beachten Sie, dass dies nicht bedeutet, dass niedrig bewertete Farbscheiben garantiert ganz links in Ihrer Schaltung liegen. Nachfolgend ein Beispiel, um dies zu verdeutlichen.
>>> 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 ├─░──────
└───┘ ░Einzel-Qubit-Gatter werden mithilfe von CollectOpSize… in einem einzigen Slice zusammengefasst.
Parameter
- circuit (QuantumCircuit) – Der aufzuteilende Stromkreis.
- coloring (dict[tuple[int, int], int]) – Ein Wörterbuch, das Kanten (Paare von Ganzzahlen) auf Farbwerte abbildet.
Rückgabe
Eine Folge von QuantumCircuit objekten, eines für jeden Slice.
Erhöht
- ValueError - Die eingegebene Kantenfärbung ist ungültig.
- ValueError - Der Schaltanweisung konnte keine Farbe zugewiesen werden.
Rückgabetyp
liste [ QuantumCircuit ]
slice_by_depth
slice_by_depth(circuit, max_slice_depth)
Aufteilung von QuantumCircuit in Slices auf Basis der Tiefe.
Diese Funktion wandelt die Eingabeschaltung in eine DAGCircuit und stapelt die Folge von depth-1 Schichten, die von layers() in Schichten mit einer Tiefe, die max_slice_depth nicht überschreitet. Dies wird dadurch erreicht, dass die Schichten in Slices unterteilt werden, bis die maximale Schichttiefe erreicht ist, und dann eine neue Schicht mit der nächsten Schicht begonnen wird. Die endgültige Scheibe kann aus weniger als max_slice_depth Schichten bestehen.
Parameter
- circuit (QuantumCircuit) – Der aufzuteilende Stromkreis.
- max_slice_depth (int) – Die maximale Tiefe eines bestimmten Slice.
Rückgabe
Eine Folge von QuantumCircuit objekten, eines für jeden Slice.
Rückgabetyp
liste [ QuantumCircuit ]
slice_by_gate_types
slice_by_gate_types(circuit)
Aufteilung von QuantumCircuit in depth-1 Slices von Operationen desselben Typs.
Anmerkung: Benachbarte Slices, die keine gemeinsamen Qubits haben, können beliebig angeordnet werden.
Parameter
circuit (QuantumCircuit) – Der aufzuteilende Stromkreis.
Rückgabe
Eine Folge von QuantumCircuit objekten, eines für jeden Slice.
Rückgabetyp
liste [ QuantumCircuit ]