Instalacja Qiskit C API
Ten przewodnik opisuje, jak zainstalować i używać Qiskit C API. Aby dowiedzieć się, jak rozszerzyć swój przepływ pracy Qiskit w Pythonie za pomocą C, przeczytaj Rozszerzanie Pythona za pomocą Qiskit C API.
Poniższy przykład buduje obserwabla w 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
Ta sekcja zawiera instrukcje budowania dla systemów typu UNIX.
Wymagania
Kompilacja wymaga następujących narzędzi:
- Kompilator Rust: zapoznaj się na przykład z przewodnikiem instalacji Qiskit ze źródeł
- Kompilator C: na przykład GCC na Linuksie i Clang na MacOS. Qiskit C API jest zgodne z kompilatorem spełniającym standard C11.
cbindgen: narzędzie do tworzenia nagłówka C, które możesz zainstalować poleceniemcargo install cbindgenPamiętaj, że uruchamianie narzędzia z wiersza poleceń musi być włączone, co może wymagać wyeksportowania zmiennejPATHtak, aby zawierała/path/to/.cargo/bin- Zainstalowana biblioteka Pythona (Python 3.9+): biblioteka Pythona jest wymagana podczas dynamicznego linkowania. Zauważ, że Python nie jest używany w trakcie działania programu, a interpreter nigdy nie jest inicjalizowany; zdefiniowane muszą być jedynie niektóre symbole z
libpython. Więcej szczegółów znajdziesz w tym zgłoszeniu - (GNU) Make: jest opcjonalne, ale zalecane do korzystania z automatycznych procesów instalacji.
Ten kod weryfikuje, czy wszystko zostało zainstalowane:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended
Budowanie
Aby zbudować nagłówek C i bibliotekę, możesz uruchomić następujące polecenie Make1 w katalogu głównym Qiskit,
make c
co dostarczy skompilowaną bibliotekę współdzieloną w dist/c/lib oraz nagłówek qiskit.h ze
wszystkimi deklaracjami funkcji w dist/c/include. Pamiętaj, że dokładna nazwa biblioteki zależy
od platformy; na przykład libqiskit.so na UNIX i libqiskit.dylib na MacOS.
(Zauważ, że ten krok aktualnie generuje wiele ostrzeżeń, co jest oczekiwane i nie stanowi powodu do niepokoju. Przyszłe wersje usuną te ostrzeżenia.)
Następnie możesz skompilować program w C używając nagłówka i biblioteki Qiskit C:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit
Aby upewnić się, że biblioteka Qiskit zostanie znaleziona podczas linkowania, ustaw ścieżkę biblioteki czasu wykonania tak,
aby zawierała /path/to/dist/c/lib. Jeśli biblioteka Pythona nie jest domyślnie dostępna podczas dynamicznego linkowania,
również należy ją dodać. Polecenia te zależą od platformy. Na Linuksie:
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
Alternatywnie możesz ustawić ścieżkę biblioteki czasu wykonania podczas kompilacji, dodając
-Wl,-rpath,/path/to/dist/c/lib
# same for Python
do flag kompilatora. Dodatkowo, biblioteka Pythona musi być dostępna podczas dynamicznego linkowania. W środowiskach Linuksowych jest to zazwyczaj wartość domyślna.
Teraz możesz uruchomić plik binarny:
./example.o
co, jeśli używasz przykładowego fragmentu kodu pokazanego wcześniej, powinno wydrukować
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
Ta sekcja zawiera instrukcje budowania dla systemów Windows.
Wymagania
Kompilacja wymaga następujących narzędzi:
- Kompilator Rust: zapoznaj się na przykład z przewodnikiem instalacji Qiskit ze źródeł
- Kompilator C: na przykład MSVC i natywny wiersz poleceń oferujący polecenie
cl - Instalacja Pythona z dostępem zarówno do
python3.lib, jak ipython3.dll cbindgen: narzędzie do tworzenia nagłówka C, które możesz zainstalować poleceniemcargo install cbindgenPamiętaj, że uruchamianie narzędzia z wiersza poleceń musi być włączone, co może wymagać zaktualizowania zmiennejPATHtak, aby zawierała ścieżkę cargo.
Budowanie
Najpierw skompiluj bibliotekę dynamiczną qiskit_cext, uruchamiając następujące polecenie w katalogu głównym Qiskit
set PATH="\path\to\pythonlib";%PATH%
cargo rustc --release --crate-type cdylib -p qiskit-cext
Spowoduje to wygenerowanie biblioteki dynamicznej .dll i powiązanego pliku .dll.lib w target/release.
Następnie wygeneruj nagłówek poleceniem
cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h
Spowoduje to zapisanie nagłówka zgodnego z MSVC w dist\c\include.
Teraz możesz użyć cl do skompilowania programu w C. Aby upewnić się, że kompilator znajdzie bibliotekę qiskit,
dołączamy target\release do zmiennej PATH.
set PATH="\path\to\target\release";%PATH%
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include
Przed uruchomieniem musisz dołączyć ścieżkę do python3.dll.
set PATH="\path\to\python3-dll";%PATH%
.\example.exe
powinno następnie wydrukować
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] }