らんだむな記憶

blogというものを体験してみようか!的なー

Qiskit Aer (2)

AerState クラスは https://github.com/Qiskit/qiskit-aer/pull/1590/commits/946301893e2b02ea7d9e36e15f9f240c74fe3471 で導入された。

controller_wrappers*.so の中身はあまり嬉しくないが以下のようにして見ることはできる:

$ find _skbuild/linux-*/cmake-install/qiskit_aer/backends -name "controller_wrappers*.so" -exec objdump -S {} \;

or

$ find _skbuild/linux-*/cmake-install/qiskit_aer/backends -name "controller_wrappers*.so" -exec readelf -s {} \;

controller_wrappers.so の入口を探す

from qiskit.providers.aer.backends.controller_wrappers import AerStateWrapper をヒントに以下のように探す:

find . -name "*.*" | xargs grep -n AerStateWrapper

wrappers/bindings.cc

AER::AerState

./controllers/state_controller.hpp:82:class AerState {

このクラスは state_controller.hpp 内で実装されている。

Using Python’s print function in C++ より、bindings.cc においては

py::print("*** initialize_statevector is called");

Pythonprint を使う形でログを出せる。

標準出力は Python に取られている?ので、標準エラー出力を使う形で state_controller.hpp 等、共有ライブラリの中から

fprintf(stderr, "*** AerState is created\n");

のような形でログを出せる。