49 {
50 if (is_a<const Integer>(*x.get_exp())) {
51 if (down_cast<const Integer &>(*x.get_exp()).is_positive()) {
52 x.get_base()->accept(*this);
53 } else {
54 add_to_gen_set(
pow(x.get_base(), minus_one), one);
55 }
56
57 } else if (is_a<const Rational>(*x.get_exp())) {
58
59 RCP<const Basic> base = x.get_base();
60 RCP<const Rational> r
61 = rcp_static_cast<const Rational>(x.get_exp());
62 if (r->is_negative())
63 base =
pow(base, minus_one);
64 add_to_gen_set(base,
divnum(one, r->get_den()));
65
66 } else {
67 umap_basic_num pow_pairs
68 = _find_gens_poly_pow(x.get_exp(), x.get_base());
69 for (auto it : pow_pairs)
70 add_to_gen_set(
pow(x.get_base(), it.first), it.second);
71 }
72 }