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

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

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

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

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

# 量子ゲートで回路を作成
q1.x(0)   # Xゲートを量子ビットq0に操作します。
q1.x(1)   # Xゲートを量子ビット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 )

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

# 量子ゲートで回路を作成
q2.x(0)   # Xゲートを量子ビットq0に操作します。
q2.h(0)   # Hゲートを量子ビットq0に操作します。
q2.x(1)   # Xゲートを量子ビットq1に操作します。
q2.h(1)   # Hゲートを量子ビットq1に操作します。

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

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

print(result)

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

# 回路を描画
q2.draw(output='mpl')

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

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

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

