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_THREAD
In [3]:
def write_sequence(sdms, 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))
sdms[k-1].write(bs_list[i], bs_list[i+k])
In [4]:
address_space = sdmlib.AddressSpace.init_random(bits, sample)
In [5]:
bitstrings = {}
for x in ['A', 'B', 'C', 'D', 'E', 'F']:
bitstrings[x] = sdmlib.Bitstring.init_random(bits)
In [6]:
def get_bs_sequence(seq):
v = []
for x in seq:
v.append(bitstrings[x])
return v
In [7]:
counter1 = sdmlib.Counter.create_file('seq-c1', bits, sample)
sdm1 = sdmlib.SDM(address_space, counter1, radius, scanner_type)
In [8]:
counter2 = sdmlib.Counter.create_file('seq-c2', bits, sample)
sdm2 = sdmlib.SDM(address_space, counter2, radius, scanner_type)
In [9]:
counter3 = sdmlib.Counter.create_file('seq-c3', bits, sample)
sdm3 = sdmlib.SDM(address_space, counter3, radius, scanner_type)
In [10]:
write_sequence([sdm1, sdm2, sdm3], get_bs_sequence('ABCD'))
In [11]:
write_sequence([sdm1, sdm2, sdm3], get_bs_sequence('EBCF'))
In [12]:
def read_sequence(sdms, bs_list):
n = len(bs_list)
counters = []
for i in range(n):
print('Reading {} from sdm {}'.format(i, n-i-1))
c = sdms[n-i-1].read_counter(bs_list[i])
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 [13]:
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 [14]:
bs_final = read_sequence([sdm1, sdm2, sdm3], get_bs_sequence('ABC'))
In [15]:
for d, x in calculate_distances(bs_final):
print('{:4d} {}'.format(d, x))
In [16]:
bs_final2 = read_sequence([sdm1, sdm2, sdm3], get_bs_sequence('EBC'))
In [17]:
for d, x in calculate_distances(bs_final2):
print('{:4d} {}'.format(d, x))
In [ ]: