HighLevelSynthesis
class qiskit.transpiler.passes.HighLevelSynthesis(*args, **kwargs)
Bases: TransformationPass
Sintetizar objetos de nível superior e desenrolar definições personalizadas.
A entrada para essa passagem é um DAG que pode conter objetos de nível superior, incluindo objetos matemáticos abstratos (por exemplo, objetos do tipo LinearFunction), operações anotadas (objetos do tipo AnnotatedOperation) e portas personalizadas.
No caso de uso mais comum, quando basis_gates ou target é especificado, todos os objetos de nível superior são sintetizados, de modo que a saída é um DAGCircuit sem esses objetos. Mais precisamente, cada porta no DAG de saída é diretamente suportada pelo alvo ou está em equivalence_library.
Os objetos matemáticos abstratos são sintetizados usando plug-ins de síntese, aplicando métodos de síntese especificados na configuração de síntese de alto nível (consulte a documentação de HLSConfig).
Como exemplo, vamos supor que op_a e op_b são nomes de dois objetos de nível superior, que op_a-objetos têm dois métodos de síntese default que não requerem nenhum parâmetro adicional e other com dois parâmetros inteiros opcionais option_1 e option_2, que op_b-objetos têm um único método de síntese default, e qc é um circuito quântico que contém os objetos op_a e op_b . O trecho de código a seguir:
hls_config = HLSConfig(op_b=[("other", {"option_1": 7, "option_2": 4})])
pm = PassManager([HighLevelSynthesis(hls_config=hls_config)])
transpiled_qc = pm.run(qc)mostra como executar o método de síntese alternativo other para os objetos op_b, enquanto usa os métodos default para todos os outros objetos de alto nível, inclusive os objetos op_a.
As operações anotadas (que consistem em uma operação de base e uma lista de modificadores inversos, de controle e de potência) são sintetizadas recursivamente, primeiro sintetizando a operação de base e, em seguida, aplicando métodos de síntese para criar versões invertidas, controladas ou energizadas dessa operação.)
As portas personalizadas são sintetizadas por meio do desenrolar recursivo de suas definições, até que cada porta seja compatível com o destino ou esteja na biblioteca de equivalência.
Quando nem basis_gates nem target são especificados, a passagem sintetiza apenas os objetos matemáticos abstratos de nível superior e as operações anotadas, sem descer até a porta definitions. Isso é consistente com o comportamento mais antigo da passagem, permitindo sintetizar alguns objetos de nível superior usando plug-ins e deixando os outros portões intocados.
A síntese de alto nível passa informações sobre os qubits auxiliares disponíveis e se o estado deles está limpo (definido como ) ou sujo (estado desconhecido) para a rotina de síntese por meio dos respectivos argumentos "num_clean_ancillas" e "num_dirty_ancillas". Se qubits_initially_zero for True (padrão), presume-se que os qubits estejam no estado . Ao anexar um bloco sintetizado usando qubits auxiliares no circuito, primeiro usamos os qubits auxiliares limpos.
Supõe-se que os métodos de síntese mantenham o estado dos qubits auxiliares. Concretamente, isso significa que os qubits auxiliares limpos ainda devem estar no estado após o bloco sintetizado, enquanto os qubits auxiliares sujos são reutilizados apenas como qubits sujos.
HighLevelSynthesis inicializador.
Parâmetros
- hls_config – a configuração de síntese de alto nível que especifica os métodos e parâmetros de síntese para vários objetos de alto nível no circuito. Se não for especificado, serão utilizados os métodos e parâmetros de síntese padrão.
- coupling_map – gráfico direcionado representado como um mapa de acoplamento.
- target – o alvo de backend a ser usado nesta etapa. Se for especificado, será utilizado em vez do mapa de acoplamento.
- use_qubit_indices - um sinalizador que indica se essa passagem de síntese está sendo executada antes ou depois da definição do layout, ou seja, se os índices de qubit dos objetos de nível superior correspondem aos índices de qubit no backend de destino.
- equivalence_library - A biblioteca de equivalência usada (as instruções nessa biblioteca não serão desenroladas por essa passagem).
- basis_gates – nomes das bases de destino para as quais se deve realizar o desenrolamento, por exemplo[,] ‘u3’, ‘cx’. Será ignorado se
targettambém for especificado. - min_qubits - O número mínimo de qubits para operações no dag de entrada para traduzir.
- qubits_initially_zero - Indica se os qubits estão inicialmente no estado . Isso permite que a síntese de alto nível use qubits auxiliares limpos (ou seja, no estado zero) para sintetizar uma operação.
- optimization_metric - Especifica o critério de otimização usado pelos métodos de síntese padrão para objetos de alto nível (quando disponível).
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
Verifique 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
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 o passe HighLevelSynthesis no dag.
Parâmetros
dag (DAGCircuit) – data de entrada.
Retorna
Saída dag com operações de nível superior sintetizadas.
Aumentos
- TranspilerError - quando o transpilador não consegue sintetizar o DAG fornecido
- (** por exemplo****, quando o método de síntese especificado não estiver disponível )*****.** -
Tipo de retorno
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