Instalace Qiskit C API
Tento průvodce popisuje, jak nainstalovat a používat Qiskit C API. Pokud chceš zjistit, jak rozšířit svůj Qiskit Python workflow pomocí C, přečti si Rozšíření Pythonu pomocí Qiskit C API.
Následující příklad sestavuje observable v 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
Tato sekce obsahuje pokyny pro sestavení na systémech podobných UNIXu.
Požadavky
Kompilace vyžaduje následující nástroje:
- Kompilátor Rust: viz například průvodce instalací Qiskitu ze zdrojového kódu
- Kompilátor C: například GCC na Linuxu a Clang na MacOS. Qiskit C API je kompatibilní s kompilátorem splňujícím standard C11.
cbindgen: nástroj pro vytvoření hlavičkového souboru C, který lze nainstalovat pomocícargo install cbindgenUpozorňujeme, že je třeba umožnit spouštění nástroje z příkazové řádky, což může vyžadovat přidání/path/to/.cargo/bindo proměnnéPATH- Nainstalovaná Python knihovna (Python 3.9+): Python knihovna je vyžadována při dynamickém linkování. Vezmi na vědomí, že Python není používán za běhu a interpret není nikdy inicializován; je potřeba definovat pouze některé symboly z
libpython. Více informací najdeš v tomto issue - (GNU) Make: tento nástroj je volitelný, ale doporučujeme ho používat pro automatizované instalační procesy.
Tento kód ověří, že vše bylo správně nainstalováno:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended
Sestavení
Pro sestavení hlavičkového souboru C a knihovny můžeš spustit následující příkaz Make1 v kořenovém adresáři Qiskitu,
make c
což poskytne zkompilovanou sdílenou knihovnu v dist/c/lib a hlavičkový soubor qiskit.h se všemi deklaracemi funkcí v dist/c/include. Vezmi na vědomí, že přesný název knihovny závisí na platformě; například libqiskit.so na UNIXu a libqiskit.dylib na MacOS.
(Upozorňujeme, že tento krok v současné době generuje velké množství varování, což je očekávané a není důvod k obavám. Budoucí verze tato varování odstraní.)
Poté můžeš zkompilovat program v C pomocí hlavičkového souboru a knihovny Qiskit:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit
Aby bylo zajištěno, že knihovna Qiskit bude nalezena při linkování, nastav cestu ke knihovně za běhu tak, aby zahrnovala /path/to/dist/c/lib. Pokud Python knihovna není ve výchozím nastavení dostupná při dynamickém linkování, je třeba ji přidat také. Tyto příkazy závisí na platformě. Na Linuxu:
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
Na MacOS:
export DYLD_LIBRARY_PATH=/path/to/dist/c/lib:$DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/path/to/python/lib:$DYLD_LIBRARY_PATH
Případně můžeš nastavit cestu ke knihovně za běhu během kompilace přidáním
-Wl,-rpath,/path/to/dist/c/lib
# same for Python
do příznaků kompilátoru. Navíc musí být Python knihovna dostupná při dynamickém linkování. V prostředích Linux je to obvykle výchozí nastavení.
Nyní můžeš spustit binární soubor:
./example.o
což by při použití výše uvedeného ukázkového fragmentu kódu mělo vypsat
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
Tato sekce obsahuje pokyny pro sestavení na systémech Windows.
Požadavky
Kompilace vyžaduje následující nástroje:
- Kompilátor Rust: viz například průvodce instalací Qiskitu ze zdrojového kódu
- Kompilátor C: například MSVC a nativní příkazový řádek nabízející příkaz
cl - Instalace Pythonu s přístupem k
python3.libipython3.dll cbindgen: nástroj pro vytvoření hlavičkového souboru C, který lze nainstalovat pomocícargo install cbindgenUpozorňujeme, že je třeba umožnit spouštění nástroje z příkazové řádky, což může vyžadovat aktualizaci proměnnéPATHtak, aby zahrnovala cestu ke cargo.
Sestavení
Nejprve zkompiluj dynamickou knihovnu qiskit_cext spuštěním následujícího příkazu v kořenovém adresáři Qiskitu
set PATH="\path\to\pythonlib";%PATH%
cargo rustc --release --crate-type cdylib -p qiskit-cext
Tím se vygeneruje dynamická knihovna .dll a přidružený soubor .dll.lib v target/release.
Dále vygeneruj hlavičkový soubor pomocí
cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h
Tím se zapíše hlavičkový soubor kompatibilní s MSVC do dist\c\include.
Nyní můžeš použít cl ke kompilaci programu v C. Aby kompilátor našel knihovnu qiskit, zahrneme target\release do proměnné PATH.
set PATH="\path\to\target\release";%PATH%
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include
Před spuštěním musíš zahrnout cestu k python3.dll.
set PATH="\path\to\python3-dll";%PATH%
.\example.exe
by pak mělo vypsat
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] }