/* format: [p,isogclass,{isoclass}],pprec,D,Jids,{multiplier can be omitted, given as a single constant, or as a list [...] to be used on each Jid},{torinfo in form [a1,b1,a2,b2,...] representiung (zeta_a1)^b1 * (zeta_a2)^b2 * ...} */ hpxhgetpoint1(curveinfo,pprec,D,Jids,multiplier,torinfo) = { local(curveid,Jfile,p,Oprec,Ep,k,torval,dataval,J,datapt); if(length(curveinfo) == 2, curveid = Str(curveinfo[1] curveinfo[2]); , curveid = Str(curveinfo[1] curveinfo[2] curveinfo[3]); ); p = curveinfo[1]; Oprec = O(p^pprec); Jfile = Str(curveinfo[1] curveinfo[2] "-" D); Ep = ellini(curveid,p,pprec*4); torval = 1; if(torinfo == 0, torinfo = []); for(k=1,length(torinfo)/2, torval = torval * polrootspadic(X^(torinfo[2*k-1])-1,p,pprec*4)[2]^(torinfo[2*k]); ); if(type(Jids) != "t_VEC", Jids = [Jids]); dataval = 1; if(multiplier == 0, multiplier = 1); if(type(multiplier) != "t_VEC", multiplier = vector(length(Jids),k,multiplier)); for(k=1,length(Jids), dataval = cpmul(dataval,cppow(hpxhgetJ(Jfile,Jids[k]),multiplier[k])); ); J = cpmul(torval,dataval); datapt = elltate(Ep,J) + [[Oprec,Oprec,0],[Oprec,Oprec,0]]; }