QkTranspiler
A qk_transpile() função expõe o transpilador (qiskit.transpiler) do Qiskit para C. A funcionalidade básica utiliza o mesmo código subjacente da versão Python -space, mas o transpilador exposto ao C apresenta mais limitações do que aquele exposto ao Python. O transpiler pressupõe um circuito construído exclusivamente com a API C e destina-se a funcionar apenas no caso de uma API C autônoma. É possível que não funcione corretamente em um cenário misto de uso de Python e /C. Se você estiver combinando circuitos do tipo C e do tipo Python, deve chamar as funções generate_preset_pass_manager()transpile() ou para esses circuitos.
Tipos de dados
QkTranspileResult
struct QkTranspileResult
O objeto de resultado do contêiner de qk_transpile
Quando o transpilador compila com êxito um circuito quântico para um determinado alvo, ele retorna o circuito transpilado e o layout. A função qk_transpile gravará ponteiros nos campos dessa estrutura quando for executada com êxito. Você pode inicializar essa estrutura com ponteiros nulos ou deixá-los sem definição, pois os valores nunca são lidos por qk_transpile e somente gravados. Depois de chamar qk_transpile , você é responsável por chamar qk_circuit_free e qk_transpile_layout_free nos membros dessa estrutura.
QkCircuit *circuito
O circuito compilado.
QkTranspileLayout *layout
Metadados sobre os layouts virtuais e físicos iniciais e finais.
QkTranspileOptions
struct QkTranspileOptions
As opções para executar o transpilador
uint8_t nível de otimização
O nível de otimização com o qual o transpilador deve ser executado. Os valores válidos são 0, 1, 2 ou 3.
int64_t semente
A semente para o transpilador. Se for definido como um número negativo, isso significa que nenhuma semente será definida e que os RNGs usados no transpilador serão semeados a partir da entropia do sistema.
aproximação dupla_grau
O grau de aproximação é um indicador heurístico em que 1.0 significa nenhuma aproximação (até a tolerância numérica) e 0.0 significa a aproximação máxima. Um valor NAN indica que a aproximação é permitida até a taxa de erro relatada para uma operação no alvo.
QkTranspilerStageState
struct QkTranspilerStageState
Um contêiner que reúne atributos individuais compartilhados pelas etapas do transpiler. Quando a transpilagem ocorre corretamente, cada etapa individual grava atributos específicos nesse contêiner que serão necessários para as etapas seguintes. Se o contêiner não estiver inicializado, cada etapa inicializará um novo objeto quando necessário.
qk_transpile_state_new
void qk_transpile_state_new(QkTranspilerStageState **state)Criar um ponteiro para um objeto
QkTranspilerStageStatevazioSegurança
O comportamento é indefinido se não
statefor um ponteiro válido alocado.Parâmetros
- state – um ponteiro para o espaço de memória alocado onde o ponteiro será armazenado.
qk_transpile_state_free
void qk_transpile_state_free(QkTranspilerStageState *state)Liberar um
QkTranspilerStageStateobjetoSegurança
O comportamento é indefinido se não
statefor um ponteiro válido e diferente de nulo para umQkTranspilerStageState.Parâmetros
- state – um ponteiro para o estado a ser liberado
qk_transpile_state_layout
QkTranspileLayout *qk_transpile_state_layout(QkTranspilerStageState *state)Obtém um
QkTranspileLayoutobjeto a partir de umQkTranspilerStageStateobjeto.Este ponteiro pertence ao
stateobjeto e não deve ser liberado usandoqk_transpile_layout_free. Em vez disso, libere o objetostateoriginal usandoqk_transpile_state_free.Segurança
O comportamento é indefinido se não
statefor um ponteiro válido e diferente de nulo para umQkTranspilerStageState.Parâmetros
- state – um ponteiro para o estado do qual se deseja recuperar o layout.
Retorna
um ponteiro para um
QkTranspileLayoutobjeto de propriedade do estado.qk_transpile_state_layout_set
void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)Define um
QkTranspileLayoutobjeto como o layout de umQkTranspilerStageStateobjeto.A chamada a este método consome o
QkTranspileLayoutobjeto, o que significa que o usuário não precisará chamá-loqk_transpile_layout_free. O usuário ainda deve desalocar o espaço reservado para ele usandofree.Segurança
O comportamento é indefinido se não
statefor um ponteiro válido e diferente de nulo para umQkTranspilerStageState. O comportamento é indefinido se nãostatefor um ponteiro válido para umQkTranspileLayout.Parâmetros
- estado – um ponteiro para o estado cujo layout deve ser definido.
- layout – um ponteiro para o layout a ser usado. Pode ser
NULLpara desativar o layout.
Funções
qk_transpiler_default_options
QkTranspileOptions qk_transpiler_default_options(void)
Gerar padrões de opções do transpilador
Essa função gera um QkTranspileOptions com as configurações padrão. No momento, é optimization_level 2, sem semente e sem aproximação.
Retorna
Um QkTranspileOptions objeto com configurações padrão.
qk_transpile_stage_init
QkExitCode qk_transpile_stage_init(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Execute a etapa de inicialização predefinida do transpiler em um circuito
O transpiler Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para se adequar às restrições de uma QPU e otimiza o circuito para execução. Esta função executa a primeira etapa do transpiler, init, que executa otimizações de circuitos abstratos e reduz operações multi-qubit em operações de um e dois qubits. Você pode consultar a etapa de inicialização para obter mais detalhes.
Esta função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor invocar o transpiler via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se dag, target, ou não forem ponteiros válidos e não state nulos para um QkDag, QkTarget, ou QkTranspileLayout ponteiro, respectivamente. options deve ser um ponteiro válido para a QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL. O valor do ponteiro interno para state será sobrescrito por esta função. Se o valor ao qual se aponta precisar ser liberado, isso deve ser feito fora desta função, pois ela não o liberará.
Parâmetros
- dag – Um ponteiro para o circuito no qual o transpiler será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - state – Um ponteiro para um ponteiro para um
QkTranspilerStageStateobjeto. Se a execução for bem-sucedida (código de retorno 0), um ponteiro para o objeto de estado criado pelo transpiler será gravado neste ponteiro. - erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.
qk_transpile_stage_routing
QkExitCode qk_transpile_stage_routing(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState *state, char **error)
Execute a etapa de roteamento predefinida do transpiler em um circuito
O transpiler Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para se adequar às restrições de uma QPU e otimiza o circuito para execução. Esta função executa a terceira etapa do gerenciador de passagem predefinido, o roteamento, que traduz todas as instruções do circuito para aquelas suportadas pelo destino. Você pode consultar a etapa de roteamento para obter mais detalhes.
Esta função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor invocar o transpiler via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se dag, target, ou layout, não forem ponteiros válidos e diferentes de nulo para um QkTranspileLayout ponteiro QkDag, QkTarget, ou, respectivamente. options deve ser um ponteiro válido para um QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL.
Parâmetros
- dag – Um ponteiro para o circuito no qual o transpiler será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - state – Um ponteiro para um ponteiro para um
QkTranspilerStageStateobjeto que contém o layout. Normalmente, você precisará executar a funçãoqk_transpile_stage_layoutantes desta, e isso fornecerá umQkTranspilerStageStateobjeto com o layout inicial definido. Você quer pegar o resultado dessa função e usá-lo como entrada para esta. Se você não tiver um objeto de layout (por exemplo, se você executou sua própria passagem de layout). Você pode executarqk_transpile_layout_generate_from_mappingpara gerar um layout trivial (em que o qubit virtual 0 no circuito é mapeado para o qubit físico 0 no destino, 1->1, 2->2, etc.) para o DAG em seu estado atual. Isso permitirá que você gere um objeto de layout para a etapa de roteamento caso crie seu próprio layout. - erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.
qk_transpile_stage_optimization
QkExitCode qk_transpile_stage_optimization(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error, QkTranspilerStageState *state)
Execute a etapa de otimização predefinida do transpiler em um circuito
O transpiler Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para se adequar às restrições de uma QPU e otimiza o circuito para execução. Esta função executa a quarta etapa do gerenciador de passagem predefinida, a otimização, que otimiza o circuito para o alvo determinado após o circuito ter sido transformado em um circuito físico. Você pode consultar a etapa Otimização para obter mais detalhes.
Esta função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor invocar o transpiler via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se dag e não target forem ponteiros válidos e diferentes de nulo para um ou QkDagum QkTarget , respectivamente. options deve ser um ponteiro válido para um QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL.
Parâmetros
- dag – Um ponteiro para o circuito no qual o transpiler será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado. - state – Um ponteiro para um
QkTranspilerStageStateobjeto que contém o layout. Normalmente, você precisará executar a funçãoqk_transpile_stage_layoutantes desta, e isso fornecerá umQkTranspileLayoutobjeto com o layout inicial definido; você deve pegar o layout de saída dessa função e usá-lo como entrada para esta. Se você não tiver um objeto de layout (por exemplo, se você executou sua própria passagem de layout). Você pode executarqk_transpile_layout_generate_from_mappingpara gerar um layout trivial (em que o qubit virtual 0 no circuito é mapeado para o qubit físico 0 no destino, 1->1, 2->2, etc.) para o DAG em seu estado atual. Isso permitirá que você gere um objeto de layout para a etapa de otimização caso crie seu próprio layout.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.
qk_transpile_stage_translation
QkExitCode qk_transpile_stage_translation(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, char **error)
Execute a etapa de tradução predefinida do transpiler em um circuito
O transpiler Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para se adequar às restrições de uma QPU e otimiza o circuito para execução. Esta função executa a quarta etapa do gerenciador de passagem predefinido, a tradução, que traduz todas as instruções do circuito para aquelas suportadas pelo destino. Você pode consultar a etapa Tradução para obter mais detalhes.
Esta função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor invocar o transpiler via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se dag e não target forem ponteiros válidos e diferentes de nulo para um QkDage, QkTarget respectivamente. options deve ser um ponteiro válido para um QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL.
Parâmetros
- dag – Um ponteiro para o circuito no qual o transpiler será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.
qk_transpile_stage_layout
QkExitCode qk_transpile_stage_layout(QkDag *dag, const QkTarget *target, const QkTranspileOptions *options, QkTranspilerStageState **state, char **error)
Execute a etapa de layout predefinida do transpiler em um circuito
O transpiler Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para se adequar às restrições de uma QPU e otimiza o circuito para execução. Esta função executa a segunda etapa do layout do gerenciador de passagem predefinido, que escolhe o mapeamento inicial de qubits virtuais para qubits físicos, incluindo a expansão do circuito para conter ancillas explícitas. Você pode consultar a etapa Layout para obter mais detalhes.
Esta função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor invocar o transpiler via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se dag ou não forem targetponteiros válidos e diferentes de nulo para um ou QkDagum, QkTarget respectivamente. O comportamento também é indefinido se não layout for um ponteiro válido e alinhado para um ponteiro para um QkTranspileLayout ou um ponteiro para um NULL ponteiro. options deve ser um ponteiro válido para um QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL.
Parâmetros
- dag – Um ponteiro para o circuito no qual o transpiler será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - state – Um ponteiro para um ponteiro para um
QkTranspilerStageStateobjeto. Se a execução for bem-sucedida (código de retorno 0), o objeto de layout criado pelo transpiler será gravado no objeto de estado indicado por este ponteiro. O ponteiro interno para isso pode ser nulo se não houver nenhum objeto de estado ou layout existente. Normalmente, ao executar essa funçãoqk_transpile_stage_init, você pegaria o estado de saída dela e usaria sua estrutura como entrada para esta. Mas, se você não tiver um layout, o ponteiro interno pode ser nulo, e um novo objetoQkTranspilerStageState, com um layout, será alocado, e esse ponteiro será definido para o valor interno do layout aqui. - erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.
qk_transpile
QkExitCode qk_transpile(const QkCircuit *qc, const QkTarget *target, const QkTranspileOptions *options, QkTranspileResult *result, char **error)
Transpilar um único circuito.
O transpilador Qiskit é um compilador de circuitos quânticos que reescreve um determinado circuito de entrada para corresponder às restrições de uma QPU e otimiza o circuito para execução. Essa função só deve ser usada com circuitos construídos usando a API C do Qiskit. Ele faz suposições sobre o circuito usando apenas recursos expostos via C. Se você estiver em um ambiente misto de Python e C, normalmente é melhor chamar o transpilador via Python.
Essa função é multithread internamente e iniciará um pool de threads com threads iguais ao número de CPUs informado pelo sistema operacional por padrão. Isso incluirá núcleos lógicos em CPUs com multithreading simultâneo. Você pode ajustar o número de threads com a variável de ambiente RAYON_NUM_THREADS . Por exemplo, a configuração RAYON_NUM_THREADS=4 limitaria o pool de threads a 4 threads.
Segurança
O comportamento é indefinido se circuit, target, ou result, não forem ponteiros válidos e diferentes de nulo para um QkCircuit, QkTarget, ou, QkTranspileResult respectivamente. options deve ser um ponteiro válido para um QkTranspileOptions ou NULL. error deve ser um ponteiro válido para um char ponteiro ou NULL.
Parâmetros
- qc - Um ponteiro para o circuito no qual o transpilador será executado.
- alvo - Um ponteiro para o alvo para o qual o circuito será compilado.
- options - Um ponteiro para um objeto de opções que define as opções do usuário. Se esse for um ponteiro nulo, serão usados os valores padrão. Consulte
qk_transpile_default_optionspara obter mais detalhes sobre os valores padrão. - result - Um ponteiro para o local de memória do resultado do transpilador. Em uma execução bem-sucedida (código de retorno 0), a saída do transpilador será gravada no ponteiro. Os membros da estrutura de resultados são de propriedade do chamador e você é responsável por liberar os membros usando as respectivas funções free.
- erro – Um ponteiro para um ponteiro com uma string terminada em nul com uma descrição do erro. Se o transpiler falhar, um ponteiro para a string com a descrição do erro será gravado neste ponteiro. Esse ponteiro precisa ser liberado com
qk_str_free. Isso pode ser um ponteiro nulo, caso em que o erro não será registrado.
Retorna
O código de retorno do transpilador, QkExitCode_Success significa sucesso e todos os outros valores indicam um erro.