In [ ]:
from pymisca.util import *
from pymisca.vis_util import *
import IPython.display as ipd
import KBs
import random
DIR = 'data_pdist_rev'
!mkdir -p {DIR}
# %%time
import os
import workers
import time
worker = worker0323
ts = []
t0 = time.time()
oit = list(range(0,300))
for seed in oit:
bsize= 600
kb = KBs.kb_r2dntca()
it = kb.bulk_rstr(seed=seed,bsize=bsize)
# out = worker(it[0])
# print out
# break
out = mp_map(worker,it,n_cpu=6)
fname = os.path.join(DIR,'seed%d_size%d.npy'%(seed,bsize))
np.save(fname,out)
print "finished %d of %d"%(seed,(oit[-1]))
t = time.time()
ts.append(t-t0)
t0 = t
# break
print 'finished'
print 'avgtime:%.5fs'%(np.mean(ts))
In [19]:
??kb.bulk_rstr
In [3]:
from KBs import *
import scipy.spatial.distance as spdist
def worker0323(dct,t=None):
sysX = guess(dct=dct)
hist = sample(sysX)
if t is None:
self = sysX
t = {'r2dntca':2,}.get(self.family.familyname,1)
hist = hist.reshape(hist.shape[:2]+(-1,))
hist = np.concatenate([np.roll(hist,-t,axis=0) for t in range(t)],axis=-1)
# print hist.shape
d = spdist.pdist(hist[-t-2],'hamming')
d = 1 - abs(2*d-1)
D = spdist.squareform(d)
np.fill_diagonal(D,2)
d = spdist.pdist(hist[len(hist)//2],'hamming')
d = 1 - abs(2*d-1)
D1= spdist.squareform(d)
np.fill_diagonal(D1,2)
MIN = D.min(axis=0)
MIN1 = D1.min(axis=0)
data = np.vstack([MIN1,MIN]).T
MEDS = [np.median(MIN1),np.median(MIN)]
COV = np.cov(data.T)
COR = cov2cor(COV)
return {'rule':{'family':sysX.familyname,'rulestr':sysX.rulestr},
'data':{ 'med':[x.tolist() for x in MEDS],'cov':COV.ravel().tolist(),'cor':[COR[0,1]]},
}
import KBs
reload(KBs)
from KBs import *
# def sample(self,t=None,ini=None,adv = None,T = None):
# if t is None:
# t = {'r2dntca':2,}.get(self.family.familyname,1)
# if T is None:
# T = self.hmax
# if adv is None:
# adv = self.adv
# if ini is None:
# if t>=2:
# ini = np.array([self.rdf().astype(int)]*t)
# else:
# ini=self.rdf().astype(int)
# avc = ini
# hist = np.zeros((T+1+t,)+avc.shape[-3:],dtype=np.int)
# hist[:t]=avc
# for i in range(T+1):
# hist[i+t]=avc[-1]
# avc=(adv(avc))
# return hist
class kb_r2dntca(kb_2dntca):
familyname='r2dntca'
# def __init__(self):
# self.familyname = 'r2dntca'
# self=super(kb_r2dntca,self).__init__()
# return self
#
def bin2adv(self, ruleprj):
if isinstance(ruleprj,str):
ruleprj = list(ruleprj)
ruleprj = np.array(ruleprj,np.int)
def adv(a,horizon=0):
old = a[0]
curr = a[1]
new = ruleprj[self.conv(curr)]^old
return np.array([curr,new])
return adv
kb = kb_r2dntca()
env = CA_sys(familyname='r2dntca')
env.alias2rulestr()
adv= kb.rulestr2adv(env.rulestr)
np.random.seed(0)
env.change_size((2,100,64**2))
p = .05
ini = np.array([env.rdf(p),env.rdf(p)])
ini = ini[:,0:1]
hist = sample(env)
showsptime(hist[:,0,:])
plt.show()
# ini = ini[::-1]
ini2 = hist[-2:][::-1]
print ini.shape
print ini2.shape
# hist = sample(env,adv=adv,ini=ini2,t=2)
showsptime(hist[:,0,:])
plt.show()
In [6]:
env.family
Out[6]:
In [15]:
kb = kb_r2dntca()
print env.family
print env.family.familyname
print kb.familyname
In [ ]:
In [12]:
! echo "from tmp import *" >> KBs.py
In [25]:
code = '''"
from KBs import *
def sample(self,t=None,ini=None,adv = None,T = None):
if t is None:
t = {'r2dntca':2,}.get(self.family.familyname,1)
if T is None:
T = self.hmax
if adv is None:
adv = self.adv
if ini is None:
if t>=2:
ini = np.array([self.rdf().astype(int)]*t)
else:
ini=self.rdf().astype(int)
avc = ini
hist = np.zeros((T+1+t,)+avc.shape[-3:],dtype=np.int)
hist[:t]=avc
for i in range(T+1):
hist[i+t]=avc[-1]
avc=(adv(avc))
return hist
class kb_r2dntca(kb_2dntca):
familyname='r2dntca'
# def __init__(self):
# self.familyname = 'r2dntca'
# self=super(kb_r2dntca,self).__init__()
# return self
#
def bin2adv(self, ruleprj):
if isinstance(ruleprj,str):
ruleprj = list(ruleprj)
ruleprj = np.array(ruleprj,np.int)
def adv(a,horizon=0):
old = a[0]
curr = a[1]
new = ruleprj[self.conv(curr)]^old
return np.array([curr,new])
return adv
"'''
! echo {code}> tmp.py
! cat tmp.py