StarPreRouting
class qiskit.transpiler.passes.StarPreRouting
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")![]()
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)
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)
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)
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
- dag (DAGCircuit |DAGDependency)
- min_block_size (int)
execute
execute(passmanager_ir, state, callback=None)
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
run
run(dag)
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)
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)
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