Sato Tate system:sage {{{id=0| reset('sqrt,pi') var('x,a,T') assume(T-a>0) show( (2/pi)*integral(sqrt(1-x^2),x,a,T) ) ///
\frac{{2 \cdot \left( \frac{\sin^{-1} \left( T \right) + {T \cdot \left( \sqrt{ 1 - {T}^{2} } \right)}}{2} - \frac{\sin^{-1} \left( a \right) + {a \cdot \left( \sqrt{ 1 - {a}^{2} } \right)}}{2} \right)}}{\pi}
}}} {{{id=1| #auto def dist(v, b, left=-1.0r, right=1.0r): """ We divide the interval between left (default: 0) and right (default: pi) up into b bins. For each number in v (which must left and right), we find which bin it lies in and add this to a counter. This function then returns the bins and the number of elements of v that lie in each one. ALGORITHM: To find the index of the bin that a given number x lies in, we multiply x by b/length and take the floor. """ length = right - left normalize = float(b/length) vals = {} d = dict([(i,0) for i in range(b)]) for x in v: n = int(normalize*(float(x)-left)) d[n] += 1 return d, len(v) def frequency_histogram(d, b, num=5000, left=-1.0r, right=1.0r): s = Graphics() left = float(left); right = float(right) length = right - left w = length/b k = 0 for i, n in d.iteritems(): k += n # ith bin has n objects in it. s += polygon([(w*i+left,0), (w*(i+1)+left,0), \ (w*(i+1)+left, n/(num*w)), (w*i+left, n/(num*w))],\ rgbcolor=(0,0,0.5)) return s def semicircle0(): alpha = 2.0r / float(pi) def f(x): return alpha * math.sqrt(1-x^2) return plot(f, -1,1,rgbcolor=(0.5,0,0)) semicircle = semicircle0() }}} {{{id=2| #auto from math import asin, log, sqrt def line1(xmin,xmax): return line([(xmin,1),(xmax,1)], rgbcolor=(1,0,0)) def Xab(a,b): bb = (asin(b)/2r + b*sqrt(1r-b^2r)/2r) aa = (asin(a)/2r + a*sqrt(1r-a^2r)/2r) def X(T): return (asin(T)/2r + T*sqrt(1r-T^2r)/2r - aa)/(bb - aa) return X import bisect class SatoTate: def __init__(self, E): self._E = E def __repr__(self): return "Sato-Tate data for %s"%self._E def anlist(self, n): return self._E.anlist(n) def normalized_aplist(self, n): anlist = self.anlist(n) two = float(2) v = [float(anlist[p])/(two*sqrt(p)) for p in prime_range(n)] return v def sorted_aplist(self, n): v = self.normalized_aplist(n) v.sort() return v def YCab(self, Cmax, a=-1, b=1): v = self.sorted_aplist(Cmax) denom = bisect.bisect_right(v, float(b)) - bisect.bisect_left(v, float(a)) try: normalize = float(1)/denom except: def Y(T): return 1.0r return Y start_pos = bisect.bisect_left(v, float(a)) def Y(T): # find position that T would go in if it were inserted # in the sorted list v. n = bisect.bisect_right(v, float(T)) - start_pos return n * normalize return Y def xyplot(self, C, a=-1, b=1): """ Return the quantile-quantile plot for given a,b, up to C. """ Y = self.YCab(C,a=a,b=b) X = Xab(a=a,b=b) pX = plot(X, a, b, rgbcolor=(1,0,0)) pY = plot(Y, a, b, rgbcolor=(0,0,1)) return pX + pY def qqplot(self, C, a=-1, b=1): """ Return the quantile-quantile plot for given a,b, up to C. """ Y = self.YCab(C,a=a,b=b) X = Xab(a=a,b=b) pl = parametric_plot((X, Y), a,b) ll = line([(0,0), (1.1,1.1)], rgbcolor=(1,0,0)) return pl+ll def Delta(self, C, a, b, max_points=300, L_norm=2): """ Delta_{a}^{b} function: INPUT: C - cutoff a,b - evaluate over the interval (a,b) max_points - number of points used in numerical integral L_norm --the integer n=2 or n=oo. Compute the L_n norm. For n finite this is the integral of the difference to the power n. For n = +oo, this is the L_oo norm, which is the max of the absolute value of the difference (where the max is evaluated at max_points equidistributed points). """ key = (C,a,b,max_points, L_norm) try: return self._delta[key] except AttributeError: self._delta = {} except KeyError: pass X = Xab(a,b) Y = self.YCab(C,a,b) if L_norm == oo: val = max([abs(X(T)-Y(T)) for T in srange(a,b,float(b-a)/max_points)]) print val err = 0 else: n = int(L_norm) def h(T): return (X(T) - Y(T))^n val, err = integral_numerical(h, a, b, max_points=max_points, algorithm='qag', rule=1,eps_abs=1e-10, eps_rel=1e-10) #self._delta[key] = (val, err) return val, err def theta(self, C, a=-1, b=1, max_points=300, L_norm=2): val, err = self.Delta(C, a, b, max_points=max_points, L_norm=L_norm) return -log(val)/log(C), val, err def theta_interval(self, C, a=-1, b=1, max_points=300, L_norm=2): val, err = self.Delta(C, a, b, max_points=max_points, L_norm=L_norm) return -log(val-abs(err))/log(C), -log(val+abs(err))/log(C) def compute_theta(self, Cmax, plot_points=30, a=-1, b=1, max_points=300, L_norm=2, verbose=False): a,b = (float(a), float(b)) def f(C): z = self.theta(C, a, b, max_points=max_points, L_norm=L_norm) if verbose: print C, z return z[0] return [(x,f(x)) for x in range(100, Cmax, int(Cmax/plot_points))] def compute_theta_interval(self, Cmax, plot_points=30, a=-1, b=1, max_points=300, L_norm=2, verbose=False): a,b = (float(a), float(b)) vmin = []; vmax = [] for C in range(100, Cmax, int(Cmax/plot_points)): zmin,zmax = self.theta_interval(C, a, b, max_points=max_points, L_norm=L_norm) vmin.append((C, zmin)) vmax.append((C, zmax)) if verbose: print C, zmin, zmax return vmin, vmax def plot_theta_interval(self, Cmax, clr=(0,0,0), *args, **kwds): vmin, vmax = self.compute_theta_interval(Cmax, *args, **kwds) v = self.compute_theta(Cmax, *args, **kwds) grey = (0.7,0.7,0.7) return line(vmin,rgbcolor=grey)+line(vmax,rgbcolor=grey) + point(v,rgbcolor=clr) + line(v,rgbcolor=clr) + line1(0, Cmax) def histogram(self, Cmax, num_bins): v = self.normalized_aplist(Cmax) d, total_number_of_points = dist(v, num_bins) return frequency_histogram(d, num_bins, total_number_of_points) + semicircle def x_times_Delta(self, x): return x*self.Delta(x, -1,1, max_points=500)[0] }}} {{{id=3| S0 = SatoTate(EllipticCurve('11a')) S1 = SatoTate(EllipticCurve('37a')) S2 = SatoTate(EllipticCurve('389a')) S3 = SatoTate(EllipticCurve('5077a')) S4 = SatoTate(EllipticCurve([1,-1,0,-79,289])) S5 = SatoTate(EllipticCurve([0, 0, 1, -79, 342])) S6 = SatoTate(EllipticCurve([1, 1, 0, -2582, 48720])) S7 = SatoTate(EllipticCurve([0, 0, 0, -10012, 346900])) S8 = SatoTate(EllipticCurve([0, 0, 1, -23737, 960366])) S28 = SatoTate(EllipticCurve([1,-1,1,-20067762415575526585033208209338542750930230312178956502,34481611795030556467032985690390720374855944359319180361266008296291939448732243429 ])) S = [S0,S1,S2,S3,S4,S5,S6,S7,S8] CM = SatoTate(EllipticCurve('32a')) Equest = SatoTate(EllipticCurve('72a1')) # non-CM but doesn't satisfy hypo of Taylor's theorem # Our curves S satisfy Taylor's theorem [min([e for p,e in X._E.conductor().factor()]) for X in S] /// [1, 1, 1, 1, 1, 1, 1, 1, 1] }}} {{{id=4| v = [S28.histogram(10^n,10*n) for n in range(1,7)] G = graphics_array(v,3,2) G.show(xmin=-1,ymin=0) }}} {{{id=5| v = [S28.qqplot(10^n) for n in range(2,7)] G = graphics_array(v,2,3) G.show(xmin=0,ymin=0) }}} {{{id=6| v = [S28.plot_theta_interval(n,plot_points=15,max_points=50) for n in [10^3,10^4,10^5,10^6,2*10^6,3*10^6]] show(graphics_array(v,2,3),ymin=0) }}} {{{id=7| S28.plot_theta_interval(3*10^6,plot_points=15,max_points=50).show(dpi=200) }}} {{{id=8| S[0].plot_theta_interval(3*10^6,plot_points=15,max_points=50).show(dpi=200) }}} {{{id=9| # 72a1 is the first curve to not satisfy Taylor's theorem for E in cremona_optimal_curves(range(1,100)): if not E.has_cm() and min([e for p,e in E.conductor().factor()]) > 1: print E.cremona_label() break /// 72a1 }}} {{{id=10| v = [S[i].histogram(10^3,20) for i in range(9)] G = graphics_array(v,3,3) G.show(xmin=-1,ymin=0) }}} {{{id=11| v = [S[i].histogram(10^4,30) for i in range(9)] G = graphics_array(v,3,3) G.show(xmin=-1,ymin=0) }}} {{{id=12| v = [S[i].histogram(10^5,50) for i in range(9)] G = graphics_array(v,3,3) G.show(xmin=-1,ymin=0) }}} {{{id=13| v = [S[i].histogram(10^6,50) for i in range(9)] G = graphics_array(v,3,3) G.show(xmin=-1,ymin=0) }}} {{{id=14| v = [S[i].xyplot(10^4) for i in range(9)] G = graphics_array(v,3,3) G.show(figsize=[5,10],xmin=-1,ymin=0) }}} {{{id=15| CM.qqplot(1000000).show() }}} {{{id=16| v = [S[i].qqplot(10^2) for i in range(9)] show(graphics_array(v,3,3),xmin=0,ymin=0) }}} {{{id=17| v = [S[i].qqplot(10^3) for i in range(9)] show(graphics_array(v,3,3),xmin=0,ymin=0) }}} {{{id=18| v = [S[i].qqplot(10^4) for i in range(9)] show(graphics_array(v,3,3),xmin=0,ymin=0) }}} {{{id=19| v = [S[i].qqplot(10^5) for i in range(9)] show(graphics_array(v,3,3),xmin=0,ymin=0) }}} {{{id=20| v = [S[i].plot_theta_interval(10^3,plot_points=40,max_points=100) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=21| v = [S[i].plot_theta_interval(10^4,plot_points=20,max_points=100) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=22| v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=23| v = [S[i].plot_theta_interval(10^6,plot_points=20,max_points=100) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=24| v = [S[i].plot_theta_interval(10^6,plot_points=50,max_points=100) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=25| v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.5, b=0.5) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=26| v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.5, b=0) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=27| v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=0, b=0.5) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=28| v = [S[i].plot_theta_interval(10^5,plot_points=20,max_points=100, a=-0.2, b=0.2) for i in range(9)] show(graphics_array(v,3,3),ymin=0) }}} {{{id=29| P = S11a.plot_theta_interval(20000, plot_points=20, max_points=50,verbose=False) P.show(ymin=0) }}} {{{id=30| E2 = SatoTate(EllipticCurve('37b')) }}} {{{id=31| time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show() /// CPU time: 0.15 s, Wall time: 0.17 s }}} {{{id=38| time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 3.05 s, Wall time: 3.10 s }}} {{{id=39| time E2.plot_theta_interval(10^6,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 45.13 s, Wall time: 46.76 s }}} {{{id=40| time E2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show() /// CPU time: 0.16 s, Wall time: 0.17 s }}} {{{id=41| }}} {{{id=32| Erank2 = SatoTate(EllipticCurve('433a')) Erank2._E.rank() /// 2 }}} {{{id=33| Erank2.plot_theta_interval(10^6,plot_points=10,max_points=50).show() }}} {{{id=34| S[8].plot_theta_interval(10^6,plot_points=10,max_points=50).show() }}} {{{id=35| Y = S[4].YCab(2*10^6,-1,1) }}} {{{id=36| # We next investigate relation between L_oo and L_2 conjecture and rank }}} {{{id=48| time S2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=2).show() /// CPU time: 2.82 s, Wall time: 2.91 s }}} {{{id=49| time S3.plot_theta_interval(2*10^5,plot_points=10,max_points=50, L_norm=2).show() /// CPU time: 4.37 s, Wall time: 4.58 s }}} {{{id=50| time P3 = S3.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) /// CPU time: 10.17 s, Wall time: 10.68 s }}} {{{id=55| time P = S0.plot_theta_interval(2*10^4,plot_points=400,max_points=50, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 22.29 s, Wall time: 27.03 s }}} {{{id=73| S0b = SatoTate(EllipticCurve([1,0,0,-1070,7812])) # rank 0 curve with 16 rational torsion points time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 7.05 s, Wall: 8.08 s }}} {{{id=74| S0b = SatoTate(EllipticCurve([1,0,0,-2276760100,41806588162832])) # rank 0 curve with 16 rational torsion points time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 7.40 s, Wall: 8.84 s }}} {{{id=76| S0b = SatoTate(EllipticCurve([1,1,0,-6382494330,-196446593263212])) # rank 0 curve with big height time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 6.62 s, Wall: 7.56 s }}} {{{id=86| S0b = SatoTate(EllipticCurve([1,1,0,-6382494330,-196446593263212])) # rank 0 curve with big height time P = S0b.plot_theta_interval(2*10^5,plot_points=15,max_points=20, L_norm=2) def conj(x): return 1 - (1/2+1)/log(x) C = plot(conj, 100, 2*10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 9.46 s, Wall: 10.55 s }}} {{{id=81| EllipticCurve([1,1,0,-6382494330,-196446593263212]).Lseries_zeros(10) /// [0.381937496, 1.10669327, 1.78306573, 2.67003217, 3.31400622, 3.69721591, 4.47711843, 5.40906461, 5.74298574, 6.05685775] }}} {{{id=82| EllipticCurve([0,1,0,83,-541]).Lseries_zeros(10) /// [0.425771568, 1.35747206, 1.93087578, 2.86700601, 3.19382656, 3.95669880, 4.46037859, 4.92495501, 5.44063183, 6.22234529] }}} {{{id=83| S0b = SatoTate(EllipticCurve([1,0,0,114606,-22471344])) # rank 0 curve with big height time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2 )/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 5.88 s, Wall: 6.48 s }}} {{{id=85| e = EllipticCurve([0,0,0,-3,-137]) print e.Lseries_zeros(10) S0b = SatoTate(e) # rank 0 curve with big height time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// [0.520023601, 1.46390028, 1.95614909, 2.92061029, 3.50869960, 4.27684884, 4.61381633, 5.27326559, 5.97248683, 6.67728376] Time: CPU 5.85 s, Wall: 8.82 s }}} {{{id=84| def conj(x): return 1 - (1.33 + 1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) }}} {{{id=77| S0b = SatoTate(EllipticCurve([0,0,0,20,-160])) # rank 0 curve with big height time P = S0b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 6.56 s, Wall: 7.25 s }}} {{{id=78| e = EllipticCurve([0,0,0,20,-160]) e.Lseries_zeros(10) /// [0.608539063, 1.37691916, 2.36681367, 2.59157600, 3.46044322, 3.63239235, 4.00439962, 5.31911644, 5.42716982, 6.31741139] }}} {{{id=79| EllipticCurve('11a').Lseries_zeros(10) /// [6.36261389, 8.60353962, 10.0355091, 11.4512586, 13.5686391, 15.9140726, 17.0336103, 17.9414336, 19.1857250, 20.3792605] }}} {{{id=80| }}} {{{id=75| S1b = SatoTate(EllipticCurve([1,0,0,-49423080,130545230400])) # rank 1 curve with 16 rational torsion points time P = S1b.plot_theta_interval(2*10^4,plot_points=100,max_points=30, L_norm=2) def conj(x): return 1 - (1+1/2)/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 7.33 s, Wall: 8.68 s }}} {{{id=87| S1b = SatoTate(EllipticCurve([0,-1,1,-2605193533,16913745257718])) # rank 1 curve with big height time P = S0b.plot_theta_interval(2*10^5,plot_points=10,max_points=10, L_norm=2) def conj(x): return 1 - (1/2+2)/log(x) C = plot(conj, 100, 2*10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 5.67 s, Wall: 6.17 s }}} {{{id=88| EllipticCurve([0,-1,1,-2605193533,16913745257718]).Lseries_zeros(10) /// [0.000000000, 0.918917736, 1.50311262, 2.48062026, 3.28311814, 3.90648923, 4.73267355, 5.07671794, 5.38960462, 6.01241899] }}} {{{id=51| time P = S1.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2) def conj(x): return 1 - 1/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) }}} {{{id=56| time P = S2.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) s = float(2) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 14.17 s, Wall time: 27.09 s }}} {{{id=68| S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion time P = S2b.plot_theta_interval(10^5,plot_points=100,max_points=40, L_norm=2) s = float(2) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 40.51 s, Wall: 48.38 s }}} {{{id=93| S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion time P = S2b.plot_theta_interval(5*10^5,plot_points=5,max_points=10, L_norm=2) s = float(2) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 5*10^5) show(C + P, figsize=[10,7],ymin=0) }}} {{{id=69| S2b = SatoTate(EllipticCurve([0,0,0,-1215,42822])) # a rank 2 curve with large conductor and 3-torsion time P = S2b.plot_theta_interval(4*10^4,plot_points=200,max_points=30, L_norm=2) s = float(2.5) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 4*10^4) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 30.44 s, Wall: 41.40 s }}} {{{id=71| %time S2b = SatoTate(EllipticCurve([0,1,0,-125,-424])) # last rank 2 in Cremona (to 120K) P = S2b.plot_theta_interval(10^4,plot_points=100,max_points=20, L_norm=2) s = float(2.2) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^4) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 5.22 s, Wall time: 6.90 s }}} {{{id=92| }}} {{{id=72| s = float(2.5) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^4) show(C + P, figsize=[10,7],ymin=0) }}} {{{id=52| time P = S3.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 0.41 s, Wall time: 0.48 s }}} {{{id=89| %time S3b = SatoTate(EllipticCurve([0,1,1,-30,60])) # second rank-3 curve time P = S3b.plot_theta_interval(2*10^6,plot_points=2,max_points=10, L_norm=2) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 2*10^6) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 34.64 s, Wall: 57.08 s CPU time: 36.54 s, Wall time: 60.31 s }}} {{{id=91| %time S3b = SatoTate(EllipticCurve([0,1,1,-30,60])) # second rank-3 curve time P = S3b.plot_theta_interval(2*10^6,plot_points=8,max_points=10, L_norm=oo) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 2*10^6) show(C + P, figsize=[10,7],ymin=0) /// 0.34 0.00454126481363 0.00310350333117 0.00401606255675 0.00374246662969 0.00282335819277 0.00277784636981 0.00269948551726 0.34 0.00454126481363 0.00310350333117 0.00401606255675 0.00374246662969 0.00282335819277 0.00277784636981 0.00269948551726 Time: CPU 113.93 s, Wall: 130.53 s CPU time: 114.30 s, Wall time: 130.95 s }}} {{{id=64| S3b = SatoTate(EllipticCurve([1,-1,1,-6,0])) # second rank-3 curve time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 12.00 s, Wall: 13.14 s }}} {{{id=65| S3b = SatoTate(EllipticCurve([0,0,0,-8699,252426])) # cremona rank-3 curve with biggest cond time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 12.08 s, Wall: 14.11 s }}} {{{id=67| S3b = SatoTate(EllipticCurve([1,0,1,-131,558])) # cremona rank-3 curve with 2-torsion time P = S3b.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) s = float(3) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// Time: CPU 13.17 s, Wall: 14.66 s }}} {{{id=66| }}} {{{id=57| %time P = S4.plot_theta_interval(10^4,plot_points=200,max_points=20, L_norm=2) s = float(3.5) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^4) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 2.64 s, Wall time: 2.88 s }}} {{{id=63| %time P = S4.plot_theta_interval(2*10^4,plot_points=500,max_points=20, L_norm=2) s = float(3.5) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 2*10^4) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 26.71 s, Wall time: 31.46 s }}} {{{id=58| time P = S5.plot_theta_interval(10^5,plot_points=80,max_points=40, L_norm=2) s = float(3.5) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7],ymin=0) /// CPU time: 0.33 s, Wall time: 0.34 s }}} {{{id=53| time P6 = S6.plot_theta_interval(10^5,plot_points=60,max_points=40, L_norm=2) def conj(x): return 1 - 4/log(x) C6 = plot(conj, 100, 10^5) show(C6 + P6, figsize=[20,10]) /// CPU time: 1.19 s, Wall time: 1.26 s }}} {{{id=59| time P = S7.plot_theta_interval(10^5,plot_points=40,max_points=40, L_norm=2) s = float(4.25) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7], ymin=0) /// CPU time: 0.34 s, Wall time: 0.40 s }}} {{{id=60| time P = S8.plot_theta_interval(10^5,plot_points=30,max_points=40, L_norm=2) s = float(4.25) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7], ymin=0) /// CPU time: 5.11 s, Wall time: 5.58 s }}} {{{id=61| time P = S28.plot_theta_interval(10^5,plot_points=20,max_points=40, L_norm=2) s = float(6.25) def conj(x): return 1 - s/log(x) C = plot(conj, 100, 10^5) show(C + P, figsize=[10,7], ymin=0) /// CPU time: 0.37 s, Wall time: 0.37 s }}} {{{id=42| time S2.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// 0.467684212266 0.0352938479114 0.0166787427859 0.0176996046889 0.0156258913368 0.0132107756123 0.0170905493296 0.0145727448193 0.0116221377156 0.00953200941205 CPU time: 2.94 s, Wall time: 3.00 s }}} {{{id=43| time S4.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 2.90 s, Wall time: 3.61 s }}} {{{id=44| time S6.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 2.80 s, Wall time: 2.85 s }}} {{{id=45| time S8.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 2.79 s, Wall time: 2.88 s }}} {{{id=46| time S28.plot_theta_interval(10^5,plot_points=10,max_points=50, L_norm=oo).show() /// CPU time: 3.12 s, Wall time: 3.16 s }}} {{{id=47| }}}