Skip to main content
IBM Quantum Platform

QkTarget

typedef struct QkTarget QkTarget

Una mappatura di istruzioni e proprietà che rappresentano i vincoli particolari di un backend. Il suo scopo è quello di fornire al compilatore informazioni che gli consentano di compilare un circuito di ingresso in un altro ottimizzato tenendo conto delle specifiche del sito QkTarget. Questa struttura rappresenta un'interfaccia di basso livello per la struttura dati principale Target in Rust, che rappresenta la classe base per la sua controparte Python, Target.

Ecco un esempio di come funziona questa struttura:

#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);

L'API Target C attualmente supporta solo l'aggiunta di istanze di QkGate senza parametri o con parametri fissi. Il supporto per i parametri regolari sarà aggiunto in futuro. La funzionalità continuerà ad espandersi nel tempo, man mano che miglioreremo le capacità del nostro modello di dati Rust.


Tipi di dati

QkInstructionProperties

struct QkInstructionProperties

Una rappresentazione delle proprietà delle istruzioni di un'operazione Target.

doppia durata

La durata, in secondi, dell'istruzione sul set specificato di qubit. Sarà impostato su NaN se la proprietà non è definita.

doppio errore

Il tasso di errore medio per l'istruzione sul set specificato di qubit. Sarà impostato su NaN se la proprietà non è definita.

QkTargetOp

struct QkTargetOp

Rappresentazione di un'operazione identificata all'interno dell'obiettivo.

Questa struttura è creata in modo nativo dall'API Target sottostante e gli utenti non devono scriverci direttamente né tentare di liberarne manualmente gli attributi, poiché ciò comporterebbe un comportamento indefinito. Per liberare questa struttura, gli utenti devono invece qk_target_op_clear chiamare.

QkOperationKind op_type

L'identificatore dell'operazione corrente.

carattere *nome

Il nome dell'operazione.

uint32_t numero_di_qubit

Il numero di qubit supportati da questa operazione. In caso di variabile (uint32_t)-1 , il valore predefinito sarà.

const QkParam **params

I parametri associati a questa operazione, come QkParam. Se non sono presenti parametri, questo valore verrà rappresentato con un NULL puntatore.

uint32_t numero_parametri

Il numero di parametri supportati da questa operazione. In caso di variabile (uint32_t)-1 , il valore predefinito sarà.


Funzioni

qk_target_new

QkTarget *qk_target_new(uint32_t num_qubits)

Costruisce un nuovo QkTarget con il numero di qubit indicato. Il numero di qubit è destinato a cambiare se viene aggiunta un'istruzione con proprietà che si applicano a un insieme di qarg in cui un qualsiasi indice è superiore al numero di qubit specificato

Esempio

QkTarget *target = qk_target_new(5);

Parametri

  • num_qubits - Il numero di qubit che QkTarget supporterà esplicitamente.

Risultati

Un puntatore al nuovo file QkTarget

qk_target_borrow_from_python

QkTarget *qk_target_borrow_from_python(PyObject *ob)

Recupera un QkTarget puntatore da un oggetto Python.

Questa operazione prende in prestito un riferimento a un oggetto di tipo Python ed estrae il QkTarget puntatore corrispondente, se è del tipo corretto. Il puntatore restituito viene preso in prestito dal ob puntatore. Se il non PyObject è del tipo corretto, il valore restituito è NULL e viene impostato lo stato di eccezione dell'interprete di Python.

Per chiamare questa funzione è necessario essere collegati a un interprete Python.

È inoltre possibile utilizzare qk_target_convert_from_python, che dal punto di vista logico è esattamente identico a questa funzione, ma può essere utilizzato direttamente come funzione di "conversione" per la PyArg_Parse* famiglia di funzioni di conversione di Python.

Sicurezza

Chi chiama deve essere collegato a un interprete dell' Python. Il comportamento è indefinito se non ob è un puntatore valido e non nullo a un oggetto Python.

Parametri

  • ob – Un oggetto preso in prestito dall' Python.

Risultati

Un puntatore all'oggetto nativo, oppure NULL se l'oggetto Python è di tipo errato.

qk_target_convert_from_python

int qk_target_convert_from_python(PyObject *object, void *address)

Recupera un puntatore Target da un oggetto Python.

Questa operazione prende in prestito un riferimento di tipo Python ed estrae il QkTarget puntatore corrispondente in address,, se è del tipo corretto. Il puntatore restituito viene preso in prestito dal object puntatore. Se il tipo PyObject non è corretto, il valore restituito è 1, viene impostato lo stato di eccezione dell'interprete di Python e e address rimane invariato.

Per chiamare questa funzione è necessario essere collegati a un interprete Python.

Puoi anche usare qk_target_borrow_from_python, che dal punto di vista logico è esattamente uguale a questo, ma presenta una sintassi più intuitiva per l'uso diretto.

Sicurezza

Chi chiama deve essere collegato a un interprete dell' Python. Il comportamento è indefinito se non object è un puntatore valido e non nullo a un oggetto Python, oppure se non address è un puntatore a dati scrivibili del tipo corretto.

Parametri

  • oggetto – Un oggetto Python preso in prestito.
  • destinazione – La posizione in cui scrivere l'output.

Risultati

1 in caso di successo, 0 in caso di fallimento.

qk_target_num_qubits

uint32_t qk_target_num_qubits(const QkTarget *target)

Restituisce il numero di qubit di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il numero di qubit che questo obiettivo può utilizzare.

qk_target_dt

double qk_target_dt(const QkTarget *target)

Restituisce il valore dt di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il valore dt di questo QkTarget o NAN se non assegnato.

qk_target_granularity

uint32_t qk_target_granularity(const QkTarget *target)

Restituisce il valore di granularità di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il valore granularity di questo QkTarget.

qk_target_min_length

uint32_t qk_target_min_length(const QkTarget *target)

Restituisce il valore min_length di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il valore min_length di questo QkTarget.

qk_target_pulse_alignment

uint32_t qk_target_pulse_alignment(const QkTarget *target)

Restituisce il valore pulse_alignment di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il valore pulse_alignment di questo QkTarget.

qk_target_acquire_alignment

uint32_t qk_target_acquire_alignment(const QkTarget *target)

Restituisce il valore acquire_alignment di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

Il valore acquire_alignment di questo QkTarget.

qk_target_set_dt

QkExitCode qk_target_set_dt(QkTarget *target, double dt)

Imposta il valore dt di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • dt - Il valore dt per la risoluzione temporale dell'ingresso del sistema.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_set_granularity

QkExitCode qk_target_set_granularity(QkTarget *target, uint32_t granularity)

Imposta il valore granularity di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • granularità - Il valore della risoluzione minima del gate di impulsi in unità di dt.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_set_min_length

QkExitCode qk_target_set_min_length(QkTarget *target, uint32_t min_length)

Imposta il valore min_length di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • min_length - Il valore minimo della lunghezza del gate dell'impulso in unità di dt.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_set_pulse_alignment

QkExitCode qk_target_set_pulse_alignment(QkTarget *target, uint32_t pulse_alignment)

Restituisce il valore pulse_alignment di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • pulse_alignment - valore che rappresenta una risoluzione temporale del gate.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_set_acquire_alignment

QkExitCode qk_target_set_acquire_alignment(QkTarget *target, uint32_t acquire_alignment)

Imposta il valore acquire_alignment di questo QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • acquire_alignment - valore che rappresenta la risoluzione temporale dell'ora di inizio dell'istruzione di misura.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_copy

QkTarget *qk_target_copy(QkTarget *target)

Crea una copia del sito QkTarget.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget da copiare.

Risultati

Un puntatore alla nuova copia di QkTarget.

qk_target_free

void qk_target_free(QkTarget *target)

Liberate il sito QkTarget.

Esempio

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

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget da liberare.

qk_target_add_instruction

QkExitCode qk_target_add_instruction(QkTarget *target, QkTargetEntry *target_entry)

Aggiunge un cancello a QkTarget attraverso un QkTargetEntry.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Il comportamento non è definito se entry non è un puntatore valido e non nullo a un QkTargetEntry.

Parametri

  • target - Un puntatore a QkTarget.
  • target_entry - Un puntatore al sito QkTargetEntry. Il puntatore viene liberato quando viene aggiunto a QkTarget.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

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 le proprietà di un gate nel sito QkTarget.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Ci si aspetta che il tipo qargs sia un puntatore a un array di uint32_t in cui la lunghezza corrisponde a quella specificata da num_qubits e deve corrispondere all'aspettativa del gate. Se l'array non è sufficientemente lungo, il comportamento di questa funzione non è definito, poiché la lettura avverrà al di fuori dei limiti dell'array. Può essere un puntatore nullo se non ci sono qubit per un determinato gate. È possibile controllare qk_gate_num_qubits per determinare quanti qubit sono necessari per un determinato gate.

Parametri

  • target - Un puntatore a QkTarget.
  • istruzione - L'istruzione da modificare.
  • qargs - Il puntatore all'array di valori uint32_t da usare come qargs. Può essere NULL se globale.
  • num_qubits - Il numero di qubit dell'istruzione...
  • durata - La durata dell'istruzione in secondi sul set specifico di qubit.
  • error - Il tasso di errore medio dell'istruzione sullo specifico set di qubit.

Risultati

QkExitCode che specifica se l'operazione è andata a buon fine.

qk_target_num_instructions

size_t qk_target_num_instructions(const QkTarget *target)

Restituisce il numero di istruzioni tracciate da QkTarget.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.

Risultati

La lunghezza dell'obiettivo.

qk_target_instruction_supported

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

Verifica se l'istruzione fornita e i relativi qargs sono supportati da questo Target.

Esempio

// 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);

Sicurezza

Il comportamento è indefinito se non target è un puntatore valido e non nullo a un QkTarget.

L'argomento qargs dovrebbe essere un puntatore a un array di u32int_t la cui lunghezza corrisponda alle aspettative del gate. Se l'array non è sufficientemente lungo, il comportamento di questa funzione è indefinito poiché leggerà al di fuori dei limiti dell'array. Può essere un puntatore nullo se non ci sono qubit per un dato gate. È possibile verificare qk_gate_num_qubits per determinare quanti qubit sono necessari per un dato gate.

L'argomento params dovrebbe essere un array di QkParam dove la lunghezza corrisponde alle aspettative dell'operazione in questione. Se l'array non è sufficientemente lungo, il comportamento sarà indefinito, proprio come menzionato sopra per qargs l'argomento. È sempre possibile verificare qk_gate_num_params nel caso di un QkGate.

Parametri

  • target – Un puntatore al Target.
  • operation_name – Il nome dell'istruzione da controllare.
  • qargs - Il puntatore all'array di valori uint32_t da usare come qargs. Può essere NULL se globale.
  • params – Un puntatore a un array di puntatori di QkParam oggetti come parametri da controllare. Può essere NULL se non sono presenti parametri.

Risultati

Se l'istruzione è supportata o meno.

qk_target_op_index

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

Restituisce l'indice in cui si trova un'operazione in base al suo nome.

Esempio

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");

Sicurezza

Il comportamento è indefinito se non QkTarget è un puntatore valido e non nullo a un QkTarget. Il comportamento è indefinito se non name è un puntatore a una stringa valida terminata da null.

Parametri

  • target - Un puntatore a QkTarget.
  • nome – Il nome di cui ottenere l'indice.

Risultati

l'indice in cui l'operazione è il valore massimo di size_t nel caso in cui non sia nel Target.

qk_target_op_name

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

Restituisce il nome dell'operazione memorizzata in quell'indice nella mappa delle porte QkTarget dell'istanza.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • indice – L'indice in cui è memorizzato il gate.

Risultati

Il nome dell'operazione associata all'indice fornito.

qk_target_op_num_properties

size_t qk_target_op_num_properties(const QkTarget *target, size_t index)

Restituisce il numero di proprietà definite per l'operazione specificata QkTarget nell'istanza, a.k.a. la lunghezza della mappa della proprietà. Va in panico se l'indice dell'operazione non è presente.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • indice – L'indice in cui è memorizzato il gate.

Risultati

Il numero di proprietà specificate per l'operazione associata a tale indice.

qk_target_op_qargs_index

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

Recupera l'indice in cui sono memorizzati alcuni qargs. Restituisce SIZE_MAX se non trovato.

Esempio

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);

Sicurezza

Il comportamento non è definito se QkTarget non è un puntatore valido e non nullo a un QkTarget.

Parametri

  • target - Un puntatore a QkTarget.
  • op_idx – L'indice in cui è memorizzata l'operazione.
  • qargs – Un puntatore all'array degli indici uint32_t dei qubit da controllare, può essere un puntatore nullo per controllare le proprietà globali.

Risultati

L'indice dei qargs associati all'istruzione all'indice op_idx specificato o SIZE_MAX se i qargs non sono presenti.

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 i qargs per l'operazione tramite indice.

Entra nel panico se uno qualsiasi degli indici è fuori range.

Esempio

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");
}

Sicurezza

Il comportamento è indefinito se non target è un puntatore valido e non nullo a un QkTarget. Il comportamento è indefinito se ciascuno qargs_out di o non qargs_len è allineato e scrivibile per un singolo valore del tipo corretto.

Parametri

  • target - Un puntatore a QkTarget.
  • op_idx – L'indice in cui è memorizzato il gate.
  • qarg_idx – L'indice in cui sono memorizzati i qargs.
  • qargs_out – Un puntatore in uscita a un array di qubit. Se op_idx si riferisce a un'operazione globale, verrà scritto un puntatore nullo. Il puntatore scritto è preso in prestito dal target e non deve essere liberato. Un'istruzione zero-qargs scriverà un puntatore non nullo, sebbene non valido per la lettura.
  • qargs_len – Un puntatore in uscita alla lunghezza dei qargs in qargs_out. Se l'indice è globale, la lunghezza scritta non è definita.

qk_target_op_props

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

Recupera i qargs per l'operazione memorizzati nei rispettivi indici.

Entra nel panico se uno qualsiasi degli indici è fuori range.

Esempio

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);

Sicurezza

Il comportamento è indefinito se non target è un puntatore valido e non nullo a un QkTarget. Il comportamento è indefinito se inst_props non punta a un indirizzo della dimensione corretta in cui QkInstructionProperties memorizzare.

Parametri

  • target - Un puntatore a QkTarget.
  • op_idx – L'indice in cui è memorizzato il gate.
  • qarg_idx – L'indice in cui sono memorizzati i qarg.
  • inst_props – Un puntatore per scrivere l'istanza QkInstructionProperties .

qk_target_op_get

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

Recupera informazioni su un'operazione nel Target tramite indice. Se l'indice non è presente, questa funzione genererà un errore. È possibile verificare il QkTarget numero totale di istruzioni utilizzando qk_target_num_instructions.

Esempio

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);

Sicurezza

Il comportamento è indefinito se non target è un puntatore valido e non nullo a un QkTarget. Il comportamento è indefinito se out_op non punta a un indirizzo della dimensione corretta in cui QkTargetOp memorizzare.

Parametri

  • target - Un puntatore a QkTarget.
  • indice – L'indice in cui è memorizzato il gate.
  • out_op – Un puntatore allo spazio in cui verrà memorizzato QkTargetOp il.

qk_target_op_gate

QkGate qk_target_op_gate(const QkTarget *target, size_t index)

Tenta di recuperare un QkGate in base all'operazione memorizzata in un indice. L'utente è responsabile di verificare se questa operazione è un gate nella QkTarget via utilizzando qk_target_op_get. In caso contrario, questa funzione genererà un errore.

Esempio

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);

Sicurezza

Il comportamento è indefinito se il target puntatore è nullo o non allineato.

Parametri

  • target – Un puntatore Target all'istanza.
  • indice – L'indice in cui si trova l'operazione.

Risultati

QkGate L'enumerazione in detto indice.

qk_target_op_clear

void qk_target_op_clear(QkTargetOp *op)

Cancella l'oggetto QkTargetOp .

Sicurezza

Il comportamento sarà indefinito se il puntatore è nullo o non allineato. I dati appartenenti a un QkTargetOp hanno origine in Rust e possono essere liberati solo utilizzando questa funzione.

Parametri

  • op – Il puntatore a un QkTargetOp oggetto.
Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.