def analyzeAFCStudies(log: str, results: str, n0: int, n1: int) -> tuple: """Extracts the times out of the log file generated from DylAFC extracts the x0 and x1 vectors and the ranks from the results file from DylComp""" times = list() with open(log) as f: for line in f: line: list = line.strip().split() times.append(float(line[-1])) data, D0, D1 = continuousScale(n0, n1) comp = Comparator(data, rand=True) comp.learn(results) for arr in treeMergeSort(data[:], comp): pass indeciesAFC: list = [arr.index(i) for i in range(256)] x0, x1 = genX0X1(arr, D1, D0) x0: np.ndarray = np.array([indeciesAFC[i] for i in range(128)]) x1: np.ndarray = np.array([indeciesAFC[i] for i in range(128, 256)]) return times, x0, x1, indeciesAFC
def sort(args) -> list: """Performs a sort based on the given args. Args is of the format (dist, auc, n0, n1) and is one tuple/list. Throws an error if the array did not sort correctly. Returns the results.""" dist, auc, n0, n1 = args results = list() data, D0, D1 = continuousScale(n0, n1) comp = Comparator(data, level=0, rand=True) sep = genSep(dist, auc) comp.genRand(n0, n1, sep, dist) for arr, stats in treeMergeSort(data, comp, [(D0, D1), dist, auc], n=2): stats.extend([len(comp), comp.genSeps(), comp.pc[-1]]) comp.resetPC() results.append(stats) if arr != sorted(arr, key=lambda x: comp.getLatentScore(x)[0]): print(arr) print(sorted(arr, key=lambda x: comp.getLatentScore(x)[0])) raise AssertionError("did not sort") return results
anim = FuncAnimation(fig, update, frames=np.arange(0, frames), interval=100) anim.save("rocs.gif", writer=PillowWriter(fps=10)) pbar.close() else: import matplotlib.pyplot as plt from apng import APNG from DylSort import treeMergeSort from DylComp import Comparator from DylData import continuousScale from DylMath import genROC, avROC seed = 15 data, D0, D1 = continuousScale(128, 128) comp = Comparator(data, level=0, rand=True, seed=seed) comp.genRand(len(D0), len(D1), 7.72, 'exponential') np.random.seed(seed) im = APNG() fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2) fig.suptitle("Pass number, MSE true, MSE empirical") x = np.linspace(0, 1, num=200) y = x**(1 / 7.72) ax1.set_aspect('equal', 'box') ax2.set_aspect('equal', 'box') elo = simulation_ELO_targetAUC(True) merge = treeMergeSort(data, comp, statParams=[(D0, D1)], combGroups=False) plt.tight_layout()
arrays: list = [[0, 1, 4, 2, 5, 3, 6], [0, 1, 2, 4, 3, 5, 6], [0, 1, 2, 4, 3, 5, 6], [0, 1, 2, 3, 4, 5, 6]] graphROCs(arrays, D0=[0, 1, 2, 3], D1=[4, 5, 6]) elif test == 5: graphROC([4, 1, 2, 3], [1, 2], [3, 4]) elif test == 6: from DylSort import treeMergeSort from DylComp import Comparator from DylData import continuousScale import matplotlib font: dict = {'size' : 10} matplotlib.rc('font', **font) data, D0, D1 = continuousScale(128, 128) comp: Comparator = Comparator(data, rand=True, level=0, seed=15) for arr in treeMergeSort(data, comp=comp): pass D0.sort(key = comp.getLatentScore) D1.sort(key = comp.getLatentScore) roc: dict = ROC1.rocxy(comp.getLatentScore(D1), comp.getLatentScore(D0)) graphROCs([arr], True, True, D0, D1) elif test == 7: roc1: list = [[0, 0], [0, 1], [1, 1]] roc3 = roc2 = roc1 roc4: list = [[0, 0], [0.5, 0], [0.5, 0.5], [1, 1]] avgROC: tuple = avROC([roc1, roc2, roc3, roc4]) fig = plt.figure(figsize=(4,4)) ax = fig.add_subplot(111) ax.plot(*zip(*roc1), 'm', label='chunk1', ls='-') ax.plot(*zip(*roc2), 'b', label='chunk2', ls='--')
for group in groups: arr.extend(group) else: arr: list = groups yield (arr, runStats(groups, statParams + [n, layer, len(mergerss)], comp)) if statParams else arr if __name__ == "__main__": test: int = int(argv[1]) if len(argv) > 1 else 1 if test == 1: if len(argv) > 5 or len(argv) < 4: print("Usage:") print(f"{__file__} 1 <n0> <n1> <directory to save file into (optional)>") else: import matplotlib.pyplot as plt plt.rcParams["font.size"]: int = 10 data, D0, D1 = continuousScale(int(argv[2]), int(argv[3])) comp: Comparator = Comparator(data, rand=True) for arr in treeMergeSort(data, comp): pass arrays: list = [arr] D0.sort(key=arr.index) D1.sort(key=arr.index) plt = graphROCs(arrays, True, D0=D0, D1=D1) ax = plt.gca() ax.set_title("") plt.title("") plt.gcf().suptitle("") if len(argv) > 4: plt.savefig(argv[4] + "/patches.pdf", bbox_inches = 'tight', pad_inches = 0) else: plt.show() elif test == 3:
indeciesRight.pop(i) if len(groups) == 1: for i in range(indecies[0], indeciesRight[0] + 1): output[OIndex] = groups[0][i] OIndex += 1 yield output left ^= toggle # toggle left if toggle == True yield False if __name__ == '__main__': from DylComp import Comparator for test in range(1, 7): if test == 1: objs: list = [*range(8)] comp: Comparator = Comparator(objs, rand=False) m: MultiMerger = MultiMerger([[0, 4], [1, 5], [2, 6], [3, 7]], comp, toggle=True) while not m.inc(): pass if m.output != [0, 1, 2, 3, 4, 5, 6, 7]: raise AssertionError("wasn't right") comp.clearHistory() m1: MultiMerger = MultiMerger([[0, 4], [1, 5]], comp, toggle=True) while not m1.inc(): pass if m1.output != [0, 1, 4, 5]: raise AssertionError("wasn't right") m2: MultiMerger = MultiMerger([[2, 6], [3, 7]], comp, toggle=True) while not m2.inc():