-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgates.py
81 lines (51 loc) · 1.47 KB
/
gates.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
from qubit import Qubit
from program import Variable
import numpy as np
from cmath import sqrt
import random
class QuantumGate:
pass
class Identity(QuantumGate):
name = "I"
def __init__(self, qubit: Qubit):
self.qubit = qubit
def __repr__(self):
return f"<Identity with {self.qubit}>"
class Hadamard(QuantumGate):
name = "H"
def __init__(self, qubit: Qubit):
self.qubit = qubit
def __repr__(self):
return f"<Hadamard with {self.qubit}>"
class Measure(QuantumGate):
name = "MEASURE"
def __init__(self, qubit: Qubit, var: Variable):
self.qubit = qubit
self.var = var
def __repr__(self):
return f"<MEASURE with qubit {self.qubit}>"
class PauliZ(QuantumGate):
name = "Z"
def __init__(self, qubit: Qubit):
self.qubit = qubit
def __repr__(self):
return f"<Z with {self.qubit}>"
class PauliX(QuantumGate):
name = "X"
def __init__(self, qubit: Qubit):
self.qubit = qubit
def __repr__(self):
return f"<X with {self.qubit}>"
class PauliY(QuantumGate):
name = "Y"
def __init__(self, qubit: Qubit):
self.qubit = qubit
def __repr__(self):
return f"<Y with {self.qubit}>"
class CNOT(QuantumGate):
name = "CNOT"
def __init__(self, qubit1: Qubit, qubit2: Qubit):
self.qubit1 = qubit1
self.qubit2 = qubit2
def __repr__(self):
return f"<CNOT with {self.qubit1} and {self.qubit2}>"