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.
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.
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 datosDAGCircuitinvariantes de la estructura de datos (todos losqargssonQubit\ s, todos están en el DAG, etc). SiFalse, 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
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 datosDAGCircuitinvariantes de la estructura de datos (todos losqargssonQubit\ s, todos están en el DAG, etc). SiFalse, 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
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 DAGotherse alinearán en los usos existentes de esas mismas variables enself. SiFalse, todas las variables deotherdeben ser distintas deself, y se añadirán aself.
Devuelve
el dag compuesto (devuelve None si inplace==True).
Tipo de retorno
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
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
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
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
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.
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
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.Operationsubclase 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
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
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.
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.
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
qargsocargs. Esto es necesario para reconstruir el orden arg sobre múltiples puertas en el nodo combinado de un solo op. Si unBitno 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 camposconditionotarget. - 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 elDAGCircuit) y lanzará unDAGCircuitErrorsi 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
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
reverse_ops
reverse_ops()
Invierta las operaciones en el circuito self .
Devuelve
el dag invertido.
Tipo de retorno
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
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.
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.
**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.Operationinstancia 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
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 deinput_dagy aquellos sobre los que actúanode. - 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
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 ().