kill(libname); libname = concat(componentfolder,"cmtools.so"); kill(heegner) addhelp(heegner,"The heegner package includes the functions elltautopoint, elltautoz, qfbclassgroup, qfblift and ellHeegnerPoints. For more information on a function *, type ?*"); kill(elltautopoint); install(elltautopoint,GGp,elltautopoint,libname); addhelp(elltautopoint,"elltautopoint(E,t): takes as input an elliptic curve E (the output of the function ellinit) and a point t in the upper half-plane H, and returns the corresponding point P=[x,y] in E(C)"); kill(elltautoz); install(elltautoz,GGp,elltautoz,libname); addhelp(elltautoz,"elltautoz(E,t): takes as input an elliptic curve E (the output of the function ellinit) and a point t in the upper half-plane H, and returns the corresponding point z in C/L"); kill(qfbclassgroup); install(qfbclassgroup,G,qfbclassgroup,libname); addhelp(qfbclassgroup,"qfbclassgroup(delta): takes as input a discriminant delta (positive or negative) and returns a vector of length h (= class number) consisting of SL(2,Z)-representatives of the primitive binary quadratic forms of discriminant delta"); kill(qfblift); install(qfblift,GGG,qfblift,libname); addhelp(qfblift,"qfblift(F,N,s): takes as input a positive definite primitive integral binary quadratic form F, a positive integer N, and s a square root of discrim(F) mod N; returns an SL(2,Z)-equivalent quadratic form [A',B',C'] with \n A' = 0 (mod N) \n B' = s (mod N) \nand A' minimal"); kill(ellHeegnerPoints); install(ellHeegnerPoints,GGDGp,ellHeegnerPoints,libname); addhelp(ellHeegnerPoints,"ellHeegnerPoints(E,D,{s=0}): takes as input an elliptic curve E of conductor N, a discriminant D prime to N, and optionally an orientation s (i.e. a square root of D mod N); returns a vector consisting of h(D) Heegner points on the elliptic curve corresponding to the input data"); read(concat(componentfolder,"src/heegpoly.pari"));