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.
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.
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 asDAGCircuitinvariantes da estrutura de dados sejam mantidas (todos osqargssãoQubit\ s, todos estão no DAG, etc.). SeFalse, 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
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 asDAGCircuitinvariantes da estrutura de dados sejam mantidas (todos osqargssãoQubit\ s, todos estão no DAG, etc.). SeFalse, 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
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 DAGotherserão incluídas nos usos existentes dessas mesmas variáveis emself. SeFalse, todas as variáveis emotherdevem ser distintas deself, e elas serão adicionadas aself.
Retorna
o dag composto (retorna None se inplace==True).
Tipo de retorno
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
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
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
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
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.
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
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
nó - 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.Operationsubclasse 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
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
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.
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.
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
qargsoucargs. Isso é necessário para reconstruir a ordem arg em várias portas no nó operacional único combinado. Se umBitnã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 camposconditionoutarget. - cycle_check (bool) – Quando definido como True, esse método verificará se a substituição do
node_blockfornecido por um único nó introduziria um ciclo (o que invalidaria oDAGCircuit) e gerará umDAGCircuitErrorse um ciclo for introduzido. Essa verificação vem com uma penalidade de tempo de execução. Se você puder garantir que a sua entradanode_blocké um bloco contíguo e não introduzirá um ciclo quando for contraída em um único nó, isso pode ser definido comoFalsepara 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
reverse_ops
reverse_ops()
Inverta as operações no circuito self .
Retorna
o dag invertido.
Tipo de retorno
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
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.
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.
**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.Operationinstâ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
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 noinput_dagpara aqueles em que onodeatua. - 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
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 ().