7 #ifndef SYMENGINE_FUNCTIONS_H
8 #define SYMENGINE_FUNCTIONS_H
11 #include <symengine/symengine_casts.h>
24 RCP<const Basic> arg_;
31 hash_t seed = this->get_type_code();
32 hash_combine<Basic>(seed, *arg_);
45 virtual RCP<const Basic>
create(
const RCP<const Basic> &arg)
const = 0;
49 SYMENGINE_ASSERT(b.
size() == 1);
61 *down_cast<const OneArgFunction &>(o).
get_arg());
68 *(down_cast<const OneArgFunction &>(o).
get_arg()));
72 template <
class BaseClass>
80 TwoArgBasic(
const RCP<const Basic> &a,
const RCP<const Basic> &b)
85 hash_t seed = this->get_type_code();
86 hash_combine<Basic>(seed, *a_);
87 hash_combine<Basic>(seed, *
b_);
100 inline vec_basic get_args()
const override
105 virtual RCP<const Basic>
create(
const RCP<const Basic> &a,
106 const RCP<const Basic> &b)
const = 0;
110 SYMENGINE_ASSERT(b.
size() == 2);
111 return create(b[0], b[1]);
122 *down_cast<const TwoArgBasic &>(o).
get_arg1())
124 *down_cast<const TwoArgBasic &>(o).
get_arg2());
130 const TwoArgBasic &t = down_cast<const TwoArgBasic &>(o);
133 *(down_cast<const TwoArgBasic &>(o).
get_arg1()));
136 *(down_cast<const TwoArgBasic &>(o).
get_arg2()));
141 typedef TwoArgBasic<Function> TwoArgFunction;
154 hash_t seed = this->get_type_code();
155 for (
const auto &a : arg_)
156 hash_combine<Basic>(seed, *a);
176 and unified_eq(get_vec(),
177 down_cast<const MultiArgFunction &>(o).get_vec());
184 get_vec(), down_cast<const MultiArgFunction &>(o).get_vec());
193 Sign(
const RCP<const Basic> &arg);
197 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
201 RCP<const Basic>
sign(
const RCP<const Basic> &arg);
208 Floor(
const RCP<const Basic> &arg);
212 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
216 RCP<const Basic>
floor(
const RCP<const Basic> &arg);
223 Ceiling(
const RCP<const Basic> &arg);
227 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
231 RCP<const Basic>
ceiling(
const RCP<const Basic> &arg);
238 Truncate(
const RCP<const Basic> &arg);
242 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
246 RCP<const Basic>
truncate(
const RCP<const Basic> &arg);
257 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
261 RCP<const Basic>
conjugate(
const RCP<const Basic> &arg);
286 bool get_pi_shift(
const RCP<const Basic> &arg,
const Ptr<RCP<const Number>> &n,
287 const Ptr<RCP<const Basic>> &m);
292 bool handle_minus(
const RCP<const Basic> &arg,
293 const Ptr<RCP<const Basic>> &rarg);
298 bool inverse_lookup(
const umap_basic_basic &d,
const RCP<const Basic> &t,
299 const Ptr<RCP<const Basic>> &index);
302 bool trig_simplify(
const RCP<const Basic> &arg,
unsigned period,
bool odd,
304 const Ptr<RCP<const Basic>> &rarg,
int &index,
308 RCP<const Basic> sqrt(
const RCP<const Basic> &arg);
311 RCP<const Basic> cbrt(
const RCP<const Basic> &arg);
319 Sin(
const RCP<const Basic> &arg);
323 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
327 RCP<const Basic>
sin(
const RCP<const Basic> &arg);
335 Cos(
const RCP<const Basic> &arg);
339 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
343 RCP<const Basic>
cos(
const RCP<const Basic> &arg);
351 Tan(
const RCP<const Basic> &arg);
355 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
358 RCP<const Basic>
tan(
const RCP<const Basic> &arg);
366 Cot(
const RCP<const Basic> &arg);
370 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
373 RCP<const Basic>
cot(
const RCP<const Basic> &arg);
381 Csc(
const RCP<const Basic> &arg);
385 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
388 RCP<const Basic>
csc(
const RCP<const Basic> &arg);
396 Sec(
const RCP<const Basic> &arg);
400 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
403 RCP<const Basic>
sec(
const RCP<const Basic> &arg);
411 ASin(
const RCP<const Basic> &arg);
415 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
419 RCP<const Basic>
asin(
const RCP<const Basic> &arg);
427 ACos(
const RCP<const Basic> &arg);
431 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
435 RCP<const Basic>
acos(
const RCP<const Basic> &arg);
443 ASec(
const RCP<const Basic> &arg);
447 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
451 RCP<const Basic>
asec(
const RCP<const Basic> &arg);
459 ACsc(
const RCP<const Basic> &arg);
463 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
467 RCP<const Basic>
acsc(
const RCP<const Basic> &arg);
475 ATan(
const RCP<const Basic> &arg);
479 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
483 RCP<const Basic>
atan(
const RCP<const Basic> &arg);
491 ACot(
const RCP<const Basic> &arg);
495 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
499 RCP<const Basic>
acot(
const RCP<const Basic> &arg);
506 ATan2(
const RCP<const Basic> &num,
const RCP<const Basic> &den);
509 const RCP<const Basic> &den)
const;
521 RCP<const Basic>
create(
const RCP<const Basic> &a,
522 const RCP<const Basic> &b)
const override;
526 RCP<const Basic>
atan2(
const RCP<const Basic> &num,
527 const RCP<const Basic> &den);
537 Log(
const RCP<const Basic> &arg);
541 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
545 RCP<const Basic>
log(
const RCP<const Basic> &arg);
547 RCP<const Basic>
log(
const RCP<const Basic> &arg,
const RCP<const Basic> &b);
559 LambertW(
const RCP<const Basic> &arg);
563 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
567 RCP<const Basic>
lambertw(
const RCP<const Basic> &arg);
586 Zeta(
const RCP<const Basic> &s,
const RCP<const Basic> &a);
588 Zeta(
const RCP<const Basic> &s);
590 inline RCP<const Basic>
get_s()
const
595 inline RCP<const Basic>
get_a()
const
601 const RCP<const Basic> &a)
const;
603 RCP<const Basic>
create(
const RCP<const Basic> &a,
604 const RCP<const Basic> &b)
const override;
608 RCP<const Basic>
zeta(
const RCP<const Basic> &s,
const RCP<const Basic> &a);
609 RCP<const Basic>
zeta(
const RCP<const Basic> &s);
619 inline RCP<const Basic>
get_s()
const
628 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
664 RCP<const Basic> function_symbol(
std::string name,
const RCP<const Basic> &arg);
665 RCP<const Basic> function_symbol(
std::string name,
const vec_basic &arg);
678 virtual RCP<const Number> eval(
long bits)
const = 0;
679 virtual RCP<const Basic> diff_impl(
const RCP<const Symbol> &s)
const = 0;
689 RCP<const Basic> arg_;
707 static RCP<const Derivative> create(
const RCP<const Basic> &arg,
710 return make_rcp<const Derivative>(arg, x);
716 inline RCP<const Basic> get_arg()
const
720 inline const multiset_basic &get_symbols()
const
730 bool is_canonical(
const RCP<const Basic> &arg,
741 RCP<const Basic> arg_;
748 static RCP<const Subs> create(
const RCP<const Basic> &arg,
751 return make_rcp<const Subs>(arg, x);
757 inline const RCP<const Basic> &get_arg()
const
761 inline const map_basic_basic &get_dict()
const
765 virtual vec_basic get_variables()
const;
766 virtual vec_basic get_point()
const;
767 vec_basic
get_args()
const override;
769 bool is_canonical(
const RCP<const Basic> &arg,
770 const map_basic_basic &x)
const;
800 Sinh(
const RCP<const Basic> &arg);
804 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
808 RCP<const Basic>
sinh(
const RCP<const Basic> &arg);
816 Csch(
const RCP<const Basic> &arg);
820 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
824 RCP<const Basic>
csch(
const RCP<const Basic> &arg);
832 Cosh(
const RCP<const Basic> &arg);
836 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
840 RCP<const Basic>
cosh(
const RCP<const Basic> &arg);
848 Sech(
const RCP<const Basic> &arg);
852 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
856 RCP<const Basic>
sech(
const RCP<const Basic> &arg);
864 Tanh(
const RCP<const Basic> &arg);
868 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
872 RCP<const Basic>
tanh(
const RCP<const Basic> &arg);
880 Coth(
const RCP<const Basic> &arg);
884 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
888 RCP<const Basic>
coth(
const RCP<const Basic> &arg);
896 ASinh(
const RCP<const Basic> &arg);
900 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
904 RCP<const Basic>
asinh(
const RCP<const Basic> &arg);
912 ACsch(
const RCP<const Basic> &arg);
916 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
920 RCP<const Basic>
acsch(
const RCP<const Basic> &arg);
928 ACosh(
const RCP<const Basic> &arg);
932 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
936 RCP<const Basic>
acosh(
const RCP<const Basic> &arg);
944 ATanh(
const RCP<const Basic> &arg);
948 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
952 RCP<const Basic>
atanh(
const RCP<const Basic> &arg);
960 ACoth(
const RCP<const Basic> &arg);
964 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
968 RCP<const Basic>
acoth(
const RCP<const Basic> &arg);
976 ASech(
const RCP<const Basic> &arg);
980 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
984 RCP<const Basic>
asech(
const RCP<const Basic> &arg);
998 KroneckerDelta(
const RCP<const Basic> &i,
const RCP<const Basic> &j);
1001 const RCP<const Basic> &j)
const;
1003 RCP<const Basic>
create(
const RCP<const Basic> &a,
1004 const RCP<const Basic> &b)
const override;
1009 const RCP<const Basic> &j);
1046 SYMENGINE_ASSIGN_TYPEID()
1052 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1056 RCP<const Basic>
erf(
const RCP<const Basic> &arg);
1071 SYMENGINE_ASSIGN_TYPEID()
1077 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1081 RCP<const Basic>
erfc(
const RCP<const Basic> &arg);
1098 Gamma(
const RCP<const Basic> &arg);
1102 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1106 RCP<const Basic>
gamma(
const RCP<const Basic> &arg);
1115 LowerGamma(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1118 const RCP<const Basic> &x)
const;
1120 RCP<const Basic>
create(
const RCP<const Basic> &a,
1121 const RCP<const Basic> &b)
const override;
1125 RCP<const Basic>
lowergamma(
const RCP<const Basic> &s,
1126 const RCP<const Basic> &x);
1135 UpperGamma(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1138 const RCP<const Basic> &x)
const;
1140 RCP<const Basic>
create(
const RCP<const Basic> &a,
1141 const RCP<const Basic> &b)
const override;
1145 RCP<const Basic>
uppergamma(
const RCP<const Basic> &s,
1146 const RCP<const Basic> &x);
1159 SYMENGINE_ASSIGN_TYPEID()
1164 RCP<const Basic> rewrite_as_gamma()
const;
1166 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1170 RCP<const Basic>
loggamma(
const RCP<const Basic> &arg);
1187 SYMENGINE_ASSIGN_TYPEID()
1192 const RCP<const Basic> &y);
1194 bool is_canonical(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1195 RCP<const Basic> rewrite_as_gamma()
const;
1197 RCP<const Basic>
create(
const RCP<const Basic> &a,
1198 const RCP<const Basic> &b)
const override;
1202 RCP<const Basic>
beta(
const RCP<const Basic> &x,
const RCP<const Basic> &y);
1223 SYMENGINE_ASSIGN_TYPEID()
1224 SYMENGINE_ASSERT(is_canonical(n, x))
1226 bool is_canonical(
const RCP<const Basic> &n,
const RCP<const Basic> &x);
1227 RCP<const Basic> rewrite_as_zeta()
const;
1229 RCP<const Basic>
create(
const RCP<const Basic> &a,
1230 const RCP<const Basic> &b)
const override;
1234 RCP<const Basic>
polygamma(
const RCP<const Basic> &n,
1235 const RCP<const Basic> &x);
1237 RCP<const Basic> digamma(
const RCP<const Basic> &x);
1239 RCP<const Basic> trigamma(
const RCP<const Basic> &x);
1248 Abs(
const RCP<const Basic> &arg);
1252 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1256 RCP<const Basic>
abs(
const RCP<const Basic> &arg);
1289 RCP<const Basic>
trig_to_sqrt(
const RCP<const Basic> &arg);
1300 RCP<const Basic>
create(
const RCP<const Basic> &arg)
const override;
1303 RCP<const Basic> unevaluated_expr(
const RCP<const Basic> &arg);
The base class for SymEngine.
#define IMPLEMENT_TYPEID(SYMENGINE_ID)
Inline members and functions.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
ACos(const RCP< const Basic > &arg)
ACos Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ACosh(const RCP< const Basic > &arg)
ACosh Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
ACot(const RCP< const Basic > &arg)
ACot Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ACoth(const RCP< const Basic > &arg)
ACoth Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
ACsc(const RCP< const Basic > &arg)
ACsc Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ACsch(const RCP< const Basic > &arg)
ACsch Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ASec(const RCP< const Basic > &arg)
ASec Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ASech(const RCP< const Basic > &arg)
ASech Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
ASin(const RCP< const Basic > &arg)
ASin Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
ASinh(const RCP< const Basic > &arg)
ASinh Constructor.
RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const override
bool is_canonical(const RCP< const Basic > &num, const RCP< const Basic > &den) const
ATan2(const RCP< const Basic > &num, const RCP< const Basic > &den)
ATan2 Constructor.
RCP< const Basic > get_den() const
RCP< const Basic > get_num() const
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
ATan(const RCP< const Basic > &arg)
ATan Constructor.
ATanh(const RCP< const Basic > &arg)
ATanh Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Abs(const RCP< const Basic > &arg)
Abs Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
The lowest unit of symbolic representation.
static RCP< const Beta > from_two_basic(const RCP< const Basic > &x, const RCP< const Basic > &y)
return Beta with ordered arguments
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
bool is_canonical(const RCP< const Basic > &s, const RCP< const Basic > &x)
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Ceiling(const RCP< const Basic > &arg)
Ceiling Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
Conjugate(const RCP< const Basic > &arg)
Conjugate constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Cos(const RCP< const Basic > &arg)
Cos Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Cosh(const RCP< const Basic > &arg)
Cosh Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Cot(const RCP< const Basic > &arg)
Cot Constructor.
Coth(const RCP< const Basic > &arg)
Coth Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Csc(const RCP< const Basic > &arg)
Csc Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Csch(const RCP< const Basic > &arg)
Csch Constructor.
hash_t __hash__() const override
bool __eq__(const Basic &o) const override
Test equality.
vec_basic get_args() const override
Returns the list of arguments.
multiset_basic x_
The expression to be differentiated.
int compare(const Basic &o) const override
RCP< const Basic > get_s() const
bool is_canonical(const RCP< const Basic > &s) const
virtual RCP< const Basic > create(const RCP< const Basic > &arg) const=0
Method to construct classes with canonicalization.
Dirichlet_eta(const RCP< const Basic > &s)
Dirichlet_eta Constructor.
RCP< const Basic > rewrite_as_zeta() const
Rewrites in the form of zeta.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Floor(const RCP< const Basic > &arg)
Floor Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
int compare(const Basic &o) const override
Structural equality comparator.
FunctionSymbol(std::string name, const vec_basic &arg)
FunctionSymbol Constructors.
bool is_canonical(const vec_basic &arg) const
RCP< const Basic > create(const vec_basic &x) const override
Method to construct classes with canonicalization.
hash_t __hash__() const override
const std::string & get_name() const
bool __eq__(const Basic &o) const override
RCP< const Basic > create(const vec_basic &v) const override=0
Method to construct classes with canonicalization.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Gamma(const RCP< const Basic > &arg)
Gamma Constructor.
HyperbolicBase(RCP< const Basic > arg)
Constructor.
HyperbolicFunction(RCP< const Basic > arg)
Constructor.
InverseHyperbolicFunction(RCP< const Basic > arg)
Constructor.
InverseTrigFunction(RCP< const Basic > arg)
Constructor.
bool is_canonical(const RCP< const Basic > &i, const RCP< const Basic > &j) const
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
KroneckerDelta(const RCP< const Basic > &i, const RCP< const Basic > &j)
KroneckerDelta Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
LambertW(const RCP< const Basic > &arg)
LambertW Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
bool is_canonical(const vec_basic &arg) const
LeviCivita(const vec_basic &&arg)
LeviCivita Constructor.
RCP< const Basic > create(const vec_basic &arg) const override
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
bool is_canonical(const RCP< const Basic > &arg) const
Log(const RCP< const Basic > &arg)
Log Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
The lower incomplete gamma function.
LowerGamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
LowerGamma Constructor.
bool is_canonical(const RCP< const Basic > &s, const RCP< const Basic > &x) const
bool is_canonical(const vec_basic &arg) const
RCP< const Basic > create(const vec_basic &arg) const override
Max(const vec_basic &&arg)
Max Constructor.
bool is_canonical(const vec_basic &arg) const
Min(const vec_basic &&arg)
Min Constructor.
RCP< const Basic > create(const vec_basic &arg) const override
virtual RCP< const Basic > create(const vec_basic &v) const =0
Method to construct classes with canonicalization.
hash_t __hash__() const override
bool __eq__(const Basic &o) const override
vec_basic get_args() const override
Returns the list of arguments.
int compare(const Basic &o) const override
Structural equality comparator.
MultiArgFunction(const vec_basic &arg)
Constructor.
virtual RCP< const Basic > create(const RCP< const Basic > &arg) const =0
Method to construct classes with canonicalization.
bool __eq__(const Basic &o) const override
hash_t __hash__() const override
OneArgFunction(const RCP< const Basic > &arg)
The arg in OneArgFunction(arg)
vec_basic get_args() const override
Returns the list of arguments.
RCP< const Basic > get_arg() const
int compare(const Basic &o) const override
Structural equality comparator.
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Sec(const RCP< const Basic > &arg)
Sec Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
Sech(const RCP< const Basic > &arg)
Sech Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Sign(const RCP< const Basic > &arg)
Sign constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Sin(const RCP< const Basic > &arg)
Sin Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
Sinh(const RCP< const Basic > &arg)
Sinh Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
vec_basic get_args() const override
Returns the list of arguments.
int compare(const Basic &o) const override
hash_t __hash__() const override
bool __eq__(const Basic &o) const override
Test equality.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
bool is_canonical(const RCP< const Basic > &arg) const
Tan(const RCP< const Basic > &arg)
Tan Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
RCP< const Basic > create(const RCP< const Basic > &arg) const override
Tanh(const RCP< const Basic > &arg)
Tanh Constructor.
TrigBase(RCP< const Basic > arg)
Constructor.
TrigFunction(RCP< const Basic > arg)
Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
Truncate(const RCP< const Basic > &arg)
Truncate Constructor.
RCP< const Basic > create(const RCP< const Basic > &arg) const override
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const =0
Method to construct classes with canonicalization.
hash_t __hash__() const override
RCP< const Basic > get_arg1() const
int compare(const Basic &o) const override
Structural equality comparator.
RCP< const Basic > b_
a in TwoArgBasic(a, b)
RCP< const Basic > get_arg2() const
TwoArgBasic(const RCP< const Basic > &a, const RCP< const Basic > &b)
b in TwoArgBasic(a, b)
bool __eq__(const Basic &o) const override
RCP< const Basic > create(const RCP< const Basic > &arg) const override
UnevaluatedExpr(const RCP< const Basic > &arg)
UnevaluatedExpr Constructor.
bool is_canonical(const RCP< const Basic > &arg) const
UpperGamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
UpperGamma Constructor.
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
The upper incomplete gamma function.
bool is_canonical(const RCP< const Basic > &s, const RCP< const Basic > &x) const
Zeta(const RCP< const Basic > &s, const RCP< const Basic > &a)
Zeta Constructor.
virtual RCP< const Basic > create(const RCP< const Basic > &a, const RCP< const Basic > &b) const=0
Method to construct classes with canonicalization.
RCP< const Basic > get_a() const
bool is_canonical(const RCP< const Basic > &s, const RCP< const Basic > &a) const
RCP< const Basic > get_s() const
Main namespace for SymEngine package.
RCP< const Basic > acos(const RCP< const Basic > &arg)
Canonicalize ACos:
RCP< const Basic > sec(const RCP< const Basic > &arg)
Canonicalize Sec:
RCP< const Basic > polygamma(const RCP< const Basic > &n_, const RCP< const Basic > &x_)
Canonicalize PolyGamma.
RCP< const Basic > beta(const RCP< const Basic > &x, const RCP< const Basic > &y)
Canonicalize Beta:
RCP< const Basic > zeta(const RCP< const Basic > &s, const RCP< const Basic > &a)
Create a new Zeta instance:
RCP< const Basic > max(const vec_basic &arg)
Canonicalize Max:
bool eq(const Basic &a, const Basic &b)
Checks equality for a and b
RCP< const Basic > coth(const RCP< const Basic > &arg)
Canonicalize Coth:
bool get_pi_shift(const RCP< const Basic > &arg, const Ptr< RCP< const Number >> &n, const Ptr< RCP< const Basic >> &x)
RCP< const Basic > sign(const RCP< const Basic > &arg)
Canonicalize Sign.
RCP< const Basic > atan2(const RCP< const Basic > &num, const RCP< const Basic > &den)
Canonicalize ATan2:
RCP< const Basic > ceiling(const RCP< const Basic > &arg)
Canonicalize Ceiling:
RCP< const Basic > abs(const RCP< const Basic > &arg)
Canonicalize Abs:
RCP< const Basic > acsc(const RCP< const Basic > &arg)
Canonicalize ACsc:
bool inverse_lookup(const umap_basic_basic &d, const RCP< const Basic > &t, const Ptr< RCP< const Basic >> &index)
RCP< const Basic > sech(const RCP< const Basic > &arg)
Canonicalize Sech:
RCP< const Basic > gamma(const RCP< const Basic > &arg)
Canonicalize Gamma:
RCP< const Basic > asin(const RCP< const Basic > &arg)
Canonicalize ASin:
RCP< const Basic > acoth(const RCP< const Basic > &arg)
Canonicalize ACoth:
RCP< const Basic > tan(const RCP< const Basic > &arg)
Canonicalize Tan:
RCP< const Basic > cosh(const RCP< const Basic > &arg)
Canonicalize Cosh:
RCP< const Basic > asec(const RCP< const Basic > &arg)
Canonicalize ASec:
RCP< const Basic > acsch(const RCP< const Basic > &arg)
Canonicalize ACsch:
bool could_extract_minus(const Basic &arg)
RCP< const Basic > atan(const RCP< const Basic > &arg)
Canonicalize ATan:
RCP< const Basic > asinh(const RCP< const Basic > &arg)
Canonicalize ASinh:
RCP< const Basic > tanh(const RCP< const Basic > &arg)
Canonicalize Tanh:
RCP< const Basic > cot(const RCP< const Basic > &arg)
Canonicalize Cot:
RCP< const Basic > atanh(const RCP< const Basic > &arg)
Canonicalize ATanh:
RCP< const Basic > floor(const RCP< const Basic > &arg)
Canonicalize Floor:
RCP< const Basic > erfc(const RCP< const Basic > &arg)
Canonicalize Erfc:
RCP< const Basic > levi_civita(const vec_basic &arg)
Canonicalize LeviCivita:
RCP< const Basic > acosh(const RCP< const Basic > &arg)
Canonicalize ACosh:
RCP< const Basic > lowergamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
Canonicalize LowerGamma:
RCP< const Basic > truncate(const RCP< const Basic > &arg)
Canonicalize Truncate:
RCP< const Basic > loggamma(const RCP< const Basic > &arg)
Canonicalize LogGamma:
RCP< const Basic > cos(const RCP< const Basic > &arg)
Canonicalize Cos:
RCP< const Basic > log(const RCP< const Basic > &arg)
Returns the Natural Logarithm from argument arg
RCP< const Basic > csc(const RCP< const Basic > &arg)
Canonicalize Csc:
RCP< const Basic > dirichlet_eta(const RCP< const Basic > &s)
Create a new Dirichlet_eta instance:
bool is_same_type(const Basic &a, const Basic &b)
Returns true if a and b are exactly the same type T.
RCP< const Basic > csch(const RCP< const Basic > &arg)
Canonicalize Csch:
int unified_compare(const T &a, const T &b)
bool neq(const Basic &a, const Basic &b)
Checks inequality for a and b
RCP< const Basic > min(const vec_basic &arg)
Canonicalize Min:
RCP< const Basic > erf(const RCP< const Basic > &arg)
Canonicalize Erf:
RCP< const Basic > trig_to_sqrt(const RCP< const Basic > &arg)
RCP< const Basic > asech(const RCP< const Basic > &arg)
Canonicalize ASech:
RCP< const Basic > lambertw(const RCP< const Basic > &arg)
Create a new LambertW instance:
RCP< const Basic > sinh(const RCP< const Basic > &arg)
Canonicalize Sinh:
RCP< const Basic > kronecker_delta(const RCP< const Basic > &i, const RCP< const Basic > &j)
Canonicalize KroneckerDelta:
RCP< const Basic > acot(const RCP< const Basic > &arg)
Canonicalize ACot:
RCP< const Basic > conjugate(const RCP< const Basic > &arg)
Canonicalize Conjugate.
RCP< const Basic > sin(const RCP< const Basic > &arg)
Canonicalize Sin:
RCP< const Basic > uppergamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
Canonicalize UpperGamma: