Testing latest pari + WASM + node.js... and it works?! Wow.
License: GPL3
ubuntu2004
default(parisize,"20M"); default(realprecision,38); /* Test generic */ F={ [ellwp, ellzeta, ellsigma, ellformalw, ellformalpoint, ellformaldifferential, ellformallog, ellformalexp, E->ellisoncurve(E,[0,0]), E->ellordinate(E,0), E->elldivpol(E,5), E->ellxn(E,3), E->ellmul(E,[0,0],0), E->ellneg(E,[0,0]) ]; } L={ [1,I,'z,Mod('z,'z^2+5), ellinit([0,0,0,'z,0],nfinit('z^2+5)), Mod(4,1009),ffgen([1009,5],'z)]; } L=apply(x->if(type(x)=="t_VEC",x,ellinit([x,0])),L); for(j=1,#F,for(i=1,#L, print(F[j],":",L[i][4],":",F[j](L[i])))); ellap(ellinit([1,0,1,4,-6]), 2) ellap(ellinit([0,17]), 2) ellap(ellinit([0, 0, 1, -1, 0]),2486246173) testgroup(v,p)= { my(E,F,G,g); E=ellinit(v); if(!E || E.disc%p==0, next); G=ellgroup(E,p,1); if (G.no == 1, return); g=G.gen; if (!ellisoncurve(E,g), error(E, G)); F=vector(#g,i, ellorder(E,g[i],G.no)); if ((p <= 3 && F!=G.cyc) || (p > 3 && F[1] != G.cyc[1]), print("error:",v,":",F,":",G)); } { for(x=10,63, my(p,E,G,g); p=nextprime(2^x);E=ellinit([0,0,1,2,3]); G = ellgroup(E,p,1); if (!ellisoncurve(E,G.gen), error(E)); if(ellorder(E,G.gen[1])!=G.cyc[1], error(E)); print(p,":",ellgroup(E,p))); for(p=2,3, forvec(v=vector(5,i,[0,p-1]), testgroup(v,p))); forvec(v=vector(2,i,[0,4]), testgroup(v,5)); } setrand(1) a=ffgen(2^8,'a); E=ellinit([a,1,0,0,1]); P=[a^3,ellordinate(E,a^3)[1]]; Q=ellmul(E,P,113); e=elllog(E,P,Q,242) ellmul(E,Q,e) == P ellpow(E,Q,e) == P p=655637; E=ellinit([123,47], p); X=1;until(Y!=[],X++;Y=ellordinate(E,X)); P=[X,Y[1]]; Q=ellmul(E,P,113); o=ellorder(E,P, p+1-ellap(E,p)) e=elllog(E,P,Q,o) ellmul(E,Q,e) == P p=1073741827; E=ellinit([1,3], p); G=[Mod(1050932506,p),Mod(12325986,p)]; P=ellmul(E,G,1023); elllog(E,P,G) ellorder(ellinit([0,2],1),[-1,-1]*Mod(1,997)) ellinit([a1,a2,a3,a4,a6]*Mod(1,5)); ellinit([a1,a2,a3,a4,a6]); ellinit([0]).j ellinit([1728]).j ellinit([j]).j ellinit([Mod(0,2)]).j ellinit([Mod(0,5)]).j ellinit([Mod(3,5)]).j ellinit(['j*Mod(1,2)]).j ellinit([Mod(0,3)]).j ellinit([3], 3).j ellinit([1728], ffgen(3^5,'a)).j ellinit(['j*Mod(1,3)]).j elltwist([0,a2,0,a4,a6],x^2-D/4)[1..5] lift(elltwist([a1,a2,a3,a4,a6]*Mod(1,2),x^2+x+T)[1..5]) elltwist([a1,a2,a3,a4,a6],1)[1..5] elltwist([a1,a2,a3,a4,a6],-4)[1..5] elltwist([a1,a2,a3,a4,a6],5)[1..5] elltwist([a4,a6],5)[1..5] e = ellinit([4,0]); ellminimaltwist(e) ellminimaltwist(e,1) e = ellinit([-882216989/131072]); e = ellintegralmodel(e,&v) v ellminimaltwist(e) ellminimaltwist(e,1) twisttest(c4,c6, T)= { my(e = ellinit([c4/-48, c6/-864])); vector(#T, i, my (et = ellinit(elltwist(e, T[i]))); my (d = ellminimaltwist(et)); et = ellinit(elltwist(et,d)); [d, ellminimalmodel(et).disc]); } T3 = [1,-3]; twisttest(-4*3,8*3^3, T3) twisttest(0,8*3^3, T3) twisttest(-4*3,0, T3) twisttest(16,-8*19, T3) twisttest(-4*3^4, 8*3^6, T3) twisttest(4*3^6, 16*3^9, T3) T2 = [1,-4,8,-8]; a=2;b=3; twisttest(3*2^a, 9*2^b, T2) a=4;b=5; twisttest(3*2^a, 9*2^b, T2) b=5; twisttest(0, 9*2^b, T2) a=4; twisttest(3*2^a, 0, T2) twisttest(1, -161, T2) d=2; twisttest(-17*2^(2*d), 2^(3*d), T2) ellminimaltwist(ellinit([216,-432]),1) a=ffgen(2^5,'a);ellinit([a]).j a=ffgen(3^5,'a);ellinit([a]).j ellfromeqn(y^3+(3+2*x)*y^2 +(6+5*x+4*x^2)*y+(10+9*x+8*x^2+7*x^3)) ellfromeqn(y^2+(2*x^2+3*x+4)*y+(5*x^4+6*x^3+7*x^2+8*x+9)) ellfromeqn(x^2+(2*y^2+3*y+4)*x+(5*y^4+6*y^3+7*y^2+8*y+9)) ellfromeqn((x^2+2*x+3)*y^2+(4*x^2+5*x+6)*y+(7*x^2+8*x+9)) e = ellinit([1,2,3,5,7]); elldivpol(e,4) elldivpol(e,-1) elldivpol(e,-2) elldivpol(e,-3) ellxn(e,0) ellxn(e,1) ellxn(e,2) ellxn(e,4) ellxn(e,5) P=[-1,1]; Q=ellmul(e,P,20); if (ellisdivisible(e,Q,0,&A), A) if (ellisdivisible(e,[0],0,&A), A) if (ellisdivisible(e,Q,1,&A), A) if (ellisdivisible(e,Q,20,&A), A) if (ellisdivisible(e,Q,-20,&A), A) if (ellisdivisible(e,Q,2,&A), A) if (ellisdivisible(e,Q,5,&A), A) if (ellisdivisible(e,Q, ellxn(e,5), &A), A) if (ellisdivisible(e,Q,11,&A), A) if (ellisdivisible(e,Q,22,&A), A) e = ellinit([0,1]); elldivpol(e,8) \\ #2106 e = ellinit([0,0,1,-1,0]); P = [0,0]; K = nfinit(nfsplitting(elldivpol(e, 3))); eK = ellinit([0,0,1,-1,0], K); ellisdivisible(eK, P, 3) P6 = ellmul(eK, P, 6); if (ellisdivisible(eK, P6, 3, &Q), Q) if (ellisdivisible(eK, P6, 2, &Q), Q) e = ellinit([1.,2,3,4,5]); e.eta E = ellchangecurve(e, [2,3,4,5]); E.eta e = ellinit([1,2,3,4,5]); e.eta; e.roots; E = ellchangecurve(e, [2,3,4,5]); E.omega E.eta E.roots ellglobalred(E) ellglobalred(e) p = 2^64+13; E = ellchangecurve(e, [1/p, 2,3,4]); elllocalred(E,p) E = ellchangecurve(e, [1,0,0,0]); E = ellchangecurve(e, [2,3,4,5]*Mod(1,7)); iferr(E.omega, e, e); E.group ellminimalmodel(ellinit([1/5,1/4,1/3,1/2,1],1),&v) v j=ffgen(2^5,'a);e = ellinit([j]); e.group; elllog(e,e.gen[1],e.gen[1]) E = ellchangecurve(e,[3,7,1,0]); E.group e = ellinit([Mod(1,3)]); e.group; elllog(e,e.gen[1],e.gen[1]) E = ellchangecurve(e,[2,7,1,0]); E.group e = ellinit([Mod(1,5)]); e.group; elllog(e,e.gen[1],e.gen[1]) E = ellchangecurve(e,[2,7,1,0]); E.group e = ellinit([1/3 + O(3^9)]); e.roots e = ellinit([1/3], O(3^5)); e.tate iferr(ellinit(e,O(5)),E,E) iferr(ellinit(e,5),E,E) iferr(ellinit(e,1.0),E,E) e.roots E = ellchangecurve(e,[3,1,1,2]); E.tate ellztopoint(e,3) e = ellinit([11/8], O(2^5)); e.tate e = ellinit([1,0,1,4,-6], O(2^5)); e.tate e = ellinit([0,-1,1,-10,-20]); \\#1185 ellwp(e,x+O(x^12)) \\#1683 ellztopoint(e,3*e.omega[1]/5) ellwp(e, 0.1 + 0.2*I, 1) \\#1683 e = ellinit([1,1,0,-1740,22184]); z=-3.0059315873096303229151114945365166621 + 0.E-36*I/2; ellztopoint(e,z) \\#1800 ellztopoint(ellinit([-1,0]), I) \\#1186 ellmul(ellinit([3,0]), [1,2], -quadgen(-4)) \\#2060 ellzeta([1,I],2/10+I) \\#2061 ellsigma([1,I],1/2+I) logsigma(e,z='x)=if(type(z) != "t_POL" && type(z) != "t_SER", ellsigma(e,z,1)); v = [ellwp,ellzeta,ellsigma,logsigma]; ellperiods([1,0.1 + I/10^50]) e = ellinit([1,1]); w = ellperiods([1,I/2]) w2 = ellperiods([1,I/2], 1) u = [e,w,w2]; { for (i = 1, #v, my(f = v[i]); for (j = 1, #u, my (a = u[j]); print([i,j]); print(f(a)); print(f(a, x+O(x^10))); print(f(a, 1/3)); print(f(a, I/3)); print(f(a, (1+I)/3)); ) ) } ellK(1/3) ellK(x+y); \\ would overflow stack ellE(1/3) ellK(1/3+I) ellE(1/3+I) elleta(e) elleta([1,I]) v = [x->elleisnum(x,2),x->real(elleisnum(x,4,1)),x->real(elleisnum(x,6,1)),x->real(elleisnum(x,10))]; { for (i = 1, #v, my(f = v[i]); print(f); print(f(e)); print(f(w)); print(f(w2)); ) } elleisnum([1,I/2^30],2) elleisnum([1,I/2^30],4) \\ #2167 E=ellinit([0,-1,1,-10,-20]); e=elleisnum(E,4,1) bitprecision(e) \\ #1257 ellrootno(ellinit([0,-1,1,217,-282])) \\ #1296 e=ellinit([0,-1,0,-33,62]); ellztopoint(e,-2.5261979245524788020279452840822073870+0.E-36*I) \\ #1308 ellinit([108/91,11664/8281,-6561/8281,708588/753571,-14348907/68574961]).disc e=ellinit([-4179962088,-104017551778988]); P=[-12142738583336098442192836816176736488756409885083993663515903318775477283438352137135249323/325305271731471715644495647421121780765173058515779520952978859131039949432429351736409, 8334307521730470040507793911525024226184207596596408790562824419588749760136126836698728499174598419862301314492216896610149595/5867277807417841262595745323516111503774365731904549455908426496476272821377832232255239022995172589310668134318512865886323566173]; exponent(ellztopoint(e,ellpointtoz(e,P))[1] - P[1]) e=ellinit([1,3.+I]); x=1/2+I; y=ellordinate(e,x)[1]; ellztopoint(e,ellpointtoz(e,[x,y])) testzellQp(e, P)= { my(a,q,Q); a = ellpointtoz(e,P); Q = ellztopoint(e,a); if (liftall(Q-P),error([e,P])); print(a); q = e.tate[3]; a = a^2; if (type(a) == "t_PADIC", a /= q^(valuation(a,a.p) \ valuation(q,a.p)); /* reduce mod q^Z */ ); a - ellpointtoz(e, elladd(e,P,P)); } e=ellinit([0,-1,1,0,0], O(11^5)); \\ BIB #1840 iferr(ellpointtoz(e,[Mod(3,'x^2+1),1]), E, E) iferr(testzellQp(e, [0,0]), E, E) e=ellinit([1,1,1,-10,-10], O(3^5)); testzellQp(e, [3,-2]) iferr(testzellQp(e, ellmul(e,[0,0],2)), E, E) \\ not on curve ! e=ellinit([2/9], O(3^10)); x=2; y=ellordinate(e,x)[1]; testzellQp(e, [x,y]) e=ellinit([1/4], O(2^10)); x=1/2; y=ellordinate(e,x)[1]; testzellQp(e, [x,y]) e=ellinit([1,-1,1,98,126],O(5^10)); testzellQp(e, [1,14]) e=ellinit([1,1,1,3,-5],O(2^10)); testzellQp(e,[5,10]) e=ellinit([1,-1,1,-48,147], O(2^10)); testzellQp(e,[13,-47]) ellinit([1,1], Mod(1,11)) ellrootno(ellinit([31^4,31^6]), 31) e=ellinit([1,0,0,1,1]); ellordinate(e, I) E=ellchangecurve(e,[1/(2^4*3^4*5^2*7),2,3,4]); forprime(p=2,11, if (ellap(e,p) != ellap(E,p),error(p))); for(k=2,50, if (ellak(e,k) != ellak(E,k),error(k))); if (ellan(e,100) != ellan(E,100),error("ellan")); P=ellchangepoint([0,1],[1,2,3,4]) ellchangepointinv(P,[1,2,3,4]) \\#1416 E=ellinit([155818018413/16,-78179511999813417/32]); ellminimalmodel(E,&v); E2=ellchangecurve(E,v); ellminimalmodel(E2,&w); w \\#1432 E=ellinit([-3,-60,480,0,0]); ellheight(E,[0,0]) iferr(ellheight(E,[0.,0]), e, e) p=10^20+39; q=10^21+117; e = ellinit([p^3*q^4,p^6*q^4]); ellminimalmodel(e,&v); v e = ellinit([p^4*q^4,p^6*q^4]); ellminimalmodel(e,&v); v e=ellminimalmodel(ellinit([1,1])); e=ellchangecurve(e,1) e=ellchangecurve(e,[2,0,0,0]) ellinit(ellinit([0,1]*Mod(1,5),ffgen(5^2))); J=[0,1728,-3375,8000,54000,-32768,287496,-884736,-12288000,16581375,-884736000,-147197952000,-262537412640768000]; { for (i=1,#J, my(e = ellinit([J[i]])); my(v = ellan(e,200)); print("\n", e.j); forprime(p = 127, 200, print1(v[p]," ")); print(); forprime(p = 2^65, 2^65+1000, print1(ellap(e,p)," ")); ); } p=2^32+15; ellcard(ellinit([1,2,3,4,5], p)) E=ellinit([625,15625]); elllocalred(E,5) ellisoncurve(E,[0.,125.]) ellisoncurve(E,[1e-50,125+1e-50]) elladd(E,[0.,125.],[0.,125+1e-38]) iferr(ellmul([0,1,0,2,-15],[2,1],5),E,E) x='x; E=ellinit([x^2,x]) iferr(ellminimalmodel(E), e, e) iferr(ellweilpairing(E,[0],[0],1), e, e) ellinit([1,2],1.) ellinit([ffgen(5),1],5) ellinit([1.,1],precision(1.,60)) \\#1527 E = ellinit([0,0,0,-82,0]); ellrootno(E,2) ellrootno(E) ellrootno(E,2) E=ellinit([0,20,0,-352,512]); ellrootno(E,2) E.disc elltamagawa(E) ellbsd(E) F=ellinit([-1456/243,93184/19683]); /* isomorphic to E */ ellrootno(F,2) F.disc elltamagawa(F) ellbsd(F) E=ellinit([1,0,1,4,-6]); E.disc elltamagawa(E) ellbsd(E) ellbsd(ellinit([-5*36^4,0])) \\#1558 ellap(ellinit([-1137195,489565862]),2038074751) ellap(ellinit([582304190,64196421]),2147438927) e=ellinit([0,-1,1,-2,2]); P=[2,-2]; ellnonsingularmultiple(e, P) e=ellinit([-111,214]); P=[35,-198]; v = [4*3,12,214,12]; e=ellchangecurve(e,v); P=ellchangepoint(P,v); ellnonsingularmultiple(e,P) e=ellinit([0,-1,1,-2,2]); test(f)=print(f(e,,'t)); print(f(e,5)); print(f(e,5,'t)); F=[ellformalw,ellformalpoint,ellformaldifferential,ellformallog,ellformalexp]; for(i=1,#F,print(F[i]);test(F[i])); \\#1637 U=[-245369975623514803521420211420402474815373720177518420696215292670924086780233779586506792145074717/4069861969699146045958032034788970995470603578576,-696053034387689435413673877713244121475782562610666903528251447608130654196417305610237634015759861/4069861969699146045958032034788970995470603578576,-49356694805693369953216822105035107974083562942605713355717183776373331122267882948881129025418396548321363993080002121985116427859996985649385099335/4069861969699146045958032034788970995470603578576,5996724761485351384753083917633373954904218466995628499407992841502416127074022935350022919212488198205525833829916828282709837728834438536000230267/1017465492424786511489508008697242748867650894644,-1943033527672518505867347410801184866534773028979571976479290969993491996577167508758887358085512124817167326269402804641328588524702957475568608101932310746684310251168033629279636817525659690186705/4069861969699146045958032034788970995470603578576]; E=ellinit(U); P=[283188771261789732541662405743402980051199109235,39175522019721182331498476245534716069785193060995]; ellheight(E,P) \\#1648 ellinit([0,0,0,0,1]).a1 E=ellinit([-22032-15552*x,0], nfinit(x^2-2)); P=[-72*x-108,0]; ellpointtoz(E,P) E=ellinit([134199387,91266697],3031140653); P = [911071793,1086747416]; Q = ellmul(E,P,2); elllog(E,Q,P) ellheight(ellinit([1,0,1,4,-6])) E=ellinit([0,1,1,20,-890]); P=ellmul(E,[16,61],45*23); ellsaturation(E,[P],100) E=ellinit([0,0,1,-7,6]); V=[[1879462415967166/931705846156449,-30751668616480047298756/28439256014143448903793],[-4918796969449106250916/1682155121549140256041,-124886419810479084631920999334858/68992052177891195733628251285589],[72257627402076649/69972081056148496,-2774239841245604882535253/18509180294972016896964544]]; ellsaturation(E,V,100) E=ellinit([1,0,0,-302,-2036]); P=ellmul(E,[-10,8],27); ellsaturation(E,[P],100) E=ellinit([1,0,0,-24432,-1471934]); P=ellmul(E,[-36131/400,361313/8000],27); ellsaturation(E,[P],100) \\ ERRORS, keep at end of file ellK(1) ellinit([]) ellinit([1,1],quadgen(5)) ellinit([Mod(1,2),1],O(2)) ellinit([O(2),1],ffgen(2^3)) ellinit([O(2),1],1.) ellinit([ffgen(5),1],3) ellinit([1.,Mod(1,3)]) e=ellinit([0,-1,1,-2,2]); ellformalw(e,0) ellformalw(e,-1) elltwist([0,0])