Skip to content
Permalink
master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
 
 
Cannot retrieve contributors at this time
from Simulator import *
def print_data(data0, data1):
for key in data0:
print("Data for a {}x{} grid".format(key,key))
print("L, T0, T1")
for key2 in data0[key]:
print("{}{}, {}, {}".format(key2, " "* (len(str(max(data0[key]))) - len(str(key2))),
data0[key][key2], data1[key][key2]))
print("")
def write_data(filename, data):
with open(filename, "w+") as f:
f.write("L/N")
for key in data:
f.write("{},".format(key))
f.write("\n")
for key1 in data:
for key2 in data[key1]:
f.write("{},".format(key2))
for val in data[key1][key2]:
break
def print_and_write(string,file):
save = sys.stdout
sys.stdout = file
print(string)
sys.stdout.flush()
sys.stdout = save
print(string)
def print_save_data(data_array, header_array, data_str, var, file):
print_and_write("\"{}\"".format(data_str), file)
header = "{}, ".format(var) + ", ".join(header_array)
print_and_write(header, file)
for v in data_array[0].keys():
line = "{}, ".format(v) + ", ".join([str(d[v]) for d in data_array])
print_and_write(line, file)
return
def gather_data(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = True, balance = False):
if var != "S":
Trusted0 = [0, size*size-1] # A and B
Trusted1 = [0, int((size*size-1)/2), size*size-1] # A and B and center
Trusted2 = [0, size-1, size*(size-1), size*size-1] # A and corners and B
Trusted3 = [0, math.floor(size/3)*(size+1),size*size-1-math.floor(size/3)*(size+1), size*size-1] # Diagonal
Trusted4 = [0, int((size*size-1)/2)-size-1, int((size*size-1)/2), size*size-1] #idk
Trusted5 = [0, (size+1)*2, (size*size-1)-(size+1)*2, size*size-1] #idk
if len(set(Trusted5)) == 3:
Trusted5 = [0, (size+1)*1, (size*size-1)-(size+1)*1, size*size-1] #idk
#Trusted0 = None
# Trusted1 = None
Trusted2 = None
Trusted3 = None
Trusted4 = None
Trusted5 = None
#v = size
if Trusted_Nodes:
if len(Trusted_Nodes) < 5:
Trusted_Nodes+=[None]*5
Trusted0 = Trusted_Nodes[0]
Trusted1 = Trusted_Nodes[1]
Trusted2 = Trusted_Nodes[2]
Trusted3 = Trusted_Nodes[3]
Trusted4 = Trusted_Nodes[4]
Trusted5 = Trusted_Nodes[5]
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
elif var == "Q":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "E":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "S":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, "var", "var", L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in size:
Trusted0 = [0, v*v-1]
Trusted1 = [0, int((v*v-1)/2), v*v-1]
Trusted2 = [0, v-1, v*(v-1), v*v-1]
Trusted3 = [0, math.floor(v/3)*(v+1),v*v-1-math.floor(v/3)*(v+1), v*v-1]
Trusted4 = [0, int((v*v-1)/2)-v-1, int((v*v-1)/2), v*v-1]
Trusted5 = [0, (v+1)*2, (v*v-1)-(v+1)*2, v*v-1]
if len(set(Trusted5)) == 3:
Trusted5 = [0, (v+1)*1, (v*v-1)-(v+1)*1, v*v-1]
# Trusted0 = None
# Trusted1 = None
Trusted2 = None
Trusted3 = None
Trusted4 = None
Trusted5 = None
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N, v, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N, v, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N, v, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N, v, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N, v, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == None:
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, size, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
header_array = ["NoTN", "Central", "Corner", "Diagonal", "Asym", "2Hops"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def embedTNs(size, TNs):
ret = []
for t in TNs:
# print(t, size)
ret.append(t+size+1+2*(math.floor(t/size)+1))
return ret
def gather_data_embed(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, finite = False, Trusted_Nodes = None, CAD = True, balance = False):
if var != "S":
Trusted0 = embedTNs(size,[0, size*size-1]) # A and B
Trusted1 = embedTNs(size,[0, int((size*size-1)/2), size*size-1]) # A and B and center
Trusted2 = embedTNs(size,[0, size-1, size*(size-1), size*size-1]) # A and corners and B
Trusted3 = embedTNs(size,[0, math.floor(size/3)*(size+1),size*size-1-math.floor(size/3)*(size+1), size*size-1]) # Diagonal
Trusted4 = embedTNs(size,[0, int((size*size-1)/2)-size-1, int((size*size-1)/2), size*size-1]) #idk
Trusted5 = embedTNs(size,[0, (size+1)*2, (size*size-1)-(size+1)*2, size*size-1]) #idk
if len(set(Trusted5)) == 3:
Trusted5 = embedTNs(size, [0, (size+1)*1, (size*size-1)-(size+1)*1, size*size-1]) #idk
# Trusted0 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
Trusted4 = None
Trusted5 = None
#v = size
print(Trusted0)
print(Trusted1)
print(Trusted2)
print(Trusted3)
print(Trusted4)
print(Trusted5)
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}",file)
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}, CAD = {}"\
.format(N, size, size, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple",CAD)
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
elif var == "Q":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}, CAD = {}"\
.format(N, size, size, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple",CAD)
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "E":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}, CAD = {}"\
.format(N, size, size, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple",CAD)
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "S":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}, CAD = {}"\
.format(N, "var", "var", L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple",CAD)
print(data_str)
for v in size:
Trusted0 = embedTNs(v,[0, v*v-1])
Trusted1 = embedTNs(v,[0, int((v*v-1)/2), v*v-1])
Trusted2 = embedTNs(v,[0, v-1, v*(v-1), v*v-1])
Trusted3 = embedTNs(v,[0, math.floor(v/3)*(v+1),v*v-1-math.floor(v/3)*(v+1), v*v-1])
Trusted4 = embedTNs(v,[0, int((v*v-1)/2)-v-1, int((v*v-1)/2), v*v-1])
Trusted5 = embedTNs(v,[0, (v+1)*2, (v*v-1)-(v+1)*2, v*v-1])
if len(set(Trusted5)) == 3:
Trusted5 = embedTNs(v, [0,(v+1)*1, (v*v-1)-(v+1)*1, v*v-1])
# Trusted0 = None
# Trusted1 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
Trusted4 = None
Trusted5 = None
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}",file)
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N, v+2, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N, v+2, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N, v+2, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N, v+2, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N, v+2, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == None:
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, size, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
# header_array = ["NoTN5x5", "CenterTN5x5", "NoTN7x7", "CenterTN5x5", "Asym", "2Hops"]
header_array = ["NoTN", "Central", "Corner", "Diagonal", "Asym", "2Hops"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def gather_all_data(data_file, log_file, simple):
N = 10 #10,000 takes 530 seconds for all data
#~1 minute per thousand iterations
size = 5
L = 1 #15
Q = .85
E = .02
glob = False
dumb = True
fixed_len = False
simple = False
Pz = 1/2
Px = 1 - Pz
size_range = [5,7,9,11,13,15]
#size_range = [2,3,4,5,6,7,8,9,10]
L_range = [1,3,5,10,15]
Q_range = [1,.95, .85, .75, .65][::-1]
E_range = [.035, .05, .065]
#E_range = [0, .02, .035, .05, .065][::-1]
filename = data_file
with open(filename, "w+") as f:
pass
T0e, T1e = gather_data(glob, dumb, simple,fixed_len, N, size, L, Q, E_range, Pz, Px, "E", f)
# T0p, T1p = gather_data(glob, dumb, simple,fixed_len, N, size, L_range, Q, E, Pz, Px, "P", f)
# T0q, T1q = gather_data(glob, dumb, simple,fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", f)
# T0e, T1e = gather_data(glob, dumb, simple,fixed_len, N, size_range, L, Q, E, Pz, Px, "S", f)
# T0e, T1e = gather_data(False, True, simple,fixed_len, N, size_range, L, Q, E, Pz, Px, "S", f)
# T0e, T1e = gather_data(False, False, simple,fixed_len, N, size_range, L, Q, E, Pz, Px, "S", f)
# T0e, T1e = gather_data(True, dumb, simple,fixed_len, N, size_range, L, Q, E, Pz, Px, "S", f)
def gather_balance_data(size, P,Q,E):
t0 = {}
t1 = {}
Trusted0 = [0, ((size*size)-1)/2 - (size+1) , size*size-1]
Trusted1 = [size+3, ((size+2)*(size+2)-1)/2-(size+3), (size+2)*(size+2)-1-(size+3)]
print(Trusted0)
print(Trusted1)
data_str = "Balance var Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}".format(N, size, size, L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
for v in B:
print(" Balance = {}".format(v))
print(data_str)
balance = v
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, Simple)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q ,E, Pz, Px, glob, dumb, Simple)
def gather_data_ring(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, shape ="braid", het_dist = True):
if var != "S":
Trusted0 = [0, math.floor(size/2)]
Trusted1 = [0, math.floor(3*size/4), math.floor(size/2)]
Trusted2 = [0, math.floor(size/4), math.floor(3*size/4),math.floor(size/2)]
#Trusted0 = None
# Trusted1 = None
# Trusted2 = None
Trusted3 = None
Trusted4 = None
Trusted5 = None
#v = size
if Trusted_Nodes:
if len(Trusted_Nodes) < 5:
Trusted_Nodes+=[None]*5
Trusted0 = Trusted_Nodes[0]
Trusted1 = Trusted_Nodes[1]
Trusted2 = Trusted_Nodes[2]
Trusted3 = Trusted_Nodes[3]
Trusted4 = Trusted_Nodes[4]
Trusted5 = Trusted_Nodes[5]
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
elif var == "Q":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == "E":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == "S":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, "var", "dim",shape, L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in size:
Trusted0 = [0, math.floor(v/2)]
Trusted1 = [0, math.floor(3*v/4), math.floor(v/2)]
Trusted2 = [0, math.floor(v/4), math.floor(3*v/4),math.floor(v/2)]
# Trusted0 = None
# Trusted1 = None
# Trusted2 = None
Trusted3 = None
Trusted4 = None
Trusted5 = None
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N, v, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N, v, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N, v, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N, v, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N, v, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == None:
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, "dim",shape, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
header_array = ["NoTN", "1 tn", "2 tn", "Diagonal", "Asym", "2Hops"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def gather_data_wheel(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, shape ="wheel", het_dist = True):
if var != "S":
Trusted0 = [0, math.floor(size/2)]
Trusted1 = [0, math.floor(3*size/4), math.floor(size/2)]
Trusted2 = [0, math.floor(size/4), math.floor(3*size/4),math.floor(size/2)]
Trusted3 = [0, size, math.floor(size/2)]
Trusted4 = [0, size, math.floor(3*size/4), math.floor(size/2)]
Trusted5 = [0, size, math.floor(size/4), math.floor(3*size/4),math.floor(size/2)]
#Trusted0 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
# Trusted4 = None
# Trusted5 = None
#v = size
if Trusted_Nodes:
if len(Trusted_Nodes) < 5:
Trusted_Nodes+=[None]*5
Trusted0 = Trusted_Nodes[0]
Trusted1 = Trusted_Nodes[1]
Trusted2 = Trusted_Nodes[2]
Trusted3 = Trusted_Nodes[3]
Trusted4 = Trusted_Nodes[4]
Trusted5 = Trusted_Nodes[5]
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, topog=shape, l = v, alpha = alpha, het_dist = het_dist)
elif var == "Q":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == "E":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, "dim",shape, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == "S":
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, "var", "dim",shape, L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in size:
Trusted0 = [0, math.floor(v/2)]
Trusted1 = [0, math.floor(3*v/4), math.floor(v/2)]
Trusted2 = [0, math.floor(v/4), math.floor(3*v/4),math.floor(v/2)]
Trusted3 = [0, v, math.floor(v/2)]
Trusted4 = [0, v, math.floor(3*v/4), math.floor(v/2)]
Trusted5 = [0, v, math.floor(v/4), math.floor(3*v/4),math.floor(v/2)]
# Trusted0 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
# Trusted4 = None
# Trusted5 = None
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N, v, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N, v, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N, v, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N, v, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N, v, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
elif var == None:
data_str = "Data for {} iterations, {} {} {}, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, "dim",shape, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, topog=shape, l = L, alpha = alpha, het_dist = het_dist)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
header_array = ["NoTN", "1 tn", "2 tn", "Diagonal", "Asym", "2Hops"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def gather_data_balance_embed(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, finite = False, Trusted_Nodes = None, CAD = True, balance = False):
if var != "S":
Trusted0 = embedTNs(size,[0, size*size-1]) # A and B
Trusted1 = embedTNs(size,[0, int((size*size-1)/2), size*size-1]) # A and B and center
Trusted2 = embedTNs(size,[0, int((size*size-1)/2)-1, size*size-1]) # off by 1
Trusted3 = embedTNs(size,[0, int((size*size-1)/2)-size-1, size*size-1]) # off by 1
Trusted4 = embedTNs(size,[0, math.floor(size/3)*(size+1),size*size-1-math.floor(size/3)*(size+1), size*size-1]) # Diagonal
Trusted5 = embedTNs(size,[0, math.floor(size/3)*(size+1) - size-1 ,size*size-1-math.floor(size/3)*(size+1)-1, size*size-1]) # Diagonal but one 1 spot closer and 1 off diag
# Trusted6 = embedTNs(size,[0, size, math.floor(size/3)*(size+1) - size-1 , size*size - (size/2) size*size-1]) # one long diagonal, one in corner, one on edge
# Trusted0 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
# Trusted4 = None
# Trusted5 = None
#v = size
print(Trusted0)
print(Trusted1)
print(Trusted2)
print(Trusted3)
print(Trusted4)
print(Trusted5)
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}", file)
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
elif var == "Q":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "E":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "S":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, "var", "var", L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in size:
Trusted0 = embedTNs(v,[0, v*v-1]) # A and B
Trusted1 = embedTNs(v,[0, int((v*v-1)/2), v*v-1]) # A and B and center
Trusted2 = embedTNs(v,[0, int((v*v-1)/2)-1, v*v-1]) # off by 1
Trusted3 = embedTNs(v,[0, int((v*v-1)/2)-v-1, v*v-1]) # off by v
Trusted4 = embedTNs(v,[0, math.floor(v/3)*(v+1),v*v-1-math.floor(v/3)*(v+1), v*v-1]) # Diagonal
Trusted5 = embedTNs(v,[0, math.floor(v/3)*(v+1) - v-1 ,v*v-1-math.floor(v/3)*(v+1)-1, v*v-1]) # Diagonal but one 1 spot closer and 1 off diag
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}",file)
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N, v+2, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N, v+2, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N, v+2, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N, v+2, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N, v+2, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == None:
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, size, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size+2, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size+2, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size+2, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size+2, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size+2, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
# header_array = ["NoTN5x5", "CenterTN5x5", "NoTN7x7", "CenterTN5x5", "Asym", "2Hops"]
header_array = ["NoTN", "Central", "OffByOne", "NearertoA", "Diagonal", "DiagonalOffBy1"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def gather_data_balance(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, finite = False, Trusted_Nodes = None):
if var != "S":
Trusted0 = [0, size*size-1] # A and B
Trusted1 = [0, int((size*size-1)/2), size*size-1] # A and B and center
Trusted2 = [0, int((size*size-1)/2)-1, size*size-1] # off by 1
Trusted3 = [0, int((size*size-1)/2)-size-1, size*size-1] # off by 1
Trusted4 = [0, math.floor(size/3)*(size+1),size*size-1-math.floor(size/3)*(size+1), size*size-1] # Diagonal
Trusted5 = [0, math.floor(size/3)*(size+1) - size-1 ,size*size-1-math.floor(size/3)*(size+1)-1, size*size-1] # Diagonal but one 1 spot closer and 1 off diag
# Trusted0 = None
# Trusted1 = None
# Trusted2 = None
# Trusted3 = None
# Trusted4 = None
# Trusted5 = None
#v = size
print(Trusted0)
print(Trusted1)
print(Trusted2)
print(Trusted3)
print(Trusted4)
print(Trusted5)
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}", file)
alpha = .15
if var != "P" and var != "S":
P = 10**-(alpha*(L/size)/10) if fixed_len else 10**-(alpha*L/10)
#Trusted1 = [0, size*size-size, size*size-1]
t0 = {}
t1 = {}
t2 = {}
t3 = {}
t4 = {}
t5 = {}
if var == "P":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, "var", Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in L:
P = 10**-(alpha*(v/size)/10) if fixed_len else 10**-(alpha*v/10)
print("L={} P = {}".format(v, P))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD)
elif var == "Q":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), "var", E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in Q:
print(" Q = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, v ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, v, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "E":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, size, size, round(L,3), Q, "var", Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in E:
print(" E = {}".format(v))
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, v, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == "S":
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}, TN Type = {}"\
.format(N, "var", "var", L, Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
for v in size:
Trusted0 = [0, v*v-1] # A and B
Trusted1 = [0, int((v*v-1)/2), v*v-1] # A and B and center
Trusted2 = [0, int((v*v-1)/2)-1, v*v-1] # off by 1
Trusted3 = [0, int((v*v-1)/2)-v-1, v*v-1] # off by v
Trusted4 = [0, math.floor(v/3)*(v+1),v*v-1-math.floor(v/3)*(v+1), v*v-1] # Diagonal
Trusted5 = [0, math.floor(v/3)*(v+1) - v-1 ,v*v-1-math.floor(v/3)*(v+1)-1, v*v-1] # Diagonal but one 1 spot closer and 1 off diag
print_and_write(f"Trusted Nodes {[Trusted0,Trusted1,Trusted2,Trusted3,Trusted4, Trusted5]}",file)
P = 10**-(alpha*(L/v)/10) if fixed_len else 10**-(alpha*L/10)
print(" Size = {}".format(v))
print(" ",end=""); t0[v] = main(N, v, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N, v, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N, v, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N, v, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N, v, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N, v, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
elif var == None:
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, size, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
v = "N/A"
print(" ",end=""); t0[v] = main(N,size, Trusted0, P, Q ,E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t1[v] = main(N,size, Trusted1, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t2[v] = main(N,size, Trusted2, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t3[v] = main(N,size, Trusted3, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t4[v] = main(N,size, Trusted4, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
print(" ",end=""); t5[v] = main(N,size, Trusted5, P, Q, E, Pz, Px, glob, dumb, simple, balance_flag = balance, CAD_flag = CAD)
else:
print("{} data is not supported, can only vary P, Q, E, or S")
err0 = {v: t0[v][1]/max(t0[v][0],1) if t0[v][0] > 0 else "N/A" for v in t0}
err1 = {v: t1[v][1]/max(t1[v][0],1) if t1[v][0] > 0 else "N/A" for v in t1}
err2 = {v: t2[v][1]/max(t2[v][0],1) if t2[v][0] > 0 else "N/A" for v in t2}
err3 = {v: t3[v][1]/max(t3[v][0],1) if t3[v][0] > 0 else "N/A" for v in t3}
err4 = {v: t4[v][1]/max(t4[v][0],1) if t4[v][0] > 0 else "N/A" for v in t4}
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate0 = {v: max(0,1-2*binary_entropy(err0[v])) if err0[v] != "N/A" else 0 for v in err0}
key_rate1 = {v: max(0,1-2*binary_entropy(err1[v])) if err1[v] != "N/A" else 0 for v in err1}
key_rate2 = {v: max(0,1-2*binary_entropy(err2[v])) if err2[v] != "N/A" else 0 for v in err2}
key_rate3 = {v: max(0,1-2*binary_entropy(err3[v])) if err3[v] != "N/A" else 0 for v in err3}
key_rate4 = {v: max(0,1-2*binary_entropy(err4[v])) if err4[v] != "N/A" else 0 for v in err4}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
eff_rate0 = {v: key_rate0[v]*t0[v][0]/(4*N) for v in key_rate0}
eff_rate1 = {v: key_rate1[v]*t1[v][0]/(4*N) for v in key_rate1}
eff_rate2 = {v: key_rate2[v]*t2[v][0]/(4*N) for v in key_rate2}
eff_rate3 = {v: key_rate3[v]*t3[v][0]/(4*N) for v in key_rate3}
eff_rate4 = {v: key_rate4[v]*t4[v][0]/(4*N) for v in key_rate4}
eff_rate5 = {v: key_rate5[v]*t5[v][0]/(4*N) for v in key_rate5}
keybits_rate0 = {v: t0[v][0]/N for v in key_rate0}
keybits_rate1 = {v: t1[v][0]/N for v in key_rate1}
keybits_rate2 = {v: t2[v][0]/N for v in key_rate2}
keybits_rate3 = {v: t3[v][0]/N for v in key_rate3}
keybits_rate4 = {v: t4[v][0]/N for v in key_rate4}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
# header_array = ["keybits_rate0", "keybits_rate1", "keybits_rate2", "keybits_rate3","effective_keyrate0", "effective_keyrate1", "effective_keyrate2", "effective_keyrate3", "keyrate0", "keyrate1", "keyrate2", "keyrate3", "errrate0", "errate1","errrate2", "errate3", "keybits0, errors0", "keybits1, errors1", "keybits2, errors2", "keybits3, errors3"]
# data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3,eff_rate0, eff_rate1, eff_rate2, eff_rate3, key_rate0, key_rate1,key_rate2, key_rate3, err0, err1,err2, err3, {p: t0[p][0] for p in t0},{p: t0[p][1] for p in t0}, {p: t1[p][0] for p in t1}, {p: t2[p][1] for p in t2}, {p: t3[p][0] for p in t3}]
# header_array = ["NoTN5x5", "CenterTN5x5", "NoTN7x7", "CenterTN5x5", "Asym", "2Hops"]
header_array = ["NoTN", "Central", "OffByOne", "NearertoA", "Diagonal", "DiagonalOffBy1"]
data_array = [keybits_rate0, keybits_rate1, keybits_rate2, keybits_rate3, keybits_rate4, keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return eff_rate0, eff_rate1
def gather_ring_data_script():
print("in main")
global balance
global CAD
N = int(1e6)
b = 1.2
size = 16
L = 1
Q = .85
E = .02
balance = None
CAD = False
glob = False
dumb = False
fixed_len = False
simple = False
Pz = 1/2
Px = 1 - Pz
P = 10**-(.15*(L/10) )
size_range = [4, 8, 12, 16, 32, 64]
L_range = [1,3,5,10,15]
Q_range = [1,.95, .85, .75, .65][::-1]
E_range = [0, .02, .035, .05, .065, .075, .085, .095, .11][::-1]
# Central = [8,24,40]
# Unbalanced = [8,16,40]
Central = [10, 40, 70]
Unbalanced = [10, 30, 70]
if sys.argv[2] == "CAD":
CAD = True
else:
CAD = False
filename = "{}NoBalance{}{}.csv".format(sys.argv[3], sys.argv[1],"het_dist" if sys.argv[4] else "")
file = open(filename, "w+")
print(sys.argv)
Trusted_Nodes = [Central, Unbalanced]
if sys.argv[1] == "L":
print("Doing L")
balance = None
file.write("Balance = {} Global CAD = {} \n".format(balance, CAD))
gather_data_ring(True, False, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {} \n".format(balance, CAD))
gather_data_ring(False, False, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {} \n".format(balance, CAD))
gather_data_ring(False, True, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {} \n".format(balance, CAD))
# gather_data_ring(True, False, simple, fixed_len, N, size+2, L_range, Q, E, Pz, Px, "P", file, False)
# file.write("Balance = {} Smart CAD = {} \n".format(balance, CAD))
# gather_data_ring(False, False, simple, fixed_len, N, size+2, L_range, Q, E, Pz, Px, "P", file, False)
if sys.argv[1] == "Q":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_ring(True, False, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_ring(False, False, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_ring(False, True, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
# gather_data_ring(True, False, simple, fixed_len, N, size+2, L, Q_range, E, Pz, Px, "Q", file, False)
# file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
# gather_data_ring(False, False, simple, fixed_len, N, size+2, L, Q_range, E, Pz, Px, "Q", file, False)
if sys.argv[1] == "E":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_ring(True, False, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_ring(False, False, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_ring(False, True, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
# gather_data_ring(True, False, simple, fixed_len, N, size+2, L, Q, E_range, Pz, Px, "E", file, False)
# file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
# gather_data_ring(False, False, simple, fixed_len, N, size+2, L, Q, E_range, Pz, Px, "E", file, False)
if sys.argv[1] == "S":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_ring(True, False, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_ring(False, False, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_ring(False, True, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.close()
def gather_wheel_data_script():
global CAD
global balance
balance = None
CAD = False
print("in main")
N = int(1e6)
b = 1.2
size = 16
L = 1
Q = .85
E = .02
glob = False
dumb = False
fixed_len = False
simple = False
Pz = 1/2
Px = 1 - Pz
P = 10**-(.15*(L/10) )
size_range = [4, 8, 12, 16, 32, 64]
L_range = [1,3,5,10,15]
Q_range = [1,.95, .85, .75, .65][::-1]
E_range = [0, .02, .035, .05, .065, .075, .085, .095, .11][::-1]
# Central = [8,24,40]
# Unbalanced = [8,16,40]
Central = [10, 40, 70]
Unbalanced = [10, 30, 70]
# if sys.argv[2] == "CAD":
# CAD = True
# else:
# CAD = False
filename = "{}NoBalance{}{}.csv".format(sys.argv[3], sys.argv[1],"het_dist" if sys.argv[4] else "")
file = open(filename, "w+")
print(sys.argv)
Trusted_Nodes = [Central, Unbalanced]
if sys.argv[1] == "L":
print("Doing L")
balance = None
file.write("Balance = {} Global CAD = {} \n".format(balance, CAD))
gather_data_wheel(True, False, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {} \n".format(balance, CAD))
gather_data_wheel(False, False, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {} \n".format(balance, CAD))
gather_data_wheel(False, True, simple, fixed_len, N, size, L_range, Q, E, Pz, Px, "P", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {} \n".format(balance, CAD))
# gather_data_wheel(True, False, simple, fixed_len, N, size+2, L_range, Q, E, Pz, Px, "P", file, False)
# file.write("Balance = {} Smart CAD = {} \n".format(balance, CAD))
# gather_data_wheel(False, False, simple, fixed_len, N, size+2, L_range, Q, E, Pz, Px, "P", file, False)
if sys.argv[1] == "Q":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_wheel(True, False, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, False, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, True, simple, fixed_len, N, size, L, Q_range, E, Pz, Px, "Q", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
# gather_data_wheel(True, False, simple, fixed_len, N, size+2, L, Q_range, E, Pz, Px, "Q", file, False)
# file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
# gather_data_wheel(False, False, simple, fixed_len, N, size+2, L, Q_range, E, Pz, Px, "Q", file, False)
if sys.argv[1] == "E":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_wheel(True, False, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, False, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, True, simple, fixed_len, N, size, L, Q, E_range, Pz, Px, "E", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
# balance = b
# file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
# gather_data_wheel(True, False, simple, fixed_len, N, size+2, L, Q, E_range, Pz, Px, "E", file, False)
# file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
# gather_data_wheel(False, False, simple, fixed_len, N, size+2, L, Q, E_range, Pz, Px, "E", file, False)
if sys.argv[1] == "S":
balance = None
file.write("Balance = {} Global CAD = {}\n".format(balance, CAD))
gather_data_wheel(True, False, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} Smart CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, False, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.write("Balance = {} NIA CAD = {}\n".format(balance, CAD))
gather_data_wheel(False, True, simple, fixed_len, N, size_range, L, Q, E, Pz, Px, "S", file, False, shape=sys.argv[3], het_dist = sys.argv[4])
file.close()
def gather_CAD_data_script():
global CAD
global balance
N = int(1e5)
b = 1.2
size = 7
L = 1
Q = .95
E = .03
balance = None
CAD = False
glob = False
dumb = False
fixed_len = False
simple = False
Pz = 1/2
Px = 1 - Pz
P = 10**-(.15*(L/10) )
size_range = [3, 5, 7, 13, 15]
L_range = [1,3,5,10,15]
Q_range = [1,.95, .85, .75, .65][::-1]
E_range = [0, .02, .035, .05, .065, .075][::-1]
var = sys.argv[1]
with open("{}_{}_pooling.csv".format(sys.argv[2], var), "w") as file:
if var == "E":
CAD = sys.argv[2] == "CAD"
gather_data_embed(True, False, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, False, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, True, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
if var == "L":
CAD = sys.argv[2] == "CAD"
gather_data_embed(True, False, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, False, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, True, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
if var == "S":
CAD = sys.argv[2] == "CAD"
gather_data_embed(True, False, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, False, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, True, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
if var == "Q":
CAD = sys.argv[2] == "CAD"
gather_data_embed(True, False, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, False, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
gather_data_embed(False, True, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, CAD = CAD)
def gather_balance_data_script():
global balance
global CAD
N = int(1e5)
b = 1.2
size = 7
L = 1
Q = .85
E = .02
balance = None
CAD = True
glob = False
dumb = False
fixed_len = False
simple = False
Pz = 1/2
Px = 1 - Pz
P = 10**-(.15*(L/10) )
size_range = [3, 5, 7, 13, 15]
L_range = [1,3,5,10,15]
Q_range = [1,.95, .85, .75, .65][::-1]
E_range = [0, .02, .035, .05, .065, .075][::-1]
var = sys.argv[1]
with open("{}_{}.csv".format(sys.argv[2], var), "w") as file:
if var == "E":
balance = sys.argv[2] == "balance"
gather_data_balance_embed(True, False, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, False, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, True, False, False, N, size, L, Q, E_range, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
if var == "L":
balance = sys.argv[2] == "balance"
gather_data_balance_embed(True, False, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, False, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, True, False, False, N, size, L_range, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
if var == "S":
balance = sys.argv[2] == "balance"
gather_data_balance_embed(True, False, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, False, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, True, False, False, N, size_range, L, Q, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
if var == "Q":
balance = sys.argv[2] == "balance"
gather_data_balance_embed(True, False, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, False, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
gather_data_balance_embed(False, True, False, False, N, size, L, Q_range, E, Pz, Px, var, file, asym = False, Trusted_Nodes = False, balance = balance)
def gather_data_balance_embed_delta(glob, dumb, simple, fixed_len, N, size, L, Q, E, Pz, Px, var, file, asym = False, finite = False, Trusted_Nodes = None, CAD = True, balance = False):
Trusted5 = embedTNs(size,[0, math.floor(size/3)*(size+1) - size-1 ,size*size-1-math.floor(size/3)*(size+1)-1, size*size-1]) # Diagonal but one 1 spot closer and 1 off diag
# Trusted6 = embedTNs(size,[0, size, math.floor(size/3)*(size+1) - size-1 , size*size - (size/2) size*size-1]) # one long diagonal, one in corner, one on edge
deltas = [.005, .01, .025, .05, .075, .1, .15, .2, .3, .4, .5] if balance else [0]
t5 = {}
for v in deltas:
P = 10**(-.15*L/10)
print(" ",end=""); t5[v] = main(N,size+2, Trusted5, P, Q, E, Pz, Px, glob, dumb,simple, balance_flag = balance, CAD_flag = CAD, delta_val = v)
data_str = "Data for {} iterations, {}x{} Grid, L = {}, Q = {}, E = {}, Pz = {}, Global Info = {}"\
.format(N, size, size, round(L,3), Q, E, Pz, glob if glob else "{}, Smart = {}".format(glob, not dumb), "regular" if not simple else "simple")
print(data_str)
header_array = ["DiagonalOffBy1"]
err5 = {v: t5[v][1]/max(t5[v][0],1) if t5[v][0] > 0 else "N/A" for v in t5}
key_rate5 = {v: max(0,1-2*binary_entropy(err5[v])) if err5[v] != "N/A" else 0 for v in err5}
keybits_rate5 = {v: t5[v][0]/N for v in key_rate5}
data_array = [keybits_rate5]
print_save_data(data_array, header_array, data_str, var, file)
return None
if __name__ == '__main__':
# if len(sys.argv) < 2:
# sys.argv = ["self", "Q", "balance"]
if True:
balance = True
with open(f"{'no' if not balance else ''}balance_delta.csv", "w") as f:
gather_data_balance_embed_delta(glob = True, dumb = False, simple = False, fixed_len = False, N = 1e5, size = 7, L= 1, Q = .85, E = .02, Pz=.5, Px=.5, var = None, file = f, asym = False, finite = False, Trusted_Nodes = None, CAD = True, balance = balance)
# if "CAD" in sys.argv[2]:
# gather_CAD_data_script()
# elif "balance" in sys.argv[2]:
# gather_balance_data_script()
# else:
# print("Failed to run test")