Skip to main content
IBM Quantum Platform

TranspileLayout

class qiskit.transpiler.TranspileLayout(initial_layout, input_qubit_mapping, final_layout=None, _input_qubit_count=None, _output_qubit_list=None)

GitHub

Bases: object

Atributos de layout para o circuito de saída do transpilador.

O transpiler é de preservação unitária até as permutações de "layout inicial" e "layout final". A permutação do layout inicial é causada pela definição e aplicação do layout inicial durante o estágio de Layout. A permutação final do layout é causada pela SwapGate inserção durante o estágio de roteamento. Essa classe fornece uma interface para raciocinar sobre essas permutações usando uma variedade de métodos auxiliares.

Durante o estágio de layout, o transpilador pode, potencialmente, remapear a ordem dos qubits no circuito à medida que ajusta o circuito ao backend de destino. Por exemplo, deixe o circuito de entrada ser:

from qiskit.circuit import QuantumCircuit, QuantumRegister

qr = QuantumRegister(3, name="MyReg")
qc = QuantumCircuit(qr)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)
qc.draw("mpl")
Diagrama de circuito gerado pelo código anterior.

Suponha que, durante o estágio de layout, o transpilador reordene os qubits para que sejam:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.cx(2, 0)
qc.draw("mpl")
Diagrama de circuito gerado pelo código anterior.

Então, a saída do método initial_virtual_layout() é equivalente a:

Layout({
    qr[0]: 2,
    qr[1]: 1,
    qr[2]: 0,
})

(também é esse atributo no QuantumCircuit.draw() e circuit_drawer() que é usado para exibir o mapeamento de qubits para posições em visualizações de circuito após a transpilação).

Com base no exemplo acima, suponha que, durante o estágio de roteamento, o transpilador precise inserir portas de troca, e o circuito de saída se torne:

from qiskit import QuantumCircuit

qc = QuantumCircuit(3)
qc.h(2)
qc.cx(2, 1)
qc.swap(0, 1)
qc.cx(2, 1)
qc.draw("mpl")
Diagrama de circuito gerado pelo código anterior.

Então, o resultado do método routing_permutation() é:

[1, 0, 2]

que mapeia as posições dos qubits antes do roteamento para suas posições finais após o roteamento.

Há três atributos públicos associados à classe, mas eles são fornecidos principalmente para compatibilidade com versões anteriores e representam o estado interno do transpilador. Eles são definidos como:

  • initial_layout - Este atributo é utilizado para modelar a permutação causada pela etapa de Layout. É um Layout objeto que mapeia os objetos Qubit da lista de QuantumCircuitentrada para a posição na lista de QuantumCircuit.qubits saída.
  • input_qubit_mapping - Esse atributo é usado para manter a ordem de entrada do objeto QuantumCircuit original. Ele mapeia o objeto virtual Qubit do circuito original (e initial_layout) para sua posição correspondente em QuantumCircuit.qubits no circuito original. Isso é necessário ao calcular a permutação do Operator do circuito (e usado por Operator.from_circuit()).
  • final_layout - Este atributo é utilizado para modelar a permutação causada pela etapa de roteamento. É um Layout objeto que mapeia os qubits do circuito de saída de QuantumCircuit.qubits no circuito de saída para suas posições finais após o roteamento. É importante ressaltar que isso representa apenas a permutação causada pela inserção SwapGatede s no QuantumCircuit durante a etapa de roteamento. Não se trata de uma correspondência entre a posição do circuito de entrada original e a posição final no circuito transpilado. Se precisar disso, você pode usar o final_index_layout() para gerar isso. Se final_layout estiver definido como None, isso indica que o roteamento não foi executado e pode ser considerado equivalente a um layout trivial com os qubits da lista qubits do circuito de saída.

Atributos

Parâmetros

final_layout

Tipo: Layout | None

Valor Padrão: None

initial_layout

Tipo: Layout

input_qubit_mapping

Tipo: dict[Qubit, int]


Métodos

final_index_layout

final_index_layout(filter_ancillas=True)

GitHub

Gera o layout final como uma matriz de números inteiros.

Esse método gerará uma matriz de posições finais para cada qubit no circuito de entrada. Por exemplo, se você tivesse um circuito de entrada como:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

e a saída do transpilador foi:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

então o método final_index_layout() método retorna:

[2, 0, 1]

Isso pode ser visto da seguinte forma. O Qubit 0 no circuito original é mapeado para o qubit 2 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 2 durante o estágio de roteamento. O Qubit 1 no circuito original é mapeado para o qubit 1 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 0 durante o estágio de roteamento. O Qubit 2 no circuito original é mapeado para o qubit 0 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 1 durante o estágio de roteamento. O comprimento da lista de saída será tão grande quanto o número de qubits do circuito de entrada, pois a lista de saída desse método serve para rastrear a permutação de qubits no circuito original causada pelo transpilador.

Parâmetros

filter_ancillas (bool) – Se definido como False , todos os ancillas alocados no circuito de saída serão incluídos no layout.

Retorna

Uma lista de posições finais para cada qubit do circuito de entrada.

Tipo de retorno

lista [ int ]

final_virtual_layout

final_virtual_layout(filter_ancillas=True)

GitHub

Gera o layout final como um objeto Layout objeto.

Esse método gerará uma matriz de posições finais para cada qubit no circuito de entrada. Por exemplo, se você tivesse um circuito de entrada como:

qc = QuantumCircuit(3)
qc.h(0)
qc.cx(0, 1)
qc.cx(0, 2)

e a saída do transpilador foi:

tqc = QuantumCircuit(3)
tqc.h(2)
tqc.cx(2, 1)
tqc.swap(0, 1)
tqc.cx(2, 1)

então o retorno dessa função seria um objeto de layout:

Layout({
    qc.qubits[0]: 2,
    qc.qubits[1]: 0,
    qc.qubits[2]: 1,
})

Isso pode ser visto da seguinte forma. O Qubit 0 no circuito original é mapeado para o qubit 2 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 2 durante o estágio de roteamento. O Qubit 1 no circuito original é mapeado para o qubit 1 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 0 durante o estágio de roteamento. O Qubit 2 no circuito original é mapeado para o qubit 0 no circuito de saída durante o estágio de layout, que é mapeado para o qubit 1 durante o estágio de roteamento. O comprimento da lista de saída será tão grande quanto o número de qubits do circuito de entrada, pois a lista de saída desse método serve para rastrear a permutação de qubits no circuito original causada pelo transpilador.

Parâmetros

filter_ancillas (bool) – Se definido como False , todos os ancillas alocados no circuito de saída serão incluídos no layout.

Retorna

Um objeto de layout que mapeia as posições finais de cada qubit.

Tipo de retorno

Layout

from_property_set

classmethod from_property_set(dag, property_set)

GitHub

Construa o TranspileLayout lendo os campos da tabela PropertySet. Retorna None se não houver chaves de configuração de layout presentes.

Isso inclui a combinação das diferentes chaves do conjunto de propriedades no conjunto completo de layouts iniciais e finais, incluindo permutações virtuais.

Isso não invalida nem altera de forma alguma o conjunto de propriedades fornecido. Para "canonizar" o conjunto de propriedades posteriormente, chame write_into_property_set().

Isso lê as seguintes chaves de conjunto de propriedades:

layout

Obrigatório. O objeto Layout objeto que mapeia qubits virtuais (potencialmente expandidos com ancillas) para índices de qubits físicos. Isso corresponde diretamente a initial_layout.

Nota

Em todos os usos padrão, esse é um campo obrigatório. No entanto, se virtual_permutation_layout estiver definido, um layout "trivial" será inferido, mesmo que o circuito não esteja de fato disposto no hardware. Essa é uma limitação infeliz do modelo de dados dessa classe, em que não é possível especificar uma permutação final sem ter também um layout inicial. Essa deficiência será corrigida no Qiskit 3.0.

original_qubit_indices

Obrigatório (mas definido automaticamente pelo PassManager). O mapeamento {virtual: index} que indica o índice relativo de cada qubit virtual de entrada, no circuito de entrada. Isso também pode ser expandido com ancillas (nesse caso, os índices de ancilla não significam muito, pois não estavam no circuito de entrada).

num_input_qubits

Obrigatório (mas definido automaticamente pelo PassManager). O número de qubits virtuais explícitos no circuito de entrada (ou seja, sem incluir os ancillas implícitos).

final_layout

Opcional. A permutação final efetiva, em termos dos qubits atuais do DAGCircuit. Isso corresponde diretamente a final_layout.

virtual_permutation_layout

Opcional. Isso é definido por determinadas passagens de otimização que são executadas antes da seleção do layout, como ElidePermutations. Seu espírito é semelhante ao de final_layout, mas normalmente se aplica apenas aos qubits virtuais de entrada.

Aviso

Esse objeto usa a convenção de permutação oposta a final_layout devido a um descuido no Qiskit durante sua introdução. Em outras palavras, virtual_permutation_layout mapeia uma instância Qubit no final do circuito para seu índice inteiro no início do circuito.

Parâmetros

  • dag (DAGCircuit) – o estado atual do DAGCircuit.
  • property_set (PropertySet) – o conjunto de propriedades do transpilador atual. Isso deve ter pelo menos a chave layout definida.

Tipo de retorno

TranspileLayout | Nenhum

initial_index_layout

initial_index_layout(filter_ancillas=False)

GitHub

Gera um layout inicial como uma matriz de números inteiros.

Parâmetros

filter_ancillas (bool) – Se definido como True , qualquer qubits ancilla adicionado ao transpilador não será incluído na saída.

Retorna

Uma matriz de layout que mapeia uma posição na matriz para sua nova posição no circuito de saída.

Tipo de retorno

lista [ int ]

initial_virtual_layout

initial_virtual_layout(filter_ancillas=False)

GitHub

Retorna um objeto Layout para o layout inicial.

Isso retorna um mapeamento de objetos virtuais Qubit no circuito de entrada para as posições dos qubits físicos selecionados durante o layout. Isso é análogo ao atributo initial_layout atributo.

Parâmetros

filter_ancillas (bool) – Se definido como True , somente os qubits no circuito de entrada estarão no layout retornado. Qualquer qubits ancilla adicionado ao circuito de saída será filtrado do objeto retornado.

Retorna

Um objeto de layout que mapeia os objetos do circuito de entrada Qubit do circuito de entrada para as posições dos qubits físicos selecionados.

Tipo de retorno

Layout

routing_permutation

routing_permutation()

GitHub

Gera um layout final como uma matriz de números inteiros.

Se não houver nenhum atributo final_layout presente, isso indica que não houve permutação de saída causada por roteamento ou outras transformações do transpilador. Nesse caso, a função retornará uma lista de [0, 1, 2, .., n].

Retorna

Uma matriz de layout que mapeia uma posição na matriz para sua nova posição no circuito de saída.

Tipo de retorno

lista [ int ]

write_into_property_set

write_into_property_set(property_set)

GitHub

"Descompacte" esse layout na forma de restrições soltas do site property_set.

Esse é o método inverso de from_property_set().

Isso sempre grava as seguintes chaves de definição de propriedade, substituindo-as se já estiverem definidas:

layout

Corresponde diretamente a initial_layout.

original_qubit_indices

Corresponde diretamente a input_qubit_mapping.

final_layout

Corresponde diretamente a final_layout. Observe que isso pode não ser idêntico ao final_layout de antes de uma chamada para from_property_set()porque os efeitos de virtual_permutation_layout terão sido combinados nele.

virtual_permutation_layout

Excluído do conjunto de propriedades; TranspileLayout "finaliza" as várias permutações separadas em uma única permutação, para manter a forma canônica.

Além disso, as seguintes chaves são atualizadas, se este TranspileLayout tiver um valor conhecido para elas. Eles são deixados como estão, caso contrário, para lidar com casos em que essa classe foi construída manualmente sem definir determinados campos opcionais.

num_input_qubits

O número de qubits virtuais não-ancilla no circuito de entrada.

Parâmetros

property_set (dict[str, object]) – o PropertySet (ou geral dict) no qual a saída deve ser gravada. Isso altera a entrada no local.

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