C-API-Schnittstelle von Python
qiskit.capi
Dieses Modul ermöglicht die Interaktion zwischen „ Python “ und der öffentlichen C-API von Qiskit.
Dokumentation zur C-API selbst finden Sie unter „Qiskit C API “.
Interaktion mit dem Build-System
Das Paket „ Pythonqiskit “ enthält alle Header-Dateien der Qiskit-C-API sowie eine kompilierte Shared-Object-Bibliothek, die alle Funktionen der C-API umfasst. Auf die Positionen dieser beiden Objekte kannst du mit den Funktionen get_include() bzw get_lib() . zugreifen.
Normalerweise solltest du nicht direkt auf die Ausgabe von verweisen get_lib(), es sei denn, du weißt genau, was du tust. Insbesondere ist die direkte Verknüpfung mit diesem Objekt keine sichere Methode, um ein verteilbares Python -Erweiterungsmodul zu erstellen, das die C-API von Qiskit nutzt.
Wenn Sie jedoch alle Vorbehalte gegenüber der direkten Verknüpfung kennen, können Sie die Funktion nutzen, um den Speicherort der Bibliothek zu ermitteln.
get_include
qiskit.capi.get_include()
Laden Sie das Verzeichnis herunter, das die qiskit.h C-Header-Datei und die internen qiskit/*.h Hilfsdateien enthält.
Wenn Sie Qiskit als Build-Abhängigkeit verwenden, sollten Sie dieses Verzeichnis in der Regel in den Suchpfad Ihres Compilers aufnehmen, zum Beispiel:
qiskit_include=$(python -c 'import qiskit.capi; print(qiskit.capi.get_include())')
gcc -I "$qiskit_include" my_bin.c -o my_binDer Speicherort dieses Verzeichnisses innerhalb der Qiskit-Paketdaten ist nicht fest vorgegeben und kann sich von einer Qiskit-Version zur nächsten ändern. Sie sollten immer diese Funktion verwenden, um das Verzeichnis abzurufen.
Rückgabe
ein absoluter Pfad zum Verzeichnis mit den Include-Dateien des Pakets.
Rückgabetyp
get_lib
qiskit.capi.get_lib()
Ermitteln Sie den Pfad zu einer Shared-Object-Bibliothek, die alle exportierten C-API-Symbole enthält.
In der Regel sollten Sie keine direkten Verknüpfungen zu diesem Objekt herstellen. Insbesondere ist die direkte Verknüpfung mit diesem Objekt keine sichere Methode, um ein „ Python “-Erweiterungsmodul zu erstellen, das die C-API von Qiskit nutzt.
Sie können, wenn Sie möchten, verwenden, um ctypes auf die in diesem Objekt enthaltenen C-API-Symbole zuzugreifen; beachten Sie jedoch, dass die in der Header-Datei deklarierten C-API-Typen nicht mit den ihnen entsprechenden Objekten von Python austauschbar sind.
Der Speicherort und der Name dieser Datei innerhalb der Qiskit-Paketdaten sind nicht festgelegt und können sich von einer Qiskit-Version zur nächsten ändern.
Rückgabe
ein absoluter Pfad zu der Shared-Object-Bibliothek, die die exportierten Symbole der C-API enthält.
Rückgabetyp
Native Bindungen an die C-API
Darüber hinaus enthält ctypes dieses Modul Bindings zu allen Typen und Funktionen der Qiskit-C-API. Diese sind als Modulattribute unter qiskit.capi demselben Namen verfügbar, den sie auch in der C-API haben. qk_circuit_new()Beispielsweise entspricht. qiskit.capi.qk_circuit_new
qiskit.capi.LIB
Typ: ctypes.PyDLL
Ein ctypes Wrapper um die Bibliothek, die die Qiskit-C-API enthält.
Dies dient der Vollständigkeit; Sie können jedoch direkt über das qiskit.capi Modulobjekt auf alle Funktionen, Strukturen und Aufzählungen zugreifen.
Strukturen
Die struct in der C-API verwendeten Betontypen werden als entsprechende ctypes.Structure Typen mit dem Attribut „complete“ _fields_ deklariert. Diese können direkt instanziiert und überprüft werden.
Undurchsichtige Zeiger werden durch einen ctypes.Structure Typ ohne _fields_ festgelegte Attribute dargestellt und können nicht instanziiert werden. Sie werden in der Regel von Funktionen zurückgegeben, die in einen ctypes.POINTER Typ-Wrapper eingeschlossen sind.
Aufzählungen
An Stellen, an denen die C-API eine Aufzählung enthält, deklariert dieses Modul eine Pythonenum.Enum, deren Werte einem entsprechenden ctypes primitiven Ganzzahltyp entsprechen. Das Objekt vom Typ „ Python -space“ Enum ist nach wie vor ein umhüllendes „ Python “-Objekt, sodass ctypes Funktionen, die eine Aufzählung zurückgeben, den rohen numerischen Wert zurückgeben und nicht den Wert in der Enum. Die Objekte im Namensraum Enum „ Python “ werden zur Vereinfachung der Aufrufkonstruktion deklariert.
Funktionen
Alle Funktionen der öffentlichen Bibliothek in der Qiskit-C-API sind vollständig typisiert und werden im Modulstamm unter demselben Namen wie in C erneut exportiert. LIBSie können die Funktionen auch über aufrufen, falls Sie dies bevorzugen.
Beachten Sie, dass reine Header-Funktionen, wie z. B. qk_import(), nicht exportiert werden, da sie nicht Teil des C-API-Bibliotheksobjekts sind.