def getNextRational(element, fareyList, d, k): n = element * fareyList[-1].num + fareyList[-2].num m = element * fareyList[-1].den + fareyList[-2].den return rational(n, m, d, k)
def plotLine(CF,axisoffset=0., d = 0.15,k = 2., cmap = matplotlib.cm.ScalarMappable(cmap=cmaps.viridis), axisLog = False): def getNextRational(element, fareyList, d, k): n = element * fareyList[-1].num + fareyList[-2].num m = element * fareyList[-1].den + fareyList[-2].den return rational(n, m, d, k) CF = [float(c) for c in CF] farey = [rational(1,0,d,k), rational(0,1,d,k)] # initiate if (CF[-1] != 1.0): CF[-1] = float(CF[-1])-1 CF.append(1.) neighbors = [] for i in range(len(CF)): a = getNextRational(int(CF[i]),farey,d,k) farey.append(a) farey = farey[1:] # for i in range(len(farey)-1): # level = 0 # while True: # fareySequence = fareySequences[level] # fareyNum = [x[0] for x in fareySequence] # fareyDen = [x[1] for x in fareySequence] # ind = [] # for f in [farey[i],farey[i+1]]: # indNum = np.where(np.asarray(fareyNum) == f.num)[0] # indDen = np.where(np.asarray(fareyDen) == f.den)[0] # if (len(list(np.intersect1d(indNum, indDen))) == 0): # level += 1 # continue # else: # ind.append(list(np.intersect1d(indNum, indDen))[0]) # if len(ind) == 2: # neighboring = True if abs(ind[0]-ind[1]) == 1 else False # neighbors.append(neighboring) # break plt.plot([d-axisoffset,-d-axisoffset], [farey[0].den]*2, color = cmap.to_rgba(1), linewidth=4) for j in range(len(farey)-1): changed = False if CF[0] > 1: CF[0] -= 1 changed = True maxBound = max(CF[:j]) if j > 0 else 1 if changed: CF[0] += 1 color = cmap.to_rgba(maxBound) # if cmap.norm == None else cmap(maxBound/10) # plot line only if partners are Farey neighbors # if neighbors[j]: plt.plot([i.val-axisoffset for i in farey[j:j+2]], [i.den for i in farey[j:j+2]],color=color,linewidth=1) (diophantineMin, diophantineMax) = farey[j+1].diophantine plt.plot([diophantineMin-axisoffset,diophantineMax-axisoffset], [farey[j+1].den]*2, color = color, linewidth=4) # print(CF, farey, neighbors) # print(Brjuno(farey,1), Brjuno(farey,2), Brjuno(farey,3)) return farey