Instalează Qiskit C API
Acest ghid descrie cum să instalezi și să folosești Qiskit C API. Pentru a vedea cum să extinzi fluxul de lucru Qiskit Python cu C, citește Extinde Python cu Qiskit C API.
Următorul exemplu construiește un observabil cu C:
// file: example.c
#include <stdio.h>
#include <stdint.h>
#include <qiskit.h>
int main(int argc, char *argv[]) {
// build a 100-qubit empty observable
uint32_t num_qubits = 100;
QkObs *obs = qk_obs_zero(num_qubits);
// add the term 2 * (X0 Y1 Z2) to the observable
QkComplex64 coeff = {2, 0};
QkBitTerm bit_terms[3] = {QkBitTerm_X, QkBitTerm_Y, QkBitTerm_Z}; // bit terms: X Y Z
uint32_t indices[3] = {0, 1, 2}; // indices: 0 1 2
QkObsTerm term = {coeff, 3, bit_terms, indices, num_qubits};
qk_obs_add_term(obs, &term); // append the term
// print some properties and the observable itself
printf("num_qubits: %i\n", qk_obs_num_qubits(obs));
printf("num_terms: %lu\n", qk_obs_num_terms(obs));
printf("observable: %s\n", qk_obs_str(obs));
// free the memory allocated for the observable
qk_obs_free(obs);
return 0;
}
UNIX-like
Această secțiune oferă instrucțiuni de compilare pentru sisteme de tip UNIX.
Cerințe
Compilarea necesită următoarele instrumente:
- Un compilator Rust: vezi de exemplu ghidul de instalare a Qiskit din sursă
- Un compilator C: de exemplu, GCC pe Linux și Clang pe MacOS. C API din Qiskit este compatibil cu un compilator conform standardului C11.
cbindgen: un instrument pentru a crea header-ul C, pe care îl poți instala cucargo install cbindgenReține că rularea instrumentului din linia de comandă trebuie să fie activată, ceea ce poate necesita exportarea variabileiPATHpentru a include/path/to/.cargo/bin- Bibliotecă Python instalată (Python 3.9+): Biblioteca Python este necesară în timpul legării dinamice. Reține că Python nu este utilizat la rulare și interpretorul nu este niciodată inițializat; doar unele simboluri din
libpythontrebuie definite. Vezi această problemă pentru mai multe detalii - (GNU) Make: acesta este opțional, dar este recomandat pentru a folosi procese de instalare automatizate.
Acest cod verifică dacă totul a fost instalat:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended
Compilare
Pentru a compila header-ul C și biblioteca, poți rula următoarea comandă Make1 în rădăcina Qiskit,
make c
care va furniza biblioteca partajată compilată în dist/c/lib și header-ul qiskit.h cu
toate declarațiile de funcții în dist/c/include. Reține că numele exact al bibliotecii depinde
de platformă; de exemplu, libqiskit.so pe UNIX și libqiskit.dylib pe MacOS.
(Reține că în prezent acest pas emite multe avertismente, ceea ce este de așteptat și nu este un motiv de îngrijorare. Versiunile viitoare vor elimina avertismentele.)
Poți apoi compila un program C folosind header-ul și biblioteca Qiskit C:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit
Pentru a te asigura că biblioteca Qiskit este găsită în timpul legării, setează calea bibliotecii de rulare să
includă /path/to/dist/c/lib. Dacă biblioteca Python nu este disponibilă implicit în timpul legării dinamice,
aceasta trebuie adăugată și ea. Aceste comenzi depind de platformă. Pe Linux:
export LD_LIBRARY_PATH=/path/to/dist/c/lib:$LD_LIBRARY_PATH
# on Linux, the Python library is typically included in the dynamic library path per default
export LD_LIBRARY_PATH=/path/to/python/lib:$LD_LIBRARY_PATH
Pe MacOS:
export DYLD_LIBRARY_PATH=/path/to/dist/c/lib:$DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/path/to/python/lib:$DYLD_LIBRARY_PATH
Alternativ, poți seta calea bibliotecii de rulare în timpul compilării adăugând
-Wl,-rpath,/path/to/dist/c/lib
# same for Python
la opțiunile compilatorului. În plus, biblioteca Python trebuie să fie disponibilă în timpul legării dinamice. În mediile Linux acesta este de obicei comportamentul implicit.
Acum poți executa binarul:
./example.o
care, dacă se folosește fragmentul de exemplu prezentat anterior, ar trebui să afișeze
num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100, coeffs: [Complex { re: 2.0, im: 0.0 }], bit_terms: [X, Y, Z], indices: [0, 1, 2], boundaries: [0, 3] }
Windows
Această secțiune oferă instrucțiuni de compilare pentru sisteme Windows.
Cerințe
Compilarea necesită următoarele instrumente:
- Un compilator Rust: vezi de exemplu ghidul de instalare a Qiskit din sursă
- Un compilator C: de exemplu, MSVC și promptul de comandă nativ care oferă comanda
cl - O instalare Python, cu acces atât la
python3.lib, cât și lapython3.dll cbindgen: un instrument pentru a crea header-ul C, pe care îl poți instala cucargo install cbindgenReține că rularea instrumentului din linia de comandă trebuie să fie activată, ceea ce poate necesita actualizarea variabileiPATHpentru a include calea cargo.
Compilare
Mai întâi, compilează biblioteca dinamică qiskit_cext, rulând următoarele în rădăcina Qiskit
set PATH="\path\to\pythonlib";%PATH%
cargo rustc --release --crate-type cdylib -p qiskit-cext
Aceasta va genera biblioteca dinamică .dll și fișierul asociat .dll.lib în target/release.
Apoi, generează header-ul cu
cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h
Aceasta va scrie header-ul compatibil MSVC în dist\c\include.
Acum poți folosi cl pentru a compila programul C. Pentru a te asigura că compilatorul găsește biblioteca qiskit,
includem target\release în variabila PATH.
set PATH="\path\to\target\release";%PATH%
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include
Înainte de rulare, trebuie să incluzi calea către python3.dll.
set PATH="\path\to\python3-dll";%PATH%
.\example.exe
ar trebui apoi să afișeze
num_qubits: 100
num_terms: 1
observable: SparseObservable { num_qubits: 100, coeffs: [Complex { re: 2.0, im: 0.0 }], bit_terms: [X, Y, Z], indices: [0, 1, 2], boundaries: [0, 3] }