/** * Multiplies each element in specified sum on some factor. * * @param sum sum * @param factor factor * @return resulting sum */ public static Tensor multiplySumElementsOnFactorAndResolveDummies(Sum sum, Tensor factor) { Tensor[] pair = resolveDummy(sum, factor); int i = pair[0] instanceof Sum ? 0 : 1; return multiplySumElementsOnFactor((Sum) pair[i], pair[1 - i], new Transformation[0]); }
return ProductFactory.FACTORY.create(resolveDummy(factors));
private Tensor order0(Tensor[] gammas) { if (gammas.length == 1) return gammas[0]; else if (gammas.length == 2) return metric(gammas); else { Tensor[] a = gammas.clone(); a[0] = Complex.TWO; a[1] = metric(gammas); Tensor[] b0 = gammas.clone(); swapAdj(b0, 0); Tensor b = order(Arrays.copyOfRange(b0, 1, b0.length)); if (b instanceof Sum) { Tensor[] pair = resolveDummy(b, b0[0]); b = FastTensors.multiplySumElementsOnFactor((Sum) pair[0], pair[1]); } else b = multiplyAndRenameConflictingDummies(b, b0[0]); return expandAndEliminate.transform(subtract(multiply(a), b)); } }