QkTarget
typedef struct QkTarget QkTargetUna 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
QkTargetsupporterà 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
dtper 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
QkTargetda 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
QkTargetda 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 aQkTarget.
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_tda usare come qargs. Può essereNULLse 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_tda usare come qargs. Può essereNULLse globale. - params – Un puntatore a un array di puntatori di
QkParamoggetti come parametri da controllare. Può essereNULLse 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_tdei 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_idxsi 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
QkTargetOpil.
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
Targetall'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
QkTargetOpoggetto.