In [1]:
from __future__ import print_function
import sdm as sdmlib
import matplotlib.pyplot as plt
%matplotlib inline
In [2]:
bits = 1000
sample = 1000000
radius = 451
scanner_type = sdmlib.SDM_SCANNER_OPENCL
In [3]:
address_space = sdmlib.AddressSpace.init_random(bits, sample)
counter = sdmlib.Counter.init_zero(bits, sample)
sdm = sdmlib.SDM(address_space, counter, radius, scanner_type)
In [4]:
def write_sequence(fold_list, bs_list):
n = len(bs_list)
for k in range(1, n+1):
for i in range(n-k):
print('Writing {} -> {} into sdm {}'.format(i, i+k, k-1))
fold = fold_list[k-1]
sdm.write(bs_list[i] ^ fold, bs_list[i+k])
In [5]:
bitstrings = {}
for x in ['A', 'B', 'C', 'D', 'E', 'F']:
bitstrings[x] = sdmlib.Bitstring.init_random(bits)
In [6]:
folds = []
for _ in range(3):
folds.append(sdmlib.Bitstring.init_random(bits))
In [7]:
def get_bs_sequence(seq):
v = []
for x in seq:
v.append(bitstrings[x])
return v
In [8]:
write_sequence(folds, get_bs_sequence('ABCD'))
In [9]:
write_sequence(folds, get_bs_sequence('EBCF'))
In [10]:
def read_sequence(fold_list, bs_list):
n = len(bs_list)
counters = []
for i in range(n):
print('Reading {} from sdm {}'.format(i, n-i-1))
fold = fold_list[n-i-1]
c = sdm.read_counter(bs_list[i] ^ fold)
counters.append(c)
final = sdmlib.Counter.init_zero(bits, 1)
for c in counters:
final.add_counter(0, c, 0)
bs_final = final.to_bitstring(0)
return bs_final
In [11]:
def calculate_distances(ref):
v = [(x.distance_to(ref), key) for key, x in bitstrings.iteritems()]
v.sort(key=lambda x: x[0])
return v
In [12]:
bs_final = read_sequence(folds, get_bs_sequence('ABC'))
In [13]:
for d, x in calculate_distances(bs_final):
print('{:4d} {}'.format(d, x))
In [14]:
bs_final2 = read_sequence(folds, get_bs_sequence('EBC'))
In [15]:
for d, x in calculate_distances(bs_final2):
print('{:4d} {}'.format(d, x))
In [ ]: