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