Skip to main content
IBM Quantum Platform

Dependência DAG

class qiskit.dagcircuit.DAGDependency

GitHub

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_clbits(clbits)

GitHub

Adicione fios de clitóris individuais.

add_creg

add_creg(creg)

GitHub

Adicione clbits em um registro clássico.

add_op_node

add_op_node(operation, qargs, cargs)

GitHub

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_qreg(qreg)

GitHub

Adicione qubits em um registro quântico.

add_qubits

add_qubits(qubits)

GitHub

Adicione fios de qubit individuais.

copy

copy()

GitHub

Função para copiar um objeto DAGDependency. :retorna: uma cópia de um objeto DAGDependency. :rtype: DAGDependency

depth

depth()

GitHub

Retorna a profundidade do circuito. :retorna: a profundidade do circuito :rtype: int

direct_predecessors

direct_predecessors(node_id)

GitHub

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)

GitHub

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')

GitHub

Desenha o gráfico DAGDependency.

Esta função requer o pydot, que, por sua vez, requer a instalação do Graphviz.

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

get_all_edges

get_all_edges()

GitHub

Enumeração de todas as bordas.

Retorna

correspondente ao rótulo.

Tipo de retorno

Lista

get_edges

get_edges(src_id, dest_id)

GitHub

Enumeração de bordas entre dois nós por meio do método get_all_edge_data.

Parâmetros

  • src_id (int) – rótulo do primeiro nó.
  • dest_id (int) – rótulo do segundo nó.

Retorna

correspondente a todas as bordas entre os dois nós.

Tipo de retorno

Lista

get_in_edges

get_in_edges(node_id)

GitHub

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)

GitHub

Parâmetros

node_id (int) – rótulo do nó considerado.

Retorna

correspondente ao rótulo.

Tipo de retorno

nós

get_nodes

get_nodes()

GitHub

Retorna

iterador sobre todos os nós.

Tipo de retorno

generator (dict )

get_out_edges

get_out_edges(node_id)

GitHub

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)

GitHub

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)

GitHub

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_block fornecido por um único nó introduziria um ciclo (o que invalidaria o DAGDependency) e gerará um DAGDependencyError se um ciclo for introduzido. Essa verificação vem com uma penalidade de tempo de execução. Se você puder garantir que a entrada node_block é um bloco contíguo e não introduzirá um ciclo quando for contraída em um único nó, isso poderá ser definido como False para 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

size()

GitHub

Retorna o número de portas no circuito

successors

successors(node_id)

GitHub

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

to_retworkx

to_retworkx()

GitHub

Retorna a DAGDependency no formato retworkx.

topological_nodes

topological_nodes()

GitHub

Nós de rendimento em ordem topológica.

Retorna

em ordem topológica.

Tipo de retorno

generator (DAGNode )

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