SymEngine::SeriesBase< Poly, Coeff, Series > Class Template Reference
+ Inheritance diagram for SymEngine::SeriesBase< Poly, Coeff, Series >:
+ Collaboration diagram for SymEngine::SeriesBase< Poly, Coeff, Series >:

Public Member Functions

 SeriesBase (Poly p, std::string var, unsigned degree)
 
virtual unsigned get_degree () const
 
virtual const std::stringget_var () const
 
const Poly & get_poly () const
 
virtual bool is_zero () const
 
virtual bool is_one () const
 
virtual bool is_minus_one () const
 
virtual bool is_negative () const
 
virtual bool is_positive () const
 
virtual bool is_complex () const
 
virtual bool __eq__ (const Basic &o) const
 Test equality. More...
 
virtual RCP< const Numberadd (const Number &other) const
 Addition.
 
virtual RCP< const Numbermul (const Number &other) const
 Multiplication.
 
virtual RCP< const Numberpow (const Number &other) const
 Power.
 
virtual RCP< const Numberrpow (const Number &other) const
 
- Public Member Functions inherited from SymEngine::SeriesCoeffInterface
virtual RCP< const Basicas_basic () const =0
 
virtual umap_int_basic as_dict () const =0
 
virtual RCP< const Basicget_coeff (int) const =0
 
- Public Member Functions inherited from SymEngine::Number
virtual RCP< const Basicconjugate () const
 
virtual bool is_exact () const
 return true if the number is an exact representation
 
bool is_exact_zero () const
 
virtual Evaluateget_eval () const
 Get Evaluate singleton to evaluate numerically.
 
virtual RCP< const Numbersub (const Number &other) const
 Subtraction.
 
virtual RCP< const Numberrsub (const Number &other) const
 
virtual RCP< const Numberdiv (const Number &other) const
 Division.
 
virtual RCP< const Numberrdiv (const Number &other) const
 
virtual vec_basic get_args () const
 Returns the list of arguments.
 
virtual bool is_perfect_power (bool is_expected=false) const
 
virtual bool nth_root (const Ptr< RCP< const Number >> &, unsigned long n) const
 
- Public Member Functions inherited from SymEngine::Basic
TypeID get_type_code () const
 
 Basic ()
 Constructor.
 
 Basic (const Basic &)=delete
 Delete the copy constructor and assignment.
 
Basicoperator= (const Basic &)=delete
 Assignment operator in continuation with above.
 
 Basic (Basic &&)=delete
 Delete the move constructor and assignment.
 
Basicoperator= (Basic &&)=delete
 Assignment operator in continuation with above.
 
virtual hash_t __hash__ () const =0
 
hash_t hash () const
 
bool __neq__ (const Basic &o) const
 true if this is not equal to o. More...
 
int __cmp__ (const Basic &o) const
 Comparison operator.
 
virtual int compare (const Basic &o) const =0
 
std::string __str__ () const
 
std::string dumps () const
 Returns a string of the instance serialized.
 
RCP< const Basicsubs (const map_basic_basic &subs_dict) const
 Substitutes 'subs_dict' into 'self'.
 
RCP< const Basicxreplace (const map_basic_basic &subs_dict) const
 
virtual RCP< const Basicexpand_as_exp () const
 expands the special function in terms of exp function
 
virtual void accept (Visitor &v) const =0
 
virtual void accept (EvalRealDoubleVisitorFinal &v) const =0
 
RCP< const Basicdiff (const RCP< const Symbol > &x, bool cache=true) const
 
- Public Member Functions inherited from SymEngine::EnableRCPFromThis< Basic >
RCP< Basicrcp_from_this ()
 Get RCP<T> pointer to self (it will cast the pointer to T)
 
RCP< const Basicrcp_from_this () const
 Get RCP<const T> pointer to self (it will cast the pointer to const T)
 
RCP< const T2 > rcp_from_this_cast () const
 Get RCP<T2> pointer to self (it will cast the pointer to T2)
 
unsigned int use_count () const
 

Static Public Member Functions

static const std::list< unsigned int > & step_list (unsigned int prec)
 
static Poly series_invert (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_reverse (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_nthroot (const Poly &s, int n, const Poly &var, unsigned int prec)
 
static Poly series_atan (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_tan (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_cot (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly _series_sin (const Poly &s, unsigned int prec)
 
static Poly series_sin (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_csc (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_asin (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_acos (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly _series_cos (const Poly &s, unsigned int prec)
 
static Poly series_cos (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_sec (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_log (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_exp (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_lambertw (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_sinh (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_cosh (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_atanh (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_asinh (const Poly &s, const Poly &var, unsigned int prec)
 
static Poly series_tanh (const Poly &s, const Poly &var, unsigned int prec)
 
static Coeff sin (const Coeff &c)
 
static Coeff cos (const Coeff &c)
 
static Coeff tan (const Coeff &c)
 
static Coeff asin (const Coeff &c)
 
static Coeff acos (const Coeff &c)
 
static Coeff atan (const Coeff &c)
 
static Coeff sinh (const Coeff &c)
 
static Coeff cosh (const Coeff &c)
 
static Coeff tanh (const Coeff &c)
 
static Coeff asinh (const Coeff &c)
 
static Coeff atanh (const Coeff &c)
 
static Coeff exp (const Coeff &c)
 
static Coeff log (const Coeff &c)
 
- Static Public Member Functions inherited from SymEngine::Basic
static RCP< const Basicloads (const std::string &)
 Creates an instance of a serialized string.
 

Protected Attributes

const Poly p_
 
const std::string var_
 
const unsigned degree_
 

Additional Inherited Members

- Data Fields inherited from SymEngine::Basic
TypeID type_code_
 

Detailed Description

template<typename Poly, typename Coeff, typename Series>
class SymEngine::SeriesBase< Poly, Coeff, Series >

Definition at line 28 of file series.h.

Member Function Documentation

◆ __eq__()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::__eq__ ( const Basic o) const
inlinevirtual

Test equality.

A virtual function for testing the equality of two Basic objects

Deprecated:
Use eq(const Basic &a, const Basic &b) non-member method
Parameters
oa constant reference to object to test against
Returns
True if this is equal to o

Implements SymEngine::Basic.

Definition at line 85 of file series.h.

86  {
87  return (is_a<Series>(o) and var_ == down_cast<const Series &>(o).var_
88  and p_ == down_cast<const Series &>(o).p_
89  and degree_ == down_cast<const Series &>(o).degree_);
90  }

◆ is_complex()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_complex ( ) const
inlinevirtual
Returns
true if a complex number

Implements SymEngine::Number.

Definition at line 80 of file series.h.

81  {
82  return false;
83  }

◆ is_minus_one()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_minus_one ( ) const
inlinevirtual
Returns
true if -1

Implements SymEngine::Number.

Definition at line 65 of file series.h.

66  {
67  return false;
68  }

◆ is_negative()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_negative ( ) const
inlinevirtual
Returns
true if negative

Implements SymEngine::Number.

Definition at line 70 of file series.h.

71  {
72  return false;
73  }

◆ is_one()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_one ( ) const
inlinevirtual
Returns
true if 1

Implements SymEngine::Number.

Definition at line 60 of file series.h.

61  {
62  return false;
63  }

◆ is_positive()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_positive ( ) const
inlinevirtual
Returns
true if positive

Implements SymEngine::Number.

Definition at line 75 of file series.h.

76  {
77  return false;
78  }

◆ is_zero()

template<typename Poly , typename Coeff , typename Series >
virtual bool SymEngine::SeriesBase< Poly, Coeff, Series >::is_zero ( ) const
inlinevirtual
Returns
true if 0

Implements SymEngine::Number.

Definition at line 55 of file series.h.

56  {
57  return false;
58  }

◆ series_atan()

template<typename Poly , typename Coeff , typename Series >
static Poly SymEngine::SeriesBase< Poly, Coeff, Series >::series_atan ( const Poly &  s,
const Poly &  var,
unsigned int  prec 
)
inlinestatic

fast atan(x)

Definition at line 284 of file series.h.

286  {
287  Poly res_p(0);
288  if (s == 0)
289  return res_p;
290 
291  if (s == var) {
293  int sign = 1;
294  Poly monom(var), vsquare(var * var);
295  for (unsigned int i = 1; i < prec; i += 2, sign *= -1) {
296  res_p += monom * (Coeff(sign) / Coeff(i));
297  monom *= vsquare;
298  }
299  return res_p;
300  }
301  const Coeff c(Series::find_cf(s, var, 0));
302  const Poly p(Series::pow(s, 2, prec - 1) + 1);
303  res_p = Series::mul(Series::diff(s, var),
304  Series::series_invert(p, var, prec - 1), prec - 1);
305 
306  if (c == 0) {
307  // atan(s) = integrate(diff(s)*(1+s**2))
308  return Series::integrate(res_p, var);
309  } else {
310  return Series::integrate(res_p, var) + Series::atan(c);
311  }
312  }
RCP< const Basic > sign(const RCP< const Basic > &arg)
Canonicalize Sign.
Definition: functions.cpp:527

◆ series_exp()

template<typename Poly , typename Coeff , typename Series >
static Poly SymEngine::SeriesBase< Poly, Coeff, Series >::series_exp ( const Poly &  s,
const Poly &  var,
unsigned int  prec 
)
inlinestatic

fast exp(x)

Definition at line 520 of file series.h.

522  {
523  Poly res_p(1);
524  if (s == 0)
525  return res_p;
526 
527  if (s == var) {
529  Coeff coef(1);
530  Poly monom(var);
531  for (unsigned int i = 1; i < prec; i++) {
532  coef /= i;
533  res_p += monom * coef;
534  monom *= var;
535  }
536  return res_p;
537  }
538 
539  const Coeff c(Series::find_cf(s, var, 0));
540  Poly t = s + 1;
541  if (c != 0) {
542  // exp(s) = exp(c)*exp(s-c)
543  t = s - c + 1;
544  }
545  auto steps = step_list(prec);
546  for (const auto step : steps) {
547  res_p = Series::mul(res_p, t - Series::series_log(res_p, var, step),
548  step);
549  }
550  if (c != 0) {
551  return res_p * Series::exp(c);
552  } else {
553  return res_p;
554  }
555  }

◆ series_log()

template<typename Poly , typename Coeff , typename Series >
static Poly SymEngine::SeriesBase< Poly, Coeff, Series >::series_log ( const Poly &  s,
const Poly &  var,
unsigned int  prec 
)
inlinestatic

fast log(1+x)

Definition at line 493 of file series.h.

495  {
496  Poly res_p(0);
497  if (s == 1)
498  return res_p;
499  if (s == var + 1) {
501  Poly monom(var);
502  for (unsigned int i = 1; i < prec; i++) {
503  res_p += monom * Coeff(((i % 2) == 0) ? -1 : 1) / Coeff(i);
504  monom *= var;
505  }
506  return res_p;
507  }
508 
509  const Coeff c(Series::find_cf(s, var, 0));
510  res_p = Series::mul(Series::diff(s, var),
511  Series::series_invert(s, var, prec), prec - 1);
512  res_p = Series::integrate(res_p, var);
513 
514  if (c != 1) {
515  res_p += Series::log(c);
516  }
517  return res_p;
518  }

The documentation for this class was generated from the following file: