Tensor newData = expandProductOfSums1(data, transformations, true); if (newData instanceof Sum) //todo apply transformations? return FastTensors.multiplySumElementsOnFactorAndExpand((Sum) newData, indexless); else //todo apply transformations? return expandIndexlessSubproduct.transform(Tensors.multiply(indexless, newData)); return FastTensors.multiplySumElementsOnFactorAndExpand((Sum) data, indexless); return Tensors.multiply(indexless, data);
public static Tensor multiplySumElementsOnFactorAndExpand(Sum sum, Tensor factor, Transformation[] transformations) { if (TensorUtils.isZero(factor)) return Complex.ZERO; if (TensorUtils.isOne(factor)) return sum; if (factor instanceof Sum && factor.getIndices().size() != 0) throw new IllegalArgumentException(); if (TensorUtils.haveIndicesIntersections(sum, factor)) { SumBuilder sb = new SumBuilder(sum.size()); for (Tensor t : sum) sb.put(apply(transformations, ExpandUtils.expandIndexlessSubproduct.transform(multiply(t, factor)))); return sb.build(); } else return apply(transformations, FastTensors.multiplySumElementsOnFactorAndExpand(sum, factor)); }