تثبيت واجهة برمجة التطبيقات C الخاصة بـ Qiskit
يشرح هذا الدليل كيفية تثبيت واجهة برمجة التطبيقات C الخاصة بـ Qiskit واستخدامها. لمعرفة كيفية توس يع سير عملك في Python مع Qiskit باستخدام C، اقرأ توسيع Python بواجهة برمجة التطبيقات C لـ Qiskit.
المثال التالي يبني observable باستخدام 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
يوفر هذا القسم تعليمات البناء للأنظمة الشبيهة بـ UNIX.
المتطلبات
يستلزم التصريف الأدوات التالية:
- مُصرِّف Rust: راجع على سبيل المثال دليل تثبيت Qiskit من المصدر
- مُصرِّف C: على سبيل المثال، GCC على Linux وClang على MacOS. واجهة برمجة التطبيقات C لـ Qiskit متوافقة مع أي مُصرِّف يلتزم بمعيار C11.
cbindgen: أداة لإنشاء رأس C، يمكنك تثبيتها بتشغيلcargo install cbindgenلاحظ أنه يجب تفعيل تشغيل الأداة من سطر الأوامر، وهو ما قد يستلزم تصدير متغيرPATHليشمل/path/to/.cargo/bin- مكتبة Python مثبّتة (Python 3.9 أو أحدث): مكتبة Python مطلوبة أثناء الربط الديناميكي. لاحظ أن Python لا تُستخدم أثناء التشغيل ولا يُهيَّأ المُفسِّر أبدًا؛ كل ما يلزم هو تعريف بعض الرموز من
libpython. اطلع على هذه المسألة لمزيد من التفاصيل - (GNU) Make: هذا اختياري لكنه مُوصى به لاستخدام عمليات التثبيت الآلية.
يتحقق هذا الكود من تثبيت كل شيء بشكل صحيح:
rustc --version
gcc --version
cbindgen --version
make --version # optional, but recommended
البناء
لبناء رأس C والمكتبة، يمكنك تشغيل أمر Make التالي1 في المجلد الجذر لـ Qiskit،
make c
مما سيوفر المكتبة المشتركة المُصرَّفة في dist/c/lib ورأس qiskit.h مع جميع تعريفات الدوال في dist/c/include. لاحظ أن الاسم الدقيق للمكتبة يعتمد على المنصة؛ على سبيل المثال، libqiskit.so على UNIX وlibqiskit.dylib على MacOS.
(لاحظ أن هذه الخطوة تُصدر حاليًا عددًا كبيرًا من التحذيرات، وهذا أمر متوقع ولا داعي للقلق منه. ستزيل الإصدارات المستقبلية هذه التحذيرات.)
يمكنك بعد ذلك تصريف برنامج C باستخدام رأس ومكتبة Qiskit C:
gcc example.c -o example.o -I /path/to/dist/c/include -L /path/to/dist/c/lib -lqiskit
لضمان العثور على مكتبة Qiskit أثناء الربط، قم بتعيين مسار مكتبة وقت التشغيل ليشمل /path/to/dist/c/lib. إذا لم تكن مكتبة Python متاحة افتراضيًا أثناء الربط الديناميكي، فيجب إضافتها أيضًا. تعتمد هذه الأوامر على المنصة. على 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 by default.
export LD_LIBRARY_PATH=/path/to/python/lib:$LD_LIBRARY_PATH
على MacOS:
export DYLD_LIBRARY_PATH=/path/to/dist/c/lib:$DYLD_LIBRARY_PATH
export DYLD_LIBRARY_PATH=/path/to/python/lib:$DYLD_LIBRARY_PATH
بدلًا من ذلك، يمكنك تعيين مسار مكتبة وقت التشغيل أثناء التصريف بإضافة
-Wl,-rpath,/path/to/dist/c/lib
# same for Python
إلى خيارات المُصرِّف. بالإضافة إلى ذلك، يجب أن تكون مكتبة Python متاحة أثناء الربط الديناميكي. في بيئات Linux هذا هو الإعداد الافتراضي عادةً.
الآن يمكنك تنفيذ الملف الثنائي:
./example.o
الذي، إن كنت تستخدم مقطع الكود السابق، يجب أن يطبع
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
يوفر هذا القسم تعليمات البناء لأنظمة Windows.
المتطلبات
يستلزم التصريف الأدوات التالية:
- مُصرِّف Rust: راجع على سبيل المثال دليل تثبيت Qiskit من المصدر
- مُصرِّف C: على سبيل المثال، MSVC وموجه الأوامر الأصلي الذي يوفر الأمر
cl - تثبيت Python، مع إمكانية الوصول إلى كل من
python3.libوpython3.dll cbindgen: أداة لإنشاء رأس C، يمكنك تثبيتها بتشغيلcargo install cbindgenلاحظ أنه يجب تفعيل تشغيل الأداة من سطر الأوامر، وهو ما قد يستلزم تحديث متغيرPATHليشمل مسار cargo.
البناء
أولًا، صرِّف المكتبة الديناميكية qiskit_cext بتشغيل الأمر التالي في المجلد الجذر لـ Qiskit
set PATH="\path\to\pythonlib";%PATH%
cargo rustc --release --crate-type cdylib -p qiskit-cext
سيولّد هذا الأمر المكتبة الديناميكية .dll وملف .dll.lib المرفق في target/release.
بعد ذلك، أنشئ الرأس بتشغيل
cbindgen --crate qiskit-cext --output dist\c\include\qiskit.h
سيكتب هذا الرأس المتوافق مع MSVC في dist\c\include.
الآن يمكنك استخدام cl لتصريف برنامج C. لضمان أن المُصرِّف يجد مكتبة qiskit، نُدرج target\release في متغير PATH.
set PATH="\path\to\target\release";%PATH%
cl example.c qiskit_cext.dll.lib -I\path\to\dist\c\include
قبل التشغيل، يجب تضمين المسار إلى python3.dll الخاصة بك.
set PATH="\path\to\python3-dll";%PATH%
.\example.exe
يجب بعد ذلك أن يطبع
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] }