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

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

import numpy as np

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

q = QuantumCircuit(1)    # １量子ビット回路を用意

q.x(0)   # Xゲートを0番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(1)    # １量子ビット回路を用意

q.h(0)   # Hゲートを0番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(1)    # １量子ビット回路を用意 

# Hゲートを0番目の量子ビットに操作します。
q.h(0)

# 次にZゲートを0番目の量子ビットに操作します。
q.z(0)

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(1)    # １量子ビット回路を用意 

q.h(0)    # Hゲートを0番目の量子ビットに操作します。
q.s(0)    # 次にSゲートを0番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(1)    # １量子ビット回路を用意 

q.h(0)    # Hゲートを0番目の量子ビットに操作します。
q.t(0)    # 次にTゲートを0番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(1)    # １量子ビット回路を用意 

q.h(0)    # Hゲートを0番目の量子ビットに操作します。
q.u1(np.pi/8,0)    # 次にU1ゲートを0番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(2)    # 2量子ビット回路を用意  

q.h(0)    # Hゲートを0番目の量子ビットに操作します。
q.h(1)    # Hゲートを1番目の量子ビットに操作します。

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

q = QuantumCircuit(2)    # 2量子ビット回路を用意

# q0=|1>, q1=|+>の場合：
q.x(0)
q.h(1)

# CU1ゲートの制御ビットをq0、目標ビットをq1、角度をpi/2にセットします。
q.cu1(np.pi/2,0,1)

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

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

plot_bloch_multivector(result)    # ブロッホ球の表示

