##// END OF EJS Templates
Much improved nagivation for the notebook cells....
Much improved nagivation for the notebook cells. * Up/Down arrow now used to navigate cells. * For text cells, shift-enter renders, enter edits.

File last commit:

r4330:264b061c
r4334:c14e6511
Show More
grovers.ipynb
1 line | 1.9 KiB | text/plain | TextLexer

Grover's Algorithm

In [1]:
%load_ext sympy_printing
In [2]:
from sympy import sqrt, symbols, Rational
from sympy import expand, Eq, Symbol, simplify, exp, sin
from sympy.physics.quantum import *
from sympy.physics.quantum.qubit import *
from sympy.physics.quantum.gate import *
from sympy.physics.quantum.grover import *
from sympy.physics.quantum.qft import QFT, IQFT, Fourier
from sympy.physics.quantum.circuitplot import circuit_plot
In [3]:
nqubits = 3

Define a black box function that returns True if it is passed the state we are searching for.

In [4]:
def black_box(qubits):
    return True if qubits == IntQubit(1, qubits.nqubits) else False

Build a uniform superposition state to start the search.

In [5]:
psi = superposition_basis(nqubits); psi

Wrap that black box function in an oracle gate.

In [6]:
v = OracleGate(nqubits, black_box)

Perform two iterations of Grover's algorithm. Each iteration, the amplitude of the target state increases.

In [7]:
iter1 = qapply(grover_iteration(psi, v)); iter1
In [8]:
iter2 = qapply(grover_iteration(iter1, v)); iter2

A single shot measurement is performed to retrieve the target state.

In [9]:
measure_all_oneshot(iter2)
In [28]:
%notebook save grovers.ipynb
In [63]:
%notebook load qft.ipynb