00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#ifndef __NESTEDSUMS_MULTIPLE_POLYLOG_H__
00027
#define __NESTEDSUMS_MULTIPLE_POLYLOG_H__
00028
00029
#include "ginac/ginac.h"
00030
00031
namespace nestedsums {
00032
00034
00053 class multiple_polylog :
public virtual Zsum
00054 {
00055 GINAC_DECLARE_REGISTERED_CLASS(
multiple_polylog,
Zsum)
00056
00057
00058
public:
00059
explicit multiple_polylog(
const GiNaC::ex & llc);
00060
00061
00062
public:
00063
void archive(GiNaC::archive_node &node)
const;
00064
void read_archive(
const GiNaC::archive_node &node, GiNaC::lst &sym_lst);
00065
00066
void print(
const GiNaC::print_context & c,
unsigned level = 0)
const;
00067 GiNaC::ex
eval(
int level = 0)
const;
00068
00069
00070
public:
00071
virtual GiNaC::ex
eval_approx(
int level = 0)
const;
00072 };
00073
00074 GINAC_DECLARE_UNARCHIVER(
multiple_polylog);
00075
00081 inline GiNaC::ex
create_multiple_polylog(
const GiNaC::ex & llc)
00082 {
00083
return (
new multiple_polylog(llc))->setflag(GiNaC::status_flags::dynallocated);
00084 }
00085
00086 GiNaC::ex
eval_multiple_polylog_approx(
const GiNaC::ex & expr);
00087
00088 }
00089
00090
namespace GiNaC {
00091
00092
00093
template<>
inline const nestedsums::multiple_polylog &ex_to<nestedsums::multiple_polylog>(
const ex &e)
00094 {
00095
return dynamic_cast<const nestedsums::multiple_polylog &>(*e.bp);
00096 }
00097
00098 }
00099
00100
#endif // ndef __NESTEDSUMS_MULTIPLE_POLYLOG_H__