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.")