\\package:elldata
K=nfinit(t^3-2);
e=ellinit([t+1,t^2 - (t^3+(t+1)*t)], K);
P=[t,t];
ellisoncurve(e, P)
elladd(e, P,P)
ellmul(e, P,3)
ellordinate(e, t)
ellordinate(e, t+1)
elldivpol(e, 3)
ellfromj(Mod(t,t^3-2))
ellinit(e, idealprimedec(K,2)[1])
ellinit(e, idealprimedec(K,5)[1])

{
  K = nfinit(t);
  forell(E, 1, 1000,
    my(e,N,f,v);
    v = [1/60,7131/3600,11/12,5/12];
    e = ellchangecurve(ellinit(E[2],1), v);
    eK= ellchangecurve(ellinit(E[2],K), v);
    N = ellconvertname(E[1])[1];
    f = factor(N)[,1];
    for(i=1, #f,
      my(p = f[i], P,A,B);
      P=idealprimedec(K,p)[1];
      A=elllocalred(e,P.p); A[3]=0;
      B=elllocalred(eK,P); B[3]=0;
      if(A!=B, error(E[2]));
      if(ellap(e,p) != ellap(eK,P),error(E[2]))
    )
  )
}

K=nfinit(a^2+1);
P17 = idealprimedec(K,17)[1];
P13 = idealprimedec(K,13)[1];
P5 = idealprimedec(K,5)[1];
E=ellinit([1+a,0,1,0,0],K);
E2 = ellchangecurve(E, [17,0,0,0]);
[ellap(E2, P5), ellap(E2, P13), ellap(E2, P17)]
[ellcard(E2, P5), ellcard(E2, P13), ellcard(E2, P17)]
E3 = ellchangecurve(E, [1/17,a,a+1,0]);
ellap(E3, P17)
ellan(E2,20)
ellan(E3,20)
ellglobalred(E)
ellglobalred(E2)
ellglobalred(E3)

K=bnfinit(a^2 - 2*3*5*29);
e = ellinit([a,1], K);
E = ellchangecurve(e, Mod([2^3 * 3 * a, a+123, 17*a+2, 16*a+3], K.pol));
ellintegralmodel(E)[1..5]
ellintegralmodel(E, &v)[1..5]
v
ellminimalmodel(E, &v)[1..5]
v

ellminimalmodel(ellinit([a^4,(a+2)^6], K))

p=2*10^10+89; q=10^10+19;
P=nfbasistoalg(K, bnfisprincipal(K, idealprimedec(K,p)[1])[2]);
Q=nfbasistoalg(K, bnfisprincipal(K, idealprimedec(K,q)[1])[2]);
e = ellinit([P^3*Q^4,P^6*Q^4], K);
ellminimalmodel(e,&v); v
ellglobalred(e)
e = ellinit([P^4*Q^4,P^6*Q^4], K);
ellglobalred(e)

K=bnfinit(a^2-65);
u=Mod(8+a,K.pol);
e = ellinit([1,40*u+1,0,25*u^2,0], K); ellminimalmodel(e)
e = ellinit([1,10*u+1,0,25*u^2,0], K); ellminimalmodel(e)
ellglobalred(e)

E=ellinit([-3850829794560*a-15877538149168,-835276760491221504 0*a-34439343881478343808],bnfinit(a^2-17));
ellminimalmodel(E,&v)[1..5]
v
