1 from PyQNLPSimulator
import PyQNLPSimulator
as p
4 from itertools
import product
10 from mpi4py
import MPI
12 rank = MPI.COMM_WORLD.Get_rank()
14 print(
"I am rank " , rank)
18 encoding_dict = {
"ns" : {
"adult":0,
"child":1,
"smith":2,
"surgeon":3 },
19 "v" : {
"stand":0,
"move":1,
"sit":2,
"sleep":3 },
20 "no" : {
"inside":0,
"outside":1 }
23 decoding_dict = {
"ns" : { 0:
"adult", 1:
"child", 2:
"smith", 3:
"surgeon"},
24 "v" : { 0:
"stand", 1:
"move", 2:
"sit", 3:
"sleep"},
25 "no" : { 0:
"inside", 1:
"outside"}
29 len_reg_auxiliary = len_reg_memory + 2
30 num_qubits = len_reg_memory + len_reg_auxiliary
39 sim = p(num_qubits, use_fusion)
45 reg_memory = [0]*len_reg_memory;
46 for i
in range(len_reg_memory):
49 reg_auxiliary = [0]*len_reg_auxiliary
50 for i
in range(len_reg_auxiliary):
51 reg_auxiliary[i] = i + len_reg_memory;
55 "John rests outside, Mary walks inside" 57 [{
"john" : [encoding_dict[
"ns"][
"adult"], encoding_dict[
"ns"][
"smith"]]},
58 {
"rest" : [encoding_dict[
"v"][
"sit"], encoding_dict[
"v"][
"sleep"]]},
59 {
"inside" : [encoding_dict[
"no"][
"inside"]] }],
61 [{
"mary" : [encoding_dict[
"ns"][
"child"], encoding_dict[
"ns"][
"surgeon"]]},
62 {
"walk" : [encoding_dict[
"v"][
"stand"], encoding_dict[
"v"][
"move"]]},
63 {
"outside" :[encoding_dict[
"no"][
"outside"]] }],
69 bit_shifts = [i[1]
for i
in q.utils.get_type_offsets(encoding_dict)]
72 bit_shifts.insert(0,0)
73 bit_shifts = np.cumsum(bit_shifts)
76 superpos_patterns = [list(sentences[0][i].values())[0]
for i
in range(3)]
82 for idx
in range(len(sentences)):
83 superpos_patterns = [list(sentences[idx][i].values())[0]
for i
in range(3)]
85 for i
in list(product(superpos_patterns[2], superpos_patterns[1], superpos_patterns[0])):
87 for val
in zip(i,bit_shifts):
88 num += (val[0] << val[1])
89 vec_to_encode.extend([num])
95 for i
in vec_to_encode:
96 count_even.update({i : 0})
105 for i
in vec_to_encode:
106 count.update({i : 0})
109 for exp
in tqdm(range(num_exps)):
114 sim.encodeBinToSuperpos_unique(reg_memory, reg_auxiliary, vec_to_encode, len_reg_memory)
117 sim.applyHammingDistanceRotY(test_pattern, reg_memory, reg_auxiliary, len_reg_memory)
120 sim.collapseToBasisZ(reg_auxiliary[len_reg_auxiliary-2], 1)
122 val = sim.applyMeasurementToRegister(reg_memory, normalise)
130 print(
"Experiments completed.")