forked from sympy/sympy
-
Notifications
You must be signed in to change notification settings - Fork 1
/
dense_coding_example.py
executable file
·57 lines (45 loc) · 1.57 KB
/
dense_coding_example.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
#!/usr/bin/env python
"""Demonstration of quantum dense coding."""
from sympy import sqrt, pprint
from sympy.physics.quantum import qapply
from sympy.physics.quantum.gate import H, X, Z, CNOT
from sympy.physics.quantum.qubit import Qubit
from sympy.physics.quantum.circuitplot import circuit_plot
from sympy.physics.quantum.grover import superposition_basis
def main():
psi = superposition_basis(2)
psi
# Dense coding demo:
# Assume Alice has the left QBit in psi
print "An even superposition of 2 qubits. Assume Alice has the left QBit."
pprint(psi)
# The corresponding gates applied to Alice's QBit are:
# Identity Gate (1), Not Gate (X), Z Gate (Z), Z Gate and Not Gate (ZX)
# Then there's the controlled not gate (with Alice's as control):CNOT(1, 0)
# And the Hadamard gate applied to Alice's Qbit: H(1)
# To Send Bob the message |0>|0>
print "To Send Bob the message |00>."
circuit = H(1)*CNOT(1, 0)
result = qapply(circuit*psi)
result
pprint(result)
# To send Bob the message |0>|1>
print "To Send Bob the message |01>."
circuit = H(1)*CNOT(1, 0)*X(1)
result = qapply(circuit*psi)
result
pprint(result)
# To send Bob the message |1>|0>
print "To Send Bob the message |10>."
circuit = H(1)*CNOT(1, 0)*Z(1)
result = qapply(circuit*psi)
result
pprint(result)
# To send Bob the message |1>|1>
print "To Send Bob the message |11>."
circuit = H(1)*CNOT(1, 0)*Z(1)*X(1)
result = qapply(circuit*psi)
result
pprint(result)
if __name__ == "__main__":
main()