initial interface for libv
This commit is contained in:
parent
9b31296aed
commit
b80fa8e3e0
44
lib_q_computer.py
Normal file
44
lib_q_computer.py
Normal file
@ -0,0 +1,44 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
class State(object):
|
||||
def __init__(self, matrix_state):
|
||||
self._matrix_state = matrix_state
|
||||
|
||||
def __repr__(self):
|
||||
return str(self._matrix_state)
|
||||
|
||||
|
||||
class Gate(State):
|
||||
def on(self, state, q2=None):
|
||||
this = self._matrix_state
|
||||
a = state._matrix_state
|
||||
if q2:
|
||||
a = np.kron(a, q2._matrix_state)
|
||||
return State(this.dot(a))
|
||||
|
||||
|
||||
class Qubit(State): ...
|
||||
|
||||
|
||||
_0 = np.array([[1],
|
||||
[0]])
|
||||
|
||||
H = Gate(np.array([
|
||||
[1 / np.sqrt(2), 1 / np.sqrt(2)],
|
||||
[1 / np.sqrt(2), -1 / np.sqrt(2)]
|
||||
]))
|
||||
|
||||
CNOT = Gate(np.array([
|
||||
[1, 0, 0, 0],
|
||||
[0, 1, 0, 0],
|
||||
[0, 0, 0, 1],
|
||||
[0, 0, 1, 0],
|
||||
]))
|
||||
|
||||
if __name__ == "__main__":
|
||||
# E.g. Bell state
|
||||
q1 = Qubit(_0)
|
||||
q2 = Qubit(_0)
|
||||
bell = CNOT.on(H.on(q1), q2)
|
||||
print(bell)
|
Loading…
Reference in New Issue
Block a user