BlockCollector
class qiskit.dagcircuit.BlockCollector(dag)
Bases: object
Esta classe implementa várias estratégias para dividir um DAG (grafo acíclico direcionado) em blocos de nós que atendem a determinados critérios. Isso funciona tanto com as DAGCircuit representações DAGDependency quanto com as de um DAG, sendo que esta última leva em conta a comutatividade entre os nós.
A coleta de nós da DAGDependency geralmente leva a resultados mais otimizados, mas é mais lenta, pois exige a construção prévia de uma DAGDependency. Portanto, o DAGCircuit deve ser usado com configurações de transpilador mais baixas, e o DAGDependency deve ser usado com configurações de transpilador mais altas.
Em geral, há várias maneiras de coletar blocos máximos. As abordagens usadas aqui são do tipo "a partir dos nós de entrada de um DAG, colete avidamente o maior bloco de nós que corresponda a determinados critérios". Para obter detalhes adicionais, consulte https://github.com/Qiskit/qiskit/issues/5775.
Parâmetros
dag (Union[DAGCircuit, DAGDependency]) – O DAG de entrada.
Aumentos
DAGCircuitError - o objeto de entrada não é um DAG.
Métodos
collect_all_matching_blocks
collect_all_matching_blocks(filter_fn, split_blocks=True, min_block_size=2, split_layers=False, collect_from_back=False, max_block_width=None)
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.
Após a coleta dos blocos, eles podem ser refinados opcionalmente. A opção split_blocks permite dividir os blocos coletados em subblocos sobre subconjuntos de qubits disjuntos. A opção split_layers permite dividir os blocos coletados em camadas de instruções não sobrepostas. A opção min_block_size especifica o número mínimo de portas no bloco para que o bloco seja coletado. A opção max_block_width especifica o número máximo de qubits sobre os quais um bloco pode ser definido.
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(filter_fn, max_block_width)
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.
Parâmetros
Tipo de retorno
lista [ DAGOpNode | DAGDepNode ]