DAGDependencia
class qiskit.dagcircuit.DAGDependency
Bases: object
Objeto para representar un circuito cuántico como un grafo acíclico dirigido (DAG) mediante dependencias de operaciones (es decir, ausencia de conmutación).
Los nodos del grafo son operaciones representadas por puertas cuánticas. Las aristas corresponden a la no conmutación entre dos operaciones (es decir, una dependencia). Una arista dirigida del nodo A al nodo B significa que la operación A no conmuta con la operación B. Los métodos del objeto permiten construir circuitos.
Los nodos del grafo tienen los siguientes atributos: 'operación', 'sucesores', 'predecesores'.
Ejemplo:
Circuito de timbre sin medida.
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘El DAG de dependencias del circuito anterior está representado por dos nodos. La primera corresponde a la puerta de Hadamard, la segunda a la puerta CNOT como las puertas no conmutan hay una arista entre los dos nodos.
Referencia:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. y Woerner, S., 2020. Emparejamiento de patrones exacto y práctico para la optimización de circuitos cuánticos. arXiv:1909.05270
Crear una DAGDependencia vacía.
Atributos
global_phase
Devuelve la fase global del circuito.
Métodos
add_clbits
add_creg
add_op_node
add_op_node(operation, qargs, cargs)
Añade un DAGDepNode al grafo y actualiza las aristas.
Parámetros
- operation (qiskit.circuit.Operation) – funcionamiento como puerta cuántica
- qargs (list[Qubit]) – lista de qubits sobre los que actúa la operación
- cargs (list[Clbit]) – lista de cables clásicos a los que conectar
add_qreg
add_qubits
copy
copy()
Función para copiar un objeto DAGDependency. :returns: una copia de un objeto DAGDependency. :rtype: DAGDependencia
depth
depth()
Devuelve la profundidad del circuito. :returns: la profundidad del circuito :rtype: int
direct_predecessors
direct_predecessors(node_id)
Id de predecesores directos de un nodo dado como lista ordenada.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
predecesores directos id como lista ordenada
Tipo de retorno
Lista
direct_successors
direct_successors(node_id)
Id de sucesores directos de un nodo dado como lista ordenada.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
sucesores directos id como lista ordenada
Tipo de retorno
Lista
draw
draw(scale=0.7, filename=None, style='color')
Dibuja el gráfico DAGDependencia.
Esta función requiere pydot, que a su vez requiere que Graphviz esté instalado.
Esta función ejecutará la herramienta Graphviz del sistema sobre un archivo que contenga cadenas de texto controlables por el usuario (como etiquetas de puertas o nombres de registros). Se recomienda llamar a esta función únicamente con datos de confianza.
Parámetros
- scale (float) – factor de escala
- filename (str) – ruta del archivo donde se guardará la imagen (el formato se deduce del nombre)
- style (str) – 'plain': Gráfico B&W 'color' (por defecto): nodos de entrada/salida/op en color
Devuelve
si está en el cuaderno Jupyter y no se guarda en un archivo; en caso contrario, Ninguno.
Tipo de retorno
IPython.display.Image
get_all_edges
get_all_edges()
Enumeración de todas las aristas.
Devuelve
correspondiente a la etiqueta.
Tipo de retorno
Lista
get_edges
get_edges(src_id, dest_id)
Enumeración de aristas entre dos nodos mediante el método get_all_edge_data.
Parámetros
Devuelve
correspondientes a todas las aristas entre los dos nodos.
Tipo de retorno
Lista
get_in_edges
get_in_edges(node_id)
Enumeración de todas las aristas entrantes para un nodo dado.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
datos de los bordes entrantes correspondientes.
Tipo de retorno
Lista
get_node
get_node(node_id)
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
correspondiente a la etiqueta.
Tipo de retorno
nodo
get_nodes
get_out_edges
get_out_edges(node_id)
Enumeración de todas las aristas salientes de un nodo dado.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
datos de los bordes de salida correspondientes.
Tipo de retorno
Lista
predecessors
predecessors(node_id)
Id de predecesores de un nodo dado como lista ordenada.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
todos los id predecesores como lista ordenada
Tipo de retorno
Lista
replace_block_with_op
replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)
Sustituye un bloque de nodos por un único nodo.
Se utiliza para consolidar un bloque de DAGDepNodes en una sola operación. Un ejemplo típico es un bloque de compuertas CX y SWAP consolidadas en un LinearFunction. Esta función es una adaptación de una función similar de DAGCircuit.
Es importante que dicha consolidación preserve los supuestos de conmutatividad presentes en DAGDependency. Como ejemplo, supongamos que cada nodo de un bloque [A, B, C, D] conmuta con otro nodo E. Sea F el nodo consolidado, F = A o B o C o D. Entonces F también conmuta con E, y por tanto el resultado de sustituir [A, B, C, D] por F resulta en una DAGDependencia válida. Es decir, cualquier deducción sobre conmutatividad en DAGDependencia consolidada es correcta. Por otro lado, supongamos que al menos uno de los nodos, digamos B, no conmuta con E. Entonces la DAGDependencia consolidada implicaría que F no conmuta con E. Aunque es posible que F y E se desplacen realmente, cabe suponer que no lo hacen. Es decir, la aplicación actual de la consolidación puede conducir a resultados subóptimos, pero no incorrectos.
Parámetros
- node_block (List[DAGDepNode]) – Una lista de nodos dag que representa el bloque de nodos a sustituir
- op (qiskit.circuit.Operation) – La operación para sustituir el bloque por
- wire_pos_map (Dict[Qubit, int]) – El diccionario que asigna el qarg a la posición. Esto es necesario para reconstruir el orden qarg sobre múltiples compuertas en el nodo op único combinado.
- cycle_check (bool) – Cuando se establece en True, este método comprobará si sustituir el
node_blockproporcionado por un único nodo introduciría un ciclo (lo que invalidaría elDAGDependency) y lanzará unDAGDependencyErrorsi se introdujera un ciclo. Esta comprobación conlleva una penalización de tiempo de ejecución. Si puede garantizar que sunode_blockde entrada es un bloque contiguo y no introducirá un ciclo cuando se contraiga a un solo nodo, esto se puede establecer enFalsepara mejorar el rendimiento en tiempo de ejecución de este método.
Eleva
DAGDependencyError - si cycle_check está ajustado a True y la sustitución del bloque especificado introduce un ciclo o si node_block está vacío.
size
successors
successors(node_id)
Id de sucesores de un nodo dado como lista ordenada.
Parámetros
node_id (int) – etiqueta del nodo considerado.
Devuelve
todos los sucesores id como una lista ordenada
Tipo de retorno
Lista