00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_TRANSCENDENTAL_D_H__
00027
#define __NESTEDSUMS_TRANSCENDENTAL_D_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00035
00071 class transcendental_sum_type_D :
public GiNaC::basic
00072 {
00073 GINAC_DECLARE_REGISTERED_CLASS(
transcendental_sum_type_D, GiNaC::basic)
00074
00075
00076
public:
00077
transcendental_sum_type_D(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & lr,
00078
const GiNaC::ex & v,
const GiNaC::ex & vr,
const GiNaC::ex & ss,
const GiNaC::ex & ssr,
00079
const GiNaC::ex & eps,
int o,
int f);
00080
00081
00082
public:
00083
void archive(GiNaC::archive_node &node)
const;
00084
void read_archive(
const GiNaC::archive_node &node, GiNaC::lst &sym_lst);
00085
00086
unsigned return_type(
void)
const {
return GiNaC::return_types::noncommutative; }
00087
00088
void print(
const GiNaC::print_context & c,
unsigned level = 0)
const;
00089
unsigned precedence(
void)
const {
return 40;}
00090 GiNaC::ex
eval(
int level = 0)
const;
00091 GiNaC::ex subs(
const GiNaC::exmap & m,
unsigned options = 0)
const;
00092
00093
protected:
00094 GiNaC::ex
eval_ncmul(
const GiNaC::exvector & v)
const;
00095 GiNaC::ex derivative(
const GiNaC::symbol & s)
const;
00096
unsigned calchash(
void)
const;
00097
00098
00099
public:
00100
virtual GiNaC::ex
eval_explicit(
int level = 0)
const;
00101
00102
00103
public:
00104 GiNaC::ex
set_expansion(
void)
const;
00105 GiNaC::ex
distribute_over_subsum(
void)
const;
00106 GiNaC::ex
distribute_over_letter(
void)
const;
00107 GiNaC::ex
distribute_over_subsum_rev(
void)
const;
00108 GiNaC::ex
distribute_over_letter_rev(
void)
const;
00109 GiNaC::ex
shift_plus_one(
void)
const;
00110 GiNaC::ex
shift_plus_one_rev(
void)
const;
00111 GiNaC::ex
shift_minus_one(
void)
const;
00112
00113
protected:
00114
00115
00116
00117
protected:
00118
00119 GiNaC::ex n;
00120 GiNaC::ex index;
00121 GiNaC::ex
letter;
00122 GiNaC::ex letter_rev;
00123 GiNaC::ex lst_of_gammas;
00124 GiNaC::ex lst_of_gammas_rev;
00125 GiNaC::ex subsum;
00126 GiNaC::ex subsum_rev;
00127
00128 GiNaC::ex expansion_parameter;
00129
00130
int order;
00131
00132
mutable int flag_expand_status;
00133 };
00134
00135 GINAC_DECLARE_UNARCHIVER(
transcendental_sum_type_D);
00136
00142 inline GiNaC::ex
create_transcendental_sum_type_D(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & lr,
00143
const GiNaC::ex & v,
const GiNaC::ex & vr,
const GiNaC::ex & ss,
const GiNaC::ex & ssr,
00144
const GiNaC::ex & eps,
int o,
int f)
00145 {
00146
return (
new transcendental_sum_type_D(nn,i,l,lr,v,vr,ss,ssr,eps,o,f))->setflag(GiNaC::status_flags::dynallocated);
00147 }
00148
00154 inline GiNaC::ex
create_transcendental_sum_type_D_and_set_gammas(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & lr,
00155
const GiNaC::ex & v,
const GiNaC::ex & vr,
const GiNaC::ex & ss,
const GiNaC::ex & ssr,
00156
const GiNaC::ex & eps,
int o,
int f)
00157 {
00158
00159 GiNaC::ex new_v =
create_list_of_tgamma_and_set_gammas(GiNaC::ex_to<list_of_tgamma>(v).gamma_sequence,i,eps,o);
00160
00161
00162 GiNaC::ex new_vr =
create_list_of_tgamma_and_set_gammas(GiNaC::ex_to<list_of_tgamma>(vr).gamma_sequence,nn-i,eps,o);
00163
00164
return (
new transcendental_sum_type_D(nn,i,l,lr,new_v,new_vr,ss,ssr,eps,o,f))->setflag(GiNaC::status_flags::dynallocated);
00165 }
00166
00167 GiNaC::ex
create_transcendental_sum_type_D_and_expand(
const GiNaC::ex & nn,
const GiNaC::ex & i,
const GiNaC::ex & l,
const GiNaC::ex & lr,
00168
const GiNaC::ex & v,
const GiNaC::ex & vr,
const GiNaC::ex & ss,
const GiNaC::ex & ssr,
00169
const GiNaC::ex & eps,
int o);
00170
00171 }
00172
00173
#endif // ndef __NESTEDSUMS_TRANSCENDENTAL_D_H__