★Qiskit★ Google colab上で circuit.draw が動かない話★量子プログラミング★

こんにちは。Kumaです。
IBMの量子プログラミング言語 Qiskit を使い始めました。
qiskitはpythonベースで、Google colab 上で動きます。環境構築しなくていいので初心者には大変魅力的です。
しかし、Google colab では一部の機能が動作しないか、工夫が必要です。
今回は量子回路を可視化してくれる機能 circuit.draw が動かない問題について、説明します。

circuit.draw

circuit.draw は、量子回路 circuit に対して .draw をすることで可視化してくれる機能です。
print(circuit)でもアスキーアートが見れますが、Google colab 上では位置ずれするのであまり使えません。

しかしcolab上で、ふつうに実行するとエラーが出ます。同じ質問がコミュニティにもあります。
Google Colab - ImportError: The class MatplotlibDrawer needs pylatexenc
quantumcomputing.stackexchange.com

原因は?

原因は、platexenc がインストールされていないことです。
pip install platexenc をすればよいです。
しかし、circuit.drawを実行する前にやっておかなければなりません。
もし先に.drawを一度でもしてしまうと、仮想マシンの再起動をしないと動きません。
Colab上で ランタイム → ランタイムを出荷時にリセット をしてください。
その上で、必ず platexenc のインストールを先にしてから.drawを実行です。
ここが最初にハマったポイントでした。

.draw('latex')ではだめ、.draw('mpl')をしよう

platexencがインストールされていても、.draw('latex)は動きません。
これは別途ツールのインストールが必要なためです。Colab上で入れる方法が私には分かりません。
でも、.draw('mpl')のほうは動きます! これはmatplotlibさえインストールしておけばOKです。
以下はqiskitのQAOAのチュートリアル https://qiskit.org/textbook/ch-applications/qaoa.html で回路可視化したものです。
*1

f:id:phymath1991:20201029173344p:plain

結論

まず、pip install platexenc 次に .draw('mpl') です。
環境構築のハードルが減っていけば、私のようなド素人でもプログラミング試しやすくなるので、期待したいです。

*1:ちなみに、QAOAチュートリアルで実機に投げるところが ibmq_essex となっていますが、このマシンは20201029現在は存在しません。 性能向上に伴ってマシンが入れ替えられたものと思われます。例えば  ibmq_santiago などに投げてやってください。