Skip to main content
IBM Quantum Platform

StarPreRouting

class qiskit.transpiler.passes.StarPreRouting

GitHub

Bases: TransformationPass

Executar pré-roteamento de estrela para linear

Essa passagem é uma passagem de otimização lógica que reescreve qualquer subcircuito de conectividade em estrela de porta 2q exclusivamente como um equivalente de conectividade linear com trocas.

Por exemplo:

from qiskit.circuit import QuantumCircuit
from qiskit.transpiler.passes import StarPreRouting

qc = QuantumCircuit(10)
qc.h(0)
qc.cx(0, range(1, 5))
qc.h(9)
qc.cx(9, range(8, 4, -1))
qc.measure_all()
StarPreRouting()(qc).draw("mpl")
Diagrama de circuito gerado pelo código anterior.

Essa passagem foi inspirada em uma passagem semelhante descrita na Seção IV de: C. Campbell et al, "Superstaq: Deep Optimization of Quantum Programs", 2023 IEEE International Conference on Quantum Computing and Engineering (QCE), Bellevue, WA, EUA, 2023, pp. 1020-1032, doi: 10.1109/QCE57702.2023.00116.


Atributos

is_analysis_pass

Verificar se o passe é um passe de análise.

Se a passagem for um AnalysisPass,, isso significa que a passagem pode analisar o DAG e escrever os resultados dessa análise no conjunto de propriedades. As modificações no DAG não são permitidas por esse tipo de passe.

is_transformation_pass

Verificar se o passe é um passe de transformação.

Se a passagem for um TransformationPass,, isso significa que a passagem pode manipular o DAG, mas não pode modificar o conjunto de propriedades (mas pode ser lido).


Métodos

collect_all_matching_blocks

collect_all_matching_blocks(dag, min_block_size=2)

GitHub

Coleta todos os blocos que correspondem a uma determinada função de filtragem filter_fn. Isso encontra iterativamente o maior bloco que não corresponde a filter_fn, depois o maior bloco que corresponde a filter_fn e assim por diante, até que não haja mais nós não coletados. Intuitivamente, encontrar blocos maiores de nós não correspondentes ajuda a encontrar blocos maiores de nós correspondentes posteriormente. A opção min_block_size especifica o número mínimo de portas no bloco para que o bloco seja coletado.

Por padrão, os blocos são coletados na direção das entradas para as saídas do circuito. A opção collect_from_back permite alterar essa direção, ou seja, coletar blocos das saídas para as entradas do circuito.

Retorna apenas a lista de blocos correspondentes.

collect_matching_block

collect_matching_block(dag, filter_fn)

GitHub

Coleta iterativamente o maior bloco de nós de entrada (ou seja, nós com _in_degree igual a 0) que correspondem a uma determinada função de filtragem. Exemplos disso incluem a coleta de blocos de portas de troca, blocos de portas lineares (CXs e SWAPs), blocos de portas Clifford, blocos de portas de um qubit, blocos de portas de dois qubit etc. Aqui, "iterativamente" significa que, uma vez que um nó é coletado, o _in_degree de cada um de seus sucessores imediatos é reduzido em 1, permitindo que mais nós se tornem entradas e se qualifiquem para serem coletados no bloco atual. Retorna o bloco de nós coletados.

determine_star_blocks_processing

determine_star_blocks_processing(dag, min_block_size)

GitHub

Retorna blocos estelares em dag e a ordem de processamento dos nós dentro desses blocos estelares :param dag: um dag no qual os blocos estelares devem ser determinados. :type dag: DAGCircuit ou DAGDependency :param min_block_size: número mínimo de portas de dois qubits em um bloco estrela. :type min_block_size: int

Retorna

uma lista de blocos estrela em um determinado dag Union[ [ListDAGOpNode], [ListDAGDepNode] ]: uma lista de operações que especificam a ordem de processamento

Tipo de retorno

[ListStarBlock]

Parâmetros

execute

execute(passmanager_ir, state, callback=None)

GitHub

Executar a tarefa de otimização para a entrada Qiskit IR.

Parâmetros

  • passmanager_ir (Any) – Qiskit IR para otimizar.
  • state (PassManagerState) – Estado associado à execução do fluxo de trabalho pelo próprio gerenciador de passes.
  • callback (Callable | None) – Uma função de retorno de chamada que é chamada a cada execução da tarefa de otimização.

Retorna

Qiskit IR otimizado e estado do fluxo de trabalho.

Tipo de retorno

tupla [ Any, PassManagerState ]

name

name()

GitHub

Nome do passe.

Tipo de retorno

str

run

run(dag)

GitHub

Execute uma passagem no DAGCircuit. Isso é implementado pelo desenvolvedor do passe.

Parâmetros

dag - o dag no qual o passe é executado.

Aumentos

NotImplementedError - quando isso não é implementado em uma passagem.

star_preroute

star_preroute(dag, blocks, processing_order)

GitHub

Retorna blocos em estrela no dag e a ordem de processamento dos nós dentro desses blocos em estrela :param dag: um dag no qual o pré-roteamento em estrela deve ser executado. :type dag: DAGCircuit ou DAGDependency :param blocks: uma lista de blocos em estrela no dag fornecido. :type blocks: [ListStarBlock] :param processing_order: uma lista de operações especificando :type processing_order: Union[ [ListDAGOpNode], [ListDAGDepNode] ] :param ordem de processamento:

Retorna

um dag que especifica o circuito pré-roteado qubit_mapping: o mapeamento final do qubit após o pré-roteamento

Tipo de retorno

novo_dag

update_status

update_status(state, run_state)

GitHub

Atualizar o status do fluxo de trabalho.

Parâmetros

  • state (PassManagerState) – Passar o estado do gerenciador para atualizar.
  • run_state (RunState) – Status de conclusão da tarefa atual.

Retorna

Estado do gerenciador de passes atualizado.

Tipo de retorno

PassManagerState

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