00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_TRANSC_FCT_D_H__
00027
#define __NESTEDSUMS_TRANSC_FCT_D_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00035
00048 class transcendental_fct_type_D :
public GiNaC::basic
00049 {
00050 GINAC_DECLARE_REGISTERED_CLASS(
transcendental_fct_type_D, GiNaC::basic)
00051
00052
00053
public:
00054
transcendental_fct_type_D(
const GiNaC::ex & xx1,
const GiNaC::ex & xx2,
const GiNaC::ex & ii_num,
const GiNaC::ex & ii_denom,
00055
const GiNaC::ex & jj_num,
const GiNaC::ex & jj_denom,
00056
const GiNaC::ex & iijj_num,
const GiNaC::ex & iijj_denom,
00057
const GiNaC::ex & pp_num,
const GiNaC::ex & pp_denom);
00058
transcendental_fct_type_D(
const GiNaC::ex & xx1,
const GiNaC::ex & xx2,
const GiNaC::ex & ii_num,
const GiNaC::ex & ii_denom,
00059
const GiNaC::ex & jj_num,
const GiNaC::ex & jj_denom,
00060
const GiNaC::ex & iijj_num,
const GiNaC::ex & iijj_denom,
00061
const GiNaC::ex & pp_num,
const GiNaC::ex & pp_denom,
const GiNaC::ex & eps,
int o,
int f);
00062
00063
00064
public:
00065
void archive(GiNaC::archive_node &node)
const;
00066
void read_archive(
const GiNaC::archive_node &node, GiNaC::lst &sym_lst);
00067
00068
unsigned return_type(
void)
const {
return GiNaC::return_types::noncommutative; }
00069
00070
void print(
const GiNaC::print_context & c,
unsigned level = 0)
const;
00071
unsigned precedence(
void)
const {
return 40;}
00072 GiNaC::ex
eval(
int level = 0)
const;
00073 GiNaC::ex subs(
const GiNaC::exmap & m,
unsigned options = 0)
const;
00074
00075
protected:
00076 GiNaC::ex
eval_ncmul(
const GiNaC::exvector & v)
const;
00077 GiNaC::ex derivative(
const GiNaC::symbol & s)
const;
00078
unsigned calchash(
void)
const;
00079
00080
00081
public:
00082 GiNaC::ex
set_expansion(
const GiNaC::ex & eps,
int o)
const;
00083 GiNaC::ex
shift_plus_one(
void)
const;
00084
00085
00086
00087
protected:
00088
00089 GiNaC::ex x1;
00090 GiNaC::ex x2;
00091 GiNaC::ex i_num;
00092 GiNaC::ex i_denom;
00093 GiNaC::ex j_num;
00094 GiNaC::ex j_denom;
00095 GiNaC::ex ij_num;
00096 GiNaC::ex ij_denom;
00097 GiNaC::ex pre_num;
00098 GiNaC::ex pre_denom;
00099
00100 GiNaC::ex expansion_parameter;
00101
00102
int order;
00103
00104
mutable int flag_expand_status;
00105 };
00106
00107 GINAC_DECLARE_UNARCHIVER(
transcendental_fct_type_D);
00108
00114 inline GiNaC::ex
create_transcendental_fct_type_D(
const GiNaC::ex & xx1,
const GiNaC::ex & xx2,
const GiNaC::ex & ii_num,
const GiNaC::ex & ii_denom,
00115
const GiNaC::ex & jj_num,
const GiNaC::ex & jj_denom,
00116
const GiNaC::ex & iijj_num,
const GiNaC::ex & iijj_denom,
00117
const GiNaC::ex & pp_num,
const GiNaC::ex & pp_denom)
00118 {
00119
return (
new transcendental_fct_type_D(xx1,xx2,ii_num,ii_denom,jj_num,jj_denom,iijj_num,iijj_denom,pp_num,pp_denom)
00120 )->setflag(GiNaC::status_flags::dynallocated);
00121 }
00122
00128 inline GiNaC::ex
create_transcendental_fct_type_D(
const GiNaC::ex & xx1,
const GiNaC::ex & xx2,
const GiNaC::ex & ii_num,
const GiNaC::ex & ii_denom,
00129
const GiNaC::ex & jj_num,
const GiNaC::ex & jj_denom,
00130
const GiNaC::ex & iijj_num,
const GiNaC::ex & iijj_denom,
00131
const GiNaC::ex & pp_num,
const GiNaC::ex & pp_denom,
const GiNaC::ex & eps,
int o,
int f)
00132 {
00133
return (
new transcendental_fct_type_D(xx1,xx2,ii_num,ii_denom,jj_num,jj_denom,iijj_num,iijj_denom,pp_num,pp_denom,eps,o,f)
00134 )->setflag(GiNaC::status_flags::dynallocated);
00135 }
00136
00137 }
00138
00139
#endif // ndef __NESTEDSUMS_TRANSC_FCT_D_H__