Skip to main content
IBM Quantum Platform

DAGDependencia

class qiskit.dagcircuit.DAGDependency

GitHub

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_clbits(clbits)

GitHub

Añade cables clbit individuales.

add_creg

add_creg(creg)

GitHub

Añade clbits en un registro clásico.

add_op_node

add_op_node(operation, qargs, cargs)

GitHub

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_qreg(qreg)

GitHub

Añade qubits en un registro cuántico.

add_qubits

add_qubits(qubits)

GitHub

Añade cables qubit individuales.

copy

copy()

GitHub

Función para copiar un objeto DAGDependency. :returns: una copia de un objeto DAGDependency. :rtype: DAGDependencia

depth

depth()

GitHub

Devuelve la profundidad del circuito. :returns: la profundidad del circuito :rtype: int

direct_predecessors

direct_predecessors(node_id)

GitHub

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)

GitHub

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')

GitHub

Dibuja el gráfico DAGDependencia.

Esta función requiere pydot, que a su vez requiere que Graphviz esté instalado.

Aviso

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()

GitHub

Enumeración de todas las aristas.

Devuelve

correspondiente a la etiqueta.

Tipo de retorno

Lista

get_edges

get_edges(src_id, dest_id)

GitHub

Enumeración de aristas entre dos nodos mediante el método get_all_edge_data.

Parámetros

  • src_id (int) – etiqueta del primer nodo.
  • dest_id (int) – etiqueta del segundo nodo.

Devuelve

correspondientes a todas las aristas entre los dos nodos.

Tipo de retorno

Lista

get_in_edges

get_in_edges(node_id)

GitHub

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)

GitHub

Parámetros

node_id (int) – etiqueta del nodo considerado.

Devuelve

correspondiente a la etiqueta.

Tipo de retorno

nodo

get_nodes

get_nodes()

GitHub

Devuelve

iterador sobre todos los nodos.

Tipo de retorno

generador (dict )

get_out_edges

get_out_edges(node_id)

GitHub

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)

GitHub

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)

GitHub

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_block proporcionado por un único nodo introduciría un ciclo (lo que invalidaría el DAGDependency) y lanzará un DAGDependencyError si se introdujera un ciclo. Esta comprobación conlleva una penalización de tiempo de ejecución. Si puede garantizar que su node_block de entrada es un bloque contiguo y no introducirá un ciclo cuando se contraiga a un solo nodo, esto se puede establecer en False para 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

size()

GitHub

Devuelve el número de puertas del circuito

successors

successors(node_id)

GitHub

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

to_retworkx

to_retworkx()

GitHub

Devuelve la DAGDependencia en formato retworkx.

topological_nodes

topological_nodes()

GitHub

Nodos de rendimiento en orden topológico.

Devuelve

nodo en orden topológico.

Tipo de retorno

generator (DAGNode )

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