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