Skip to main content
IBM Quantum Platform

QkTarget

typedef struct QkTarget QkTarget

Um mapeamento de instruções e propriedades que representam as restrições específicas de um backend. Sua finalidade é fornecer ao compilador informações que permitam compilar um circuito de entrada em outro que seja otimizado, levando em consideração as especificações do site QkTarget. Essa estrutura representa uma interface de baixo nível para a principal estrutura de dados Target no Rust, que representa a classe base para sua contraparte Python, Target.

Veja um exemplo de como essa estrutura funciona:

#include <qiskit.h>
#include <math.h>

// Create a Target with 2 qubits
QkTarget *target = qk_target_new(2);
// Create an entry for a CX Gate with qargs (0, 1) and properties
// duration = 0.0123
// error = NaN
uint32_t qargs[2] = {0, 1};
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
qk_target_entry_add_property(entry, qargs, 2, 0.0123, NAN);

// Add a CX Gate to the target
qk_target_add_instruction(target, entry);

// Add a global H gate
qk_target_add_instruction(target, qk_target_entry_new(QkGate_H));

// Free the created target.
qk_target_free(target);

Atualmente, a API Target C só oferece suporte a adições de instâncias de QkGate sem parâmetros ou com parâmetros fixos. O suporte a parâmetros regulares será adicionado no futuro. A funcionalidade continuará se expandindo com o tempo, à medida que aprimorarmos nossos recursos do modelo de dados Rust.


Tipos de dados

QkInstructionProperties

struct QkInstructionProperties

Uma representação das propriedades de instrução de uma operação de destino.

dupla duração

A duração, em segundos, da instrução no conjunto especificado de qubits. Será definido como NaN se a propriedade não estiver definida.

erro duplo

A taxa média de erro para a instrução no conjunto especificado de qubits. Será definido como NaN se a propriedade não estiver definida.

QkTargetOp

struct QkTargetOp

Representação de uma operação identificada dentro do Alvo.

Essa estrutura é criada nativamente pela API Target subjacente e os usuários não devem gravar nela diretamente nem tentar liberar seus atributos manualmente, pois isso levaria a um comportamento indefinido. Para liberar essa estrutura, os usuários devem chamar qk_target_op_clear em vez disso.

QkOperationKind op_type

O identificador da operação atual.

char *nome

O nome da operação.

uint32_t número de qubits

O número de qubits que esta operação suporta. O padrão será (uint32_t)-1 no caso de um variável.

const QkParam **params

Os parâmetros associados a esta operação, como QkParam. Se não houver parâmetros, esse valor será representado por um NULL ponteiro.

uint32_t num_parâmetros

O número de parâmetros suportados por esta operação. O padrão será (uint32_t)-1 no caso de um variável.


Funções

qk_target_new

QkTarget *qk_target_new(uint32_t num_qubits)

Construa um novo QkTarget com o número determinado de qubits. O número de qubits será alterado se uma instrução for adicionada com propriedades que se aplicam a uma coleção de qargs na qual qualquer índice é maior do que o número especificado de qubits

Exemplo

QkTarget *target = qk_target_new(5);

Parâmetros

  • num_qubits - O número de qubits que o site QkTarget suportará explicitamente.

Retorna

Um ponteiro para o novo QkTarget

qk_target_borrow_from_python

QkTarget *qk_target_borrow_from_python(PyObject *ob)

Recuperar um QkTarget ponteiro de um objeto Python.

Isso utiliza uma referência de tipo Python e extrai o QkTarget ponteiro correspondente, caso seja do tipo correto. O ponteiro retornado é obtido do ponteiro ob . Se o não PyObject for do tipo correto, o valor de retorno é NULL e o estado de exceção do interpretador do Python é definido.

Você deve estar conectado a um interpretador Python para chamar esta função.

Você também pode usar qk_target_convert_from_python, que é, em termos lógicos, exatamente igual a esta função, mas pode ser usada diretamente como uma função “conversora” para a PyArg_Parse* família de funções conversoras do Python.

Segurança

O chamador deve estar conectado a um intérprete do tipo Python. O comportamento é indefinido se não ob for um ponteiro válido e diferente de nulo para um objeto Python.

Parâmetros

  • ob – Um objeto de empréstimo do tipo Python.

Retorna

Um ponteiro para o objeto nativo, ou NULL se o objeto Python for do tipo incorreto.

qk_target_convert_from_python

int qk_target_convert_from_python(PyObject *object, void *address)

Recuperar um ponteiro Target de um objeto Python.

Isso utiliza uma referência do tipo Python e extrai o QkTarget ponteiro correspondente para address``,, caso seja do tipo correto. O ponteiro retornado é obtido do ponteiro object . Se o não PyObject for do tipo correto, o valor de retorno é 1, o estado de exceção do interpretador do Python é definido e address permanece inalterado.

Você deve estar conectado a um interpretador Python para chamar esta função.

Você também pode usar qk_target_borrow_from_python, que é, na prática, exatamente o mesmo que isto, mas com uma sintaxe mais natural para uso direto.

Segurança

O chamador deve estar conectado a um intérprete do tipo Python. O comportamento é indefinido se não object for um ponteiro válido e diferente de nulo para um objeto Python, ou se não address for um ponteiro para dados graváveis do tipo correto.

Parâmetros

  • objeto – Um objeto Python obtido por empréstimo.
  • endereço – O local onde a saída deve ser gravada.

Retorna

1 em caso de sucesso, 0 em caso de falha.

qk_target_num_qubits

uint32_t qk_target_num_qubits(const QkTarget *target)

Retorna o número de qubits desse QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
uint32_t num_qubits = qk_target_num_qubits(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O número de qubits que esse alvo pode usar.

qk_target_dt

double qk_target_dt(const QkTarget *target)

Retorna o valor dt deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
qk_target_set_dt(target, 10e-9);
double dt = qk_target_dt(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O valor dt desse site QkTarget ou NAN se não for atribuído.

qk_target_granularity

uint32_t qk_target_granularity(const QkTarget *target)

Retorna o valor de granularidade deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t granularity = qk_target_granularity(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O valor granularity desse QkTarget.

qk_target_min_length

uint32_t qk_target_min_length(const QkTarget *target)

Retorna o valor min_length deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
size_t min_length = qk_target_min_length(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O valor min_length desse QkTarget.

qk_target_pulse_alignment

uint32_t qk_target_pulse_alignment(const QkTarget *target)

Retorna o valor pulse_alignment deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
uint32_t pulse_alignment = qk_target_pulse_alignment(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O valor pulse_alignment desse QkTarget.

qk_target_acquire_alignment

uint32_t qk_target_acquire_alignment(const QkTarget *target)

Retorna o valor acquire_alignment deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 0
uint32_t acquire_alignment = qk_target_pulse_alignment(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O valor acquire_alignment desse QkTarget.

qk_target_set_dt

QkExitCode qk_target_set_dt(QkTarget *target, double dt)

Define o valor dt desse site QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
double dt = qk_target_set_dt(target, 10e-9);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • dt - O valor dt para a resolução de tempo do sistema de entrada.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_set_granularity

QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)

Define o valor granularity desse QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_granularity(target, 2);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • granularidade - O valor da resolução mínima da porta de pulso em unidades de dt.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_set_min_length

QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)

Define o valor min_length desse QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_min_length(target, 3);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • min_length - O valor mínimo do comprimento da porta de pulso em unidades de dt.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_set_pulse_alignment

QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)

Retorna o valor pulse_alignment deste QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 1
qk_target_set_pulse_alignment(target, 4);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • pulse_alignment - valor que representa uma resolução de tempo da porta.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_set_acquire_alignment

QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)

Define o valor acquire_alignment desse QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
// The value defaults to 0
qk_target_set_acquire_alignment(target, 5);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • acquire_alignment - valor que representa uma resolução de tempo da hora de início da instrução de medição.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_copy

QkTarget *qk_target_copy(QkTarget *target)

Cria uma cópia do site QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);

QkTarget *copied = qk_target_copy(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget a ser copiado.

Retorna

Um ponteiro para a nova cópia do site QkTarget.

qk_target_free

void qk_target_free(QkTarget *target)

Liberte o QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
qk_target_free(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget a ser liberado.

qk_target_add_instruction

QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)

Adiciona um portão ao site QkTarget por meio de um QkTargetEntry.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
QkExitCode result = qk_target_add_instruction(target, entry);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

O comportamento é indefinido se entry não for um ponteiro válido e não nulo para um QkTargetEntry.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • target_entry - Um ponteiro para o site QkTargetEntry. O ponteiro é liberado quando adicionado ao site QkTarget.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_update_property

QkExitCode qk_target_update_property(QkTarget *target, QkGate instruction, uint32_t *qargs, uint32_t num_qubits, double duration, double error)

Modifica as propriedades de uma porta no site QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
double params[1] = {3.1415};
QkTargetEntry *entry = qk_target_entry_new_fixed(QkGate_CRX, params, "crx_pi");
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

qk_target_update_property(target, QkGate_CRX, qargs, 2, 0.0012, 1.1);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Espera-se que o tipo qargs seja um ponteiro para uma matriz de uint32_t em que o comprimento corresponde ao especificado por num_qubits e deve corresponder à expectativa do gate. Se a matriz for insuficientemente longa, o comportamento dessa função é indefinido, pois ela lerá fora dos limites da matriz. Ele pode ser um ponteiro nulo se não houver qubits para uma determinada porta. Você pode consultar qk_gate_num_qubits para determinar quantos qubits são necessários para uma determinada porta.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • instrução - A instrução a ser modificada.
  • qargs - O ponteiro para a matriz de valores uint32_t a serem usados como qargs. Pode ser NULL se for global.
  • num_qubits - O número de qubits da instrução.
  • duração - A duração da instrução em segundos no conjunto específico de qubits.
  • error - A taxa de erro média da instrução no conjunto específico de qubits.

Retorna

QkExitCode especificando se a operação foi bem-sucedida.

qk_target_num_instructions

size_t qk_target_num_instructions(const QkTarget *target)

Retorna o número de instruções rastreadas por um QkTarget.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t num_instructions = qk_target_num_instructions(target);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.

Retorna

O comprimento do alvo.

qk_target_instruction_supported

bool qk_target_instruction_supported(const QkTarget *target, const char *operation_name, const uint32_t *qargs, QkParam **params)

Verifica se a instrução fornecida e seus qargs são suportados por este Target.

Exemplo

// Create a mock target with only a global crx entry
// and 3.14 as its rotation parameter.
QkTarget *target = qk_target_new(5);
QkTargetEntry *crx_entry = qk_target_entry_new_fixed(QkGate_CRX, (double[]){3.14});
qk_target_entry_add_property(crx_entry, NULL, 0, 0.0, 0.1);
qk_target_add_instruction(target, crx_entry);

// Check if target is compatible with a "crx" gate
// at [0, 1] with 3.14 rotation.
QkParam *params[1] = {qk_param_from_double(3.14)};
qk_target_instruction_supported(target, "crx", (uint32_t []){0, 1}, params);

// Free the pointers
qk_param_free(params[0]);
qk_target_free(target);

Segurança

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

Espera-se que o qargs argumento seja um ponteiro para uma matriz cujo u32int_t comprimento corresponda à expectativa do gate. Se a matriz não tiver comprimento suficiente, o comportamento desta função é indefinido, pois ela irá ler fora dos limites da matriz. Pode ser um ponteiro nulo se não houver qubits para um determinado portão. Você pode verificar qk_gate_num_qubits para determinar quantos qubits são necessários para um determinado portão.

Espera-se que o params argumento seja uma matriz cujo QkParam comprimento corresponda à expectativa da operação em questão. Se a matriz não tiver comprimento suficiente, o comportamento será indefinido, conforme mencionado acima para o qargs argumento. Você sempre pode verificar qk_gate_num_params no caso de um QkGate.

Parâmetros

  • target – Um ponteiro para o Target.
  • operation_name – O nome da instrução a ser verificada.
  • qargs - O ponteiro para a matriz de valores uint32_t a serem usados como qargs. Pode ser NULL se for global.
  • params – Um ponteiro para uma matriz de ponteiros de QkParam objetos como parâmetros a serem verificados. Pode ser NULL se não houver parâmetros presentes.

Retorna

Se a instrução é suportada ou não.

qk_target_op_index

size_t qk_target_op_index(const QkTarget *target, const char *name)

Retorne o índice no qual uma operação está localizada com base em seu nome.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t op_idx = qk_target_op_index(target, "h");

Segurança

O comportamento é indefinido se não QkTarget for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se não name for um ponteiro para uma string válida terminada em nulo.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • nome – O nome para obter o índice.

Retorna

o índice em que a operação é o valor máximo de size_t no caso de não estar no Alvo.

qk_target_op_name

char *qk_target_op_name(const QkTarget *target, size_t index)

Retorne o nome da operação armazenada nesse índice no mapa de portas da QkTarget instância.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

char *op_name = qk_target_op_name(target, 0);
// Free after use
qk_str_free(op_name);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • índice – O índice no qual o gate está armazenado.

Retorna

O nome da operação associada ao índice fornecido.

qk_target_op_num_properties

size_t qk_target_op_num_properties(const QkTarget *target, size_t index)

Retorne o número de propriedades definidas para a operação especificada na QkTarget instância, a.k.a. o comprimento do mapa da propriedade. Entra em pânico se o índice da operação não estiver presente.

Exemplo

QkTarget *target = qk_target_new(5);
QkTargetEntry *target_entry = qk_target_entry_new(QkGate_H);
qk_target_add_instruction(target, target_entry);

size_t num_props = qk_target_op_num_properties(target, 0);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • índice – O índice no qual o gate está armazenado.

Retorna

O número de propriedades especificadas para a operação associada a esse índice.

qk_target_op_qargs_index

size_t qk_target_op_qargs_index(const QkTarget *target, size_t op_idx, const uint32_t *qargs)

Recupera o índice no qual alguns qargs estão armazenados. Retorna SIZE_MAX se não for encontrado.

Exemplo

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

size_t idx_0_1 = qk_target_op_qargs_index(target, 0, qargs);

Segurança

O comportamento é indefinido se QkTarget não for um ponteiro válido e não nulo para um QkTarget.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • op_idx – O índice no qual a operação está armazenada.
  • qargs – Um ponteiro para a matriz de índices uint32_t qubit a serem verificados, pode ser um ponteiro nulo para verificar propriedades globais.

Retorna

O índice dos qargs associados à instrução no índice op_idx especificado ou SIZE_MAX se os qargs não estiverem presentes.

qk_target_op_qargs

void qk_target_op_qargs(const QkTarget *target, size_t op_idx, size_t qarg_idx, uint32_t **qargs_out, uint32_t *qargs_len)

Recupera os qargs para a operação por índice.

Entra em pânico se algum dos índices estiver fora do intervalo.

Exemplo

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

uint32_t *qargs_retrieved;
uint32_t qargs_length;
qk_target_op_qargs(target, 0, 0, &qargs_retrieved, &qargs_length);
if (qargs_retrieved) {
    // We should enter this branch.
    printf("Number of qargs: %lu\n", qargs_length);
} else {
    printf("Qargs are global\n");
}

Segurança

O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se cada um qargs_out ou não qargs_len estiverem alinhados e graváveis para um único valor do tipo correto.

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • op_idx – O índice no qual o gate está armazenado.
  • qarg_idx – O índice no qual os qargs são armazenados.
  • qargs_out – Um ponteiro de saída para uma matriz de qubits. Se op_idx se referir a uma operação global, um ponteiro nulo será gravado. O ponteiro escrito é emprestado do destino e não deve ser liberado. Uma instrução zero-qargs irá escrever um ponteiro diferente de nulo, embora seja inválido para leituras.
  • qargs_len – Um ponteiro de saída para o comprimento do qargs em qargs_out. Se o índice for global, o comprimento escrito não é definido.

qk_target_op_props

void qk_target_op_props(const QkTarget *target, size_t op_idx, size_t qarg_idx, QkInstructionProperties *inst_props)

Recupera os qargs para a operação armazenados em seus respectivos índices.

Entra em pânico se algum dos índices estiver fora do intervalo.

Exemplo

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkInstructionProperties inst_props;
qk_target_op_props(target, 0, 0, &inst_props);

Segurança

O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se inst_props não apontar para um endereço com o tamanho correto para armazenar QkInstructionProperties .

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • op_idx – O índice no qual o gate está armazenado.
  • qarg_idx – O índice no qual os qargs são armazenados.
  • inst_props – Um ponteiro para gravar a QkInstructionProperties instância.

qk_target_op_get

void qk_target_op_get(const QkTarget *target, size_t index, QkTargetOp *out_op)

Recupera informações sobre uma operação no destino por meio do índice. Se o índice não estiver presente, esta função entrará em pânico. Você pode verificar o número QkTarget total de instruções usando qk_target_num_instructions.

Exemplo

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkTargetOp op;
qk_target_op_get(target, 0, &op);

// Clean up after you're done
qk_target_op_clear(&op);

Segurança

O comportamento é indefinido se não target for um ponteiro válido e diferente de nulo para um QkTarget. O comportamento é indefinido se out_op não apontar para um endereço com o tamanho correto para armazenar QkTargetOp .

Parâmetros

  • target - Um ponteiro para o site QkTarget.
  • índice – O índice no qual o gate está armazenado.
  • out_op – Um ponteiro para o espaço onde será QkTargetOp armazenado.

qk_target_op_gate

QkGate qk_target_op_gate(const QkTarget *target, size_t index)

Tenta recuperar um objeto QkGate com base na operação armazenada em um índice. O usuário é responsável por verificar se esta operação é uma porta na QkTarget via usando qk_target_op_get. Caso contrário, esta função entrará em pânico.

Exemplo

QkTarget *target = qk_target_new(5);

QkTargetEntry *entry = qk_target_entry_new(QkGate_CX);
uint32_t qargs[2] = {0, 1};
qk_target_entry_add_property(entry, qargs, 2, 0.0, 0.1);
qk_target_add_instruction(target, entry);

QkTargetOp op;
qk_target_op_get(target, 0, &op);

// Check if the operation is a gate;
if (op.op_type == QkOperationKind_Gate) {
    QkGate gate = qk_target_op_gate(target, 0);
    // Do something
}

// Clean up after you're done.
qk_target_op_clear(&op);

Segurança

O comportamento é indefinido se o target ponteiro for nulo ou não estiver alinhado.

Parâmetros

  • target – Um ponteiro para a Target instância.
  • índice – O índice no qual a operação está localizada.

Retorna

A QkGate enumeração no referido índice.

qk_target_op_clear

void qk_target_op_clear(QkTargetOp *op)

Limpa o QkTargetOp objeto.

Segurança

O comportamento será indefinido se o ponteiro for nulo ou não estiver alinhado. Os dados pertencentes a um QkTargetOp têm origem em Rust e só podem ser liberados usando esta função.

Parâmetros

  • op – O ponteiro para um QkTargetOp objeto.
Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.