Skip to main content
IBM Quantum Platform

Espressioni classiche

L'API C di Qiskit per le espressioni classiche offre funzionalità che consentono di esaminare le espressioni classiche utilizzate in Qiskit. Questa API consente agli utenti di esplorare ed esaminare gli alberi di espressioni tramite una serie di enumerazioni, strutture e funzioni di accesso. È possibile esaminare la struttura delle espressioni, identificare i tipi di nodo, interrogare le informazioni sui tipi e accedere alle proprietà dettagliate di ciascun nodo nell'albero delle espressioni. Attualmente, è possibile accedere alle espressioni classiche solo tramite l'API di controllo del flusso, ad esempio quando si effettuano query su condizioni costituite da espressioni classiche.

Si noti che le funzioni di questa API restituiscono puntatori presi in prestito che rimangono validi fintanto che esiste l'albero di espressioni padre, pertanto non è necessario liberare tali puntatori.


Tipi di dati

QkExprNodeKind

enum QkExprNodeKind

I diversi tipi di nodi di espressione che possono comparire in un albero di espressione classico.

Valori:

censitore QkExprNodeKind_Unary

Espressione con operazione unaria (ad es., NOT, negazione)

censitore QkExprNodeKind_Binary

Espressione con operazioni binarie (ad es. AND, OR, operazioni aritmetiche)

censitore QkExprNodeKind_Cast

Espressione con conversione di tipo

censitore QkExprNodeKind_Value

Espressione con valore letterale

censitore QkExprNodeKind_Var

Espressione di riferimento variabile

censitore QkExprNodeKind_Stretch

Espressione di allungamento (legata al tempo)

censitore QkExprNodeKind_Index

Espressione con indice/sottoscritto

QkExprType

enum QkExprType

I tipi di dati che possono essere utilizzati nelle espressioni classiche.

Valori:

censitore QkExprType_Bool

Tipo booleano

censitore QkExprType_Duration

Tipo di durata

censitore QkExprType_Float

Tipo a virgola mobile

censitore QkExprType_Uint

Tipo intero senza segno

QkExprTypeInfo

struct QkExprTypeInfo

La rappresentazione completa del tipo di dati utilizzato per un'espressione.

QkExprType ty

Il tipo di espressione

uint32_t larghezza

Larghezza in bit per il tipo di espressione Uint

QkUnaryOpType

enum QkUnaryOpType

I tipi di operazione che un'espressione unaria può contenere. I valori partono da 1 per allinearsi alla convenzione " Python " del sistema di espressione classico.

Valori:

censitore QkUnaryOpType_BitNot

Operazione NOT bit a bit

censitore QkUnaryOpType_LogicNot

Operazione logica NOT

censitore QkUnaryOpType_Negate

Negazione aritmetica

QkUnaryExprInfo

struct QkUnaryExprInfo

Descrive un'espressione unaria, indicando l'operatore, l'operando, il tipo di risultato e se si tratta di una costante. qk_expr_unary_info Restituito dalla funzione. Il operand campo è un puntatore preso in prestito all'operando dell'espressione dell'operazione unaria.

QkUnaryOpType op

L'operatore unario

const QkExprNode *operando

Puntatore preso in prestito all'espressione operanda

QkExprTypeInfo ty

Tipo di risultato dell'operazione

costante booleana

Se l'espressione è costante

QkBinaryOpType

enum QkBinaryOpType

I tipi di operazione che un'espressione binaria può contenere. I valori partono da 1 per rispettare la convenz Python.

Valori:

censitore QkBinaryOpType_BitAnd

Operazione AND bit a bit

censitore QkBinaryOpType_BitOr

Operazione OR bit a bit

censitore QkBinaryOpType_BitXor

Operazione XOR bit a bit

censitore QkBinaryOpType_LogicAnd

Operazione logica AND

censitore QkBinaryOpType_LogicOr

Operazione OR logica

censitore QkBinaryOpType_Equal

Confronto tra valori

censitore QkBinaryOpType_NotEqual

Confronto delle disuguaglianze

censitore QkBinaryOpType_Less

Meno del confronto

censitore QkBinaryOpType_LessEqual

Confronto "minore o uguale a"

censitore QkBinaryOpType_Greater

Più grande del confronto

censitore QkBinaryOpType_GreaterEqual

Confronto "maggiore o uguale a"

censitore QkBinaryOpType_ShiftLeft

Operazione di spostamento a sinistra

censitore QkBinaryOpType_ShiftRight

Operazione di spostamento a destra

censitore QkBinaryOpType_Add

Operazione di addizione

censitore QkBinaryOpType_Sub

Operazione di sottrazione

censitore QkBinaryOpType_Mul

Operazione di moltiplicazione

censitore QkBinaryOpType_Div

Operazione di divisione

QkBinaryExprInfo

struct QkBinaryExprInfo

Descrive un'espressione binaria, compresi l'operatore, gli operandi, il tipo di risultato e se si tratta di una costante. qk_expr_binary_info Restituito dalla funzione. I left campi e right sono puntatori presi in prestito agli operandi dell'espressione dell'operazione binaria.

QkBinaryOpType op

L'operatore binario

const QkExprNode *sinistra

Espressione con puntatore preso in prestito all'operando di sinistra

const QkExprNode *right

Puntatore preso in prestito all'espressione dell'operando a destra

QkExprTypeInfo ty

Tipo di risultato dell'operazione

costante booleana

Se l'espressione è costante

QkCastExprInfo

struct QkCastExprInfo

Descrive un'espressione di conversione, indicando l'operando, il tipo di destinazione, se è implicita e se è costante. qk_expr_cast_info Restituito dalla funzione. Il operand campo è un puntatore preso in prestito all'operando dell'espressione di conversione.

const QkExprNode *operando

Puntatore preso in prestito all'espressione operanda oggetto della conversione

QkExprTypeInfo ty

Tipo di destinazione del lancio

bool implicito

A prescindere dal fatto che la conversione sia implicita (automatica) o esplicita

costante booleana

Se l'espressione è costante

QkIndexExprInfo

struct QkIndexExprInfo

Descrive un'espressione di indice, specificando il target, l'indice, il tipo di risultato e se si tratta di una costante. qk_expr_index_info Restituito dalla funzione. I target campi e index sono puntatori presi in prestito alla destinazione e all'indice dell'espressione dell'operazione di indicizzazione.

const QkExprNode *target

Puntatore preso in prestito all'espressione di destinazione oggetto dell'indicizzazione

const QkExprNode *index

Puntatore preso in prestito all'espressione indice

QkExprTypeInfo ty

Tipo di risultato dell'operazione di indicizzazione

costante booleana

Se l'espressione è costante

QkDurationType

enum QkDurationType

Rappresenta le diverse unità di tempo utilizzate nelle espressioni relative alla durata.

Valori:

censitore QkDurationType_Dt

Unità di misura del tempo di sistema

censitore QkDurationType_Ps

Picosecondi

censitore QkDurationType_Ns

Nanosecondi

censitore QkDurationType_Us

Microsecondi

censitore QkDurationType_Ms

Millisecondi

censitore QkDurationType_S

Secondi

sindacato QkDurationValue

#include <types.h>

Un'unione che consenta di memorizzare le unità di tempo del sistema (dt) come numero intero oppure il tempo reale come numero in virgola mobile.

Questo unione fa parte della QkDurationInfo struttura e non dovrebbe essere utilizzata direttamente.

int64_t dt

Unità di tempo di sistema (attive quando ty in QkDurationInfo è QkDurationType_Dt)

a passo di corsa

Valore in tempo reale (attivo per tutti gli altri tipi di durata)

QkDurationInfo

struct QkDurationInfo

La rappresentazione completa di un valore di durata.

Il ty campo funge da discriminante che determina quale campo dell'unione value sia attivo.

Quando viene inizializzato dal C, spetta all'utente assicurarsi che:

  • Quando ty è QkDurationType_Dt, la durata viene memorizzata come numero intero in value.dt.
  • Per tutti gli altri tipi di durata, la durata viene memorizzata come valore in virgola mobile in value.time.

QkDurationType ty

Il tipo di unità di durata (criterio di appartenenza all'unione)

QkDurationValue valore

Il valore della durata


Funzioni

qk_expr_kind

QkExprNodeKind qk_expr_kind(const QkExprNode *expr)

Restituisce il tipo di un nodo di espressione classico.

Esempio

QKExprNodeKind kind = qk_expr_kind(expr);

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore al nodo dell'espressione da esaminare.

Risultati

L'enumerazione che descrive quale variante expr concreta dell'espressione contiene.

qk_expr_binary_info

QkBinaryExprInfo qk_expr_binary_info(const QkExprNode *expr)

Estrarre informazioni da un nodo di espressione binaria.

Genera un errore se expr non punta a un nodo di espressione binaria.

Esempio

QkBinaryExprInfo info = qk_expr_binary_info(expr);
const QkExprNode *lhs = info.left;
const QkExprNode *rhs = info.right;

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione binaria.

Risultati

Una QkBinaryExprInfo struttura che descrive l'operatore, gli operandi, il tipo di risultato e se l'espressione è una costante.

qk_expr_unary_info

QkUnaryExprInfo qk_expr_unary_info(const QkExprNode *expr)

Estrai le informazioni da un nodo di espressione unaria.

Genera un errore se expr non punta a un nodo di espressione unaria.

Esempio

QkUnaryExprInfo info = qk_expr_unary_info(expr);
QkUnaryOpType op = info.op;

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione unaria.

Risultati

Una QkUnaryExprInfo struttura che descrive l'operatore, l'operando, il tipo del risultato e se l'espressione è una costante.

qk_expr_cast_info

QkCastExprInfo qk_expr_cast_info(const QkExprNode *expr)

Estrai le informazioni da un nodo "cast expression".

Genera un errore se expr non punta a un nodo di espressione di conversione.

Esempio

QkCastExprInfo info = qk_expr_cast_info(expr);
const QkExprNode *operand = info.operand;

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione di conversione.

Risultati

Una QkCastExprInfo struttura che descrive l'operando, il tipo di destinazione, se la conversione è implicita e se l'espressione è una costante.

qk_expr_index_info

QkIndexExprInfo qk_expr_index_info(const QkExprNode *expr)

Estrai le informazioni da un nodo di espressione indice.

Genera un errore se expr non punta a un nodo di espressione indice.

Esempio

QkIndexExprInfo info = qk_expr_index_info(expr);
const QkExprNode *target = info.target;
const QkExprNode *index = info.index;

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione di indice.

Risultati

Una QkIndexExprInfo struttura che descrive l'obiettivo indicizzato, l'espressione dell'indice, il tipo di risultato e se l'espressione è costante.

qk_expr_as_value

const QkValue *qk_expr_as_value(const QkExprNode *expr)

Restituisce una vista del valore sottostante del nodo di espressione.

Genera un errore se expr non punta a un nodo di espressione di valore.

Esempio

const QkValue *value = qk_expr_as_value(expr);

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione di valore.

Risultati

Un puntatore al QkValue memorizzato all'interno di expr.

qk_expr_as_var

const QkVar *qk_expr_as_var(const QkExprNode *expr)

Restituisce una vista della variabile sottostante del nodo di espressione.

Genera un errore se expr non punta a un nodo di espressione variabile.

Esempio

const QkVar *var = qk_expr_as_var(expr);

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione variabile.

Risultati

Un puntatore al QkVar memorizzato all'interno di expr.

qk_expr_as_stretch

const QkStretch *qk_expr_as_stretch(const QkExprNode *expr)

Restituisce una vista del tratto sottostante del nodo di espressione.

Genera un errore se expr non punta a un nodo di espressione estesa.

Esempio

const QkStretch *stretch = qk_expr_as_stretch(expr);

Sicurezza

Il comportamento è indefinito se expr non è un puntatore valido e non nullo a un QkExprNode.

Parametri

  • expr – Un puntatore a un nodo di espressione di estensione.

Risultati

Un puntatore al QkStretch memorizzato all'interno di expr.

qk_value_type_info

QkExprTypeInfo qk_value_type_info(const QkValue *value)

Restituisce le informazioni sul tipo di un valore.

Esempio

QkExprTypeInfo type_info = qk_value_type_info(value);

Sicurezza

Il comportamento è indefinito se value non è un puntatore valido e non nullo a un Value.

Parametri

  • valore – Un puntatore all’oggetto QkValue da esaminare.

Risultati

Una QkExprTypeInfo struttura contenente le informazioni sul tipo di valore.

qk_value_duration_info

QkDurationInfo qk_value_duration_info(const QkValue *value)

Estrarre informazioni strutturate da un valore di durata.

Genera un errore se value non punta a un valore di durata.

Esempio

QkDurationInfo info = qk_value_duration_info(value);

Sicurezza

Il comportamento è indefinito se value non è un puntatore valido e non nullo a un QkValue.

Parametri

  • valore – Un puntatore a un valore di durata.

Risultati

Una QkDurationInfo struttura contenente l'unità di misura della durata e il valore grezzo.

qk_value_float

double qk_value_float(const QkValue *value)

Estrai il valore in virgola mobile da un QkValue.

Genera un errore se value non punta a un valore di tipo float.

Esempio

double raw = qk_value_float(value);

Sicurezza

Il comportamento è indefinito se value non è un puntatore valido e non nullo a un QkValue.

Parametri

  • valore – Un puntatore a un valore di tipo float.

Risultati

Il double valore memorizzato in value.

qk_value_uint

uint64_t qk_value_uint(const QkValue *value)

Estrai il valore intero senza segno da un QkValue di tipo QkExprType_Uint.

È opportuno utilizzare qk_value_type_info per assicurarsi che il valore rientri in uint64_t prima di chiamare questa funzione.

Genera un errore se value non punta a un QkExprType_Uint valore o se il numero intero memorizzato non rientra in uint64_t.

Esempio

uint64_t raw = qk_value_uint(value);

Sicurezza

Il comportamento è indefinito se value non è un puntatore valido e non nullo a un QkValue.

Parametri

  • valore – Un puntatore a un valore di tipo uint.

Risultati

Il valore intero convertito in uint64_t.

qk_value_bool

bool qk_value_bool(const QkValue *value)

Estrai il valore da un QkValue di tipo QkExprType_Bool.

Genera un errore se value non punta a un valore di tipo booleano.

Esempio

bool raw = qk_value_bool(value);

Sicurezza

Il comportamento è indefinito se value non è un puntatore valido e non nullo a un QkValue.

Parametri

  • valore – Un puntatore a un valore di tipo bool.

Risultati

true se la rappresentazione intera memorizzata è diversa da zero, altrimenti false.

qk_var_name

char *qk_var_name(const QkVar *var)

Restituisce il nome di una variabile come stringa C appena allocata.

Esempio

char *name = qk_var_name(var);
if (name != NULL) {
    // Use the name...
    qk_str_free(name);
}

Sicurezza

Il comportamento è indefinito se var non è un puntatore valido e non nullo a un QkVar.

Parametri

  • var – Un puntatore alla variabile da esaminare.

Risultati

Una stringa terminata da un carattere nullo contenente il nome della variabile, oppure NULL se var si riferisce a una variabile non autonoma (cioè basata su un bit classico o su un registro classico). Chi ha effettuato la chiamata è il proprietario della stringa restituita e deve liberarla con qk_str_free.

qk_var_type_info

QkExprTypeInfo qk_var_type_info(const QkVar *var)

Restituisce tutte le informazioni sul tipo di una variabile.

Genera un errore se var è un po’ variabile, cosa che non è ancora supportata da questa API.

Esempio

QkExprTypeInfo type_info = qk_var_type_info(var);

Sicurezza

Il comportamento è indefinito se var non è un puntatore valido e non nullo a un QkVar.

Parametri

  • var – Un puntatore alla variabile da esaminare.

Risultati

Una QkExprTypeInfo struttura contenente le informazioni sul tipo delle variabili.

qk_stretch_name

char *qk_stretch_name(const QkStretch *stretch)

Restituisce il nome di un tratto.

Esempio

char *name = qk_stretch_name(stretch);
// Use the name...
qk_str_free(name);

Sicurezza

Il comportamento è indefinito se stretch non è un puntatore valido e non nullo a un QkStretch.

Parametri

  • stretch – Un puntatore alla sezione da esaminare.

Risultati

Una stringa terminata da carattere nullo contenente il nome del tratto. Chi ha effettuato la chiamata è il proprietario della stringa restituita e deve liberarla con qk_str_free.

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.