private static Tensor differentiate(Tensor tensor, Transformation[] expandAndContract, SimpleTensor var) {
if (var.getIndices().size() != 0) {
TIntHashSet forbidden = TensorUtils.getAllIndicesNamesT(tensor);
var = (SimpleTensor) renameDummy(var, TensorUtils.getAllIndicesNamesT(tensor).toArray());
forbidden.addAll(IndicesUtils.getIndicesNames(var.getIndices()));
tensor = renameDummy(tensor, TensorUtils.getAllIndicesNamesT(var).toArray(), forbidden);
tensor = renameIndicesOfFieldsArguments(tensor, forbidden);
}
return differentiate1(tensor, createRule(var), expandAndContract);
}