corte
qiskit_addon_utils.slicing
Métodos de utilidad para el corte de circuitos.
Para más información, consulte la guía práctica en la que se trata este submódulo.
combine_slices
combine_slices(slices, include_barriers=False)
Combinar trozos de N-qubit de un circuito en un único circuito.
Parámetros
- slices (Sequence[QuantumCircuit]) – El circuito N-qubit corta.
- include_barriers (bool) – Si
True, coloque barreras entre cada rebanada.
Devuelve
A QuantumCircuit con los cortes añadidos en orden secuencial.
Eleva
ValueError - Se definieron dos cortes de entrada en diferentes números de qubits.
Tipo de retorno
QuantumCircuit | Ninguno
slice_by_barriers
slice_by_barriers(circuit)
Divida un QuantumCircuit en rodajas alrededor de las barreras de circuito completo.
Las barreras que no actúen sobre todos los qubits del circuito se tratarán como operaciones normales y se incluirán en los cortes. Las barreras que actúan sobre todos los qubits se interpretarán como ubicaciones de rebanada y no se incluirán en las rebanadas de salida.
Parámetros
circuit (QuantumCircuit) – El circuito a dividir.
Devuelve
Una secuencia de QuantumCircuit objetos, uno por cada trozo.
Tipo de retorno
lista [ QuantumCircuit ]
slice_by_coloring
slice_by_coloring(circuit, coloring)
Divide un QuantumCircuit en rodajas utilizando la coloración de bordes proporcionada.
Las puertas de dos qubits que actúan sobre conexiones de qubits (aristas) del mismo color se agruparán de forma «codiciosa» en segmentos utilizando CollectOpColor. Esto se hará en orden ascendente según el valor de color (los valores enteros a los que se asigna cada arista).
Tenga en cuenta que esto no significa que los cortes de color de valor bajo estén garantizados para estar más a la izquierda en su circuito. A continuación, un ejemplo para subrayarlo.
>>> 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 ├─░──────
└───┘ ░Las puertas de un solo qubit se agruparán en una única sección mediante CollectOpSize.
Parámetros
- circuit (QuantumCircuit) – El circuito a dividir.
- coloring (dict[tuple[int, int], int]) – Un diccionario que asigna aristas (pares de enteros) a valores de color.
Devuelve
Una secuencia de QuantumCircuit objetos, uno por cada trozo.
Eleva
- ValueError - La coloración del borde de entrada no es válida.
- ValueError - No se ha podido asignar un color a la instrucción de circuito.
Tipo de retorno
lista [ QuantumCircuit ]
slice_by_depth
slice_by_depth(circuit, max_slice_depth)
Divida una QuantumCircuit en rodajas en función de la profundidad.
Esta función transforma el circuito de entrada en un DAGCircuit y agrupa la secuencia de depth-1 capas de salida de layers() en capas de profundidad no superior a max_slice_depth. Esto se consigue componiendo capas en rodajas hasta alcanzar la profundidad máxima de rodaja y comenzando entonces una nueva rodaja con la siguiente capa. El corte final puede estar compuesto por menos de max_slice_depth capas.
Parámetros
- circuit (QuantumCircuit) – El circuito a dividir.
- max_slice_depth (int) – La profundidad máxima de un corte determinado.
Devuelve
Una secuencia de QuantumCircuit objetos, uno por cada trozo.
Tipo de retorno
lista [ QuantumCircuit ]
slice_by_gate_types
slice_by_gate_types(circuit)
Divide una QuantumCircuit en depth-1 rebanadas de operaciones del mismo tipo.
Nota: Los cortes adyacentes que no compartan qubits en común pueden ordenarse arbitrariamente.
Parámetros
circuit (QuantumCircuit) – El circuito a dividir.
Devuelve
Una secuencia de QuantumCircuit objetos, uno por cada trozo.
Tipo de retorno
lista [ QuantumCircuit ]