Python の C API インターフェース
qiskit.capi
このモジュールは、Qiskitの公開C APIとの Python -space間の連携を提供します。
C API 自体のドキュメントについては、 Qiskit C API を参照してください。
ビルドシステムとの連携
Python パッケージには、QiskitのC APIヘッダーファイルがすべて含まれており、C API qiskit のすべての関数を実装したコンパイル済みの共有オブジェクトライブラリも含まれています。 これら2つのオブジェクトの位置には、それぞれ関数 get_include() get_lib() と を使用してアクセスできます。
通常、自分が何をしているのかを理解していない限り、 get_lib()の出力に対して直接リンクすべきではありません。 特に、このオブジェクトに対して直接リンクを行うことは、QiskitのC APIを使用する、配布可能な Python 拡張モジュールを構築する上で安全な方法ではありません。
ただし、直接リンクに関する注意点すべてを理解していれば、この関数を使ってライブラリの場所を取得することができます。
get_include
qiskit.capi.get_include()
C qiskit.h ヘッダーファイルと内部 qiskit/*.h 補助ファイルが含まれているディレクトリを取得してください。
Qiskitをビルド依存関係として使用する場合、通常は、次のように、このディレクトリをコンパイラのインクルード検索パスに含める必要があります
qiskit_include=$(python -c 'import qiskit.capi; print(qiskit.capi.get_include())')
gcc -I "$qiskit_include" my_bin.c -o my_binQiskit パッケージ内のこのディレクトリの場所は固定されておらず、Qiskit のバージョンによって変わる可能性があります。 ディレクトリを取得する際は、常にこの関数を使用してください。
戻り値
パッケージのインクルードファイルディレクトリへの絶対パス。
戻りの型
get_lib
qiskit.capi.get_lib()
すべてのC-APIエクスポートシンボルを含む共有オブジェクトライブラリへのパスを取得します。
通常、このオブジェクトに対して直接リンクすべきではありません。 特に、このオブジェクトに対して直接リンクを行うことは、QiskitのC APIを使用する Python 拡張モジュールを構築する上で安全な方法ではありません。
必要に応じて、このオブジェクトに含まれるC APIシンボルにアクセスするために ctypes を使用することもできますが、ヘッダーファイルで宣言されているC APIの型は、それに対応する Python オブジェクトと互換性がない点に注意してください。
Qiskit パッケージ内のこのファイルの場所と名前は固定されておらず、Qiskit のバージョンによって変わる可能性があります。
戻り値
C-APIのエクスポートシンボルを含む共有オブジェクトライブラリへの絶対パス。
戻りの型
C API へのネイティブバインディング
さらに、このモジュールには、Qiskit C API のすべての型および関数に対するバインディングが含まれています ctypes 。 これらは、C API と同じ名前で、 qiskit.capi モジュール属性として利用可能です。 qk_circuit_new()たとえば、 qiskit.capi.qk_circuit_new は に相当する。
qiskit.capi.LIB
種類: ctypes.PyDLL
Qiskit C API を含むライブラリをラップするラッパーです ctypes 。
これは完全性を期すために記載されていますが、すべての関数、構造体、列挙型にはモジュールオブジェクト qiskit.capi から直接アクセスすることができます。
構造体
C API で使用されるコンクリート struct 型は、complete _fields_ 属性を持つ対応する ctypes.Structure 型として宣言されています。 これらは直接インスタンス化して、その内容を調べることができます。
不透明ポインタは、属性が設定されていない _fields_ 型 ctypes.Structure によって表され、インスタンス化することはできません。 ctypes.POINTER これらは通常、型ラッパーで包まれた状態で関数から返されます。
列挙型
C API に列挙型が存在する箇所では、このモジュールは、その値が対応 ctypes するプリミティブ整数型となる Pythonenum.Enum を宣言します。 EnumPython -space Enum 型のオブジェクトは、依然として Python オブジェクトをラップしたものであるため ctypes 、列挙値を返す関数は、. 内の値ではなく、生の数値を返します。 Python -space Enum オブジェクトは、呼び出しを構築する際の利便性を考慮して宣言されています。
関数
Qiskit C API のすべてのパブリックライブラリ関数は完全に型付けされており、C 言語での名称と同じ名前でモジュールルートに再エクスポートされています。 LIBお好みであれば、からもこれらの機能にアクセスできます。
qk_import()なお、のようなヘッダー限定関数は、C API ライブラリオブジェクトの一部ではないため、エクスポートされません。