Skip to main content
IBM Quantum Platform

Circuito DAG

class qiskit.dagcircuit.DAGCircuit

Bases: object

Circuito cuántico como grafo acíclico dirigido.

Hay 3 tipos de nodos en el gráfico: entradas, salidas y operaciones. Los nodos están conectados por aristas dirigidas que corresponden a qubits y bits.


Atributos

clbits

Devuelve la secuencia actual de instancias Clbit en forma de lista.

Aviso

No modifique esta lista usted mismo. Invalidará las DAGCircuit estructuras de datos.

Devuelve

La secuencia actual de clbits registrados.

Tipo de retorno

lista(Clbit)

cregs

Devuelve el dict que contiene el ClassicalRegisters en el circuito

duration

Devuelve la duración total del circuito, establecida por un pase del transpilador de programación. Su unidad se especifica mediante unit

DEPRECATED desde Qiskit 1.3.0 y se eliminará en Qiskit 3.0.0

global_phase

Devuelve la fase global del circuito.

input_map

metadata

Metadatos del circuito

name

Nombre del circuito. Generalmente, corresponde al nombre de la página QuantumCircuit a partir de la cual se generó el DAG.

node_counter

Devuelve el número de nodos del dag.

num_captured_stretches

Número de tramos capturados seguidos por el circuito.

num_captured_vars

Número de variables clásicas capturadas seguidas por el circuito.

num_declared_stretches

Número de tramos locales declarados seguidos por el circuito.

num_declared_vars

Número de variables locales clásicas declaradas seguidas por el circuito.

num_input_vars

Número de variables clásicas de entrada seguidas por el circuito.

num_stretches

Número total de tramos seguidos por el circuito.

num_vars

Número total de variables clásicas seguidas por el circuito.

output_map

qregs

Devuelve el dict que contiene el QuantumRegisters en el circuito

qubits

Devuelve la secuencia actual de instancias Qubit en forma de lista.

Aviso

No modifique esta lista usted mismo. Invalidará las DAGCircuit estructuras de datos.

Devuelve

La secuencia actual de qubits registrados.

Tipo de retorno

lista(Qubit)

unit

Devuelve la unidad en la que se ha especificado la duración.

DEPRECATED desde Qiskit 1.3.0 y se eliminará en Qiskit 3.0.0

wires

Devuelve una lista de los cables en orden.


Métodos

add_captured_stretch

add_captured_stretch(stretch)

Añade un tramo capturado al circuito.

Parámetros

tramo - el tramo a añadir.

add_captured_var

add_captured_var(var)

Añade una variable capturada al circuito.

Parámetros

var - la variable a añadir.

add_clbits

add_clbits(clbits)

Añade cables clbit individuales.

add_creg

add_creg(creg)

Suma todos los cables en un registro clásico.

add_declared_stretch

add_declared_stretch(stretch)

Añade un tramo declarado al circuito.

Parámetros

tramo - el tramo a añadir.

add_declared_var

add_declared_var(var)

Añade una variable local declarada al circuito.

Parámetros

var - la variable a añadir.

add_input_var

add_input_var(var)

Añade una variable de entrada al circuito.

Parámetros

var - la variable a añadir.

add_qreg

add_qreg(qreg)

Suma todos los cables en un registro cuántico.

add_qubits

add_qubits(qubits)

Añade cables qubit individuales.

ancestors

ancestors(node)

Devuelve el conjunto de los ancestros de un nodo como DAGOpNodes y DAGInNodes.

Los ancestros son el conjunto de todos los nodos que pueden llegar al nodo destino. Mientras que DAGCircuit.predecessors() sólo contiene los predecesores inmediatos, los ancestros contienen recursivamente los predecesores de cada predecesor.

apply_operation_back

apply_operation_back(op, qargs=None, cargs=None, *, check=True)

Aplica una operación a la salida del circuito.

Parámetros

  • op (qiskit.circuit.Operation) – la operación asociada al nodo DAG
  • qargs (tuple[Qubit]) – qubits a los que se aplicará el op
  • cargs (tuple[Clbit]) – cbits a los que se aplicará la op
  • check (bool) – Si True (por defecto), esta función obligará a que se mantengan las invariantes de la estructura de datos DAGCircuit invariantes de la estructura de datos (todos los qargs son Qubit\ s, todos están en el DAG, etc). Si False, el llamante debe mantener estas invariantes por sí mismo, pero se saltará el coste de varias comprobaciones. Esto es muy útil cuando se construye un nuevo DAG a partir de una fuente de nodos conocidos.

Devuelve

el nodo de la operación que se ha añadido al dag

Tipo de retorno

DAGOpNode

Eleva

DAGCircuitError - si un nodo hoja está conectado a varias salidas

apply_operation_front

apply_operation_front(op, qargs=None, cargs=None, *, check=True)

Aplica una operación a la entrada del circuito.

Parámetros

  • op (qiskit.circuit.Operation) – la operación asociada al nodo DAG
  • qargs (tuple[Qubit]) – qubits a los que se aplicará el op
  • cargs (tuple[Clbit]) – cbits a los que se aplicará la op
  • check (bool) – Si True (por defecto), esta función obligará a que se mantengan las invariantes de la estructura de datos DAGCircuit invariantes de la estructura de datos (todos los qargs son Qubit\ s, todos están en el DAG, etc). Si False, el llamante debe mantener estas invariantes por sí mismo, pero se saltará el coste de varias comprobaciones. Esto es muy útil cuando se construye un nuevo DAG a partir de una fuente de nodos conocidos.

Devuelve

el nodo de la operación que se ha añadido al dag

Tipo de retorno

DAGOpNode

Eleva

DAGCircuitError - si los nodos iniciales están conectados a varias aristas de salida

bfs_successors

bfs_successors(node)

Devuelve un iterador de tuplas de (DAGNode, [DAGNodes]) donde el DAGNode es el nodo actual y [DAGNodes] es una lista de los sucesores en orden BFS.

classical_predecessors

classical_predecessors(node)

Devuelve el iterador de los predecesores de un nodo que están conectados por una arista clásica como DAGOpNodes y DAGInNodes.

classical_successors

classical_successors(node)

Devuelve el iterador de los sucesores de un nodo que están conectados por una arista clásica como DAGOpNodes y DAGOutNodes.

collect_1q_runs

collect_1q_runs()

Devuelve un conjunto de ejecuciones no condicionales de 1q nodos "op".

collect_2q_runs

collect_2q_runs()

Devuelve un conjunto de ejecuciones no condicionales de 2q nodos "op".

collect_runs

collect_runs(namelist)

Devuelve un conjunto de ejecuciones no condicionales de nodos "op" con los nombres dados.

Por ejemplo, "... h [q0]; cx [q0], [q1]; cx [q0], [q1]; h [q1];.." produciría la tupla de nodos cx como un elemento del conjunto devuelto por una llamada a collect_runs( ["cx"]). Si en su lugar los nodos cx fueran "cx [q0], [q1]; cx [q1], [q0];", el método seguiría devolviendo el par en una tupla. La lista de nombres puede contener nombres que no estén en la base del circuito.

Los nodos deben tener un único sucesor para continuar la ejecución.

compose

compose(other, qubits=None, clbits=None, front=False, inplace=True, *, inline_captures=False)

Componga el circuito other en la salida de este circuito.

Un subconjunto de cables de entrada de other se asigna a un subconjunto de cables de salida de este circuito.

other puede ser más estrecha o de igual anchura que self.

Parámetros

  • other (DAGCircuit) – circuito para componer con uno mismo
  • qubits (list[Qubit|int]) – qubits de uno mismo para componer.
  • clbits (list[Clbit|int]) – trozos de sí mismo para componer.
  • front (bool) – Si el valor es «True», se aplicará la composición frontal (aún no implementada)
  • inplace (bool) – Si es True, modifica el objeto. En caso contrario, devuelve el circuito compuesto.
  • inline_captures (bool) – Si True, las variables marcadas como "capturas" en el DAG other se alinearán en los usos existentes de esas mismas variables en self. Si False, todas las variables de other deben ser distintas de self, y se añadirán a self.

Devuelve

el dag compuesto (devuelve None si inplace==True).

Tipo de retorno

Circuito DAG

Eleva

DAGCircuitError - si other es más ancho o hay mapeados de bordes duplicados.

control_flow_op_nodes

control_flow_op_nodes()

Obtiene una lista de nodos "op" en el dag que contienen instrucciones de flujo de control.

Devuelve

La lista de nodos dag que contienen operaciones de flujo de control.

Tipo de retorno

lista [ DAGOpNode ]

copy_empty_like

copy_empty_like(*, vars_mode=Ellipsis)

Devuelve una copia de self con la misma estructura pero vacía.

Esa estructura incluye:

  • nombre y otros metadatos
  • fase global
  • duración
  • todos los qubits y clbits, incluidos los registros.

Devuelve

Una copia vacía de sí mismo.

Tipo de retorno

Circuito DAG

count_ops

count_ops(*, recurse=True)

Cuenta las apariciones de nombres de operaciones.

Parámetros

recurse - si True (por defecto), entonces recurse en operaciones de flujo de control. En todos los casos, sólo se cuenta el número de veces que la operación aparece en cualquier bloque posible; las dos ramas de los if-elses se cuentan, y los bloques de bucle for y while sólo se cuentan una vez.

Devuelve

una correspondencia entre los nombres de las operaciones y el número de veces que aparecen.

Tipo de retorno

Mapeo [str, int ]

count_ops_longest_path

count_ops_longest_path()

Cuenta las apariciones de nombres de operaciones en la ruta más larga.

Devuelve un diccionario de recuentos con el nombre de la operación como clave.

depth

depth(*, recurse=False)

Devuelve la profundidad del circuito. Si hay flujo de control presente, este recuento puede ser sólo una estimación, ya que la ruta completa del flujo de control no se puede conocer estáticamente.

Parámetros

recurse - si True, entonces recurse en operaciones de flujo de control. Los bucles For con iteradores de longitud conocida se cuentan como si el bucle se hubiera desenrollado manualmente (es decir, con cada iteración del cuerpo del bucle escrita explícitamente). Los bloques if-else toman el caso más largo de las dos ramas. Los bucles while se cuentan como si el cuerpo del bucle se ejecutara una sola vez. Por defecto es False y devuelve DAGCircuitError si hay algún flujo de control presente, para evitar devolver silenciosamente un número sin sentido.

Devuelve

la profundidad del circuito

Tipo de retorno

int

Eleva

  • DAGCircuitError - si no es un grafo acíclico dirigido
  • DAGCircuitError - si un flujo de control desconocido está presente en una llamada recursiva, o cualquier flujo de control está presente en una llamada no recursiva.

descendants

descendants(node)

Devuelve el conjunto de los descendientes de un nodo como DAGOpNodes y DAGOutNodes.

Los descendientes son el conjunto de todos los nodos a los que se puede llegar desde el nodo de destino. En comparación, DAGCircuit.successors() es un iterador que recorre los sucesores inmediatos, mientras que este método contiene todos los sucesores de los sucesores.

draw

draw(scale=0.7, filename=None, style='color')

Dibuja el circuito dag.

Esta función necesita que Graphviz esté instalado. Graphviz no es un paquete python y no puede ser instalado por pip (el paquete graphviz en PyPI es una librería de interfaz Python para Graphviz y en realidad no instala Graphviz). Puede consultar la documentación de Graphviz para saber cómo instalarlo.

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): color de los nodos de entrada/salida/op

Devuelve

si está en el cuaderno Jupyter y no se guarda en un archivo; en caso contrario, Ninguno.

Tipo de retorno

Ipython.display.Image

edges

edges(nodes=None)

Iterador para valores de arista con nodo origen y destino.

Esto funciona devolviendo las aristas salientes de los nodos especificados. Si no se especifican nodos, se devuelven todas las aristas del grafo.

Parámetros

nodes (DAGOpNode, DAGInNode, or DAGOutNode|list(DAGOpNode, DAGInNode, or DAGOutNode) – Una lista de nodos o un único nodo de entrada. Si no se especifica ninguna, se devuelven todas las aristas del gráfico.

Cesiones

borde -

la arista como una tupla con el formato

(nodo origen, nodo destino, cable de borde)

find_bit

find_bit(bit)

Encuentra localizaciones en el circuito, mapeando el Qubit y Clbit al índice posicional BitLocations se define como: BitLocations = namedtuple( “BitLocations”, ("índice", "registros"))

Parámetros

bit (Bit) – El bit a localizar.

Devuelve

Una 2-tupla. El primer elemento (index)

contiene el índice en el que se encuentra Bit (en qubits, clbitsen función de su tipo). El segundo elemento (registers) es una lista de pares (register, index) con una entrada para cada Register en el circuito que contiene el Bit (y el índice en el Register en el que se puede encontrar).

Tipo de retorno

namedtuple(int, ListTuple [(Register, int)] )

Subidas:

DAGCircuitError: Si el Bit suministrado era de tipo desconocido. DAGCircuitError: Si el Bit suministrado no se encuentra en el circuito.

front_layer

front_layer()

Devuelve una lista de nodos op en la primera capa de este dag.

gate_nodes

gate_nodes()

Obtener la lista de nodos de puerta en el dag.

Devuelve

la lista de DAGOpNodes que representan puertas.

Tipo de retorno

lista [ DAGOpNode ]

has_identifier

has_identifier(var)

¿Este identificador está en el DAG?

Parámetros

var - el identificador o nombre a comprobar.

has_stretch

has_stretch(stretch)

¿Este tramo está en el DAG?

Parámetros

var - el tramo o nombre a comprobar.

has_var

has_var(var)

¿Está esta variable en tiempo real en el DAG?

Parámetros

var - la variable o nombre a comprobar.

idle_wires

idle_wires(ignore=None)

Cables de retorno.

Parámetros

ignore (list(str)) – Lista de nombres de nodos a ignorar. Por defecto: []

Cesiones

Bit - Bit en el cable de ralentí.

Eleva

DAGCircuitError - Si el DAG no es válido

is_empty

is_empty()

Devuelve verdadero si no hay nodos de operación en el gráfico.

is_predecessor

is_predecessor(node, node_pred)

Comprueba si un segundo nodo está en los predecesores del nodo.

is_successor

is_successor(node, node_succ)

Comprueba si un segundo nodo está en los sucesores del nodo.

iter_captured_stretches

iter_captured_stretches()

Iterable sobre los tramos capturados seguidos por el circuito.

iter_captured_vars

iter_captured_vars()

Iterable sobre las variables clásicas capturadas seguidas por el circuito.

iter_captures

iter_captures()

Iterable sobre todos los identificadores capturados rastreados por el circuito.

iter_declared_stretches

iter_declared_stretches()

Iterable sobre los tramos declarados seguidos por el circuito.

iter_declared_vars

iter_declared_vars()

Iterable sobre las variables clásicas declaradas seguidas por el circuito.

iter_input_vars

iter_input_vars()

Iterable sobre las variables clásicas de entrada seguidas por el circuito.

iter_stretches

iter_stretches()

Iterable sobre todos los tramos seguidos por el circuito.

iter_vars

iter_vars()

Iterable sobre todas las variables clásicas seguidas por el circuito.

layers

layers(*, vars_mode=Ellipsis)

Produce una vista superficial en una capa de este DAGCircuit para todas las d capas de este circuito.

Una capa es un circuito cuyas puertas actúan sobre qubits disjuntos, es decir, una capa tiene profundidad 1. El número total de capas es igual a la profundidad d del circuito. Las capas están indexadas de 0 a d-1 con la capa más antigua en el índice 0. Las capas se construyen mediante un algoritmo codicioso. Cada capa devuelta es un dict que contiene {“graph”: circuit graph, “partition”: list of qubit lists}.

La capa devuelta contiene nuevas (pero semánticamente equivalentes) DAGOpNodes, DAGInNodes, y DAGOutNodes. Estos no son los mismos que los nodos del dag original, pero son equivalentes a través de DAGNode.semantic_eq ( node1, node2 ).

TODO: Las puertas que utilicen los mismos cbits acabarán en capas diferentes, tal y como está implementado actualmente. Puede que éste no sea el comportamiento deseado.

longest_path

longest_path()

Devuelve el camino más largo del dag como una lista de DAGOpNodes, DAGInNodes, y DAGOutNodes.

make_physical

make_physical(num_qubits=None)

Ponga self en la forma física canónica, con el número dado de qubits.

Esto actúa en el lugar, y no necesita atravesar el DAG. Está pensado para su uso cuando se sabe que el DAG ya representa un circuito físico, y sólo necesitamos afirmar que es la forma física canónica.

Esto borra cualquier información sobre qubits virtuales en el DAGCircuitsi lo utiliza usted mismo, deberá asegurarse de que ha creado y almacenado un archivo Layout. En efecto, esto aplica la disposición "trivial" que asigna el qubit virtual 0 al qubit físico 0, y así sucesivamente.

Parámetros

num_qubits - si se da, el número total de qubits físicos en la salida; debe ser al menos tan grande como el número de qubits en el DAG. Si no se indica, el número de qubits no cambia.

multi_qubit_ops

multi_qubit_ops()

Obtener lista de operaciones 3+ qubit. Ignora directivas como snapshot y barrier.

multigraph_layers

multigraph_layers()

Capas de rendimiento del multigrafo.

named_nodes

named_nodes(*names)

Obtiene el conjunto de nodos "op" con el nombre dado.

node

node(node_id)

Obtener el nodo en el dag.

Parámetros

node_id (int) – Identificador de nodo.

Devuelve

el nodo.

Tipo de retorno

nodo

nodes

nodes()

Iterador para valores de nodos.

Cesiones

nodo - el nodo.

nodes_on_wire

nodes_on_wire(wire, only_ops=False)

Iterador para los nodos que afectan a un cable determinado.

Parámetros

  • wire (Bit) – el cable que hay que mirar.
  • only_ops (bool) – True si sólo se desean los nodos ops; en caso contrario, se devuelven todos los nodos.

Cesiones

Iterador - los nodos sucesivos en el cable dado

Eleva

DAGCircuitError - si el cable dado no existe en el DAG

num_blocks

num_blocks()

Devuelve el número de bloques básicos de este circuito.

num_clbits

num_clbits()

Devuelve el número total de bits clásicos utilizados por el circuito.

num_ops

num_ops()

Obtiene el número de nodos op en el DAG.

num_qubits

num_qubits()

Devuelve el número total de qubits utilizados por el circuito. num_qubits() reemplaza el uso anterior de width(). DAGCircuit.width () devuelve ahora qubits + clbits por coherencia con Circuit.width () [qiskit-terra #2564].

num_tensor_factors

num_tensor_factors()

Calcula en cuántos componentes se puede descomponer el circuito.

op_nodes

op_nodes(op=None, include_directives=True)

Obtener la lista de nodos "op" en el dag.

Parámetros

  • op (Type) –qiskit.circuit.Operation subclase op nodos a devolver. Si es None, devuelve todos los nodos op.
  • include_directives (bool) – incluyen barrera, instantánea, etc.

Devuelve

la lista de nodos dag que contienen el op dado.

Tipo de retorno

lista [ DAGOpNode ]

op_predecessors

op_predecessors(node)

Devuelve el iterador de predecesores "op" de un nodo en el dag.

op_successors

op_successors(node)

Devuelve el iterador de sucesores "op" de un nodo en el dag.

predecessors

predecessors(node)

Devuelve el iterador de los predecesores de un nodo como DAGOpNodes y DAGInNodes.

properties

properties()

Devuelve un diccionario de propiedades del circuito.

quantum_causal_cone

quantum_causal_cone(qubit)

Devuelve el cono causal de un qubit.

El cono causal de un qubit es el conjunto de qubits que pueden influir en la salida de ese qubit mediante interacciones, ya sea a través de puertas u operaciones multiqubit. Conocer el cono causal de un qubit puede ser útil a la hora de depurar circuitos defectuosos, ya que puede ayudar a identificar qué cable o cables pueden estar causando el problema.

Este método no tiene en cuenta ninguna dependencia de datos clásica en DAGCircuit, los hilos de bits clásicos se ignoran a efectos de construir el cono causal.

Parámetros

qubit (Qubit) – El qubit de salida para el que queremos encontrar el cono causal.

Devuelve

El conjunto de qubits cuyas interacciones afectan a qubit.

Tipo de retorno

Set [*Qubit* ]

quantum_predecessors

quantum_predecessors(node)

Devuelve el iterador de los predecesores de un nodo que están conectados por una arista cuántica como DAGOpNodes y DAGInNodes.

quantum_successors

quantum_successors(node)

Devuelve el iterador de los sucesores de un nodo que están conectados por una arista cuántica como DAGOpNodes y DAGOutNodes.

remove_all_ops_named

remove_all_ops_named(opname)

Elimina todos los nodos de operación con el nombre dado.

remove_ancestors_of

remove_ancestors_of(node)

Elimina todos los nodos de operación ancestros de nodo.

remove_clbits

remove_clbits(*clbits)

Elimina los bits clásicos del circuito. Todos los bits DEBEN estar inactivos. También se eliminará cualquier registro con referencias a al menos uno de los bits especificados.

Aviso

Este método es bastante lento, ya que debe iterar sobre todo el DAG para arreglar los índices de bits.

Parámetros

clbits (List[Clbit]) – Los bits a eliminar.

Eleva

DAGCircuitError - un clbit no es un Clbitno está en el circuito, o no está inactivo.

remove_cregs

remove_cregs(*cregs)

Eliminar los registros clásicos del circuito, dejando los bits subyacentes en su lugar.

Eleva

  • DAGCircuitError - un creg no es un ClassicalRegister, o no está en
  • el circuito. -

remove_descendants_of

remove_descendants_of(node)

Elimina todos los nodos de operación descendientes de nodo.

remove_nonancestors_of

remove_nonancestors_of(node)

Eliminar todos los nodos de operación no ancestros de nodo.

remove_nondescendants_of

remove_nondescendants_of(node)

Elimina todos los nodos de operación no descendientes de nodo.

remove_op_node

remove_op_node(node)

Eliminar un nodo de operación n.

Añadir aristas de predecesores a sucesores.

remove_qregs

remove_qregs(*qregs)

Eliminar los registros cuánticos del circuito, dejando los bits subyacentes en su lugar.

Eleva

  • DAGCircuitError - un qreg no es un QuantumRegister, o no está en
  • el circuito. -

remove_qubits

remove_qubits(*qubits)

Elimina los bits cuánticos del circuito. Todos los bits DEBEN estar inactivos. También se eliminará cualquier registro con referencias a al menos uno de los bits especificados.

Aviso

Este método es bastante lento, ya que debe iterar sobre todo el DAG para arreglar los índices de bits.

Parámetros

qubits (List[Qubit]) – Los bits a eliminar.

Eleva

DAGCircuitError - un qubit no es un Qubitno está en el circuito, o no está inactivo.

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 DAGOpNodes en una sola operación. Un ejemplo típico es un bloque de puertas que se consolida en una única UnitaryGate que representa la matriz unitaria del bloque.

Parámetros

  • node_block (List[DAGNode]) – 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[Bit, int]) – El diccionario que asigna los bits a sus posiciones en la salida qargs o cargs. Esto es necesario para reconstruir el orden arg sobre múltiples puertas en el nodo combinado de un solo op. Si un Bit no está en el diccionario, no se añadirá a los args; esto puede ser útil cuando se trata de operaciones de flujo de control que tienen bits inherentes en sus campos condition o target .
  • 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 DAGCircuit) y lanzará un DAGCircuitError 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

DAGCircuitError - si cycle_check está ajustado a True y la sustitución del bloque especificado introduce un ciclo o si node_block está vacío.

Devuelve

El nodo op que sustituye al bloque.

Tipo de retorno

DAGOpNode

reverse_ops

reverse_ops()

Invierta las operaciones en el circuito self .

Devuelve

el dag invertido.

Tipo de retorno

Circuito DAG

separable_circuits

separable_circuits(remove_idle_qubits=False, *, vars_mode=Ellipsis)

Descomponer el circuito en conjuntos de qubits sin puertas que los conecten.

Parámetros

remove_idle_qubits (bool) – Bandera que indica si se eliminan los qubits ociosos de los circuitos separados. Si False, cada circuito de salida contendrá el mismo número de qubits que self.

Devuelve

Los circuitos resultantes de separar self en conjuntos

de qubits desconectados

Tipo de retorno

Lista [DAGCircuit ]

Cada instancia de DAGCircuit devuelto por este método contendrá el mismo número de clbits que self. La información de fase global en self no se mantendrá en los subcircuitos devueltos por este método.

serial_layers

serial_layers(*, vars_mode=Ellipsis)

Produce una capa para todas las puertas de este circuito.

Una capa en serie es un circuito con una puerta. Las capas tienen la misma estructura que en layers().

size

size(*, recurse=False)

Devuelve el número de operaciones. Si hay flujo de control presente, este recuento puede ser sólo una estimación, ya que la ruta completa del flujo de control no se puede conocer estáticamente.

Parámetros

recurse - si True, entonces recurse en operaciones de flujo de control. Los bucles For con iteradores de longitud conocida se cuentan como no enrollados. Los bloques if-else suman ambas ramas. Los bucles while se cuentan como si el cuerpo del bucle se ejecutara una sola vez. Por defecto es False y devuelve DAGCircuitError si hay algún flujo de control presente, para evitar devolver silenciosamente un número casi sin sentido.

Devuelve

el tamaño del circuito

Tipo de retorno

int

Eleva

DAGCircuitError - si un desconocido ControlFlowOp está presente en una llamada con recurse=True, o cualquier flujo de control está presente en una llamada no recursiva.

structurally_equal

structurally_equal(other)

¿Son estos dos DAG estructuralmente iguales?

Esta función devuelve verdadero si las estructuras de los grafos son exactamente iguales entre sí, incluidos los índices de nodos válidos, los órdenes de las aristas, etc. Se trata de una comprobación mucho más estricta que la equivalencia de grafos, y es útil sobre todo para comprobar si dos DAGCircuit instancias han sido construidas y manipuladas exactamente de la misma manera. Por ejemplo, este método puede utilizarse para comprobar si una secuencia de manipulaciones de un DAG es determinista.

Este método no tiene en cuenta metadatos de seguimiento como metadata o namepero sí considera muchos detalles de implementación de bajo nivel de la representación interna, muchos de los cuales no cambian la semántica del circuito.

En general, este método debería ser mucho más rápido que las comprobaciones de equivalencia de grafos, pero devolverá False en muchas más situaciones. Este método nunca debería devolver True cuando una comprobación de equivalencia de grafos devolvería False.

Nota

Esto actualmente no maneja el flujo de control, debido a limitaciones técnicas en la representación interna del flujo de control, y devolverá false si cualquier operación de flujo de control está presente, incluso si son individualmente iguales.

Consulte también

**El operador == **

DAGCircuit implementa __eq__() entre sí y otras DAGCircuit (este mismo método también potencia la comprobación de igualdad de QuantumCircuit). Esto implementa una comprobación semántica de igualdad de flujo de datos, que es menos sensible al orden en que se definieron las operaciones. Esto es lo que suele importarle a un usuario con respecto a la igualdad.

substitute_node

substitute_node(node, op, inplace=False, propagate_condition=None)

Sustituya un DAGOpNode con una sola operación. los qargs, cargs y condiciones de la nueva operación se deducirán del nodo a sustituir. Se comprobará que la nueva operación coincide con la forma de la operación sustituida.

Parámetros

  • node (DAGOpNode) – Nodo que debe sustituirse
  • op (qiskit.circuit.Operation) – La instancia qiskit.circuit.Operation instancia que debe añadirse al DAG
  • inplace (bool) – Opcional, por defecto False. Si es True, el nodo DAG existente se modificará para incluir op. En caso contrario, se utilizará un nuevo nodo DAG.
  • propagate_condition (bool) – DEPRECATED una opción heredada que solía controlar el comportamiento del manejo del flujo de control. Ya no tiene efecto, lo dejé por compatibilidad con versiones anteriores. Se eliminará en Qiskit 3.0.

Devuelve

el nuevo nodo que contiene la operación añadida.

Tipo de retorno

DAGOpNode

Eleva

  • DAGCircuitError - Si la operación de sustitución era incompatible con
  • ubicación ** del nodo objetivo **.

substitute_node_with_dag

substitute_node_with_dag(node, input_dag, wires=None, propagate_condition=None)

Sustituye un nodo por dag.

Parámetros

  • node (DAGOpNode) – nodo para sustituir
  • input_dag (DAGCircuit) – circuito que sustituirá al nodo
  • wires (list[Bit] | Dict[Bit, Bit]) – da un orden para los (qu)bits en el circuito de entrada. Si se trata de una lista, los bits se refieren a los de input_dag, y el orden se hace coincidir con los cables del nodo por qargs primero, luego cargs, luego condiciones. Si es un diccionario, una correspondencia entre los bits de input_dag y aquellos sobre los que actúa node .
  • propagate_condition (bool) – DEPRECATED una opción heredada que solía controlar el comportamiento del manejo del flujo de control. Ya no tiene efecto, lo dejé por compatibilidad con versiones anteriores. Se eliminará en Qiskit 3.0.

Devuelve

asigna los ID de los nodos de input_dag a sus nuevas encarnaciones en self.

Tipo de retorno

dict

Eleva

DAGCircuitError - si se encuentra con predecesores/sucesores inesperados

successors

successors(node)

Devuelve el iterador de los sucesores de un nodo como DAGOpNodes y DAGOutNodes.

swap_nodes

swap_nodes(node1, node2)

Intercambiar nodos conectados, por ejemplo, debido a la conmutación.

Parámetros

  • node1 (OpNode) – nodo predecesor
  • node2 (OpNode) – nodo sucesor

Eleva

DAGCircuitError - si alguno de los nodos no es un OpNode o los nodos no están conectados

to_circuit

to_circuit(*, copy_operations=True)

Convierte este DAG a un QuantumCircuit.

Se trata de un sencillo envoltorio alrededor de dag_to_circuit().

Parámetros

copy_operations : si se deben copiar en profundidad las instrucciones individuales. Si se establece en False, la operación es más económica, pero las mutaciones en las instrucciones del circuito afectarán al circuito original.

Devuelve

a QuantumCircuit que representa este mismo DAG.

topological_nodes

topological_nodes(key=None, reverse=False)

Nodos de rendimiento en orden topológico.

Parámetros

  • key (Callable) – Un callable que tomará un objeto DAGNode y devolverá una clave de ordenación de cadena. Si no se especifica, se utilizarán los bits qargs y cargs de un nodo para la ordenación.
  • reverse (bool) – Si es verdadero, devuelve los nodos en orden topológico inverso.

Devuelve

nodo en orden topológico

Tipo de retorno

generator (DAGOpNode, DAGInNode, o DAGOutNode )

topological_op_nodes

topological_op_nodes(key=None, reverse=False)

Rendimiento de los nodos op en orden topológico.

Permitido pasar en clave específica para desempatar en el orden superior

Parámetros

  • key (Callable) – Un callable que tomará un objeto DAGNode y devolverá una clave de ordenación de cadena. Si no se especifica, se utilizarán los qargs y cargs de un nodo para la ordenación.
  • reverse (bool) – Si es verdadero, devuelve los nodos de operación en orden topológico inverso.

Devuelve

nodo op en orden topológico

Tipo de retorno

generador( DAGOpNode )

two_qubit_ops

two_qubit_ops()

Obtener lista de operaciones de 2 qubits. Ignora directivas como snapshot y barrier.

width

width()

Devuelve el número total de qubits + clbits utilizados por el circuito. Anteriormente, esta función devolvía el número de qubits mediante el cálculo return len( self._wires ) - self.num_clbits (), pero se modificó mediante el número de incidencia 2564 para devolver el número de qubits + clbits con la nueva función DAGCircuit.num_qubits, que sustituye a la semántica anterior de DAGCircuit.width ().

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