00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_HELPERS_H__
00027
#define __NESTEDSUMS_HELPERS_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00033 GiNaC::ex
nestedsums_helper_expand(
const GiNaC::ex & expr,
int level = 0);
00034 GiNaC::ex
nestedsums_helper_multiply_via_triangle(
const GiNaC::ex & A,
const GiNaC::ex & B,
00035
const GiNaC::ex & expansion_parameter,
int order);
00036 GiNaC::ex
nestedsums_helper_multiply_via_triangle_speedy(
const GiNaC::ex & A,
const GiNaC::ex & B,
00037
const GiNaC::ex & expansion_parameter,
int order);
00038 GiNaC::ex
nestedsums_helper_multiply_laurent(
const GiNaC::ex & A,
const GiNaC::ex & B,
00039
const GiNaC::ex & expansion_parameter,
int order);
00040 GiNaC::ex
nestedsums_helper_multiply_laurent_speedy(
const GiNaC::ex & A,
const GiNaC::ex & B,
00041
const GiNaC::ex & expansion_parameter,
int order);
00042 GiNaC::ex
nestedsums_helper_expand_tgamma_fct(
const GiNaC::ex & a1,
const GiNaC::ex & b1,
const GiNaC::ex & a2,
const GiNaC::ex & b2,
00043
const GiNaC::ex & expansion_parameter,
int order);
00044 GiNaC::ex
nestedsums_helper_expand_lst_tgamma_fct(
const GiNaC::ex & ll1,
const GiNaC::ex & ll2,
00045
const GiNaC::ex & expansion_parameter,
int order);
00046
00047 GiNaC::ex
nestedsums_helper_expand_power(
const GiNaC::ex & x,
const GiNaC::ex & m,
const GiNaC::ex & expansion_parameter,
int order);
00048 GiNaC::ex
nestedsums_helper_series(
const GiNaC::ex & f,
const GiNaC::ex & expansion_parameter,
int order);
00049
00050 GiNaC::ex
nestedsums_helper_bernoulli(
int n);
00051
00052 GiNaC::ex
nestedsums_helper_lowering_op_geo_0(
const GiNaC::ex & x,
int m);
00053 GiNaC::ex
nestedsums_helper_lowering_op_geo_1(
const GiNaC::ex & x,
int m);
00054
00055 GiNaC::ex
nestedsums_helper_arithmetic_sum_type_Z(
const GiNaC::ex & n,
const GiNaC::ex & m);
00056 GiNaC::ex
nestedsums_helper_arithmetic_sum_type_S(
const GiNaC::ex & n,
const GiNaC::ex & m);
00057
00058
int nestedsums_helper_get_degree(
const GiNaC::ex & expr,
const GiNaC::ex & eps);
00059
int nestedsums_helper_ldegree(
const GiNaC::ex & expr,
const GiNaC::ex & eps);
00060 GiNaC::ex
nestedsums_helper_coeff(
const GiNaC::ex & expr,
const GiNaC::ex & eps,
int n = 1);
00061
00062 GiNaC::exvector
exvector_from_lst(
const GiNaC::ex & l);
00063 GiNaC::exvector
reverse_exvector_from_lst(
const GiNaC::ex & l);
00064 GiNaC::exvector
exvector_append_lst(
const GiNaC::exvector & v,
const GiNaC::ex & l);
00065 GiNaC::exvector
exvector_multiply_last_letter(
const GiNaC::exvector & v,
const GiNaC::ex & x);
00066 GiNaC::exvector
exvector_increase_last_degree(
const GiNaC::exvector & v);
00067
00068
class nestedsums_helper_less
00069 {
00070
public :
00071
bool operator() (
const GiNaC::ex & a,
const GiNaC::ex & b)
const;
00072 };
00073
00074
bool is_class_in_nestedsums(
const GiNaC::ex & expr);
00075
bool is_expr_in_sym_lst(
const GiNaC::ex & expr,
const GiNaC::lst & sym_lst);
00076
00077 GiNaC::ex
nestedsums_helper_normalize(
const GiNaC::ex & expr,
const GiNaC::lst & sym_lst = _empty_list);
00078 GiNaC::ex
nestedsums_helper_sort(
const GiNaC::ex & expr,
const GiNaC::lst & sym_lst = _empty_list);
00079
00080 GiNaC::ex
convert_Zsums_to_standard_form(
const GiNaC::ex & expr,
const GiNaC::lst & sym_lst = _empty_list);
00081
00082
void nestedsums_helper_clear_hashes(
void);
00083
00084 }
00085
00086
#endif // ndef __NESTEDSUMS_HELPERS_H__
00087