00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_EULER_ZAGIER_SUM_H__
00027
#define __NESTEDSUMS_EULER_ZAGIER_SUM_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00034
00047 class Euler_Zagier_sum :
public virtual Zsum
00048 {
00049 GINAC_DECLARE_REGISTERED_CLASS(
Euler_Zagier_sum,
Zsum)
00050
00051
00052
public:
00053
explicit Euler_Zagier_sum(
const GiNaC::ex & nc);
00054
Euler_Zagier_sum(
const GiNaC::ex & nc,
const GiNaC::ex & llc);
00055
00056
00057
public:
00058
void archive(GiNaC::archive_node &node)
const;
00059
void read_archive(
const GiNaC::archive_node &node, GiNaC::lst &sym_lst);
00060
00061 GiNaC::return_type_t return_type_tinfo()
const;
00062
00063
void print(
const GiNaC::print_context & c,
unsigned level = 0)
const;
00064 GiNaC::ex
eval(
int level = 0)
const;
00065
00066 GiNaC::ex
convert_to_Ssum_exvector(
const GiNaC::exvector & Z0,
const GiNaC::exvector & Z1)
const;
00067 GiNaC::ex
shuffle_exvector(
const GiNaC::exvector & Z0,
const GiNaC::exvector & Z1,
const GiNaC::exvector & Z2)
const;
00068
00069 GiNaC::ex
set_index(
const GiNaC::ex & i)
const;
00070 GiNaC::ex
shift_plus_one(
void)
const;
00071 GiNaC::ex
shift_minus_one(
void)
const;
00072 GiNaC::ex
adjust_upper_limit_downwards(
const GiNaC::ex & i)
const;
00073 GiNaC::ex
adjust_upper_limit_upwards(
const GiNaC::ex & i)
const;
00074 GiNaC::ex
adjust_upper_limit_plus_one(
void)
const;
00075 GiNaC::ex
remove_first_letter(
void)
const;
00076 GiNaC::ex
remove_first_letter(
const GiNaC::ex & nc)
const;
00077 };
00078
00079 GINAC_DECLARE_UNARCHIVER(
Euler_Zagier_sum);
00080
00086 inline GiNaC::ex
create_Euler_Zagier_sum(
const GiNaC::ex & nc,
const GiNaC::ex & llc)
00087 {
00088
return (
new Euler_Zagier_sum(nc,llc))->setflag(GiNaC::status_flags::dynallocated);
00089 }
00090
00091 GiNaC::ex
create_Euler_Zagier_sum_with_ones(
const GiNaC::ex &n,
const int &k);
00092
00093 GiNaC::ex
create_Euler_Zagier_sum_from_exvector(
const GiNaC::ex & nc,
const GiNaC::exvector & v);
00094
00095 }
00096
00097
namespace GiNaC {
00098
00099
00100
template<>
inline const nestedsums::Euler_Zagier_sum &ex_to<nestedsums::Euler_Zagier_sum>(
const ex &e)
00101 {
00102
return dynamic_cast<const nestedsums::Euler_Zagier_sum &>(*e.bp);
00103 }
00104
00105 }
00106
00107
#endif // ndef __NESTEDSUMS_EULER_ZAGIER_SUM_H__