diff options
author | Thierry Thomas <thierry@FreeBSD.org> | 2020-03-30 12:40:37 +0000 |
---|---|---|
committer | Thierry Thomas <thierry@FreeBSD.org> | 2020-03-30 12:40:37 +0000 |
commit | d9d39e0a5bc6edefd4a4abb1a12d94e08730ecff (patch) | |
tree | ab5fb79451e1c558c37da987e0c0dfe0c3311706 /math/lcalc | |
parent | 97f63e40bffb8b7a8d7da2d2e68a478797c855a1 (diff) | |
download | ports-d9d39e0a5bc6edefd4a4abb1a12d94e08730ecff.tar.gz ports-d9d39e0a5bc6edefd4a4abb1a12d94e08730ecff.zip |
Adding lcalc, the L-function c++ class library and, the command line program
lcalc, to be used by SageMath.
Remark: this is not the latest version, but the one currently used by Sage,
with their patches.
Notes
Notes:
svn path=/head/; revision=529880
Diffstat (limited to 'math/lcalc')
-rw-r--r-- | math/lcalc/Makefile | 31 | ||||
-rw-r--r-- | math/lcalc/distinfo | 3 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_L.h | 20 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcommandline.h | 20 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcommandline__elliptic.h | 20 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcommandline__numbertheory.h | 18 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcommon.h | 16 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcommon__ld.h | 17 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lcomplex.h | 28 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Ldirichlet__series.h | 20 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Ldokchitser.h | 43 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lexplicit__formula.h | 17 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lgamma.h | 65 | ||||
-rw-r--r-- | math/lcalc/files/patch-include_Lglobals.h | 21 | ||||
-rw-r--r-- | math/lcalc/files/patch-src_Lcommandline.cc | 36 | ||||
-rw-r--r-- | math/lcalc/files/patch-src_Lcommandline__elliptic.cc | 62 | ||||
-rw-r--r-- | math/lcalc/files/patch-src_Makefile | 235 | ||||
-rw-r--r-- | math/lcalc/pkg-descr | 6 | ||||
-rw-r--r-- | math/lcalc/pkg-plist | 45 |
19 files changed, 723 insertions, 0 deletions
diff --git a/math/lcalc/Makefile b/math/lcalc/Makefile new file mode 100644 index 000000000000..67cee55b74e3 --- /dev/null +++ b/math/lcalc/Makefile @@ -0,0 +1,31 @@ +# Created by: thierry@pompo.net +# $FreeBSD$ + +PORTNAME= lcalc +PORTVERSION= 1.23 +CATEGORIES= math +MASTER_SITES= ftp://ftp.fu-berlin.de/unix/misc/sage/spkg/upstream/lcalc/ + +MAINTAINER= thierry@FreeBSD.org +COMMENT= L-function c++ class library and the CLI program lcalc + +LICENSE= GPLv2+ + +LIB_DEPENDS= libgmp.so:math/gmp \ + libmpfr.so:math/mpfr \ + libpari.so:math/pari + +#USE_GITHUB= yes +#GH_ACCOUNT= agrawroh +#GH_PROJECT= l-calc +#GH_TAGNAME= 4c57471 + +USES= gmake localbase tar:bz2 + +PATCH_WRKSRC= ${WRKDIR}/${DISTNAME} +WRKSRC_SUBDIR= src +USE_LDCONFIG= yes + +MAKE_ENV= MAKE=${GMAKE} STAGEDIR=${STAGEDIR} + +.include <bsd.port.mk> diff --git a/math/lcalc/distinfo b/math/lcalc/distinfo new file mode 100644 index 000000000000..35d57883ac15 --- /dev/null +++ b/math/lcalc/distinfo @@ -0,0 +1,3 @@ +TIMESTAMP = 1585493725 +SHA256 (lcalc-1.23.tar.bz2) = 83d4253ec2f38553b21190d6d0c6b71bab7ea14717f6dde5bd18f60775d3cdb0 +SIZE (lcalc-1.23.tar.bz2) = 491589 diff --git a/math/lcalc/files/patch-include_L.h b/math/lcalc/files/patch-include_L.h new file mode 100644 index 000000000000..005ecdbf3e7a --- /dev/null +++ b/math/lcalc/files/patch-include_L.h @@ -0,0 +1,20 @@ +--- include/L.h.orig 2012-08-08 21:21:55 UTC ++++ include/L.h +@@ -18,6 +18,8 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + +@@ -491,7 +493,7 @@ class L_function (public) + + //#include "Ldirichlet_series.h" //for computing Dirichlet series + Complex partial_dirichlet_series(Complex s, long long N1, long long N2); +- Complex dirichlet_series(Complex s, long long N); ++ Complex dirichlet_series(Complex s, long long N=-1LL); + + //#include "Ltaylor_series.h" //for computing taylor series for Dirichlet series + //void compute_taylor_series(int N, int K, Complex s_0, Complex *series); diff --git a/math/lcalc/files/patch-include_Lcommandline.h b/math/lcalc/files/patch-include_Lcommandline.h new file mode 100644 index 000000000000..a9c21ca5ea35 --- /dev/null +++ b/math/lcalc/files/patch-include_Lcommandline.h @@ -0,0 +1,20 @@ +--- include/Lcommandline.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lcommandline.h +@@ -18,6 +18,8 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + +@@ -39,7 +41,7 @@ + + #include "Lcommandline_globals.h" //command line global variables + #ifdef INCLUDE_PARI +-#include "pari.h" //for pari's elliptic curve functions ++#include "pari/pari.h" //for pari's elliptic curve functions + #undef init //pari has a '#define init pari_init' which + //causes trouble with the stream.h init. + //pari also causes trouble with things like abs. diff --git a/math/lcalc/files/patch-include_Lcommandline__elliptic.h b/math/lcalc/files/patch-include_Lcommandline__elliptic.h new file mode 100644 index 000000000000..417c58ee30d1 --- /dev/null +++ b/math/lcalc/files/patch-include_Lcommandline__elliptic.h @@ -0,0 +1,20 @@ +--- include/Lcommandline_elliptic.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lcommandline_elliptic.h +@@ -18,6 +18,8 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + +@@ -32,7 +34,7 @@ + + + #ifdef INCLUDE_PARI +-#include "pari.h" //for pari's elliptic curve functions ++#include "pari/pari.h" //for pari's elliptic curve functions + #undef init //pari has a '#define init pari_init' which + //causes trouble with the stream.h init. + //pari also causes trouble with things like abs. diff --git a/math/lcalc/files/patch-include_Lcommandline__numbertheory.h b/math/lcalc/files/patch-include_Lcommandline__numbertheory.h new file mode 100644 index 000000000000..16fa639ab987 --- /dev/null +++ b/math/lcalc/files/patch-include_Lcommandline__numbertheory.h @@ -0,0 +1,18 @@ +--- include/Lcommandline_numbertheory.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lcommandline_numbertheory.h +@@ -18,12 +18,15 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + + #ifndef Lcommandline_numbertheory_H + #define Lcommandline_numbertheory_H + ++#include <time.h> + #include <stdlib.h> //for things like srand + #include <iostream> //for input and output + #include <iomanip> //for manipulating output such as setprecision diff --git a/math/lcalc/files/patch-include_Lcommon.h b/math/lcalc/files/patch-include_Lcommon.h new file mode 100644 index 000000000000..d387a197612f --- /dev/null +++ b/math/lcalc/files/patch-include_Lcommon.h @@ -0,0 +1,16 @@ +--- include/Lcommon.h.orig 2020-03-29 15:43:34 UTC ++++ include/Lcommon.h +@@ -1,3 +1,4 @@ ++// Patches borrowed from SageMath. + // When MPFR is enabled and double is passed to a templated function + // The function should use precise(ttype) to make sure calculations run + // within the more precise type +@@ -48,7 +49,7 @@ const bool outputSeries=true; // Whether to output t + + // Loop i from m to n + // Useful in tidying up most for loops +-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++) ++#define loop(i,m,n) for(auto i=(m); i!=(n); i++) + + // A class for calculations involving polynomials of small degree + // Not efficient enough for huge polynomials diff --git a/math/lcalc/files/patch-include_Lcommon__ld.h b/math/lcalc/files/patch-include_Lcommon__ld.h new file mode 100644 index 000000000000..96878fcd29da --- /dev/null +++ b/math/lcalc/files/patch-include_Lcommon__ld.h @@ -0,0 +1,17 @@ +--- include/Lcommon_ld.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lcommon_ld.h +@@ -1,3 +1,5 @@ ++// Patches borrowed from SageMath. ++ + // When MPFR is enabled and double is passed to a templated function + // The function should use precise(ttype) to make sure calculations run + // within the more precise type +@@ -53,7 +55,7 @@ const bool outputSeries=true; // Whether to output t + + // Loop i from m to n + // Useful in tidying up most for loops +-#define loop(i,m,n) for(typeof(m) i=(m); i!=(n); i++) ++#define loop(i,m,n) for(auto i=(m); i!=(n); i++) + + // A class for calculations involving polynomials of small degree + // Not efficient enough for huge polynomials diff --git a/math/lcalc/files/patch-include_Lcomplex.h b/math/lcalc/files/patch-include_Lcomplex.h new file mode 100644 index 000000000000..c84336150ce3 --- /dev/null +++ b/math/lcalc/files/patch-include_Lcomplex.h @@ -0,0 +1,28 @@ +--- include/Lcomplex.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lcomplex.h +@@ -34,6 +34,7 @@ + // Initially implemented by Ulrich Drepper <drepper@cygnus.com> + // Improved by Gabriel Dos Reis <dosreis@cmla.ens-cachan.fr> + // ++// Patches borrowed from SageMath. + + /** @file complex + * This is a Standard C++ Library header. You should @c #include this header +@@ -45,8 +46,6 @@ + + #pragma GCC system_header + +-#include <bits/c++config.h> +- + //no longer include: + //#include <bits/cpp_type_traits.h> only thing used was is_floating... + //gcc 4.0 cpp_type_traits.h is not compatible with gcc 3.3. +@@ -135,7 +134,7 @@ namespace std + template<typename _Up> + complex<_Tp>& operator/=(const complex<_Up>&); + +- friend reset(complex<_Tp>& C) { ++ friend void reset(complex<_Tp>& C) { + reset(C._M_real); + reset(C._M_imag); + } diff --git a/math/lcalc/files/patch-include_Ldirichlet__series.h b/math/lcalc/files/patch-include_Ldirichlet__series.h new file mode 100644 index 000000000000..0956c2a34700 --- /dev/null +++ b/math/lcalc/files/patch-include_Ldirichlet__series.h @@ -0,0 +1,20 @@ +--- include/Ldirichlet_series.h.orig 2012-08-08 21:21:55 UTC ++++ include/Ldirichlet_series.h +@@ -17,6 +17,8 @@ + Check the License for details. You should have received a copy of it, along + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++ Patches borrowed from SageMath. + + */ + +@@ -43,7 +45,7 @@ partial_dirichlet_series(Complex s, long long N1, long + //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX + template <class ttype> + Complex L_function <ttype>:: +-dirichlet_series(Complex s, long long N=-1) ++dirichlet_series(Complex s, long long N) + { + Complex z=0.; + long long m,n; diff --git a/math/lcalc/files/patch-include_Ldokchitser.h b/math/lcalc/files/patch-include_Ldokchitser.h new file mode 100644 index 000000000000..48308ee247da --- /dev/null +++ b/math/lcalc/files/patch-include_Ldokchitser.h @@ -0,0 +1,43 @@ +--- include/Ldokchitser.h.orig 2012-08-08 21:21:55 UTC ++++ include/Ldokchitser.h +@@ -1,3 +1,5 @@ ++// Patches borrowed from SageMath. ++ + #ifndef Ldokchitser_H + #define Ldokchitser_H + +@@ -69,7 +71,7 @@ phi_series(int precision) + + // compute the values m[j] for the respective lambda_k[j] + +- Complex m[N+1]; ++ std::vector<Complex> m(N+1); + for (j=1;j<=N;j++) + m[j] = -2*lambda_k[j] + 2; + +@@ -78,7 +80,8 @@ phi_series(int precision) + + int n,fact_n; + Complex log_Gamma[N+1][a+1][MYDIGITS+1]; +- Complex sum_log_Gamma[N+1][MYDIGITS+1]; ++ std::vector<std::vector<Complex> > sum_log_Gamma(N+1); ++ for (j=1;j<=N;j++) sum_log_Gamma[j].resize(MYDIGITS+1); + + for (j=1;j<=N;j++) + for (n=0;n<=MYDIGITS;n++) +@@ -103,8 +106,13 @@ phi_series(int precision) + + // compute the exponential taylor series for gamma = exp(sum_log_Gamma) + +- Complex exp_sum_log_Gamma[N+1][MYDIGITS+1][MYDIGITS+1]; // symmetric functions +- Complex gamma[N+1][MYDIGITS+1]; // gamma(s+m[j]) for j = 1 to N ++ std::vector<std::vector<std::vector<Complex> > > exp_sum_log_Gamma(N+1); // symmetric functions ++ std::vector<std::vector<Complex> > gamma(N+1); // gamma(s+m[j]) for j = 1 to N ++ for (j=1;j<=N;j++){ ++ exp_sum_log_Gamma[j].resize(MYDIGITS+1); ++ gamma[j].resize(MYDIGITS+1); ++ } ++ for (j=1;j<=N;j++) for (n=0;n<=MYDIGITS;n++) exp_sum_log_Gamma[j][n].resize(MYDIGITS+1); + Complex temp_gamma[MYDIGITS+1]; + Complex temp_mult_gamma[MYDIGITS+1]; + Complex temp_exp_sum_log_Gamma[MYDIGITS+1]; diff --git a/math/lcalc/files/patch-include_Lexplicit__formula.h b/math/lcalc/files/patch-include_Lexplicit__formula.h new file mode 100644 index 000000000000..9f3b029f828f --- /dev/null +++ b/math/lcalc/files/patch-include_Lexplicit__formula.h @@ -0,0 +1,17 @@ +--- include/Lexplicit_formula.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lexplicit_formula.h +@@ -1,4 +1,5 @@ + // This file mainly due to Kevin McGown, with modifications by Michael Rubinstein ++// Patches borrowed from SageMath. + + #ifndef Lexplicit_formula_H + #define Lexplicit_formula_H +@@ -25,7 +26,7 @@ int L_function <ttype>:: + dirichlet_coeffs_log_diff(int num_coeffs, Complex *c) + { + +- Complex b[num_coeffs+1]; ++ std::vector<Complex> b(num_coeffs+1); + int j, n, d1, ind; + Complex total, total2, temp; + diff --git a/math/lcalc/files/patch-include_Lgamma.h b/math/lcalc/files/patch-include_Lgamma.h new file mode 100644 index 000000000000..1f11aaccf5a2 --- /dev/null +++ b/math/lcalc/files/patch-include_Lgamma.h @@ -0,0 +1,65 @@ +--- include/Lgamma.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lgamma.h +@@ -18,6 +18,8 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + +@@ -77,7 +79,7 @@ Complex exp_recycle(); + //n=0 should just give log_GAMMA(z)... thus making log_GAMMA + //code obsolete. But leave log_GAMMA intact anyways. + template <class ttype> +-precise(ttype) log_GAMMA (ttype z,int n=0) ++precise(ttype) log_GAMMA (ttype z,int n) + { + int M; + precise(ttype) log_G,r,r2,y; +@@ -230,7 +232,7 @@ Complex GAMMA (ttype z1, ttype2 delta) + //value exp_w which holds exp(-w) + //computes G(z,w), so there's an extra w^(-z) factor. + template <class ttype> +-Complex inc_GAMMA (ttype z,ttype w, const char *method="temme", ttype exp_w = 0, bool recycle=false) ++Complex inc_GAMMA (ttype z,ttype w, const char *method, ttype exp_w, bool recycle) + { + + Complex G; +@@ -334,7 +336,7 @@ Complex inc_GAMMA (ttype z,ttype w, const char *method + + + template <class ttype> +-ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w=0, bool recycle=false) //computes G(z,w) via continued fraction ++ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle) //computes G(z,w) via continued fraction + { + + ttype G; +@@ -424,7 +426,7 @@ ttype cfrac_GAMMA (ttype z,ttype w, ttype exp_w=0, boo + } + + template <class ttype> +-ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w = 0, bool recycle=false) //computes G(z,w) via asymptotic series ++ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w, bool recycle) //computes G(z,w) via asymptotic series + { + + if(my_verbose>3) cout << "called asympt_GAMMA("<<z<<","<<w<<")"<< endl; +@@ -446,7 +448,7 @@ ttype asympt_GAMMA (ttype z,ttype w, ttype exp_w = 0, + + + template <class ttype> +-ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w = 0, bool recycle=false) //computes g(z,w) ++ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w, bool recycle) //computes g(z,w) + { + + ttype g; +@@ -604,7 +606,7 @@ ttype comp_inc_GAMMA (ttype z,ttype w,ttype exp_w = 0, + } + + template <class ttype> +-Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta=1, const char *method="temme") ++Complex gamma_sum(Complex s, int what_type, ttype *coeff, int N, Double g, Complex l, Double Q, Long Period, Complex delta, const char *method) + { + Complex SUM=0; + diff --git a/math/lcalc/files/patch-include_Lglobals.h b/math/lcalc/files/patch-include_Lglobals.h new file mode 100644 index 000000000000..eaf2d25e7824 --- /dev/null +++ b/math/lcalc/files/patch-include_Lglobals.h @@ -0,0 +1,21 @@ +--- include/Lglobals.h.orig 2012-08-08 21:21:55 UTC ++++ include/Lglobals.h +@@ -18,15 +18,17 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + + #ifndef Lglobals_H + #define Lglobals_H + ++#include <valarray> + using namespace std; + +-#include <valarray> + #ifdef USE_MPFR + #include "Lgmpfrxx.h" + typedef mpfr_class Double; diff --git a/math/lcalc/files/patch-src_Lcommandline.cc b/math/lcalc/files/patch-src_Lcommandline.cc new file mode 100644 index 000000000000..3b5dcfe18cc1 --- /dev/null +++ b/math/lcalc/files/patch-src_Lcommandline.cc @@ -0,0 +1,36 @@ +--- src/Lcommandline.cc.orig 2012-08-08 21:21:56 UTC ++++ src/Lcommandline.cc +@@ -18,6 +18,8 @@ Check the License for details. You should have receive + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + +@@ -412,12 +414,7 @@ int main (int argc, char *argv[]) + + t2=.5; //t2=.5 because of the GAMMA(s+1/2) + +- pari_init(1000000000,2); +- //pari_init_opts(400000000,2,INIT_DFTm); // the last option is to prevent +- //pari from giving its interrupt signal when its elliptic curve a_p +- //algorithm is called and interrupted with ctrl-c. Requires a more current +- //version of pari, so use pari_init above until I have a configure set up +- //that detects which pari, if any, is installed. ++ pari_init_opts(16000000, 2, INIT_DFTm); + + coeff = new Double[3]; + //compute the conductor which is copied to coeff[1] +@@ -473,7 +470,9 @@ int main (int argc, char *argv[]) + + #ifdef INCLUDE_PARI + if(do_elliptic_curve){ +- allocatemoremem((int) N_terms*16+1000000); //XXXXXXXXX this should depend on whether we're double or long double or mpfr double ++ // Reallocate PARI stack ++ paristack_setsize((size_t)N_terms*16 + 1000000, 0); //XXXXXXXXX this should depend on whether we're double or long double or mpfr double ++ + if (my_verbose>0) cout << "Will precompute " << N_terms << " elliptic L-function dirichlet coefficients..." << endl; + initialize_new_L(a1,a2,a3,a4,a6,N_terms); + } diff --git a/math/lcalc/files/patch-src_Lcommandline__elliptic.cc b/math/lcalc/files/patch-src_Lcommandline__elliptic.cc new file mode 100644 index 000000000000..3b5afe596d23 --- /dev/null +++ b/math/lcalc/files/patch-src_Lcommandline__elliptic.cc @@ -0,0 +1,62 @@ +--- src/Lcommandline_elliptic.cc.orig 2012-08-08 21:21:56 UTC ++++ src/Lcommandline_elliptic.cc +@@ -18,6 +18,8 @@ + with the package; see the file 'COPYING'. If not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ++ Patches borrowed from SageMath. ++ + */ + + #include "Lcommandline_elliptic.h" +@@ -121,11 +123,11 @@ void data_E(char *a1, char *a2, char *a3, char *a4, ch + + + F = cgetg(6, t_VEC); +- F[1] = lgeti(BIGDEFAULTPREC); +- F[2] = lgeti(BIGDEFAULTPREC); +- F[3] = lgeti(BIGDEFAULTPREC); +- F[4] = lgeti(BIGDEFAULTPREC); +- F[5] = lgeti(BIGDEFAULTPREC); ++ F[1] = (long)cgeti(BIGDEFAULTPREC); ++ F[2] = (long)cgeti(BIGDEFAULTPREC); ++ F[3] = (long)cgeti(BIGDEFAULTPREC); ++ F[4] = (long)cgeti(BIGDEFAULTPREC); ++ F[5] = (long)cgeti(BIGDEFAULTPREC); + + //gaffsg(a1,(GEN) F[1]); + //gaffsg(a2,(GEN) F[2]); +@@ -133,15 +135,15 @@ void data_E(char *a1, char *a2, char *a3, char *a4, ch + //gaffsg(a4,(GEN) F[4]); + //gaffsg(a6,(GEN) F[5]); + +- gaffect(strtoGEN(a1), (GEN) F[1]); +- gaffect(strtoGEN(a2), (GEN) F[2]); +- gaffect(strtoGEN(a3), (GEN) F[3]); +- gaffect(strtoGEN(a4), (GEN) F[4]); +- gaffect(strtoGEN(a6), (GEN) F[5]); ++ gaffect(gp_read_str(a1), (GEN) F[1]); ++ gaffect(gp_read_str(a2), (GEN) F[2]); ++ gaffect(gp_read_str(a3), (GEN) F[3]); ++ gaffect(gp_read_str(a4), (GEN) F[4]); ++ gaffect(gp_read_str(a6), (GEN) F[5]); + +- E = initell(F,BIGDEFAULTPREC); ++ E = ellinit(F, NULL, BIGDEFAULTPREC); + +- C=globalreduction(E); ++ C=ellglobalred(E); + + x=gtodouble((GEN) C[1]); + +@@ -167,8 +169,8 @@ void data_E(char *a1, char *a2, char *a3, char *a4, ch + + p=n; + gaffsg(p,y); +- coeff[p] = Double(1.*llrint(gtodouble(apell(E,y))))/sqrt(Double(1.*p)); +- //coeff[p] = Double(1.*Long(gtodouble(apell(E,y))+.1))/sqrt(Double(1.*p)); ++ coeff[p] = Double(1.*llrint(gtodouble(ellap(E,y))))/sqrt(Double(1.*p)); ++ //coeff[p] = Double(1.*Long(gtodouble(ellap(E,y))+.1))/sqrt(Double(1.*p)); + + if(gtolong(gmod((GEN) E[12],(GEN) y))==0) // if p|discriminant, i.e. bad reduction + { diff --git a/math/lcalc/files/patch-src_Makefile b/math/lcalc/files/patch-src_Makefile new file mode 100644 index 000000000000..deabe20c31bf --- /dev/null +++ b/math/lcalc/files/patch-src_Makefile @@ -0,0 +1,235 @@ +--- src/Makefile.orig 2012-08-08 21:21:56 UTC ++++ src/Makefile +@@ -8,12 +8,13 @@ + #the c compiler, that will generate options which are specific to the + #compilers, optimization options depending on the chip, etc + ++# + Patches borrowed from SageMath. + + # Comment out the following line to remove the use of pari's + # elliptic curve routines. Doing so disables the -e option. + # g++ with -DINCLUDE_PARI sends a #define INCLUDE_PARI to the preprocessor. + +-#PARI_DEFINE = -DINCLUDE_PARI ++PARI_DEFINE = -DINCLUDE_PARI + #PREPROCESSOR_DEFINE = -DUSE_LONG_DOUBLE + + #OPENMP_FLAG = -fopenmp +@@ -29,11 +30,21 @@ endif + + OS_NAME := $(shell uname) + +-CC = g++ ++#CC = g++ + #cc = /home/mrubinst/local/bin/gcc + #CC = /home/mrubinst/local/bin/g++ + #LD = /home/mrubinst/local/bin/g++ + ++ifneq (,$(findstring CYGWIN,$(OS_NAME))) ++ OS_NAME := CYGWIN ++endif ++ ++# Note: I've also changed various rules to use $CXX instead of $CC, ++# since we mostly compile C++, not C, and $CC is by convention ++# used for the *C* compiler. ++#CC ?= gcc ++#CXX ?= g++ ++ + #CC = /Users/michaelrubinstein/math/L/packages/gcc4.3/usr/local/bin/g++ + #EXTRA= -pg + #EXTRA = -ftree-vectorize -ftree-vectorizer-verbose=5 -funroll-loops +@@ -58,59 +69,27 @@ ifeq ($(G5),TRUE) + #MACHINE_SPECIFIC_FLAGS = -mpowerpc -mpowerpc64 -m64 + endif + +-CCFLAGS = -Wa,-W -O3 $(OPENMP_FLAG) -Wno-deprecated $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA) +-#CCFLAGS = -Wa,-W -O3 $(OPENMP_FLAG) $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA) +-#CCFLAGS = -Wa,-W -O2 -fno-exceptions -Wno-deprecated $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA) ++CXXFLAGS := $(OPENMP_FLAG) $(PREPROCESSOR_DEFINE) $(MACHINE_SPECIFIC_FLAGS) $(EXTRA) $(CXXFLAGS) + + #warning- O2 doesn't help with -DUSE_LONG_DOUBLE on mac, and actually seems to hurt, making runtime longer + #by a factor of 1.5 + + +-ifeq ($(PARI_DEFINE),-DINCLUDE_PARI) +- #location of pari.h. +- LOCATION_PARI_H = /usr/local/include/pari #usual location + +- #location of libpari.a or of libpari.so +- #depending on whether static or dynamic libraries are being used. +- #On mac os x it's the former, on linux I think usually the latter. +- LOCATION_PARI_LIBRARY = /usr/local/lib #usual location +-else +- #supplied as a dummy so as to avoid more ifeq's below +- LOCATION_PARI_H = . +- LOCATION_PARI_LIBRARY = . +-endif +- +- +- + #INCLUDEFILES= -I../include -I../../packages/gcc4.3/usr/local/include + INCLUDEFILES= -I../include + + #For Mac os x we omit shared library options + + ifeq ($(OS_NAME),Darwin) +- LDFLAGS2 = +- DYN_OPTION=dynamiclib ++ DYN_OPTION=dynamiclib -Wl,-headerpad_max_install_names + else +- LDFLAGS1 = -Xlinker -export-dynamic #not sure why pari calls these when linking but on the web I found +- #'Libtool provides the `-export-dynamic' link flag (see section Link mode), which does this declaration. +- #You need to use this flag if you are linking a shared library that will be dlopened' +- #see notes below +- #ifeq ($(PARI_DEFINE),-DINCLUDE_PARI) +- LDFLAGS2 = $(LDFLAGS1) -Xlinker -rpath -Xlinker $(LOCATION_PARI_LIBRARY) +- #else +- # LDFLAGS2 = $(LDFLAGS1) +- #endif + DYN_OPTION=shared + endif + +-ifeq ($(PARI_DEFINE),-DINCLUDE_PARI) +- LDFLAGS = $(LDFLAGS2) -L$(LOCATION_PARI_LIBRARY) -lpari +-else +- LDFLAGS = $(LDFLAGS2) +-endif ++PARI_LIBS = -L$(LOCALBASE)/lib -lpari -lgmp -lm + + +- + #NOTES: + #for caedmon: the shared pari library is in a funny location: /usr/local/pari/pari-2.1.5/lib + #At compile time we need to specify that location with: +@@ -129,47 +108,63 @@ endif + #become clear which libraries the computer can find. + + +-INSTALL_DIR= /usr/local ++INSTALL_DIR = $(STAGEDIR)$(PREFIX) + ++#binary and library files extensions ++LIBEXT := .so ++EXEEXT := ++ ++ifeq ($(OS_NAME),Darwin) ++ LIBEXT := .dylib ++ EXEEXT := ++endif ++ ++ifeq ($(OS_NAME),CYGWIN) ++ LIBEXT := .dll ++ EXEEXT := .exe ++endif ++ + #object files for the libLfunction library + OBJ_L = Lglobals.o Lgamma.o Lriemannsiegel.o Lriemannsiegel_blfi.o Ldokchitser.o + + #object files for the command line program +-OBJ2=$(OBJ_L) Lcommandline_globals.o Lcommandline_misc.o Lcommandline_numbertheory.o Lcommandline_values_zeros.o +-OBJ3=$(OBJ2) Lcommandline_elliptic.o Lcommandline_twist.o Lcommandline.o cmdline.o ++OBJ2 = $(OBJ_L) Lcommandline_globals.o Lcommandline_misc.o Lcommandline_numbertheory.o Lcommandline_values_zeros.o ++OBJ3 = $(OBJ2) Lcommandline_elliptic.o Lcommandline_twist.o Lcommandline.o cmdline.o + OBJECTS = $(OBJ3) + + all: +-# make print_vars +- make libLfunction.so +- make lcalc +- make examples +-# make find_L +-# make test ++# $(MAKE) print_vars ++ $(MAKE) libLfunction$(LIBEXT) ++ $(MAKE) lcalc$(EXEEXT) ++ $(MAKE) examples$(EXEEXT) ++# $(MAKE) find_L ++# $(MAKE) test + + print_vars: + @echo OS_NAME = $(OS_NAME) + +-lcalc: $(OBJECTS) +- $(CC) $(CCFLAGS) $(INCLUDEFILES) $(OBJECTS) $(LDFLAGS) -o lcalc $(GMP_FLAGS) ++lcalc$(EXEEXT): $(OBJECTS) ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(LDFLAGS) $(OBJECTS) -o lcalc$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS) + +-examples: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/example.cc libLfunction.so -o example_programs/example $(GMP_FLAGS) ++examples$(EXEEXT): ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/example.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/example$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS) + + +-proc: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/proc.cc libLfunction.so -o example_programs/proc $(GMP_FLAGS) ++proc$(EXEEXT): ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/proc.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/proc$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS) + +-test: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) example_programs/test.cc libLfunction.so -o example_programs/test $(GMP_FLAGS) ++test$(EXEEXT): ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) example_programs/test.cc $(LDFLAGS) libLfunction$(LIBEXT) -o example_programs/test$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS) + +-find_L: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) find_L_functions/find_L_functions.cc libLfunction.so -o find_L_functions/find_L $(GMP_FLAGS) ++find_L$(EXEEXT): ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) find_L_functions/find_L_functions.cc $(LDFLAGS) libLfunction$(LIBEXT) -o find_L_functions/find_L$(EXEEXT) $(PARI_LIBS) $(GMP_FLAGS) + + .cc.o: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) -c $< ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) -c $< ++ ++# Warning: We (Sage) add $CXXFLAGS to CXXFLAGS above. + .c.o: +- $(CC) $(CCFLAGS) $(INCLUDEFILES) -c $< ++ $(CC) $(CFLAGS) $(INCLUDEFILES) -c $< + + + Lglobals.o: ../include/Lglobals.h ../include/Lcommon.h ../include/Lcomplex.h ../include/Lnumeric.h ../include/Lint_complex.h +@@ -227,7 +222,7 @@ Lcommandline_elliptic.o: ../include/Lnumberzeros.h ../ + Lcommandline_elliptic.o: ../include/Lvalue.h ../include/Lfind_zeros.h + Lcommandline_elliptic.o: ../include/Lcommandline_numbertheory.h + Lcommandline_elliptic.o: ../include/Lcommandline_globals.h +- $(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline_elliptic.cc ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline_elliptic.cc + + Lcommandline_twist.o: ../include/Lcommandline_twist.h ../include/L.h + Lcommandline_twist.o: ../include/Lglobals.h ../include/Lcommon.h ../include/Lcomplex.h ../include/Lnumeric.h ../include/Lint_complex.h +@@ -239,7 +234,7 @@ Lcommandline_twist.o: ../include/Lvalue.h ../include/L + Lcommandline_twist.o: ../include/Lcommandline_numbertheory.h + Lcommandline_twist.o: ../include/Lcommandline_globals.h + Lcommandline_twist.o: ../include/Lcommandline_elliptic.h +- $(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline_twist.cc ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline_twist.cc + + cmdline.o: ../include/cmdline.h ../include/getopt.h + #$(CC) $(CCFLAGS) $(INCLUDEFILES) -DHAVE_LONG_LONG -c cmdline.c +@@ -258,21 +253,21 @@ Lcommandline.o: ../include/Lcommandline_misc.h + Lcommandline.o: ../include/Lcommandline_elliptic.h + Lcommandline.o: ../include/Lcommandline_twist.h + Lcommandline.o: ../include/Lcommandline_values_zeros.h +- $(CC) $(CCFLAGS) $(INCLUDEFILES) -I$(LOCATION_PARI_H) $(PARI_DEFINE) -c Lcommandline.cc ++ $(CXX) $(CXXFLAGS) $(INCLUDEFILES) $(PARI_DEFINE) -c Lcommandline.cc + + +-libLfunction.so: $(OBJ_L) +- g++ -$(DYN_OPTION) -o libLfunction.so $(OBJ_L) ++libLfunction$(LIBEXT): $(OBJ_L) ++ $(CXX) -$(DYN_OPTION) $(CXXFLAGS) -o libLfunction$(LIBEXT) $(LDFLAGS) $(OBJ_L) $(PARI_LIBS) + + clean: +- rm -f *.o lcalc libLfunction.so example_programs/example ++ rm -f *.o lcalc$(EXEEXT) libLfunction$(LIBEXT) example_programs/example$(EXEEXT) + + install: +- cp -f lcalc $(INSTALL_DIR)/bin/. +- cp -f libLfunction.so $(INSTALL_DIR)/lib/. ++ cp -f lcalc$(EXEEXT) $(INSTALL_DIR)/bin/. ++ cp -f libLfunction$(LIBEXT) $(INSTALL_DIR)/lib/. + cp -rf ../include $(INSTALL_DIR)/include/Lfunction + + + SRCS = Lcommandline.cc Lcommandline_elliptic.cc Lcommandline_globals.cc Lcommandline_misc.cc Lcommandline_numbertheory.cc Lcommandline_twist.cc Lcommandline_values_zeros.cc Lgamma.cc Lglobals.cc Lmisc.cc Lriemannsiegel.cc Lriemannsiegel_blfi.cc cmdline.c + depend: +- makedepend -f depends -- $(CCFLAGS) -Y../include -- $(SRCS) ++ makedepend -f depends -- $(CXXFLAGS) -Y../include -- $(SRCS) diff --git a/math/lcalc/pkg-descr b/math/lcalc/pkg-descr new file mode 100644 index 000000000000..79425b22ce30 --- /dev/null +++ b/math/lcalc/pkg-descr @@ -0,0 +1,6 @@ +This program computes zeros and values of L-function. + +It installs the L-function c++ class library and, the command line program +lcalc. + +WWW: https://github.com/agrawroh/l-calc diff --git a/math/lcalc/pkg-plist b/math/lcalc/pkg-plist new file mode 100644 index 000000000000..a173f3b9cd56 --- /dev/null +++ b/math/lcalc/pkg-plist @@ -0,0 +1,45 @@ +bin/lcalc +include/Lfunction/L.h +include/Lfunction/L.h.orig +include/Lfunction/Lcommandline.h +include/Lfunction/Lcommandline.h.orig +include/Lfunction/Lcommandline_elliptic.h +include/Lfunction/Lcommandline_elliptic.h.orig +include/Lfunction/Lcommandline_globals.h +include/Lfunction/Lcommandline_misc.h +include/Lfunction/Lcommandline_numbertheory.h +include/Lfunction/Lcommandline_numbertheory.h.orig +include/Lfunction/Lcommandline_twist.h +include/Lfunction/Lcommandline_values_zeros.h +include/Lfunction/Lcommon.h +include/Lfunction/Lcommon.h.orig +include/Lfunction/Lcommon_ld.h +include/Lfunction/Lcommon_ld.h.orig +include/Lfunction/Lcomplex.h +include/Lfunction/Lcomplex.h.orig +include/Lfunction/Ldirichlet_series.h +include/Lfunction/Ldirichlet_series.h.orig +include/Lfunction/Ldokchitser.h +include/Lfunction/Ldokchitser.h.orig +include/Lfunction/Lexplicit_formula.h +include/Lfunction/Lexplicit_formula.h.orig +include/Lfunction/Lfind_zeros.h +include/Lfunction/Lgamma.h +include/Lfunction/Lgamma.h.orig +include/Lfunction/Lglobals.h +include/Lfunction/Lglobals.h.orig +include/Lfunction/Lgmpfrxx.h +include/Lfunction/Lgram.h +include/Lfunction/Lint_complex.h +include/Lfunction/Lmisc.h +include/Lfunction/Lnumberzeros.h +include/Lfunction/Lnumeric.h +include/Lfunction/Lprint.h +include/Lfunction/Lriemannsiegel.h +include/Lfunction/Lriemannsiegel_blfi.h +include/Lfunction/Lvalue.h +include/Lfunction/Lvalue.h.bak +include/Lfunction/cmdline.h +include/Lfunction/getopt.h +include/Lfunction/mpfr_mul_d.h +lib/libLfunction.so |