Skip to main content
IBM Quantum Platform

StarPreRouting

class qiskit.transpiler.passes.StarPreRouting

GitHub

Bases: TransformationPass

Enrutamiento previo de estrella a lineal

Este paso es un paso de optimización lógica que reescribe cualquier subcircuito de conectividad en estrella de compuertas 2q como un equivalente de conectividad lineal con intercambios.

Por ejemplo:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import StarPreRouting

qc = QuantumCircuit(10)
qc.h(0)
qc.cx(0, range(1, 5))
qc.h(9)
qc.cx(9, range(8, 4, -1))
qc.measure_all()
StarPreRouting()(qc).draw("mpl")
Diagrama del circuito generado por el código anterior.

Este pase se inspiró en un pase similar descrito en la Sección IV de: C. Campbell et al., "Superstaq: Deep Optimization of Quantum Programs," 2023 IEEE International Conference on Quantum Computing and Engineering (QCE), Bellevue, WA, USA, 2023, pp. 1020-1032, doi: 10.1109/QCE57702.2023.00116.


Atributos

is_analysis_pass

Comprueba si el pase es un pase de análisis.

Si el pase es un AnalysisPass, significa que el pase puede analizar el DAG y escribir los resultados de ese análisis en el conjunto de propiedades. Este tipo de paso no permite realizar modificaciones en el DAG.

is_transformation_pass

Comprueba si el pase es un pase de transformación.

Si el pase es un TransformationPass, significa que el pase puede manipular el DAG, pero no puede modificar el conjunto de propiedades (pero se puede leer).


Métodos

collect_all_matching_blocks

collect_all_matching_blocks(dag, min_block_size=2)

GitHub

Recoge todos los bloques que coinciden con una función de filtrado dada filter_fn. De este modo, se encuentra iterativamente el bloque más grande que no coincide con filter_fn, luego el bloque más grande que coincide con filter_fn, y así sucesivamente, hasta que no queden más nodos sin recoger. Intuitivamente, encontrar bloques más grandes de nodos no coincidentes ayuda a encontrar más tarde bloques más grandes de nodos coincidentes. La opción min_block_size especifica el número mínimo de puertas en el bloque para que éste sea recogido.

Por defecto, los bloques se recogen en la dirección de las entradas hacia las salidas del circuito. La opción collect_from_back permite cambiar esta dirección, es decir, recoger bloques de las salidas hacia las entradas del circuito.

Devuelve sólo la lista de bloques coincidentes.

collect_matching_block

collect_matching_block(dag, filter_fn)

GitHub

Recoge iterativamente el mayor bloque de nodos de entrada (es decir, nodos con _in_degree igual a 0) que coinciden con una función de filtrado dada. Algunos ejemplos son la recopilación de bloques de compuertas swap, bloques de compuertas lineales (CX y SWAP), bloques de compuertas Clifford, bloques de compuertas de un qubit, bloques de compuertas de dos qubits, etc. Aquí "iterativamente" significa que una vez que se recoge un nodo, la _in_degree de cada uno de sus sucesores inmediatos se reduce en 1, permitiendo que más nodos se conviertan en entrada y sean elegibles para ser recogidos en el bloque actual. Devuelve el bloque de nodos recogidos.

determine_star_blocks_processing

determine_star_blocks_processing(dag, min_block_size)

GitHub

Devuelve bloques estrella en dag y el orden de procesamiento de los nodos dentro de estos bloques estrella :param dag: un dag en el que deben determinarse los bloques estrella. :type dag: DAGCircuit o DAGDependency :param min_block_size: número mínimo de puertas de dos qubits en un bloque estrella. :type min_block_size: int

Devuelve

una lista de bloques estrella en el dag dado Union[ [ListDAGOpNode], [ListDAGDepNode] ]: una lista de operaciones que especifica el orden de procesamiento

Tipo de retorno

[ListStarBlock]

Parámetros

execute

execute(passmanager_ir, state, callback=None)

GitHub

Ejecutar la tarea de optimización para la entrada Qiskit IR.

Parámetros

  • passmanager_ir (Any) – Qiskit IR para optimizar.
  • state (PassManagerState) – Estado asociado a la ejecución del flujo de trabajo por el propio gestor de pases.
  • callback (Callable | None) – Una función de devolución de llamada que se invoca cada vez que se ejecuta una tarea de optimización.

Devuelve

Qiskit IR optimizado y estado del flujo de trabajo.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nombre del pase.

Tipo de retorno

str

run

run(dag)

GitHub

Ejecutar un pase en el DAGCircuit. Esto lo implementa el desarrollador del pase.

Parámetros

dag - el dag en el que se ejecuta el pase.

Eleva

NotImplementedError - cuando esto se deja sin implementar para un pase.

star_preroute

star_preroute(dag, blocks, processing_order)

GitHub

Devuelve bloques en estrella en el dag y el orden de procesamiento de los nodos dentro de estos bloques en estrella :param dag: un dag en el que se debe realizar el preencaminamiento en estrella. :type dag: DAGCircuit o DAGDependency :param blocks: una lista de bloques en estrella en el dag dado. :type blocks: [ListStarBlock] :param procesamiento_orden: una lista de operaciones que especifican :type procesamiento_orden: Union[ [ListDAGOpNode], [ListDAGDepNode] ] :param orden procesamiento:

Devuelve

un dag que especifica el circuito pre-enrutado qubit_mapping: el mapeo de qubits final tras el pre-enrutamiento

Tipo de retorno

nuevo_dag

update_status

update_status(state, run_state)

GitHub

Actualizar el estado del flujo de trabajo.

Parámetros

  • state (PassManagerState) – Pasar estado de gestor a actualizar.
  • run_state (RunState) – Estado de finalización de la tarea actual.

Devuelve

Estado del gestor de pases actualizado.

Tipo de retorno

PassManagerState

¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.