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;
47 inline RCP<const Basic> create(
const vec_basic &b)
const
49 SYMENGINE_ASSERT(b.size() == 1);
61 *down_cast<const OneArgFunction &>(o).get_arg());
67 return get_arg()->__cmp__(
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;
108 inline RCP<const Basic>
create(
const vec_basic &b)
const
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);
163 inline const vec_basic &get_vec()
const
168 virtual RCP<const Basic>
create(
const vec_basic &v)
const = 0;
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);
195 bool is_canonical(
const RCP<const Basic> &arg)
const;
197 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
201 SYMENGINE_EXPORT RCP<const Basic>
sign(
const RCP<const Basic> &arg);
208 Floor(
const RCP<const Basic> &arg);
210 bool is_canonical(
const RCP<const Basic> &arg)
const;
212 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
216 SYMENGINE_EXPORT RCP<const Basic>
floor(
const RCP<const Basic> &arg);
223 Ceiling(
const RCP<const Basic> &arg);
225 bool is_canonical(
const RCP<const Basic> &arg)
const;
227 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
231 SYMENGINE_EXPORT RCP<const Basic>
ceiling(
const RCP<const Basic> &arg);
238 Truncate(
const RCP<const Basic> &arg);
240 bool is_canonical(
const RCP<const Basic> &arg)
const;
242 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
246 SYMENGINE_EXPORT RCP<const Basic>
truncate(
const RCP<const Basic> &arg);
255 bool is_canonical(
const RCP<const Basic> &arg)
const;
257 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
261 SYMENGINE_EXPORT RCP<const Basic>
conjugate(
const RCP<const Basic> &arg);
287 bool get_pi_shift(
const RCP<const Basic> &arg,
const Ptr<RCP<const Number>> &n,
288 const Ptr<RCP<const Basic>> &m);
294 bool handle_minus(
const RCP<const Basic> &arg,
295 const Ptr<RCP<const Basic>> &rarg);
301 bool inverse_lookup(
const umap_basic_basic &d,
const RCP<const Basic> &t,
302 const Ptr<RCP<const Basic>> &index);
306 bool trig_simplify(
const RCP<const Basic> &arg,
unsigned period,
bool odd,
308 const Ptr<RCP<const Basic>> &rarg,
int &index,
312 SYMENGINE_EXPORT RCP<const Basic> sqrt(
const RCP<const Basic> &arg);
315 SYMENGINE_EXPORT RCP<const Basic> cbrt(
const RCP<const Basic> &arg);
323 Sin(
const RCP<const Basic> &arg);
325 bool is_canonical(
const RCP<const Basic> &arg)
const;
327 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
331 SYMENGINE_EXPORT RCP<const Basic>
sin(
const RCP<const Basic> &arg);
339 Cos(
const RCP<const Basic> &arg);
341 bool is_canonical(
const RCP<const Basic> &arg)
const;
343 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
347 SYMENGINE_EXPORT RCP<const Basic>
cos(
const RCP<const Basic> &arg);
355 Tan(
const RCP<const Basic> &arg);
357 bool is_canonical(
const RCP<const Basic> &arg)
const;
359 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
362 SYMENGINE_EXPORT RCP<const Basic>
tan(
const RCP<const Basic> &arg);
370 Cot(
const RCP<const Basic> &arg);
372 bool is_canonical(
const RCP<const Basic> &arg)
const;
374 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
377 SYMENGINE_EXPORT RCP<const Basic>
cot(
const RCP<const Basic> &arg);
385 Csc(
const RCP<const Basic> &arg);
387 bool is_canonical(
const RCP<const Basic> &arg)
const;
389 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
392 SYMENGINE_EXPORT RCP<const Basic>
csc(
const RCP<const Basic> &arg);
400 Sec(
const RCP<const Basic> &arg);
402 bool is_canonical(
const RCP<const Basic> &arg)
const;
404 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
407 SYMENGINE_EXPORT RCP<const Basic>
sec(
const RCP<const Basic> &arg);
415 ASin(
const RCP<const Basic> &arg);
417 bool is_canonical(
const RCP<const Basic> &arg)
const;
419 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
423 SYMENGINE_EXPORT RCP<const Basic>
asin(
const RCP<const Basic> &arg);
431 ACos(
const RCP<const Basic> &arg);
433 bool is_canonical(
const RCP<const Basic> &arg)
const;
435 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
439 SYMENGINE_EXPORT RCP<const Basic>
acos(
const RCP<const Basic> &arg);
447 ASec(
const RCP<const Basic> &arg);
449 bool is_canonical(
const RCP<const Basic> &arg)
const;
451 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
455 SYMENGINE_EXPORT RCP<const Basic>
asec(
const RCP<const Basic> &arg);
463 ACsc(
const RCP<const Basic> &arg);
465 bool is_canonical(
const RCP<const Basic> &arg)
const;
467 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
471 SYMENGINE_EXPORT RCP<const Basic>
acsc(
const RCP<const Basic> &arg);
479 ATan(
const RCP<const Basic> &arg);
481 bool is_canonical(
const RCP<const Basic> &arg)
const;
483 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
487 SYMENGINE_EXPORT RCP<const Basic>
atan(
const RCP<const Basic> &arg);
495 ACot(
const RCP<const Basic> &arg);
497 bool is_canonical(
const RCP<const Basic> &arg)
const;
499 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
503 SYMENGINE_EXPORT RCP<const Basic>
acot(
const RCP<const Basic> &arg);
510 ATan2(
const RCP<const Basic> &num,
const RCP<const Basic> &den);
512 bool is_canonical(
const RCP<const Basic> &num,
513 const RCP<const Basic> &den)
const;
525 RCP<const Basic> create(
const RCP<const Basic> &a,
526 const RCP<const Basic> &b)
const override;
530 SYMENGINE_EXPORT RCP<const Basic>
atan2(
const RCP<const Basic> &num,
531 const RCP<const Basic> &den);
541 Log(
const RCP<const Basic> &arg);
543 bool is_canonical(
const RCP<const Basic> &arg)
const;
545 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
549 SYMENGINE_EXPORT RCP<const Basic>
log(
const RCP<const Basic> &arg);
551 SYMENGINE_EXPORT RCP<const Basic>
log(
const RCP<const Basic> &arg,
552 const RCP<const Basic> &b);
564 LambertW(
const RCP<const Basic> &arg);
566 bool is_canonical(
const RCP<const Basic> &arg)
const;
568 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
572 SYMENGINE_EXPORT RCP<const Basic>
lambertw(
const RCP<const Basic> &arg);
591 Zeta(
const RCP<const Basic> &s,
const RCP<const Basic> &a);
593 Zeta(
const RCP<const Basic> &s);
595 inline RCP<const Basic>
get_s()
const
600 inline RCP<const Basic>
get_a()
const
605 bool is_canonical(
const RCP<const Basic> &s,
606 const RCP<const Basic> &a)
const;
608 RCP<const Basic> create(
const RCP<const Basic> &a,
609 const RCP<const Basic> &b)
const override;
613 SYMENGINE_EXPORT RCP<const Basic>
zeta(
const RCP<const Basic> &s,
614 const RCP<const Basic> &a);
615 SYMENGINE_EXPORT RCP<const Basic>
zeta(
const RCP<const Basic> &s);
625 inline RCP<const Basic>
get_s()
const
630 bool is_canonical(
const RCP<const Basic> &s)
const;
632 RCP<const Basic> rewrite_as_zeta()
const;
634 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
639 SYMENGINE_EXPORT RCP<const Basic>
dirichlet_eta(
const RCP<const Basic> &s);
652 hash_t __hash__()
const override;
657 bool __eq__(
const Basic &o)
const override;
658 int compare(
const Basic &o)
const override;
665 bool is_canonical(
const vec_basic &arg)
const;
666 RCP<const Basic> create(
const vec_basic &x)
const override;
670 SYMENGINE_EXPORT RCP<const Basic> function_symbol(std::string name,
671 const RCP<const Basic> &arg);
672 SYMENGINE_EXPORT RCP<const Basic> function_symbol(std::string name,
673 const vec_basic &arg);
685 RCP<const Basic>
create(
const vec_basic &v)
const override = 0;
686 virtual RCP<const Number> eval(
long bits)
const = 0;
687 virtual RCP<const Basic> diff_impl(
const RCP<const Symbol> &s)
const = 0;
697 RCP<const Basic> arg_;
713 Derivative(
const RCP<const Basic> &arg,
const multiset_basic &x);
715 static RCP<const Derivative> create(
const RCP<const Basic> &arg,
716 const multiset_basic &x)
718 return make_rcp<const Derivative>(arg, x);
721 hash_t __hash__()
const override;
722 bool __eq__(
const Basic &o)
const override;
723 int compare(
const Basic &o)
const override;
724 inline RCP<const Basic> get_arg()
const
728 inline const multiset_basic &get_symbols()
const
734 vec_basic args = {arg_};
735 args.insert(args.end(), x_.begin(), x_.end());
738 bool is_canonical(
const RCP<const Basic> &arg,
739 const multiset_basic &x)
const;
749 RCP<const Basic> arg_;
750 map_basic_basic dict_;
754 Subs(
const RCP<const Basic> &arg,
const map_basic_basic &x);
756 static RCP<const Subs> create(
const RCP<const Basic> &arg,
757 const map_basic_basic &x)
759 return make_rcp<const Subs>(arg, x);
762 hash_t __hash__()
const override;
763 bool __eq__(
const Basic &o)
const override;
764 int compare(
const Basic &o)
const override;
765 inline const RCP<const Basic> &get_arg()
const
769 inline const map_basic_basic &get_dict()
const
773 virtual vec_basic get_variables()
const;
774 virtual vec_basic get_point()
const;
775 vec_basic get_args()
const override;
777 bool is_canonical(
const RCP<const Basic> &arg,
778 const map_basic_basic &x)
const;
808 Sinh(
const RCP<const Basic> &arg);
810 bool is_canonical(
const RCP<const Basic> &arg)
const;
812 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
816 SYMENGINE_EXPORT RCP<const Basic>
sinh(
const RCP<const Basic> &arg);
824 Csch(
const RCP<const Basic> &arg);
826 bool is_canonical(
const RCP<const Basic> &arg)
const;
828 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
832 SYMENGINE_EXPORT RCP<const Basic>
csch(
const RCP<const Basic> &arg);
840 Cosh(
const RCP<const Basic> &arg);
842 bool is_canonical(
const RCP<const Basic> &arg)
const;
844 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
848 SYMENGINE_EXPORT RCP<const Basic>
cosh(
const RCP<const Basic> &arg);
856 Sech(
const RCP<const Basic> &arg);
858 bool is_canonical(
const RCP<const Basic> &arg)
const;
860 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
864 SYMENGINE_EXPORT RCP<const Basic>
sech(
const RCP<const Basic> &arg);
872 Tanh(
const RCP<const Basic> &arg);
874 bool is_canonical(
const RCP<const Basic> &arg)
const;
876 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
880 SYMENGINE_EXPORT RCP<const Basic>
tanh(
const RCP<const Basic> &arg);
888 Coth(
const RCP<const Basic> &arg);
890 bool is_canonical(
const RCP<const Basic> &arg)
const;
892 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
896 SYMENGINE_EXPORT RCP<const Basic>
coth(
const RCP<const Basic> &arg);
904 ASinh(
const RCP<const Basic> &arg);
906 bool is_canonical(
const RCP<const Basic> &arg)
const;
908 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
912 SYMENGINE_EXPORT RCP<const Basic>
asinh(
const RCP<const Basic> &arg);
920 ACsch(
const RCP<const Basic> &arg);
922 bool is_canonical(
const RCP<const Basic> &arg)
const;
924 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
928 SYMENGINE_EXPORT RCP<const Basic>
acsch(
const RCP<const Basic> &arg);
936 ACosh(
const RCP<const Basic> &arg);
938 bool is_canonical(
const RCP<const Basic> &arg)
const;
940 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
944 SYMENGINE_EXPORT RCP<const Basic>
acosh(
const RCP<const Basic> &arg);
952 ATanh(
const RCP<const Basic> &arg);
954 bool is_canonical(
const RCP<const Basic> &arg)
const;
956 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
960 SYMENGINE_EXPORT RCP<const Basic>
atanh(
const RCP<const Basic> &arg);
968 ACoth(
const RCP<const Basic> &arg);
970 bool is_canonical(
const RCP<const Basic> &arg)
const;
972 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
976 SYMENGINE_EXPORT RCP<const Basic>
acoth(
const RCP<const Basic> &arg);
984 ASech(
const RCP<const Basic> &arg);
986 bool is_canonical(
const RCP<const Basic> &arg)
const;
988 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
992 SYMENGINE_EXPORT RCP<const Basic>
asech(
const RCP<const Basic> &arg);
1006 KroneckerDelta(
const RCP<const Basic> &i,
const RCP<const Basic> &j);
1008 bool is_canonical(
const RCP<const Basic> &i,
1009 const RCP<const Basic> &j)
const;
1011 RCP<const Basic> create(
const RCP<const Basic> &a,
1012 const RCP<const Basic> &b)
const override;
1016 SYMENGINE_EXPORT RCP<const Basic>
kronecker_delta(
const RCP<const Basic> &i,
1017 const RCP<const Basic> &j);
1033 bool is_canonical(
const vec_basic &arg)
const;
1035 RCP<const Basic> create(
const vec_basic &arg)
const override;
1039 SYMENGINE_EXPORT RCP<const Basic>
levi_civita(
const vec_basic &arg);
1054 SYMENGINE_ASSIGN_TYPEID()
1055 SYMENGINE_ASSERT(is_canonical(arg))
1058 bool is_canonical(
const RCP<const Basic> &arg)
const;
1060 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1064 SYMENGINE_EXPORT RCP<const Basic>
erf(
const RCP<const Basic> &arg);
1079 SYMENGINE_ASSIGN_TYPEID()
1080 SYMENGINE_ASSERT(is_canonical(arg))
1083 bool is_canonical(
const RCP<const Basic> &arg)
const;
1085 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1089 SYMENGINE_EXPORT RCP<const Basic>
erfc(
const RCP<const Basic> &arg);
1106 Gamma(
const RCP<const Basic> &arg);
1108 bool is_canonical(
const RCP<const Basic> &arg)
const;
1110 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1114 SYMENGINE_EXPORT RCP<const Basic>
gamma(
const RCP<const Basic> &arg);
1123 LowerGamma(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1125 bool is_canonical(
const RCP<const Basic> &s,
1126 const RCP<const Basic> &x)
const;
1128 RCP<const Basic> create(
const RCP<const Basic> &a,
1129 const RCP<const Basic> &b)
const override;
1133 SYMENGINE_EXPORT RCP<const Basic>
lowergamma(
const RCP<const Basic> &s,
1134 const RCP<const Basic> &x);
1143 UpperGamma(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1145 bool is_canonical(
const RCP<const Basic> &s,
1146 const RCP<const Basic> &x)
const;
1148 RCP<const Basic> create(
const RCP<const Basic> &a,
1149 const RCP<const Basic> &b)
const override;
1153 SYMENGINE_EXPORT RCP<const Basic>
uppergamma(
const RCP<const Basic> &s,
1154 const RCP<const Basic> &x);
1167 SYMENGINE_ASSIGN_TYPEID()
1168 SYMENGINE_ASSERT(is_canonical(arg))
1171 bool is_canonical(
const RCP<const Basic> &arg)
const;
1172 RCP<const Basic> rewrite_as_gamma()
const;
1174 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1178 SYMENGINE_EXPORT RCP<const Basic>
loggamma(
const RCP<const Basic> &arg);
1195 SYMENGINE_ASSIGN_TYPEID()
1196 SYMENGINE_ASSERT(is_canonical(x, y))
1199 static RCP<const Beta> from_two_basic(
const RCP<const Basic> &x,
1200 const RCP<const Basic> &y);
1202 bool is_canonical(
const RCP<const Basic> &s,
const RCP<const Basic> &x);
1203 RCP<const Basic> rewrite_as_gamma()
const;
1205 RCP<const Basic> create(
const RCP<const Basic> &a,
1206 const RCP<const Basic> &b)
const override;
1210 SYMENGINE_EXPORT RCP<const Basic>
beta(
const RCP<const Basic> &x,
1211 const RCP<const Basic> &y);
1232 SYMENGINE_ASSIGN_TYPEID()
1233 SYMENGINE_ASSERT(is_canonical(n, x))
1235 bool is_canonical(
const RCP<const Basic> &n,
const RCP<const Basic> &x);
1236 RCP<const Basic> rewrite_as_zeta()
const;
1238 RCP<const Basic> create(
const RCP<const Basic> &a,
1239 const RCP<const Basic> &b)
const override;
1243 SYMENGINE_EXPORT RCP<const Basic>
polygamma(
const RCP<const Basic> &n,
1244 const RCP<const Basic> &x);
1246 SYMENGINE_EXPORT RCP<const Basic> digamma(
const RCP<const Basic> &x);
1248 SYMENGINE_EXPORT RCP<const Basic> trigamma(
const RCP<const Basic> &x);
1257 Abs(
const RCP<const Basic> &arg);
1259 bool is_canonical(
const RCP<const Basic> &arg)
const;
1261 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1265 SYMENGINE_EXPORT RCP<const Basic>
abs(
const RCP<const Basic> &arg);
1272 Max(
const vec_basic &&arg);
1274 bool is_canonical(
const vec_basic &arg)
const;
1276 RCP<const Basic> create(
const vec_basic &arg)
const override;
1280 SYMENGINE_EXPORT RCP<const Basic>
max(
const vec_basic &arg);
1287 Min(
const vec_basic &&arg);
1289 bool is_canonical(
const vec_basic &arg)
const;
1291 RCP<const Basic> create(
const vec_basic &arg)
const override;
1295 SYMENGINE_EXPORT RCP<const Basic>
min(
const vec_basic &arg);
1298 SYMENGINE_EXPORT RCP<const Basic>
trig_to_sqrt(
const RCP<const Basic> &arg);
1307 bool is_canonical(
const RCP<const Basic> &arg)
const;
1309 RCP<const Basic> create(
const RCP<const Basic> &arg)
const override;
1312 SYMENGINE_EXPORT 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 > get_den() const
RCP< const Basic > get_num() const
The lowest unit of symbolic representation.
vec_basic get_args() const override
Returns the list of arguments.
multiset_basic x_
The expression to be differentiated.
RCP< const Basic > get_s() const
const std::string & get_name() const
RCP< const Basic > create(const vec_basic &v) const override=0
Method to construct classes with canonicalization.
HyperbolicBase(RCP< const Basic > arg)
Constructor.
HyperbolicFunction(RCP< const Basic > arg)
Constructor.
InverseHyperbolicFunction(RCP< const Basic > arg)
Constructor.
InverseTrigFunction(RCP< const Basic > arg)
Constructor.
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.
TrigBase(RCP< const Basic > arg)
Constructor.
TrigFunction(RCP< const Basic > arg)
Constructor.
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 > get_a() const
RCP< const Basic > get_s() const
Main namespace for SymEngine package.
RCP< const Basic > csc(const RCP< const Basic > &arg)
Canonicalize Csc:
RCP< const Basic > atan(const RCP< const Basic > &arg)
Canonicalize ATan:
RCP< const Basic > sec(const RCP< const Basic > &arg)
Canonicalize Sec:
RCP< const Basic > cos(const RCP< const Basic > &arg)
Canonicalize Cos:
RCP< const Basic > sinh(const RCP< const Basic > &arg)
Canonicalize Sinh:
RCP< const Basic > beta(const RCP< const Basic > &x, const RCP< const Basic > &y)
Canonicalize Beta:
RCP< const Basic > conjugate(const RCP< const Basic > &arg)
Canonicalize Conjugate.
RCP< const Basic > coth(const RCP< const Basic > &arg)
Canonicalize Coth:
RCP< const Basic > sin(const RCP< const Basic > &arg)
Canonicalize Sin:
RCP< const Basic > tan(const RCP< const Basic > &arg)
Canonicalize Tan:
RCP< const Basic > acos(const RCP< const Basic > &arg)
Canonicalize ACos:
RCP< const Basic > erf(const RCP< const Basic > &arg)
Canonicalize Erf:
RCP< const Basic > acsch(const RCP< const Basic > &arg)
Canonicalize ACsch:
RCP< const Basic > max(const vec_basic &arg)
Canonicalize Max:
RCP< const Basic > lowergamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
Canonicalize LowerGamma:
RCP< const Basic > ceiling(const RCP< const Basic > &arg)
Canonicalize Ceiling:
RCP< const Basic > tanh(const RCP< const Basic > &arg)
Canonicalize Tanh:
RCP< const Basic > asin(const RCP< const Basic > &arg)
Canonicalize ASin:
RCP< const Basic > trig_to_sqrt(const RCP< const Basic > &arg)
RCP< const Basic > kronecker_delta(const RCP< const Basic > &i, const RCP< const Basic > &j)
Canonicalize KroneckerDelta:
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 > cosh(const RCP< const Basic > &arg)
Canonicalize Cosh:
RCP< const Basic > zeta(const RCP< const Basic > &s, const RCP< const Basic > &a)
Create a new Zeta instance:
RCP< const Basic > acsc(const RCP< const Basic > &arg)
Canonicalize ACsc:
RCP< const Basic > floor(const RCP< const Basic > &arg)
Canonicalize Floor:
bool could_extract_minus(const Basic &arg)
RCP< const Basic > uppergamma(const RCP< const Basic > &s, const RCP< const Basic > &x)
Canonicalize UpperGamma:
bool eq(const Basic &a, const Basic &b)
Checks equality for a and b
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 > erfc(const RCP< const Basic > &arg)
Canonicalize Erfc:
RCP< const Basic > lambertw(const RCP< const Basic > &arg)
Create a new LambertW instance:
RCP< const Basic > atan2(const RCP< const Basic > &num, const RCP< const Basic > &den)
Canonicalize ATan2:
RCP< const Basic > gamma(const RCP< const Basic > &arg)
Canonicalize Gamma:
RCP< const Basic > dirichlet_eta(const RCP< const Basic > &s)
Create a new Dirichlet_eta instance:
RCP< const Basic > csch(const RCP< const Basic > &arg)
Canonicalize Csch:
bool neq(const Basic &a, const Basic &b)
Checks inequality for a and b
RCP< const Basic > polygamma(const RCP< const Basic > &n_, const RCP< const Basic > &x_)
Canonicalize PolyGamma.
int unified_compare(const T &a, const T &b)
RCP< const Basic > asech(const RCP< const Basic > &arg)
Canonicalize ASech:
RCP< const Basic > cot(const RCP< const Basic > &arg)
Canonicalize Cot:
RCP< const Basic > min(const vec_basic &arg)
Canonicalize Min:
RCP< const Basic > asec(const RCP< const Basic > &arg)
Canonicalize ASec:
RCP< const Basic > atanh(const RCP< const Basic > &arg)
Canonicalize ATanh:
RCP< const Basic > sign(const RCP< const Basic > &arg)
Canonicalize Sign.
RCP< const Basic > abs(const RCP< const Basic > &arg)
Canonicalize Abs:
RCP< const Basic > truncate(const RCP< const Basic > &arg)
Canonicalize Truncate:
RCP< const Basic > levi_civita(const vec_basic &arg)
Canonicalize LeviCivita:
RCP< const Basic > loggamma(const RCP< const Basic > &arg)
Canonicalize LogGamma:
bool get_pi_shift(const RCP< const Basic > &arg, const Ptr< RCP< const Number >> &n, const Ptr< RCP< const Basic >> &x)
RCP< const Basic > acoth(const RCP< const Basic > &arg)
Canonicalize ACoth:
RCP< const Basic > acosh(const RCP< const Basic > &arg)
Canonicalize ACosh:
RCP< const Basic > asinh(const RCP< const Basic > &arg)
Canonicalize ASinh:
RCP< const Basic > log(const RCP< const Basic > &arg)
Returns the Natural Logarithm from argument arg
RCP< const Basic > acot(const RCP< const Basic > &arg)
Canonicalize ACot: