Open ikanago opened 2 years ago
これやります。
ちなみに、 どの部分が削除できるか覚えてますか?
QuantumCircuit::update_quantum_state() を const修飾するためには、 gateのupdate_quantum_state() も const修飾する必要があると思われますが、 内部で乱数状態を持つゲートがあるのでgateのupdate_quantum_state()はconst修飾不可能だと思われますが、 どうやってconst修飾しましたか?
qulacs のほうにあげました.指摘の通りなのですが実はできてしまって,QuantumCircuit::_gate_list
が std::vector<QuantumGateBase*>
なのが const 修飾できてしまう原因っぽいです.
もっと小さい規模のコードで試しても,同じように const 修飾したメソッドから const 修飾されていないメソッドが呼び出せました.
https://wandbox.org/permlink/zp43W6AQ88ytTPmE
scikit-qulacs をリファクタリングしているときに
ParametricQuantumCircuit::backprop()
がメンバ変数を書き換えないのであれば削除できる処理を見つけたのですが,ParametricQuantumCircuit::backprop()
はconst
修飾されていなかったので処理を読む必要がありました. 結局backprop()
はメンバ変数を書き換えず,const
修飾しても qulacs-osaka のテストにすべてパスしたのでconst
をつけようと思うのですが、QuantumCircuit::update_quantum_state()
もconst
修飾する必要があり,修整範囲は広くなりそうです.