انتقل إلى المحتوى الرئيسي

تثبيت واجهة برمجة التطبيقات 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 per 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] }

Footnotes

  1. إن لم تثبت Make، اطلع على ملف Makefile في المجلد الجذر لـ Qiskit للاطلاع على الأوامر المطلوبة - أو ببساطة قم بتثبيت Make؛ لم يفت الأوان.)