Go to the documentation of this file.
61 numeric kronecker_symbol_prime(
const numeric & a,
const numeric &
n)
117 numeric divisor_function(
const numeric &
n,
const numeric & a,
const numeric & b,
const numeric &
k)
121 for (numeric i1=1; i1<=
n; i1++) {
122 if (
irem(
n,i1) == 0 ) {
123 numeric ratio =
n/i1;
128 return ex_to<numeric>(res);
147 numeric coefficient_a0(
const numeric &
k,
const numeric & a,
const numeric & b)
149 ex conductor =
abs(a);
152 if ( conductor == 1 ) {
181 ex eisenstein_series(
const numeric &
k,
const ex & q,
const numeric & a,
const numeric & b,
const numeric & N)
183 ex res = coefficient_a0(
k,a,b);
185 for (numeric i1=1; i1<N; i1++) {
186 res += divisor_function(i1,a,b,
k) *
pow(q,i1);
197 ex E_eisenstein_series(
const ex & q,
const numeric &
k,
const numeric & N_level,
const numeric & a,
const numeric & b,
const numeric & K,
const numeric & N_order)
199 int N_order_int = N_order.to_int();
201 ex res = eisenstein_series(
k,
pow(q,K),a,b,
iquo(N_order,K));
203 res += Order(
pow(q,N_order_int));
204 res = res.series(q,N_order_int);
215 ex B_eisenstein_series(
const ex & q,
const numeric & N_level,
const numeric & K,
const numeric & N_order)
217 int N_order_int = N_order.to_int();
219 ex res = eisenstein_series(2,q,1,1,N_order) - K*eisenstein_series(2,
pow(q,K),1,1,
iquo(N_order,K));
221 res += Order(
pow(q,N_order_int));
222 res = res.series(q,N_order_int);
232 struct subs_q_expansion :
public map_function
234 subs_q_expansion(
const ex & arg_qbar,
int arg_order) :
qbar(arg_qbar),
order(arg_order)
237 ex operator()(
const ex & e)
239 if ( is_a<Eisenstein_kernel>(e) || is_a<Eisenstein_h_kernel>(e) ) {
270 ex get_symbolic_value(
int n,
const ex & x_val);
271 ex get_numerical_value(
int n,
const ex & x_val);
280 Li_negative::Li_negative() {}
282 ex Li_negative::get_symbolic_value(
int n,
const ex & x_val)
286 if (
n >= n_cache ) {
287 for (
int j=n_cache; j<=
n; j++) {
302 ex Li_negative::get_numerical_value(
int n,
const ex & x_val)
304 symbol x_symb(
"x_symb");
306 ex f = this->get_symbolic_value(
n,x_symb);
308 ex res = f.subs(x_symb==x_val).evalf();
331 if ( !
n.is_pos_integer() )
throw (std::runtime_error(
"ifactor(): argument not a positive integer"));
340 while (
irem(n_temp, p) == 0 ) {
349 if ( n_temp == 1 )
break;
352 if ( n_temp != 1 )
throw (std::runtime_error(
"ifactor(): probabilistic primality test failed"));
354 lst res = {p_lst,exp_lst};
379 lst p_lst = ex_to<lst>(prime_factorisation.
op(0));
380 lst e_lst = ex_to<lst>(prime_factorisation.
op(1));
382 size_t n_primes = p_lst.
nops();
384 if ( n_primes > 0 ) {
386 numeric p = ex_to<numeric>(p_lst.
op(n_primes-1));
389 if ( e_lst.
op(n_primes-1) != 1 ) {
394 if (
mod(p,4) == 3 ) {
401 if ( (
n==-4) || (
n==-8) || (
n==8) || (
n==-32) || (
n==32) || (
n==-64) || (
n==128) ) {
429 if ( (a == 1) || (a == -1) ) {
444 ex res = kronecker_symbol_prime(a,unit);
453 res *=
pow(kronecker_symbol_prime(a,2),alpha);
457 lst prime_lst = ex_to<lst>(temp_lst.
op(0));
458 lst expo_lst = ex_to<lst>(temp_lst.
op(1));
460 for (
auto it_p = prime_lst.
begin(), it_e = expo_lst.
begin(); it_p != prime_lst.
end(); it_p++, it_e++) {
461 res *=
pow(kronecker_symbol_prime(a,ex_to<numeric>(*it_p)),ex_to<numeric>(*it_e));
464 return ex_to<numeric>(res);
497 if (
gcd(
n,N) == 1 ) {
519 int k_int =
k.to_int();
526 for (
numeric i1=1; i1<=conductor; i1++) {
534 return ex_to<numeric>(B);
544 int k_int =
k.to_int();
562 integration_kernel::integration_kernel() : inherited(), cache_step_size(100), series_vec()
566 int integration_kernel::compare_same_type(
const basic &other)
const
573 if (
r.rhs() != 0 ) {
574 throw (std::runtime_error(
"integration_kernel::series: non-zero expansion point not implemented"));
577 return Laurent_series(
r.lhs(),
order);
585 bool integration_kernel::has_trailing_zero(
void)
const
587 if ( cln::zerop( series_coeff(0) ) ) {
599 bool integration_kernel::is_numeric(
void)
const
616 cln::cl_N integration_kernel::series_coeff(
int i)
const
618 int n_vec = series_vec.size();
621 int N = cache_step_size*(i/cache_step_size+1);
623 if ( uses_Laurent_series() ) {
627 ex temp = Laurent_series(
x, N-1);
628 for (
int j=n_vec; j<N; j++) {
629 series_vec.push_back( ex_to<numeric>(temp.
coeff(
x,j-1).
evalf()).to_cl_N() );
633 for (
int j=n_vec; j<N; j++) {
634 series_vec.push_back( series_coeff_impl(j) );
639 return series_vec[i];
649 cln::cl_N integration_kernel::series_coeff_impl(
int i)
const
664 ex integration_kernel::Laurent_series(
const ex &
x,
int order)
const
681 ex integration_kernel::get_numerical_value(
const ex & lambda,
int N_trunc)
const
683 return get_numerical_value_impl(lambda, 1, 0, N_trunc);
695 bool integration_kernel::uses_Laurent_series()
const
705 size_t integration_kernel::get_cache_size(
void)
const
707 return series_vec.size();
715 void integration_kernel::set_cache_step(
int cache_steps)
const
717 cache_step_size = cache_steps;
725 ex integration_kernel::get_series_coeff(
int i)
const
727 return numeric(series_coeff(i));
735 ex integration_kernel::get_numerical_value_impl(
const ex & lambda,
const ex & pre,
int shift,
int N_trunc)
const
737 cln::cl_N lambda_cln = ex_to<numeric>(lambda.
evalf()).to_cl_N();
738 cln::cl_N pre_cln = ex_to<numeric>(pre.
evalf()).to_cl_N();
740 cln::cl_F
one = cln::cl_float(1, cln::float_format(
Digits));
746 if ( N_trunc == 0 ) {
748 bool flag_accidental_zero =
false;
755 subexpr = series_coeff(N);
757 res += pre_cln * subexpr * cln::expt(lambda_cln,N-1+shift);
759 flag_accidental_zero = cln::zerop(subexpr);
762 }
while ( (res != resbuf) || flag_accidental_zero );
766 for (
int N=0; N<N_trunc; N++) {
767 subexpr = series_coeff(N);
769 res += pre_cln * subexpr * cln::expt(lambda_cln,N-1+shift);
778 c.s <<
"integration_kernel()";
787 basic_log_kernel::basic_log_kernel() : inherited()
791 int basic_log_kernel::compare_same_type(
const basic &other)
const
796 cln::cl_N basic_log_kernel::series_coeff_impl(
int i)
const
807 c.s <<
"basic_log_kernel()";
816 multiple_polylog_kernel::multiple_polylog_kernel() : inherited(), z(
_ex1)
820 multiple_polylog_kernel::multiple_polylog_kernel(
const ex & arg_z) : inherited(), z(arg_z)
839 throw(std::range_error(
"multiple_polylog_kernel::op(): out of range"));
850 throw(std::range_error(
"multiple_polylog_kernel::let_op(): out of range"));
867 return -cln::expt(ex_to<numeric>(
z.
evalf()).to_cl_N(),-i);
872 c.s <<
"multiple_polylog_kernel(";
887 ELi_kernel::ELi_kernel(
const ex & arg_n,
const ex & arg_m,
const ex & arg_x,
const ex & arg_y) : inherited(),
n(arg_n),
m(arg_m),
x(arg_x), y(arg_y)
931 throw (std::out_of_range(
"ELi_kernel::op() out of range"));
949 throw (std::out_of_range(
"ELi_kernel::let_op() out of range"));
964 int n_int = ex_to<numeric>(
n).to_int();
965 int m_int = ex_to<numeric>(
m).to_int();
967 cln::cl_N x_cln = ex_to<numeric>(
x.
evalf()).to_cl_N();
968 cln::cl_N y_cln = ex_to<numeric>(
y.
evalf()).to_cl_N();
970 cln::cl_N res_cln = 0;
972 for (
int j=1; j<=i; j++) {
973 if ( (i % j) == 0 ) {
976 res_cln += cln::expt(x_cln,j)/cln::expt(cln::cl_I(j),n_int) * cln::expt(y_cln,
k)/cln::expt(cln::cl_I(
k),m_int);
995 c.s <<
"ELi_kernel(";
1016 Ebar_kernel::Ebar_kernel(
const ex & arg_n,
const ex & arg_m,
const ex & arg_x,
const ex & arg_y) : inherited(),
n(arg_n),
m(arg_m),
x(arg_x), y(arg_y)
1060 throw (std::out_of_range(
"Ebar_kernel::op() out of range"));
1078 throw (std::out_of_range(
"Ebar_kernel::let_op() out of range"));
1093 int n_int = ex_to<numeric>(
n).to_int();
1094 int m_int = ex_to<numeric>(
m).to_int();
1096 cln::cl_N x_cln = ex_to<numeric>(
x.
evalf()).to_cl_N();
1097 cln::cl_N y_cln = ex_to<numeric>(
y.
evalf()).to_cl_N();
1099 cln::cl_N res_cln = 0;
1101 for (
int j=1; j<=i; j++) {
1102 if ( (i % j) == 0 ) {
1105 res_cln += (cln::expt(x_cln,j)*cln::expt(y_cln,
k)-cln::expt(cln::cl_I(-1),n_int+m_int)*cln::expt(x_cln,-j)*cln::expt(y_cln,-
k))/cln::expt(cln::cl_I(j),n_int)/cln::expt(cln::cl_I(
k),m_int);
1124 c.s <<
"Ebar_kernel(";
1145 Kronecker_dtau_kernel::Kronecker_dtau_kernel(
const ex & arg_n,
const ex & arg_z,
const ex & arg_K,
const ex & arg_C_norm) : inherited(),
n(arg_n), z(arg_z), K(arg_K), C_norm(arg_C_norm)
1189 throw (std::out_of_range(
"Kronecker_dtau_kernel::op() out of range"));
1207 throw (std::out_of_range(
"Kronecker_dtau_kernel::let_op() out of range"));
1219 int n_int = n_num.
to_int();
1226 return ex_to<numeric>(res.
evalf()).to_cl_N();
1247 int K_int = ex_to<numeric>(
K).to_int();
1249 if ( (i % K_int) != 0 ) {
1252 int i_local = i/K_int;
1255 cln::cl_N w_cln = ex_to<numeric>(w).to_cl_N();
1256 cln::cl_N res_cln = 0;
1257 for (
int j=1; j<=i_local; j++) {
1258 if ( (i_local % j) == 0 ) {
1259 res_cln += (cln::expt(w_cln,j)+cln::expt(cln::cl_I(-1),n_int)*cln::expt(w_cln,-j)) * cln::expt(cln::cl_I(i_local/j),n_int-1);
1264 return ex_to<numeric>(pre.
evalf()).to_cl_N() * res_cln;
1285 return ex_to<numeric>(res.
evalf());
1295 c.s <<
"Kronecker_dtau_kernel(";
1316 Kronecker_dz_kernel::Kronecker_dz_kernel(
const ex & arg_n,
const ex & arg_z_j,
const ex & arg_tau,
const ex & arg_K,
const ex & arg_C_norm) : inherited(),
n(arg_n), z_j(arg_z_j), tau(arg_tau), K(arg_K), C_norm(arg_C_norm)
1367 throw (std::out_of_range(
"Kronecker_dz_kernel::op() out of range"));
1387 throw (std::out_of_range(
"Kronecker_dz_kernel::let_op() out of range"));
1399 int n_int = n_num.
to_int();
1402 cln::cl_N w_j_inv_cln = ex_to<numeric>(w_j_inv).to_cl_N();
1422 if ( ex_to<numeric>(
z_j.
evalf()).is_zero() ) {
1424 return ex_to<numeric>((
C_norm).
evalf()).to_cl_N();
1426 else if ( i == 1 ) {
1438 return ex_to<numeric>(res.
evalf()).to_cl_N();
1447 Li_negative my_Li_negative;
1460 return ex_to<numeric>(res.
evalf()).to_cl_N();
1471 if ( ex_to<numeric>(
z_j.
evalf()).is_zero() ) {
1472 if ( (
numeric(i)+n_num).is_even() ) {
1488 return ex_to<numeric>(res.
evalf()).to_cl_N();
1511 c.s <<
"Kronecker_dz_kernel(";
1534 Eisenstein_kernel::Eisenstein_kernel(
const ex & arg_k,
const ex & arg_N,
const ex & arg_a,
const ex & arg_b,
const ex & arg_K,
const ex & arg_C_norm) : inherited(),
k(arg_k), N(arg_N), a(arg_a), b(arg_b), K(arg_K), C_norm(arg_C_norm)
1581 if (
r.rhs() != 0 ) {
1582 throw (std::runtime_error(
"integration_kernel::series: non-zero expansion point not implemented"));
1613 throw (std::out_of_range(
"Eisenstein_kernel::op() out of range"));
1635 throw (std::out_of_range(
"Eisenstein_kernel::let_op() out of range"));
1677 if ( (
k==2) && (
a==1) && (
b==1) ) {
1678 return B_eisenstein_series(q, N_num, K_num,
order);
1681 return E_eisenstein_series(q, k_num, N_num, a_num, b_num, K_num,
order);
1686 c.s <<
"Eisenstein_kernel(";
1711 Eisenstein_h_kernel::Eisenstein_h_kernel(
const ex & arg_k,
const ex & arg_N,
const ex & arg_r,
const ex & arg_s,
const ex & arg_C_norm) : inherited(),
k(arg_k), N(arg_N),
r(arg_r), s(arg_s), C_norm(arg_C_norm)
1753 if (
r.
rhs() != 0 ) {
1754 throw (std::runtime_error(
"integration_kernel::series: non-zero expansion point not implemented"));
1783 throw (std::out_of_range(
"Eisenstein_h_kernel::op() out of range"));
1803 throw (std::out_of_range(
"Eisenstein_h_kernel::let_op() out of range"));
1892 for (
numeric i1=1; i1<N_order_num; i1++) {
1896 res += Order(
pow(q,N_order));
1897 res = res.
series(q,N_order);
1904 c.s <<
"Eisenstein_h_kernel(";
1927 modular_form_kernel::modular_form_kernel(
const ex & arg_k,
const ex & arg_P,
const ex & arg_C_norm) : inherited(),
k(arg_k), P(arg_P), C_norm(arg_C_norm)
1957 if (
r.rhs() != 0 ) {
1958 throw (std::runtime_error(
"integration_kernel::series: non-zero expansion point not implemented"));
1963 subs_q_expansion do_subs_q_expansion(
qbar,
order);
1985 throw (std::out_of_range(
"modular_form_kernel::op() out of range"));
2001 throw (std::out_of_range(
"modular_form_kernel::let_op() out of range"));
2045 return this->
series(q==0,N_order);
2050 c.s <<
"modular_form_kernel(";
2069 user_defined_kernel::user_defined_kernel(
const ex & arg_f,
const ex & arg_x) : inherited(), f(arg_f),
x(arg_x)
2099 throw (std::out_of_range(
"user_defined_kernel::op() out of range"));
2113 throw (std::out_of_range(
"user_defined_kernel::let_op() out of range"));
2137 c.s <<
"user_defined_kernel(";
ex op(size_t i) const override
Return operand/member at position i.
Interface to GiNaC's initially known functions.
cln::cl_N series_coeff_impl(int i) const override
For only the coefficient of is non-zero.
container & append(const ex &b)
Add element at back.
int to_int() const
Converts numeric types to machine's int.
numeric dirichlet_character(const numeric &n, const numeric &a, const numeric &N)
Defines a Dirichlet character through the Kronecker symbol.
Interface to GiNaC's constant types and some special constants.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(add, expairseq, print_func< print_context >(&add::do_print). print_func< print_latex >(&add::do_print_latex). print_func< print_csrc >(&add::do_print_csrc). print_func< print_tree >(&add::do_print_tree). print_func< print_python_repr >(&add::do_print_python_repr)) add
ex q_expansion_modular_form(const ex &q, int order) const
ex Laurent_series(const ex &x, int order) const override
Returns the Laurent series, starting possibly with the pole term.
ex op(size_t i) const override
Return operand/member at position i.
size_t nops() const override
Number of operands/members.
A user-defined integration kernel.
Interface to GiNaC's products of expressions.
ex op(size_t i) const override
Return operand/member at position i.
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
cln::cl_N to_cl_N() const
Returns a new CLN object of type cl_N, representing the value of *this.
ex coeff(const ex &s, int n=1) const
void do_print(const print_context &c, unsigned level) const
ex get_numerical_value_impl(const ex &lambda, const ex &pre, int shift, int N_trunc) const
The actual implementation for computing a numerical value for the integrand.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
const numeric iquo(const numeric &a, const numeric &b)
Numeric integer quotient.
ex get_numerical_value(const ex &qbar, int N_trunc=0) const override
Returns the value of ELi_{n,m}(x,y,qbar)
This class holds a relation consisting of two expressions and a logical relation between them.
Makes the interface to the underlying bignum package available.
_numeric_digits Digits
Accuracy in decimal digits.
int compare(const ex &other) const
ex subs(const exmap &m, unsigned options=0) const
Base class for print_contexts.
ex Bernoulli_polynomial(const numeric &k, const ex &x)
The Bernoulli polynomials.
The kernel corresponding to the Eisenstein series .
Interface to GiNaC's sums of expressions.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
ex op(size_t i) const override
Return operand/member at position i.
Eisenstein_h_kernel(const ex &k, const ex &N, const ex &r, const ex &s, const ex &C_norm=numeric(1))
Interface to GiNaC's symbolic exponentiation (basis^exponent).
ex series(const ex &thisex, const ex &r, int order, unsigned options=0)
numeric primitive_dirichlet_character(const numeric &n, const numeric &a)
Defines a primitive Dirichlet character through the Kronecker symbol.
ex diff(const ex &thisex, const symbol &s, unsigned nth=1)
void do_print(const print_context &c, unsigned level) const
ex get_numerical_value(const ex &qbar, int N_trunc=0) const override
Returns the value of the modular form.
bool is_odd() const
True if object is an exact odd integer.
ex op(size_t i) const override
Return operand/member at position i.
bool uses_Laurent_series() const override
Returns true, if the coefficients are computed from the Laurent series (in which case the method Laur...
Interface to relations between expressions.
ex q_expansion_modular_form(const ex &q, int order) const
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
ex coefficient_an(const numeric &n, const numeric &k, const numeric &r, const numeric &s, const numeric &N) const
The higher coefficients in the Fourier expansion.
ex Laurent_series(const ex &x, int order) const override
Returns the Laurent series, starting possibly with the pole term.
void do_print(const print_context &c, unsigned level) const
The base class for integration kernels for iterated integrals.
const_iterator begin() const
const numeric factorial(const numeric &n)
Factorial combinatorial function.
GINAC_BIND_UNARCHIVER(add)
cln::cl_N series_coeff_impl(int i) const override
For only the coefficient of is non-zero.
size_t nops() const override
Number of operands/members.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
size_t nops() const override
Number of operands/members.
void do_print(const print_context &c, unsigned level) const
cln::cl_N series_coeff_impl(int i) const override
For only the coefficient of is non-zero.
const_iterator end() const
ex op(size_t i) const override
Return operand/member at position i.
bool info(unsigned inf) const
Interface to several small and furry utilities needed within GiNaC but not of any interest to the use...
The basic integration kernel with a logarithmic singularity at the origin.
size_t nops() const override
Number of operands/members.
The kernel corresponding to integrating the Kronecker coefficient function in (or equivalently in )...
Kronecker_dtau_kernel(const ex &n, const ex &z, const ex &K=numeric(1), const ex &C_norm=numeric(1))
const numeric sin(const numeric &x)
Numeric sine (trigonometric function).
ex gcd(const ex &a, const ex &b, ex *ca, ex *cb, bool check_args, unsigned options)
Compute GCD (Greatest Common Divisor) of multivariate polynomials a(X) and b(X) in Z[X].
Lightweight wrapper for GiNaC's symbolic objects.
bool is_discriminant_of_quadratic_number_field(const numeric &n)
Returns true if the integer n is either one or the discriminant of a quadratic number field.
bool is_even(const numeric &x)
virtual int compare_same_type(const basic &other) const
Returns order relation between two objects of same type.
#define GINAC_BIND_UNARCHIVER(classname)
ex normal(const ex &thisex)
#define GINAC_IMPLEMENT_REGISTERED_CLASS_OPT(classname, supername, options)
Macro for inclusion in the implementation of each registered class.
size_t nops() const override
Number of operands/members.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
cln::cl_N series_coeff_impl(int i) const override
For only the coefficient of is non-zero.
The integration kernel for multiple polylogarithms.
void do_print(const print_context &c, unsigned level) const
const numeric exp(const numeric &x)
Exponential function.
virtual ex evalf() const
Evaluate object numerically.
void do_print(const print_context &c, unsigned level) const
const numeric cos(const numeric &x)
Numeric cosine (trigonometric function).
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
Eisenstein_kernel(const ex &k, const ex &N, const ex &a, const ex &b, const ex &K, const ex &C_norm=numeric(1))
Kronecker_dz_kernel(const ex &n, const ex &z_j, const ex &tau, const ex &K=numeric(1), const ex &C_norm=numeric(1))
const numeric I
Imaginary unit.
size_t nops() const override
Number of operands/members.
Interface to GiNaC's symbolic objects.
ex op(size_t i) const override
Return operand/member at position i.
size_t nops() const override
Number of operands/members.
void print(const print_context &c, unsigned level=0) const
Print expression to stream.
ex ifactor(const numeric &n)
Returns the decomposition of the positive integer n into prime numbers in the form lst( lst(p1,...
ex rhs() const
Right hand side of relational expression.
const constant Pi("Pi", PiEvalf, "\\pi", domain::positive)
Pi.
The kernel corresponding to integrating the Kronecker coefficient function in .
ex get_numerical_value(const ex &qbar, int N_trunc=0) const override
Returns the value of the modular form.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
The kernel corresponding to the Eisenstein series .
numeric generalised_Bernoulli_number(const numeric &k, const numeric &b)
The generalised Bernoulli number.
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
bool uses_Laurent_series() const override
Returns true, if the coefficients are computed from the Laurent series (in which case the method Laur...
Wrapper template for making GiNaC classes out of STL containers.
const numeric bernoulli(const numeric &nn)
Bernoulli number.
Ebar_kernel(const ex &n, const ex &m, const ex &x, const ex &y)
const numeric irem(const numeric &a, const numeric &b)
Numeric integer remainder.
void ensure_if_modifiable() const
Ensure the object may be modified without hurting others, throws if this is not the case.
Interface to class of symbolic functions.
void do_print(const print_context &c, unsigned level) const
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
ex series(const relational &r, int order, unsigned options=0) const override
The series method for this class returns the qbar-expansion of the modular form, without an additiona...
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
ex series(const ex &r, int order, unsigned options=0) const
Compute the truncated series expansion of an expression.
ex coefficient_a0(const numeric &k, const numeric &r, const numeric &s, const numeric &N) const
The constant coefficient in the Fourier expansion.
void do_print(const print_context &c, unsigned level) const
const numeric mod(const numeric &a, const numeric &b)
Modulus (in positive representation).
ELi_kernel(const ex &n, const ex &m, const ex &x, const ex &y)
const numeric pow(const numeric &x, const numeric &y)
Interface to class for extended truncated power series.
void do_print(const print_context &c, unsigned level) const
ex get_numerical_value(const ex &z, int N_trunc=0) const override
Returns the value of the g^(n-1)(z-z_j,K*tau).
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
cln::cl_N series_coeff_impl(int i) const override
For only the coefficient of is non-zero.
numeric kronecker_symbol(const numeric &a, const numeric &n)
Returns the Kronecker symbol a: integer n: integer.
size_t nops() const override
Number of operands/members.
This class is the ABC (abstract base class) of GiNaC's class hierarchy.
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
ex Laurent_series(const ex &x, int order) const override
Returns the Laurent series, starting possibly with the pole term.
ex get_numerical_value(const ex &qbar, int N_trunc=0) const override
Returns the value of Ebar_{n,m}(x,y,qbar)
ex series_to_poly(const ex &e)
Convert the pseries object embedded in an expression to an ordinary polynomial in the expansion varia...
bool is_even() const
True if object is an exact even integer.
ex & let_op(size_t i) override
Return modifiable operand/member at position i.
ex op(size_t i) const override
Return operand/member at position i.
bool is_numeric(void) const override
This routine returns true, if the integration kernel can be evaluated numerically.
static std::vector< ex > cache_vec
const numeric abs(const numeric &x)
Absolute value.
const numeric smod(const numeric &a_, const numeric &b_)
Modulus (in symmetric representation).
ex op(size_t i) const override
Return operand/member at position i.
size_t nops() const override
Number of operands/members.
print_func< print_context >(&varidx::do_print). print_func< print_latex >(&varidx
Interface to GiNaC's integration kernels for iterated integrals.
Interface to GiNaC's overloaded operators.
This class is a wrapper around CLN-numbers within the GiNaC class hierarchy.
ex get_numerical_value(const ex &qbar, int N_trunc=0) const override
Returns the value of the g^(n)(z,K*tau), where tau is given by qbar.
ex lhs() const
Left hand side of relational expression.
user_defined_kernel(const ex &f, const ex &x)
ex series(const relational &r, int order, unsigned options=0) const override
The series method for this class returns the qbar-expansion of the modular form, without an additiona...
bool uses_Laurent_series() const override
Returns true, if the coefficients are computed from the Laurent series (in which case the method Laur...
This page is part of the GiNaC
developer's reference. It was generated automatically by doxygen. For
an introduction, see the tutorial.