if (ebasis.is_equal(_ex1))
return _ex1;
+ // power of a function calculated by separate rules defined for this function
+ if (is_exactly_a<function>(ebasis))
+ return ex_to<function>(ebasis).power(eexponent);
+
if (exponent_is_numerical) {
// ^(c1,c2) -> c1^c2 (c1, c2 numeric(),
}
// Leave it to multiplication since dummy indices have to be renamed
- if (get_all_dummy_indices(m).size() > 0) {
+ if (get_all_dummy_indices(m).size() > 0 && n.is_positive()) {
ex result = m;
+ exvector va = get_all_dummy_indices(m);
+ sort(va.begin(), va.end(), ex_is_less());
+
for (int i=1; i < n.to_int(); i++)
- result *= rename_dummy_indices_uniquely(m,m);
+ result *= rename_dummy_indices_uniquely(va, m);
return result;
}