00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_TRANSCENDENTAL_A_H__
00027
#define __NESTEDSUMS_TRANSCENDENTAL_A_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00036
00056 class transcendental_sum_type_A :
public GiNaC::basic
00057 {
00058 GINAC_DECLARE_REGISTERED_CLASS(
transcendental_sum_type_A, GiNaC::basic)
00059
00060
00061
public:
00062
transcendental_sum_type_A(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & v,
const GiNaC::ex & ss,
00063
const GiNaC::ex & eps,
int o,
int f);
00064
00065
00066
public:
00067
void archive(GiNaC::archive_node &node)
const;
00068
void read_archive(
const GiNaC::archive_node &node, GiNaC::lst &sym_lst);
00069
00070
unsigned return_type(
void)
const {
return GiNaC::return_types::noncommutative; }
00071
00072
void print(
const GiNaC::print_context & c,
unsigned level = 0)
const;
00073
unsigned precedence(
void)
const {
return 40;}
00074 GiNaC::ex
eval(
int level = 0)
const;
00075 GiNaC::ex subs(
const GiNaC::exmap & m,
unsigned options = 0)
const;
00076
00077
protected:
00078 GiNaC::ex
eval_ncmul(
const GiNaC::exvector & v)
const;
00079 GiNaC::ex derivative(
const GiNaC::symbol & s)
const;
00080
unsigned calchash(
void)
const;
00081
00082
00083
public:
00084
virtual GiNaC::ex
eval_explicit(
int level = 0)
const;
00085
virtual unsigned get_key(
void)
const;
00086
virtual GiNaC::ex
hash_data(
void)
const;
00087
virtual GiNaC::ex
subst_data(
void)
const;
00088
00089
00090
public:
00091 GiNaC::ex
set_expansion(
void)
const;
00092 GiNaC::ex
distribute_over_subsum(
void)
const;
00093 GiNaC::ex
distribute_over_letter(
void)
const;
00094 GiNaC::ex
shift_plus_one(
void)
const;
00095 GiNaC::ex
shift_minus_one(
void)
const;
00096
00097
protected:
00098
00099
00100
00101
protected:
00102
00103 GiNaC::ex n;
00104 GiNaC::ex index;
00105 GiNaC::ex
letter;
00106 GiNaC::ex lst_of_gammas;
00107 GiNaC::ex subsum;
00108
00109 GiNaC::ex expansion_parameter;
00110
00111
int order;
00112
00113
mutable int flag_expand_status;
00114 };
00115
00116 GINAC_DECLARE_UNARCHIVER(
transcendental_sum_type_A);
00117
00123 inline GiNaC::ex
create_transcendental_sum_type_A(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & v,
const GiNaC::ex & ss,
00124
const GiNaC::ex & eps,
int o,
int f)
00125 {
00126
return (
new transcendental_sum_type_A(nn,i,l,v,ss,eps,o,f))->setflag(GiNaC::status_flags::dynallocated);
00127 }
00128
00134 inline GiNaC::ex
create_transcendental_sum_type_A_and_set_gammas(
const GiNaC::ex & nn,
const GiNaC::ex & i,
00135
const GiNaC::ex & l,
const GiNaC::ex & v,
const GiNaC::ex & ss,
00136
const GiNaC::ex & eps,
int o,
int f)
00137 {
00138
00139 GiNaC::ex new_v =
create_list_of_tgamma_and_set_gammas(GiNaC::ex_to<list_of_tgamma>(v).gamma_sequence,i,eps,o);
00140
00141
return (
new transcendental_sum_type_A(nn,i,l,new_v,ss,eps,o,f))->setflag(GiNaC::status_flags::dynallocated);
00142 }
00143
00144 GiNaC::ex
create_transcendental_sum_type_A_and_expand(
const GiNaC::ex & nn,
const GiNaC::ex & i,
00145
const GiNaC::ex & l,
const GiNaC::ex & v,
const GiNaC::ex & ss,
00146
const GiNaC::ex & eps,
int o);
00147
00148 }
00149
00150
#endif // ndef __NESTEDSUMS_TRANSCENDENTAL_A_H__