def main(): print() print('Demonstration of Grover\'s Algorithm') print('The OracleGate or V Gate carries the unknown function f(x)') print( '> V|x> = ((-1)^f(x))|x> where f(x) = 1 when x = a (True in our case)') print('> and 0 (False in our case) otherwise') print() nqubits = 2 print('nqubits = ', nqubits) v = OracleGate(nqubits, black_box) print('Oracle or v = OracleGate(%r, black_box)' % nqubits) print() psi = superposition_basis(nqubits) print('psi:') pprint(psi) demo_vgate_app(v) print('qapply(v*psi)') pprint(qapply(v * psi)) print() w = WGate(nqubits) print('WGate or w = WGate(%r)' % nqubits) print('On a 2 Qubit system like psi, 1 iteration is enough to yield |1>') print('qapply(w*v*psi)') pprint(qapply(w * v * psi)) print() nqubits = 3 print('On a 3 Qubit system, it requires 2 iterations to achieve') print('|1> with high enough probability') psi = superposition_basis(nqubits) print('psi:') pprint(psi) v = OracleGate(nqubits, black_box) print('Oracle or v = OracleGate(%r, black_box)' % nqubits) print() print('iter1 = grover.grover_iteration(psi, v)') iter1 = qapply(grover_iteration(psi, v)) pprint(iter1) print() print('iter2 = grover.grover_iteration(iter1, v)') iter2 = qapply(grover_iteration(iter1, v)) pprint(iter2) print()
def main(): print() print("Demonstration of Grover's Algorithm") print("The OracleGate or V Gate carries the unknown function f(x)") print( "> V|x> = ((-1)^f(x))|x> where f(x) = 1 when x = a (True in our case)") print("> and 0 (False in our case) otherwise") print() nqubits = 2 print("nqubits = ", nqubits) v = OracleGate(nqubits, black_box) print("Oracle or v = OracleGate(%r, black_box)" % nqubits) print() psi = superposition_basis(nqubits) print("psi:") pprint(psi) demo_vgate_app(v) print("qapply(v*psi)") pprint(qapply(v * psi)) print() w = WGate(nqubits) print("WGate or w = WGate(%r)" % nqubits) print("On a 2 Qubit system like psi, 1 iteration is enough to yield |1>") print("qapply(w*v*psi)") pprint(qapply(w * v * psi)) print() nqubits = 3 print("On a 3 Qubit system, it requires 2 iterations to achieve") print("|1> with high enough probability") psi = superposition_basis(nqubits) print("psi:") pprint(psi) v = OracleGate(nqubits, black_box) print("Oracle or v = OracleGate(%r, black_box)" % nqubits) print() print("iter1 = grover.grover_iteration(psi, v)") iter1 = qapply(grover_iteration(psi, v)) pprint(iter1) print() print("iter2 = grover.grover_iteration(iter1, v)") iter2 = qapply(grover_iteration(iter1, v)) pprint(iter2) print()
def main(): print() print('Demonstration of Grover\'s Algorithm') print('The OracleGate or V Gate carries the unknown function f(x)') print('> V|x> = ((-1)^f(x))|x> where f(x) = 1 when x = a (True in our case)') print('> and 0 (False in our case) otherwise') print() nqubits = 2 print('nqubits = ', nqubits) v = OracleGate(nqubits, black_box) print('Oracle or v = OracleGate(%r, black_box)' % nqubits) print() psi = superposition_basis(nqubits) print('psi:') pprint(psi) demo_vgate_app(v) print('qapply(v*psi)') pprint(qapply(v*psi)) print() w = WGate(nqubits) print('WGate or w = WGate(%r)' % nqubits) print('On a 2 Qubit system like psi, 1 iteration is enough to yield |1>') print('qapply(w*v*psi)') pprint(qapply(w*v*psi)) print() nqubits = 3 print('On a 3 Qubit system, it requires 2 iterations to achieve') print('|1> with high enough probability') psi = superposition_basis(nqubits) print('psi:') pprint(psi) v = OracleGate(nqubits, black_box) print('Oracle or v = OracleGate(%r, black_box)' % nqubits) print() print('iter1 = grover.grover_iteration(psi, v)') iter1 = qapply(grover_iteration(psi, v)) pprint(iter1) print() print('iter2 = grover.grover_iteration(iter1, v)') iter2 = qapply(grover_iteration(iter1, v)) pprint(iter2) print()
def main(): print print "Demonstration of Grover's Algorithm" print "The OracleGate or V Gate carries the unknown function f(x)" print "> V|x> = ((-1)^f(x))|x> where f(x) = 1 when x = a (True in our case)" print "> and 0 (False in our case) otherwise" print nqubits = 2 print "nqubits = ", nqubits v = OracleGate(nqubits, black_box) print "Oracle or v = OracleGate(%r, black_box)" % nqubits print psi = superposition_basis(nqubits) print "psi:" pprint(psi) demo_vgate_app(v) print "qapply(v*psi)" pprint(qapply(v * psi)) print w = WGate(nqubits) print "WGate or w = WGate(%r)" % nqubits print "On a 2 Qubit system like psi, 1 iteration is enough to yield |1>" print "qapply(w*v*psi)" pprint(qapply(w * v * psi)) print nqubits = 3 print "On a 3 Qubit system, it requires 2 iterations to achieve" print "|1> with high enough probability" psi = superposition_basis(nqubits) print "psi:" pprint(psi) v = OracleGate(nqubits, black_box) print "Oracle or v = OracleGate(%r, black_box)" % nqubits print print "iter1 = grover.grover_iteration(psi, v)" iter1 = qapply(grover_iteration(psi, v)) pprint(iter1) print print "iter2 = grover.grover_iteration(iter1, v)" iter2 = qapply(grover_iteration(iter1, v)) pprint(iter2) print
def test_grover_iteration_2(): numqubits = 4 basis_states = superposition_basis(numqubits) v = OracleGate(numqubits, return_one_on_two) # After (pi/4)sqrt(pow(2, n)), IntQubit(2) should have highest prob # In this case, after around pi times (3 or 4) iterated = grover_iteration(basis_states, v) iterated = qapply(iterated) iterated = grover_iteration(iterated, v) iterated = qapply(iterated) iterated = grover_iteration(iterated, v) iterated = qapply(iterated) # In this case, probability was highest after 3 iterations # Probability of Qubit('0010') was 251/256 (3) vs 781/1024 (4) # Ask about measurement expected = (-13*basis_states)/64 + 264*IntQubit(2, numqubits)/256 assert qapply(expected) == iterated
def test_grover_iteration_1(): numqubits = 2 basis_states = superposition_basis(numqubits) v = OracleGate(numqubits, return_one_on_one) expected = IntQubit(1, nqubits=numqubits) assert qapply(grover_iteration(basis_states, v)) == expected
print("q3:") print(q3.superposition()) print() print("q4:") print(q4.superposition()) print() print("q5:") print(q5.superposition()) print() print("q6:") print(q6.superposition()) print() print("q7:") print(q7.superposition()) print() print("q8:") print(q8.superposition()) print() # Grover Iteration print(qcol.allQubits[Qubit(qapply(grover_iteration(q2.superposition(), v2)))]) #print(qcol.allQubits[Qubit( print(qapply(apply_grover(f5, q2.nQubits()))) #])
def test_grover_iteration_1(): numqubits = 2 basis_states = superposition_basis(numqubits) v = OracleGate(numqubits, return_one_on_one) expected = IntQubit(1, numqubits) assert qapply(grover_iteration(basis_states, v)) == expected