Skip to main content
IBM Quantum Platform

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 QkTranspilerStageState vazio

Segurança

O comportamento é indefinido se não state for 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 QkTranspilerStageState objeto

Segurança

O comportamento é indefinido se não state for um ponteiro válido e diferente de nulo para um QkTranspilerStageState.

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 QkTranspileLayout objeto a partir de um QkTranspilerStageState objeto.

Este ponteiro pertence ao state objeto e não deve ser liberado usando qk_transpile_layout_free. Em vez disso, libere o objeto state original usando qk_transpile_state_free.

Segurança

O comportamento é indefinido se não state for um ponteiro válido e diferente de nulo para um QkTranspilerStageState.

Parâmetros

  • state – um ponteiro para o estado do qual se deseja recuperar o layout.

Retorna

um ponteiro para um QkTranspileLayout objeto de propriedade do estado.

qk_transpile_state_layout_set

void qk_transpile_state_layout_set(QkTranspilerStageState *state, QkTranspileLayout *layout)

Define um QkTranspileLayout objeto como o layout de um QkTranspilerStageState objeto.

A chamada a este método consome o QkTranspileLayout objeto, o que significa que o usuário não precisará chamá-lo qk_transpile_layout_free. O usuário ainda deve desalocar o espaço reservado para ele usando free.

Segurança

O comportamento é indefinido se não state for um ponteiro válido e diferente de nulo para um QkTranspilerStageState. O comportamento é indefinido se não state for um ponteiro válido para um QkTranspileLayout.

Parâmetros

  • estado – um ponteiro para o estado cujo layout deve ser definido.
  • layout – um ponteiro para o layout a ser usado. Pode ser NULL para 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_options para obter mais detalhes sobre os valores padrão.
  • state – Um ponteiro para um ponteiro para um QkTranspilerStageState objeto. 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_options para obter mais detalhes sobre os valores padrão.
  • state – Um ponteiro para um ponteiro para um QkTranspilerStageState objeto que contém o layout. Normalmente, você precisará executar a função qk_transpile_stage_layout antes desta, e isso fornecerá um QkTranspilerStageState objeto 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 executar qk_transpile_layout_generate_from_mapping para 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_options para 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 QkTranspilerStageState objeto que contém o layout. Normalmente, você precisará executar a função qk_transpile_stage_layout antes desta, e isso fornecerá um QkTranspileLayout objeto 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 executar qk_transpile_layout_generate_from_mapping para 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_options para 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_options para obter mais detalhes sobre os valores padrão.
  • state – Um ponteiro para um ponteiro para um QkTranspilerStageState objeto. 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ção qk_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 objeto QkTranspilerStageState, 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_options para 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.

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