Skip to main content
IBM Quantum Platform

Circuito DAG

class qiskit.dagcircuit.DAGCircuit

Bases: object

Circuito quântico como um gráfico acíclico direcionado.

Há três tipos de nós no gráfico: entradas, saídas e operações. Os nós são conectados por bordas direcionadas que correspondem a qubits e bits.


Atributos

clbits

Retorna a sequência atual de instâncias Clbit registradas como uma lista.

Aviso

Não modifique você mesmo essa lista. Isso invalidará as DAGCircuit estruturas de dados.

Retorna

A sequência atual de clbits registrados.

Tipo de retorno

lista(Clbit)

cregs

Retorna o ditado que contém o endereço ClassicalRegisters no circuito

duration

Retorna a duração total do circuito, definida por uma passagem do transpilador de agendamento. Sua unidade é especificada por unit

DEPRECATED desde o Qiskit 1.3.0 e será removido no Qiskit 3.0.0

global_phase

Retorna a fase global do circuito.

input_map

metadata

Metadados do circuito

name

Nome do circuito. Em geral, isso corresponde ao nome do site QuantumCircuit a partir do qual o DAG foi gerado.

node_counter

Retorna o número de nós no dag.

num_captured_stretches

Número de trechos capturados rastreados pelo circuito.

num_captured_vars

Número de variáveis clássicas capturadas rastreadas pelo circuito.

num_declared_stretches

Número de trechos locais declarados rastreados pelo circuito.

num_declared_vars

Número de variáveis clássicas locais declaradas rastreadas pelo circuito.

num_input_vars

Número de variáveis clássicas de entrada monitoradas pelo circuito.

num_stretches

Número total de trechos rastreados pelo circuito.

num_vars

Número total de variáveis clássicas monitoradas pelo circuito.

output_map

qregs

Retorna o ditado que contém o endereço QuantumRegisters no circuito

qubits

Retorna a sequência atual de instâncias Qubit registradas como uma lista.

Aviso

Não modifique você mesmo essa lista. Isso invalidará as DAGCircuit estruturas de dados.

Retorna

A sequência atual de qubits registrados.

Tipo de retorno

lista(Qubit)

unit

Retorna a unidade em que a duração foi especificada.

DEPRECATED desde o Qiskit 1.3.0 e será removido no Qiskit 3.0.0

wires

Retorna uma lista dos fios em ordem.


Métodos

add_captured_stretch

add_captured_stretch(stretch)

Adicione um alongamento capturado ao circuito.

Parâmetros

stretch - o trecho a ser adicionado.

add_captured_var

add_captured_var(var)

Adicione uma variável capturada ao circuito.

Parâmetros

var - a variável a ser adicionada.

add_clbits

add_clbits(clbits)

Adicione fios de clitóris individuais.

add_creg

add_creg(creg)

Adicione todos os fios em um registro clássico.

add_declared_stretch

add_declared_stretch(stretch)

Adicione um trecho declarado ao circuito.

Parâmetros

stretch - o trecho a ser adicionado.

add_declared_var

add_declared_var(var)

Adicione uma variável local declarada ao circuito.

Parâmetros

var - a variável a ser adicionada.

add_input_var

add_input_var(var)

Adicione uma variável de entrada ao circuito.

Parâmetros

var - a variável a ser adicionada.

add_qreg

add_qreg(qreg)

Adicione todos os fios em um registro quântico.

add_qubits

add_qubits(qubits)

Adicione fios de qubit individuais.

ancestors

ancestors(node)

Retorna o conjunto de ancestrais de um nó como DAGOpNodes e DAGInNodes.

Os ancestrais são o conjunto de todos os nós que podem alcançar o nó de destino. Enquanto o DAGCircuit.predecessors() contém apenas os predecessores imediatos, os ancestrais contêm recursivamente os predecessores de cada predecessor.

apply_operation_back

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

Aplique uma operação à saída do circuito.

Parâmetros

  • op (qiskit.circuit.Operation) – a operação associada ao nó DAG
  • qargs (tuple[Qubit]) – qubits aos quais o op será aplicado
  • cargs (tuple[Clbit]) – cbits aos quais o op será aplicado
  • check (bool) – Se for True (padrão), essa função imporá que as DAGCircuit invariantes da estrutura de dados sejam mantidas (todos os qargs são Qubit\ s, todos estão no DAG, etc.). Se False, o chamador deverá manter essas invariantes, mas o custo de várias verificações será ignorado. Isso é muito útil ao criar um novo DAG a partir de uma fonte de nós conhecidos como bons.

Retorna

o nó para a operação que foi adicionada ao dag

Tipo de retorno

DAGOpNode

Aumentos

DAGCircuitError - se um nó folha estiver conectado a várias saídas

apply_operation_front

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

Aplique uma operação à entrada do circuito.

Parâmetros

  • op (qiskit.circuit.Operation) – a operação associada ao nó DAG
  • qargs (tuple[Qubit]) – qubits aos quais o op será aplicado
  • cargs (tuple[Clbit]) – cbits aos quais o op será aplicado
  • check (bool) – Se for True (padrão), essa função imporá que as DAGCircuit invariantes da estrutura de dados sejam mantidas (todos os qargs são Qubit\ s, todos estão no DAG, etc.). Se False, o chamador deverá manter essas invariantes, mas o custo de várias verificações será ignorado. Isso é muito útil ao criar um novo DAG a partir de uma fonte de nós conhecidos como bons.

Retorna

o nó para a operação que foi adicionada ao dag

Tipo de retorno

DAGOpNode

Aumentos

DAGCircuitError - se os nós iniciais estiverem conectados a várias bordas de saída

bfs_successors

bfs_successors(node)

Retorna um iterador de tuplas de (DAGNode, [DAGNodes]) em que DAGNode é o nó atual e [DAGNodes] é uma lista dos sucessores em ordem BFS.

classical_predecessors

classical_predecessors(node)

Retorna o iterador dos predecessores de um nó que estão conectados por uma borda clássica como DAGOpNodes e DAGInNodes.

classical_successors

classical_successors(node)

Retorna o iterador dos sucessores de um nó que estão conectados por uma borda clássica como DAGOpNodes e DAGOutNodes.

collect_1q_runs

collect_1q_runs()

Retorna um conjunto de execuções não condicionais de nós "op" de 1q.

collect_2q_runs

collect_2q_runs()

Retorna um conjunto de execuções não condicionais de nós "op" de 2q.

collect_runs

collect_runs(namelist)

Retorna um conjunto de execuções não condicionais de nós "op" com os nomes fornecidos.

Por exemplo, "... h [q0]; cx [q0], [q1]; cx [q0], [q1]; h [q1];..." produziria a tupla de nós cx como um elemento do conjunto retornado de uma chamada para collect_runs( ["cx"]). Se, em vez disso, os nós cx fossem "cx [q0], [q1]; cx [q1], [q0];", o método ainda retornaria o par em uma tupla. A lista de nomes pode conter nomes que não estão na base do circuito.

Os nós devem ter apenas um sucessor para continuar a execução.

compose

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

Componha o circuito other na saída desse circuito.

Um subconjunto de fios de entrada do site other é mapeado para um subconjunto de fios de saída desse circuito.

other pode ser mais estreito ou de largura igual a self.

Parâmetros

  • other (DAGCircuit) – circuito para compor com o eu
  • qubits (list[Qubit|int]) – qubits do eu para compor.
  • clbits (list[Clbit|int]) – fragmentos de si mesmo para compor.
  • front (bool) – Se for True, será realizada a composição frontal (ainda não implementado)
  • inplace (bool) – Se for True, modifica o objeto. Caso contrário, retorne o circuito composto.
  • inline_captures (bool) – Se True, as variáveis marcadas como "capturas" no DAG other serão incluídas nos usos existentes dessas mesmas variáveis em self. Se False, todas as variáveis em other devem ser distintas de self, e elas serão adicionadas a self.

Retorna

o dag composto (retorna None se inplace==True).

Tipo de retorno

DAGCircuit

Aumentos

DAGCircuitError - se other for mais amplo ou se houver mapeamentos de borda duplicados.

control_flow_op_nodes

control_flow_op_nodes()

Obtém uma lista de nós "op" no dag que contêm instruções de fluxo de controle.

Retorna

A lista de nós dag contendo operações de fluxo de controle.

Tipo de retorno

lista [ DAGOpNode ]

copy_empty_like

copy_empty_like(*, vars_mode=Ellipsis)

Retorna uma cópia de self com a mesma estrutura, mas vazia.

Essa estrutura inclui:

  • nome e outros metadados
  • fase global
  • duração
  • todos os qubits e clbits, inclusive os registros.

Retorna

Uma cópia vazia de si mesmo.

Tipo de retorno

DAGCircuit

count_ops

count_ops(*, recurse=True)

Contar as ocorrências de nomes de operações.

Parâmetros

recurse - se True (padrão), recurse em operações de fluxo de controle. Em todos os casos, isso conta apenas o número de vezes que a operação aparece em qualquer bloco possível; ambos os ramos dos elos if são contados, e os blocos for e while-loop são contados apenas uma vez.

Retorna

um mapeamento de nomes de operações para o número de vezes que aparece.

Tipo de retorno

Mapeamento [str, int ]

count_ops_longest_path

count_ops_longest_path()

Contar as ocorrências de nomes de operações no caminho mais longo.

Retorna um dicionário de contagens com chave no nome da operação.

depth

depth(*, recurse=False)

Retorna a profundidade do circuito. Se houver fluxo de controle presente, essa contagem poderá ser apenas uma estimativa, pois o caminho completo do fluxo de controle não pode ser conhecido estaticamente.

Parâmetros

recurse - se True, então recurse em operações de fluxo de controle. Os loops For com iteradores de comprimento conhecido são contados como se o loop tivesse sido desenrolado manualmente (ou seja, com cada iteração do corpo do loop escrita explicitamente). Os blocos If-else usam o caso mais longo das duas ramificações. Os loops while são contados como se o corpo do loop fosse executado apenas uma vez. O padrão é False e levanta DAGCircuitError se houver algum fluxo de controle presente, para evitar retornar silenciosamente um número sem sentido.

Retorna

a profundidade do circuito

Tipo de retorno

int

Aumentos

  • DAGCircuitError - se não for um gráfico acíclico direcionado
  • DAGCircuitError - se um fluxo de controle desconhecido estiver presente em uma chamada recursiva ou se qualquer fluxo de controle estiver presente em uma chamada não recursiva.

descendants

descendants(node)

Retorna o conjunto de descendentes de um nó como DAGOpNodes e DAGOutNodes.

Os descendentes são o conjunto de todos os nós que podem ser alcançados a partir do nó alvo. Em comparação, DAGCircuit.successors() é um iterador que percorre os sucessores imediatos, enquanto este método contém todos os sucessores dos sucessores.

draw

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

Desenha o circuito dag.

Essa função precisa que o Graphviz esteja instalado. O Graphviz não é um pacote python e não pode ser instalado pelo pip (o pacote graphviz em PyPI é uma biblioteca de interface Python para o Graphviz e não instala de fato o Graphviz). Você pode consultar a documentação do Graphviz para saber como instalá-lo.

Aviso

Esta função chamará a ferramenta Graphviz do sistema para processar um arquivo que contenha cadeias de caracteres controláveis pelo usuário (como rótulos de portas ou nomes de registros). Recomenda-se chamar esta função apenas com entradas confiáveis.

Parâmetros

  • scale (float) – fator de escala
  • filename (str) – caminho do arquivo para salvar a imagem (formato inferido a partir do nome)
  • style (str) – 'plain': Gráfico B&W; 'color' (padrão): nós de entrada/saída/op coloridos

Retorna

se estiver no notebook Jupyter e não estiver salvando em arquivo; caso contrário, None.

Tipo de retorno

Ipython.display.Image

edges

edges(nodes=None)

Iterador para valores de borda com nó de origem e destino.

Isso funciona retornando as bordas de saída dos nós especificados. Se nenhum nó for especificado, todas as bordas do gráfico serão retornadas.

Parâmetros

nodes (DAGOpNode, DAGInNode, or DAGOutNode|list(DAGOpNode, DAGInNode, or DAGOutNode) – Uma lista de nós ou um único nó de entrada. Se nenhum for especificado, todas as bordas serão retornadas do gráfico.

Lucros

borda -

a borda como uma tupla com o formato

(nó de origem, nó de destino, fio de borda)

find_bit

find_bit(bit)

Localiza locais no circuito, mapeando o Qubit e o Clbit para o índice posicional BitLocations é definido como: BitLocations = namedtuple( “BitLocations”, ("index", "registers"))

Parâmetros

bit (Bit) – O bit a ser localizado.

Retorna

Um conjunto de 2. O primeiro elemento (index)

contém o índice no qual o Bit pode ser encontrado (em qubits, clbits, dependendo de seu tipo). O segundo elemento (registers) é uma lista de pares (register, index) com uma entrada para cada Register no circuito que contém o Bit (e o índice no Register no qual ele pode ser encontrado).

Tipo de retorno

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

Aumenta:

DAGCircuitError: Se o Bit fornecido for de um tipo desconhecido. DAGCircuitError: Se o site Bit fornecido não puder ser encontrado no circuito.

front_layer

front_layer()

Retorna uma lista de nós op na primeira camada desse dag.

gate_nodes

gate_nodes()

Obtém a lista de nós de porta no dag.

Retorna

a lista de DAGOpNodes que representam portas.

Tipo de retorno

lista [ DAGOpNode ]

has_identifier

has_identifier(var)

Esse identificador está no DAG?

Parâmetros

var - o identificador ou nome a ser verificado.

has_stretch

has_stretch(stretch)

Esse trecho está no DAG?

Parâmetros

var - o trecho ou nome a ser verificado.

has_var

has_var(var)

Essa variável de tempo real está no DAG?

Parâmetros

var - a variável ou o nome a ser verificado.

idle_wires

idle_wires(ignore=None)

Retornar os fios ociosos.

Parâmetros

ignore (list(str)) – Lista de nomes de nós a serem ignorados. Padrão: []

Lucros

Bit - Bit no fio ocioso.

Aumentos

DAGCircuitError - Se o DAG for inválido

is_empty

is_empty()

Retorne verdadeiro se não houver nós de operação no gráfico.

is_predecessor

is_predecessor(node, node_pred)

Verifica se um segundo nó está nos predecessores do nó.

is_successor

is_successor(node, node_succ)

Verifica se um segundo nó está nos sucessores do nó.

iter_captured_stretches

iter_captured_stretches()

Iterável sobre os trechos capturados rastreados pelo circuito.

iter_captured_vars

iter_captured_vars()

Iterável sobre as variáveis clássicas capturadas rastreadas pelo circuito.

iter_captures

iter_captures()

Iterável sobre todos os identificadores capturados rastreados pelo circuito.

iter_declared_stretches

iter_declared_stretches()

Iterável sobre os trechos declarados rastreados pelo circuito.

iter_declared_vars

iter_declared_vars()

Iterável sobre as variáveis clássicas declaradas rastreadas pelo circuito.

iter_input_vars

iter_input_vars()

Iterável sobre as variáveis clássicas de entrada monitoradas pelo circuito.

iter_stretches

iter_stretches()

Iterável sobre todos os trechos rastreados pelo circuito.

iter_vars

iter_vars()

Iterável sobre todas as variáveis clássicas monitoradas pelo circuito.

layers

layers(*, vars_mode=Ellipsis)

Fornece uma visualização superficial em uma camada desse DAGCircuit para todas as d camadas desse circuito.

Uma camada é um circuito cujas portas atuam em qubits disjuntos, ou seja, uma camada tem profundidade 1. O número total de camadas é igual à profundidade d do circuito. As camadas são indexadas de 0 a d-1 com a camada mais antiga no índice 0. As camadas são construídas usando um algoritmo guloso. Cada camada retornada é um dict que contém {“graph”: circuit graph, “partition”: list of qubit lists}.

A camada retornada contém novos (mas semanticamente equivalentes) DAGOpNodes, DAGInNodes, e DAGOutNodes. Esses não são os mesmos nós do dag original, mas são equivalentes via DAGNode.semantic_eq ( node1, node2 ).

TODO: as portas que usam os mesmos cbits acabarão em camadas diferentes, pois isso está implementado atualmente. Esse pode não ser o comportamento desejado.

longest_path

longest_path()

Retorna o caminho mais longo no dag como uma lista de DAGOpNodes, DAGInNodes, e DAGOutNodes.

make_physical

make_physical(num_qubits=None)

Coloque self na forma física canônica, com o número determinado de qubits.

Isso atua no local e não precisa atravessar o DAG. Ele deve ser usado quando se sabe que o DAG já representa um circuito físico, e só precisamos afirmar que se trata de uma forma física canônica.

Isso apaga todas as informações sobre qubits virtuais no arquivo DAGCircuitse estiver usando isso você mesmo, talvez seja necessário garantir que tenha criado e armazenado um arquivo Layout. De fato, isso aplica o layout "trivial" que mapeia o qubit virtual 0 para o qubit físico 0, e assim por diante.

Parâmetros

num_qubits - se fornecido, o número total de qubits físicos na saída; ele deve ser pelo menos tão grande quanto o número de qubits no DAG. Se não for fornecido, o número de qubits não será alterado.

multi_qubit_ops

multi_qubit_ops()

Obter lista de operações de 3+ qubit. Ignore as diretivas como snapshot e barrier.

multigraph_layers

multigraph_layers()

Camadas de rendimento do multigráfico.

named_nodes

named_nodes(*names)

Obtém o conjunto de nós "op" com o nome fornecido.

node

node(node_id)

Obter o nó no dag.

Parâmetros

node_id (int) – Identificador de nó.

Retorna

o nó.

Tipo de retorno

nós

nodes

nodes()

Iterador para valores de nós.

Lucros

- o nó.

nodes_on_wire

nodes_on_wire(wire, only_ops=False)

Iterador para nós que afetam um determinado fio.

Parâmetros

  • wire (Bit) – o fio a ser examinado.
  • only_ops (bool) – Verdadeiro se apenas os nós ops forem desejados; caso contrário, todos os nós serão retornados.

Lucros

Iterador - os nós sucessivos no fio fornecido

Aumentos

DAGCircuitError - se o fio fornecido não existir no DAG

num_blocks

num_blocks()

Retorne o número de blocos básicos neste circuito.

num_clbits

num_clbits()

Retorna o número total de bits clássicos usados pelo circuito.

num_ops

num_ops()

Obtém o número de nós operacionais no DAG.

num_qubits

num_qubits()

Retorna o número total de qubits usados pelo circuito. num_qubits() substitui o uso anterior de width(). DAGCircuit.width () agora retorna qubits + clbits para manter a consistência com Circuit.width () [qiskit-terra #2564].

num_tensor_factors

num_tensor_factors()

Calcule em quantos componentes o circuito pode se decompor.

op_nodes

op_nodes(op=None, include_directives=True)

Obtém a lista de nós "op" no dag.

Parâmetros

  • op (Type) –qiskit.circuit.Operation subclasse op nodes para retornar. Se None, retorna todos os nós op.
  • include_directives (bool) – incluem barreira, instantâneo etc.

Retorna

a lista de nós dag que contém a opção fornecida.

Tipo de retorno

lista [ DAGOpNode ]

op_predecessors

op_predecessors(node)

Retorna o iterador de predecessores "op" de um nó no dag.

op_successors

op_successors(node)

Retorna o iterador de sucessores "op" de um nó no dag.

predecessors

predecessors(node)

Retorna o iterador dos predecessores de um nó como DAGOpNodes e DAGInNodes.

properties

properties()

Retorna um dicionário de propriedades do circuito.

quantum_causal_cone

quantum_causal_cone(qubit)

Retorna o cone causal de um qubit.

O cone causal de um qubit é o conjunto de qubits que podem influenciar a saída desse qubit por meio de interações, seja por meio de portas ou operações de vários qubits. Conhecer o cone causal de um qubit pode ser útil na depuração de circuitos defeituosos, pois pode ajudar a identificar qual(is) fio(s) pode(m) estar causando o problema.

Esse método não considera nenhuma dependência clássica de dados no site DAGCircuit, os fios de bits clássicos são ignorados para fins de construção do cone causal.

Parâmetros

qubit (Qubit) – O qubit de saída para o qual queremos encontrar o cone causal.

Retorna

O conjunto de qubits cujas interações afetam qubit.

Tipo de retorno

Conjunto [*Qubit* ]

quantum_predecessors

quantum_predecessors(node)

Retorna o iterador dos predecessores de um nó que estão conectados por uma borda quântica como DAGOpNodes e DAGInNodes.

quantum_successors

quantum_successors(node)

Retorna o iterador dos sucessores de um nó que estão conectados por uma borda quântica como DAGOpNodes e DAGOutNodes.

remove_all_ops_named

remove_all_ops_named(opname)

Remove todos os nós de operação com o nome fornecido.

remove_ancestors_of

remove_ancestors_of(node)

Remove todos os nós de operação ancestrais do nó.

remove_clbits

remove_clbits(*clbits)

Remova os bits clássicos do circuito. Todos os bits DEVEM estar ociosos. Todos os registros com referências a pelo menos um dos bits especificados também serão removidos.

Aviso

Esse método é bastante lento, pois precisa iterar por todo o DAG para corrigir os índices de bits.

Parâmetros

clbits (List[Clbit]) – Os bits a serem removidos.

Aumentos

DAGCircuitError - Um clbit não é um Clbitnão está no circuito ou não está ocioso.

remove_cregs

remove_cregs(*cregs)

Remova os registros clássicos do circuito, deixando os bits subjacentes no lugar.

Aumentos

  • DAGCircuitError - um creg não é um ClassicalRegister, ou não está em
  • o circuito. -

remove_descendants_of

remove_descendants_of(node)

Remove todos os nós de operação descendentes do nó.

remove_nonancestors_of

remove_nonancestors_of(node)

Remover todos os nós de operação não anfitriões do nó.

remove_nondescendants_of

remove_nondescendants_of(node)

Remove todos os nós de operação não descendentes do nó.

remove_op_node

remove_op_node(node)

Remover um nó de operação n.

Adicione bordas de predecessores a sucessores.

remove_qregs

remove_qregs(*qregs)

Remova os registros quânticos do circuito, deixando os bits subjacentes no lugar.

Aumentos

  • DAGCircuitError - um qreg não é um QuantumRegister, ou não está em
  • o circuito. -

remove_qubits

remove_qubits(*qubits)

Remova os bits quânticos do circuito. Todos os bits DEVEM estar ociosos. Todos os registros com referências a pelo menos um dos bits especificados também serão removidos.

Aviso

Esse método é bastante lento, pois precisa iterar por todo o DAG para corrigir os índices de bits.

Parâmetros

qubits (List[Qubit]) – Os bits a serem removidos.

Aumentos

DAGCircuitError - um qubit não é um Qubitnão está no circuito ou não está ocioso.

replace_block_with_op

replace_block_with_op(node_block, op, wire_pos_map, cycle_check=True)

Substituir um bloco de nós por um único nó.

Isso é usado para consolidar um bloco de DAGOpNodes em uma única operação. Um exemplo típico é um bloco de portas sendo consolidado em um único UnitaryGate que representa a matriz unitária do bloco.

Parâmetros

  • node_block (List[DAGNode]) – Uma lista de nós dag que representa o bloco de nós a ser substituído
  • op (qiskit.circuit.Operation) – A operação para substituir o bloco por
  • wire_pos_map (Dict[Bit, int]) – O dicionário mapeia os bits para suas posições na saída qargs ou cargs. Isso é necessário para reconstruir a ordem arg em várias portas no nó operacional único combinado. Se um Bit não estiver no dicionário, ele não será adicionado aos args; isso pode ser útil ao lidar com operações de fluxo de controle que têm bits inerentes em seus campos condition ou target .
  • cycle_check (bool) – Quando definido como True, esse método verificará se a substituição do node_block fornecido por um único nó introduziria um ciclo (o que invalidaria o DAGCircuit) e gerará um DAGCircuitError se um ciclo for introduzido. Essa verificação vem com uma penalidade de tempo de execução. Se você puder garantir que a sua entrada node_block é um bloco contíguo e não introduzirá um ciclo quando for contraída em um único nó, isso pode ser definido como False para melhorar o desempenho do tempo de execução desse método.

Aumentos

DAGCircuitError - se cycle_check estiver definido como True e a substituição do bloco especificado introduzir um ciclo ou se node_block estiver vazio.

Retorna

O nó de operação que substitui o bloco.

Tipo de retorno

DAGOpNode

reverse_ops

reverse_ops()

Inverta as operações no circuito self .

Retorna

o dag invertido.

Tipo de retorno

DAGCircuit

separable_circuits

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

Decomponha o circuito em conjuntos de qubits sem portas que os conectem.

Parâmetros

remove_idle_qubits (bool) – Sinalizador que indica se os qubits ociosos devem ser removidos dos circuitos separados. Se False, cada circuito de saída conterá o mesmo número de qubits que self.

Retorna

Os circuitos resultantes da separação de self em conjuntos

de qubits desconectados

Tipo de retorno

Lista [DAGCircuit ]

Cada DAGCircuit a instância retornada por esse método conterá o mesmo número de clbits que self. As informações globais de fase em self não serão mantidas nos subcircuitos retornados por esse método.

serial_layers

serial_layers(*, vars_mode=Ellipsis)

Crie uma camada para todas as portas desse circuito.

Uma camada serial é um circuito com uma porta. As camadas têm a mesma estrutura que em layers().

size

size(*, recurse=False)

Retorna o número de operações. Se houver fluxo de controle presente, essa contagem poderá ser apenas uma estimativa, pois o caminho completo do fluxo de controle não pode ser conhecido estaticamente.

Parâmetros

recurse - se True, então recurse em operações de fluxo de controle. Os loops For com iteradores de comprimento conhecido são contados sem rolagem. Os blocos If-else somam as duas ramificações. Os loops while são contados como se o corpo do loop fosse executado apenas uma vez. O padrão é False e levanta DAGCircuitError se houver algum fluxo de controle presente, para evitar o retorno silencioso de um número praticamente sem sentido.

Retorna

o tamanho do circuito

Tipo de retorno

int

Aumentos

DAGCircuitError - se um desconhecido ControlFlowOp estiver presente em uma chamada com recurse=True, ou qualquer fluxo de controle estiver presente em uma chamada não recursiva.

structurally_equal

structurally_equal(other)

Esses dois DAGs são estruturalmente iguais?

Essa função retorna verdadeiro se as estruturas do gráfico forem exatamente iguais umas às outras, incluindo os índices de nó válidos, ordens de borda e assim por diante. Essa é uma verificação muito mais rigorosa do que a equivalência de gráficos e é útil principalmente para testar se duas instâncias foram construídas e manipuladas exatamente da mesma maneira DAGCircuit instâncias foram construídas e manipuladas exatamente da mesma maneira. Por exemplo, esse método pode ser usado para testar se uma sequência de manipulações de um DAG é determinística.

Esse método não considera os metadados de rastreamento, como metadata ou namemas considera muitos detalhes de implementação de baixo nível da representação interna, muitos dos quais não alteram a semântica do circuito.

Esse método deve, em geral, ser muito mais rápido do que as verificações de equivalência de gráficos, mas retornará False em muito mais situações. Esse método nunca deve retornar True quando uma verificação de equivalência de gráfico retornaria False.

Nota

Atualmente, isso não lida com o fluxo de controle, devido a limitações técnicas na representação interna do fluxo de controle, e retornará falso se qualquer operação de fluxo de controle estiver presente, mesmo que sejam individualmente iguais.

Veja Também

**O operador == **

DAGCircuit implementa __eq__() entre si e outras DAGCircuit (esse mesmo método também aciona a verificação de igualdade do QuantumCircuit). Isso implementa uma verificação semântica de igualdade de fluxo de dados, que é menos sensível à ordem em que as operações foram definidas. Normalmente, é com isso que o usuário se preocupa em relação à igualdade.

substitute_node

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

Substitua o site DAGOpNode por uma única operação. qargs, cargs e condições para a nova operação serão inferidos a partir do nó a ser substituído. A nova operação será verificada para corresponder ao formato da operação substituída.

Parâmetros

  • node (DAGOpNode) – Nó a ser substituído
  • op (qiskit.circuit.Operation) – A instância qiskit.circuit.Operation instância a ser adicionada ao DAG
  • inplace (bool) – Opcional, padrão False. Se for True, o nó DAG existente será modificado para incluir op. Caso contrário, um novo nó DAG será usado.
  • propagate_condition (bool) – DEPRECATED uma opção legada que controlava o comportamento do fluxo de controle de manipulação. Ele não tem mais efeito, foi deixado para compatibilidade com versões anteriores. Será removido no Qiskit 3.0.

Retorna

o novo nó que contém a operação adicionada.

Tipo de retorno

DAGOpNode

Aumentos

  • DAGCircuitError - Se a operação de substituição for incompatível com
  • localização ** do ** nó de destino.

substitute_node_with_dag

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

Substitua um nó por dag.

Parâmetros

  • node (DAGOpNode) – nó para substituir
  • input_dag (DAGCircuit) – circuito que substituirá o nó
  • wires (list[Bit] | Dict[Bit, Bit]) – fornece uma ordem para (qu)bits no circuito de entrada. Se for uma lista, então os bits se referem àqueles em input_dag, e a ordem é correspondida aos fios do nó primeiro por qargs, depois por cargs e depois por condições. Se for um dicionário, então um mapeamento de bits no input_dag para aqueles em que o node atua.
  • propagate_condition (bool) – DEPRECATED uma opção legada que controlava o comportamento do fluxo de controle de manipulação. Ele não tem mais efeito, foi deixado para compatibilidade com versões anteriores. Será removido no Qiskit 3.0.

Retorna

mapeia IDs de nós de input_dag para suas novas encarnações de nós em self.

Tipo de retorno

dict

Aumentos

DAGCircuitError - se encontrar antecessores/sucessores inesperados

successors

successors(node)

Retorna o iterador dos sucessores de um nó como DAGOpNodes e DAGOutNodes.

swap_nodes

swap_nodes(node1, node2)

Troca de nós conectados, por exemplo, devido à comutação.

Parâmetros

  • node1 (OpNode) – nó predecessor
  • node2 (OpNode) – nó sucessor

Aumentos

DAGCircuitError - se um dos nós não for um OpNode ou se os nós não estiverem conectados

to_circuit

to_circuit(*, copy_operations=True)

Converta este DAG em um QuantumCircuit.

Este é um simples invólucro em torno de dag_to_circuit().

Parâmetros

copy_operations – se deve copiar profundamente as instruções individuais. Se definido como False, a operação é mais barata, mas as mutações nas instruções do circuito afetarão o circuito original.

Retorna

a QuantumCircuit representando este mesmo DAG.

topological_nodes

topological_nodes(key=None, reverse=False)

Nós de rendimento em ordem topológica.

Parâmetros

  • key (Callable) – Um chamador que recebe um objeto DAGNode e retorna uma chave de classificação de string. Se não for especificado, os bits qargs e cargs de um nó serão usados para classificação.
  • reverse (bool) – Se for verdadeiro, retorne os nós em ordem topológica inversa.

Retorna

nó em ordem topológica

Tipo de retorno

generator (DAGOpNode, DAGInNode, ou DAGOutNode )

topological_op_nodes

topological_op_nodes(key=None, reverse=False)

Disponha os nós de operação em ordem topológica.

Permissão para passar em uma chave específica para quebrar empates na ordem superior

Parâmetros

  • key (Callable) – Um chamador que recebe um objeto DAGNode e retorna uma chave de classificação de string. Se não for especificado, os qargs e cargs de um nó serão usados para classificação.
  • reverse (bool) – Se verdadeiro, produzir nós op em ordem topológica inversa.

Retorna

nó de operação em ordem topológica

Tipo de retorno

gerador( DAGOpNode )

two_qubit_ops

two_qubit_ops()

Obter lista de operações de 2 qubit. Ignore as diretivas como snapshot e barrier.

width

width()

Retorna o número total de qubits + clbits usados pelo circuito. Anteriormente, essa função retornava o número de qubits pelo cálculo return len( self._wires ) - self.num_clbits (), mas foi alterada pela edição nº 2564 para retornar o número de qubits + clbits com a nova função DAGCircuit.num_qubits substituindo a antiga semântica de DAGCircuit.width ().

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.