class 量子ビット:
def init(self):
self.状態 = np.array([1, 0], dtype=complex)
def 𝐗(self):
self.状態 = np.dot(np.array([[0, 1], [1, 0]]), self.状態)
def 𝐘(self):
self.状態 = np.dot(np.array([[0, -1j], [1j, 0]]), self.状態)
def 𝐙(self):
self.状態 = np.dot(np.array([[1, 0], [0, -1]]), self.状態)
def 𝐇(self):
self.状態 = np.dot(np.array([[1, 1], [1, -1]], dtype=complex) / np.sqrt(2), self.状態)
def 測定(self):
確率 = np.abs(self.状態) ** 2
結果 = np.random.choice([0, 1], p=確率)
self.状態 = np.array([int(結果 == 0), int(結果 == 1)], dtype=complex)
return 結果
class 量子回路:
def init(self, 量子ビット数):
self.量子ビット列 = [量子ビット() for _ in range(量子ビット数)]
def 𝐗(self, ターゲット):
self.量子ビット列[ターゲット].𝐗()
def 𝐘(self, ターゲット):
self.量子ビット列[ターゲット].𝐘()
def 𝐙(self, ターゲット):
self.量子ビット列[ターゲット].𝐙()
def 𝐇(self, ターゲット):
self.量子ビット列[ターゲット].𝐇()
def 𝐂𝐍𝐎𝐓(self, コントロール, ターゲット):
if self.量子ビット列[コントロール].測定() == 1:
self.量子ビット列[ターゲット].𝐗()
def 測定(self):
結果 = [量子ビット.測定() for 量子ビット in self.量子ビット列]
return 結果
graph TD
A[量子ビット] --> B(量子回路)
B --> C{量子ゲート}
C --> D[単一量子ビットゲート]
D --> E[X]
D --> F[Y]
D --> G[Z]
D --> H[H]
D --> I[RX]
D --> J[RY]
D --> K[RZ]
C --> L[複数量子ビットゲート]
L --> M[CNOT]
L --> N[SWAP]
L --> O[CZ]
B --> P[量子状態]
P --> Q[ベクトル表現]
P --> R[密度行列表現]
B --> S[測定]
B --> T[回路操作]
T --> U[複製]
T --> V[結合]
T --> W[逆操作]
T --> X[深さ計算]
B --> Y[可視化]
こんな感じでUTF-8が4バイト可変長という特徴を活かして、
pythonのライブラリにしてみたいのですがどうでしょう?