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'))


Writing 0 -> 1 into sdm 0
Writing 1 -> 2 into sdm 0
Writing 2 -> 3 into sdm 0
Writing 0 -> 2 into sdm 1
Writing 1 -> 3 into sdm 1
Writing 0 -> 3 into sdm 2

In [11]:
write_sequence([sdm1, sdm2, sdm3], get_bs_sequence('EBCF'))


Writing 0 -> 1 into sdm 0
Writing 1 -> 2 into sdm 0
Writing 2 -> 3 into sdm 0
Writing 0 -> 2 into sdm 1
Writing 1 -> 3 into sdm 1
Writing 0 -> 3 into sdm 2

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'))


Reading 0 from sdm 2
Reading 1 from sdm 1
Reading 2 from sdm 0

In [15]:
for d, x in calculate_distances(bs_final):
    print('{:4d} {}'.format(d, x))


   0 D
 482 B
 488 F
 496 A
 515 C
 538 E

In [16]:
bs_final2 = read_sequence([sdm1, sdm2, sdm3], get_bs_sequence('EBC'))


Reading 0 from sdm 2
Reading 1 from sdm 1
Reading 2 from sdm 0

In [17]:
for d, x in calculate_distances(bs_final2):
    print('{:4d} {}'.format(d, x))


   0 F
 472 B
 488 D
 502 A
 503 C
 520 E

In [ ]: