# Qiskitライブラリーを導入
from qiskit import *

# 描画のためのライブラリーを導入
import matplotlib.pyplot as plt
%matplotlib inline

# Qiskitバージョンの確認
qiskit.__qiskit_version__

# 2量子ビット回路を用意
q = QuantumCircuit(2,2)    # ２量子ビット回路と２ビットの古典レジスターを用意します。

# 回路を描画
q.draw(output="mpl")

# q0, q1が0の場合
q.cx(0,1)   # CNOTゲートの制御ゲートをq0、目標ゲートをq1にセットします。

# 回路を描画
q.draw(output="mpl")

## First, simulate the circuit
## 状態ベクトルシミュレーターの実行
vector_sim = Aer.get_backend('statevector_simulator')
job = execute(q, vector_sim )
result = job.result().get_statevector(q, decimals=3)

print(result)

# 2量子ビット回路を用意
q1 = QuantumCircuit(2,2)    # ２量子ビット回路と２ビットの古典レジスターを用意します。

# 回路を描画
q1.draw(output="mpl")

# q0=1, q1=0の場合
q1.x(0)    # q0を1にします。
q1.cx(0,1)   # CNOTゲートの制御ゲートをq0、目標ゲートをq1にセットします。

# 回路を描画
q1.draw(output="mpl")

# 状態ベクトルシミュレーターの実行
vector_sim = Aer.get_backend('statevector_simulator')
job = execute(q1, vector_sim )
result = job.result().get_statevector(q1, decimals=3)

print(result)

# 回路を測定
q1.measure(0,0)
q1.measure(1,1)

# 回路を描画
q1.draw(output="mpl")

# QASMシミュレーターで実験
simulator = Aer.get_backend('qasm_simulator')
job = execute(q1, backend=simulator, shots=1024)
result = job.result()

#  測定された回数を表示
counts = result.get_counts(q1)
print(counts)

# ヒストグラムで測定された確率をプロット
from qiskit.visualization import *
plot_histogram( counts )

