Representing Qubit States をぽちぽちやってみると
qc.save_statevector() # Tell simulator to save statevector
で
AttributeError: 'QuantumCircuit' object has no attribute 'save_statevector'
というエラーが出た。調べた結果、
sim = Aer.get_backend('aer_simulator') # Tell Qiskit how to simulate our circuit
するとメソッドが追加される・・・らしい。
sim.__class__
qiskit.providers.aer.backends.aer_simulator.AerSimulator
を参考に https://github.com/Qiskit/qiskit-aer/blob/main/qiskit/providers/aer/backends/aer_simulator.py を見ると、確かにメソッドが増えそうな感じのコードが書かれてはいる。
そういう黒魔術的なことはやったことがないので、ちょっと実験をしてみよう:
class Dog: pass dog = Dog() setattr(dog, 'bark', lambda: 'Woof') print(dog.bark()) class Cat: pass cat = Cat() try: cat.mew() except AttributeError as e: print(e) setattr(Cat, 'mew', lambda cls: 'Meow') print(cat.mew()) print(Cat().mew())
Woof
'Cat' object has no attribute 'mew'
Meow
Meow
となった・・・。なるほどね。
qc.save_statevector() qobj = assemble(qc) result = sim.run(qobj).result()
は単に
result = sim.run(qc).result()
でも良さそうに思っているが何かちょっと違うのかもしれない・・・。Simulators — Qiskit 0.36.1 documentation では transpile
を使っている。