QNLP  v1.0
simple.py
Go to the documentation of this file.
1 from .encoder_base import EncoderBase
2 
4  """
5  This cyclic encoder is the simplest (and currently the only used) encoding scheme to ensure
6  equal Hamming distances between items separated by n indices. Not very efficient in use of qubits,
7  but simple enough to implement.
8  """
9 
10  def __init__(self, num_nouns, num_verbs):
11  assert(num_nouns%2 == 0)
12  assert(num_verbs%2 == 0)
13  self.num_nouns = num_nouns
14  self.num_verbs = num_verbs
15  self.enc_mapping_nouns = self._gen_encoding_vals(num_nouns)
16  self.enc_mapping_verbs = self._gen_encoding_vals(num_verbs)
17  self.dec_mapping_nouns = { v:k for (k,v) in self.enc_mapping_nouns.items() }
18  self.dec_mapping_verbs = { v:k for (k,v) in self.enc_mapping_verbs.items() }
19 
20  def _gen_encoding_vals(self, num_items):
21  ""
22  num_shifts = num_items//2
23  vals = [0]*num_items
24  for i in range(1, num_shifts+1):
25  vals[i] = vals[i-1] + (0b1 << (i-1))
26  for i in range(1, num_shifts):
27  vals[i + num_shifts ] = vals[i + num_shifts -1] - (0b1 << (i-1))
28  val_dict = { k:v for (k,v) in zip(range(len(vals)), vals)}
29  return val_dict
30 
31  def encode(self, bin_val, data):
32  val_offset = bin_val
33  if data == "nouns":
34  enc_mapping = self.enc_mapping_nouns
35  elif data == "verbs":
36  enc_mapping = self.enc_mapping_verbs
37  else:
38  raise Exception("Unknown data set: {}".format(data))
39 
40  if val_offset not in enc_mapping:
41  raise(ValueError("Encoding index value not within expected range. Value={}".format(val_offset)))
42  return enc_mapping[val_offset]
43 
44  def decode(self, bin_val, data):
45  val_offset = bin_val
46  if data == "nouns":
47  dec_mapping = self.dec_mapping_nouns
48  elif data == "verbs":
49  dec_mapping = self.dec_mapping_verbs
50  else:
51  raise Exception("Unknown data set: {}".format(data))
52  if val_offset not in self.dec_mapping:
53  raise(ValueError("Decoding index value not within expected range. Value={}".format(val_offset)))
54  return dec_mapping[val_offset]
def _gen_encoding_vals(self, num_items)
Definition: simple.py:20
def decode(self, bin_val, data)
Definition: simple.py:44
def __init__(self, num_nouns, num_verbs)
Definition: simple.py:10
def encode(self, bin_val, data)
Definition: simple.py:31