this.traverseGuide = traverseGuide;
}
@Override
public Tensor transform(Tensor tensor) {
SubstitutionIterator iterator = new SubstitutionIterator(tensor, traverseGuide);
Tensor current;
while ((current = iterator.next()) != null) {
if (current instanceof Product)
iterator.unsafeSet(expandProduct((Product) current, transformations));
else if (ExpandUtils.isExpandablePower(current)) {
Sum sum = (Sum) current.get(0);
int exponent = ((Complex) current.get(1)).intValue();
if (exponent == -1)
continue;
boolean symbolic = TensorUtils.isSymbolic(sum),
reciprocal = exponent < 0;
exponent = Math.abs(exponent);
Tensor temp;
if (symbolic)
temp = ExpandUtils.expandSymbolicPower(sum, exponent, transformations);
else
temp = ExpandUtils.expandPower(sum, exponent, iterator.getForbidden(), transformations);
if (reciprocal)
temp = reciprocal(temp);
if (symbolic)
iterator.unsafeSet(temp);
else
iterator.set(temp);
}
}
return iterator.result();
}