def test_find_bistring(): bitstring_map = {"0": 1, "1": -1} builder = Grover() with patch("pyquil.api.SyncConnection") as qvm: expected_bitstring = np.asarray([0, 1], dtype=int) qvm.run_and_measure.return_value = expected_bitstring bitstring = builder.find_bitstring(qvm, bitstring_map) prog = builder.grover_circuit # Make sure it only defines the one ORACLE gate. assert len(prog.defined_gates) == 1 # Make sure that it produces the oracle we expect. assert (prog.defined_gates[0].matrix == np.array([[1, 0], [0, -1]])).all() assert (bitstring == expected_bitstring).all()
def test_find_bitstring(): bitstring_map = {"0": 1, "1": -1} builder = Grover() with patch("pyquil.api.QuantumComputer") as qc: expected_bitstring = [0, 1] qc.run.return_value = [ "".join([str(bit) for bit in expected_bitstring]) ] returned_bitstring = builder.find_bitstring(qc, bitstring_map) prog = builder.grover_circuit # Make sure it only defines the ORACLE gate and the DIFFUSION gate. assert len(prog.defined_gates) == 2 # Make sure that it produces the oracle we expect. assert (prog.defined_gates[0].matrix == np.array([[1, 0], [0, -1]])).all() expected_bitstring = "".join([str(bit) for bit in expected_bitstring]) returned_bitstring = "".join([str(bit) for bit in returned_bitstring]) assert expected_bitstring == returned_bitstring
def test_find_bistring(): bitstring_map = {"0": 1, "1": -1} builder = Grover() with patch("pyquil.api.QVMConnection") as qvm: expected_bitstring = [0, 1] qvm.run_and_measure.return_value = [ expected_bitstring, ] returned_bitstring = builder.find_bitstring(qvm, bitstring_map) prog = builder.grover_circuit # Make sure it only defines the one ORACLE gate. assert len(prog.defined_gates) == 1 # Make sure that it produces the oracle we expect. assert (prog.defined_gates[0].matrix == np.array([[1, 0], [0, -1]])).all() expected_bitstring = "".join([str(bit) for bit in expected_bitstring]) returned_bitstring = "".join([str(bit) for bit in returned_bitstring]) assert expected_bitstring == returned_bitstring
import numpy as np from grove.amplification.grover import Grover from pyquil import get_qc # Bitstring Map as an algorithm input SEARCHED_STRING = "1011010" N = len(SEARCHED_STRING) mapping = {} for b in range(2**N): pad_str = np.binary_repr(b, N) if pad_str == SEARCHED_STRING: mapping[pad_str] = -1 else: mapping[pad_str] = 1 # Connection qc = get_qc('9q-qvm') #============================================================================== # Grove: Grove's Search Algorithm #============================================================================== # Run algo = Grover() ret_string = algo.find_bitstring(qc, bitstring_map=mapping) print("The searched string is: {}".format(ret_string))
print(target_bitstring0) print(target_bitstring1) bit = ("0", "1") bitstring_map = {} target_bitstring_phase = -1 nontarget_bitstring_phase = 1 # We construct the bitmap for the oracle for bitstring in product(bit, repeat=N*2): bitstring = "".join(bitstring) if bitstring == target_bitstring0 or bitstring == target_bitstring1: bitstring_map[bitstring] = target_bitstring_phase else: bitstring_map[bitstring] = nontarget_bitstring_phase qvm = QVMConnection() #with patch("pyquil.api.QuantumComputer") as qc: #qvm.run.return_value = [[int(bit) for bit in target_bitstring]] grover = Grover() samples = [] for i in range(50): found_bitstring = grover.find_bitstring(qvm, bitstring_map) samples.append(found_bitstring) c = Counter(samples) print(c) plt.bar(*zip(*c.most_common()), width=.5, color='g') plt.show()