+
+ if (seq.empty()) {
+ // as a special case, handle the empty (zero) series honoring the
+ // usual power laws such as implemented in power::eval()
+ if (p.real().is_zero())
+ throw std::domain_error("pseries::power_const(): pow(0,I) is undefined");
+ else if (p.real().is_negative())
+ throw pole_error("pseries::power_const(): division by zero",1);
+ else
+ return *this;
+ }
+
+ const int ldeg = ldegree(var);
+ if (!(p*ldeg).is_integer())
+ throw std::runtime_error("pseries::power_const(): trying to assemble a Puiseux series");
+
+ // O(x^n)^(-m) is undefined
+ if (seq.size() == 1 && is_order_function(seq[0].rest) && p.real().is_negative())
+ throw pole_error("pseries::power_const(): division by zero",1);