Dependência DAG
class qiskit.dagcircuit.DAGDependency
Bases: object
Objeto para representar um circuito quântico como um DAG (Directed Acyclic Graph) por meio de dependências de operação (ou seja, falta de comutação).
Os nós do gráfico são operações representadas por portas quânticas. As bordas correspondem à não comutação entre duas operações (ou seja, uma dependência). Uma borda direcionada do nó A para o nó B significa que a operação A não comuta com a operação B. Os métodos do objeto permitem a construção de circuitos.
Os nós do gráfico têm os seguintes atributos: 'operation' (operação), 'successors' (sucessores), 'predecessors' (predecessores).
Exemplo:
Circuito de sino sem medição.
┌───┐
qr_0: ┤ H ├──■──
└───┘┌─┴─┐
qr_1: ─────┤ X ├
└───┘O DAG de dependência para o circuito acima é representado por dois nós. O primeiro corresponde à porta Hadamard e o segundo, à porta CNOT, já que as portas não se combinam quando há uma borda entre os dois nós.
Referência:
[1] Iten, R., Moyard, R., Metger, T., Sutter, D. e Woerner, S., 2020 Correspondência exata e prática de padrões para otimização de circuitos quânticos. arXiv:1909.05270
Crie uma DAGDependency vazia.
Atributos
global_phase
Retorna a fase global do circuito.
Métodos
add_clbits
add_creg
add_op_node
add_op_node(operation, qargs, cargs)
Adicione um DAGDepNode ao gráfico e atualize as bordas.
Parâmetros
- operation (qiskit.circuit.Operation) – operação como uma porta quântica
- qargs (list[Qubit]) – lista de qubits nos quais a operação atua
- cargs (list[Clbit]) – lista de fios clássicos a serem conectados
add_qreg
add_qubits
copy
copy()
Função para copiar um objeto DAGDependency. :retorna: uma cópia de um objeto DAGDependency. :rtype: DAGDependency
depth
direct_predecessors
direct_predecessors(node_id)
ID de predecessores diretos de um determinado nó como lista ordenada.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
id de predecessores diretos como uma lista ordenada
Tipo de retorno
Lista
direct_successors
direct_successors(node_id)
ID de sucessores diretos de um determinado nó como lista ordenada.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
id de sucessores diretos como uma lista ordenada
Tipo de retorno
Lista
draw
draw(scale=0.7, filename=None, style='color')
Desenha o gráfico DAGDependency.
Esta função requer o pydot, que, por sua vez, requer a instalação do Graphviz.
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
get_all_edges
get_all_edges()
Enumeração de todas as bordas.
Retorna
correspondente ao rótulo.
Tipo de retorno
Lista
get_edges
get_edges(src_id, dest_id)
Enumeração de bordas entre dois nós por meio do método get_all_edge_data.
Parâmetros
Retorna
correspondente a todas as bordas entre os dois nós.
Tipo de retorno
Lista
get_in_edges
get_in_edges(node_id)
Enumeração de todas as bordas de entrada de um determinado nó.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
dados de bordas de entrada correspondentes.
Tipo de retorno
Lista
get_node
get_node(node_id)
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
correspondente ao rótulo.
Tipo de retorno
nós
get_nodes
get_out_edges
get_out_edges(node_id)
Enumeração de todas as bordas de saída de um determinado nó.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
dados de bordas de saída correspondentes.
Tipo de retorno
Lista
predecessors
predecessors(node_id)
ID dos predecessores de um determinado nó como uma lista ordenada.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
todos os IDs predecessores como uma lista ordenada
Tipo de retorno
Lista
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 DAGDepNodes em uma única operação. Um exemplo típico é um bloco de portas CX e SWAP consolidado em um LinearFunction. Essa função é uma adaptação de uma função semelhante do DAGCircuit.
É importante que essa consolidação preserve as suposições de comutatividade presentes no DAGDependency. Como exemplo, suponha que cada nó em um bloco [A, B, C, D] comute com outro nó E. Seja F o nó consolidado, F = A o B o C o D. Então, F também comuta com E e, portanto, o resultado da substituição de [A, B, C, D] por F resulta em uma DAGDependency válida. Ou seja, qualquer dedução sobre a comutatividade na DAGDependency consolidada está correta. Por outro lado, suponha que pelo menos um dos nós, digamos B, não seja comutável com E. Então, a DAGDependency consolidada implicaria que F não comuta com E. Embora F e E possam de fato se deslocar, ainda é seguro presumir que eles não o fazem. Ou seja, a implementação atual da consolidação pode levar a resultados abaixo do ideal, mas não incorretos.
Parâmetros
- node_block (List[DAGDepNode]) – 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[Qubit, int]) – O dicionário que mapeia o qarg para a posição. Isso é necessário para reconstruir a ordem qarg em várias portas no nó de operação único combinado.
- 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 oDAGDependency) e gerará umDAGDependencyErrorse um ciclo for introduzido. Essa verificação vem com uma penalidade de tempo de execução. Se você puder garantir que a entradanode_blocké um bloco contíguo e não introduzirá um ciclo quando for contraída em um único nó, isso poderá ser definido comoFalsepara melhorar o desempenho do tempo de execução desse método.
Aumentos
DAGDependencyError - se cycle_check estiver definido como True e a substituição do bloco especificado introduzir um ciclo ou se node_block estiver vazio.
size
successors
successors(node_id)
ID de sucessores de um determinado nó como uma lista ordenada.
Parâmetros
node_id (int) – rótulo do nó considerado.
Retorna
todos os sucessores id como uma lista ordenada
Tipo de retorno
Lista