Permalink
Cannot retrieve contributors at this time
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?
QKDNetJournal/data_gathering.py
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1377 lines (1197 sloc)
81.5 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") | |