NAGAOKA Yuta
NAGAOKA Yuta
最低限こんなテストが必要そうです.他にもやるべきテストがあったらどんどん追加しておいてください. ```python def test_merge_circuit_with_shared_parameter(): circuit1 = LearningCircuit(2) circuit1.add_parametric_RX_gate(0, 0.0) circuit1.add_parametric_RY_gate(1, 0.0, share_with=0) circuit1.add_parametric_RZ_gate(0, 0.0) circuit2 = LearningCircuit(2) circuit2.add_parametric_RZ_gate(0, 0.0) circuit2.add_parametric_RY_gate(1, 0.0) circuit2.add_parametric_RZ_gate(0, 0.0, shared_with=1) circuit2.add_parametric_RX_gate(0, 0.0, shared_with=1) circuit1.merge_circuit(circuit2) assert circuit1._learning_parameter_list[0]...
どこかのブランチに実装を push してもらってもいいですか?
たしかに `QuantumCircuit` で `add_gate_copy` してるだけなので `_parametric_gate_list` が更新されないですね... 気づいたのすごいです 👍
ありがとうございます! PennyLane などと比較して環境構築が大変そうなので助かります 🙇
たしかにずれると思いますが,`PrametricQuantumCircuit` のインスタンスは `LearningCircuit` を介して操作することになっており,これが問題になるのは `circuit: LearningCircuit` に対して `circuit._circuit.add_gate_copy()` を呼び出した場合です. しかし,`circuit._circuit: PrametricQuantumCircuit` は private member なのでそのようなアクセスをするほうが悪いというふうに考えています(強制できないので微妙なところではありますが...).
ほんとですね,#186 で `merge_circuit()` を使う話が出てるので問題になりそうですね... パラメータ共有の実装を `ParametricQuantumCircuit` まで降ろして `add_gate_copy()` で共有されたパラメータがずれないように処理するのがいいかもしれません.
`merge_circuit()` が呼ぶのは [`add_gate_copy(const QuantumGateBase* gate)`](https://github.com/Qulacs-Osaka/qulacs-osaka/blob/14355f20eaf3615cb78c11a76a6c014cbca1b28d/src/vqcsim/parametric_circuit.cpp#L129) のほうなのでパラメータがずれたりはしなくて,`LearningCircuit.merge_circuit()` で適切に処理すれば問題ないかもしれないです
Thank you for reporting the issue! I have confirmed that `pip install qulacs` needs cmake and boost on Python 3.12. We have introduced the setting to build for Python 3.12...
@scarrazza Now qulacs 0.6.4.1 is available. This version is compatible for Python 3.12. If you have further problems, feel free to inform at this or other issue!