In [1]:
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_from_b64_file('sdm-10000w.as')
counter = sdmlib.Counter.load_file('sdm-10000w')
sdm = sdmlib.SDM(address_space, counter, radius, scanner_type)
In [4]:
b = sdmlib.Bitstring.init_random(1000)
sdm.write(b, b)
In [5]:
from IPython.display import clear_output
distances = []
x = range(0, 1001)
for i, dist in enumerate(x):
clear_output(wait=True)
print 'Distance: {:4d} ({:.2f}%)'.format(dist, 100.*(i+1)/len(x))
c = sdmlib.Bitstring.init_from_bitstring(b)
c.flip_random_bits(dist)
assert c.distance_to(b) == dist
d = sdm.iter_read(c, max_iter=1)
distances.append(d.distance_to(b))
print 'Done!'
In [6]:
plt.figure()
plt.plot(x, distances)
plt.plot(x, x, 'k')
plt.plot(x, [500]*len(x), 'k:')
plt.title('Kanerva\'s Figure 7.3')
plt.ylabel('New distance (after one read)')
plt.xlabel('Old distance')
plt.grid()
plt.axis([0, 1000, 0, 1000]);
In [7]:
c = sdmlib.Bitstring.init_from_bitstring(b)
c.flip_random_bits(1000)
d = c
print 0, b.distance_to(d)
for i in xrange(10):
d = sdm.read(d)
print i+1, b.distance_to(d)
In [ ]: