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");
で Python の print
を使う形でログを出せる。
標準出力は Python に取られている?ので、標準エラー出力を使う形で state_controller.hpp
等、共有ライブラリの中から
fprintf(stderr, "*** AerState is created\n");
のような形でログを出せる。