@Override public String toString(OutputFormat mode) { StringBuilder sb = new StringBuilder(); String temp; for (int i = 0; ; ++i) { temp = get(i).toString(mode, Sum.class); if ((temp.charAt(0) == '-' || temp.charAt(0) == '+') && sb.length() != 0) sb.deleteCharAt(sb.length() - 1); String str = get(i).toString(mode, Sum.class); if (str.contains("'") && !mode.printMatrixIndices) return toString(mode.printMatrixIndices()); sb.append(str); if (i == size() - 1) return sb.toString(); sb.append('+'); } }
private static Term[] sum2SplitArray(Sum sum, Int pivotPosition) { Term[] terms = new Term[sum.size()]; int pivotSumsCount = Integer.MAX_VALUE, pivotPosition1 = -1; for (int i = sum.size() - 1; i >= 0; --i) { terms[i] = tensor2term(sum.get(i)); if (terms[i].factors.length < pivotSumsCount) { pivotSumsCount = terms[i].factors.length; pivotPosition1 = i; } } pivotPosition.value = pivotPosition1; return terms; }
private static Tensor multiplyWithFactory(Sum sum, Tensor factor, Transformation... transformations) { final ArrayList<Tensor> newSumData = new ArrayList<>(sum.size()); Tensor temp; boolean reduced = false; for (int i = sum.size() - 1; i >= 0; --i) { temp = Transformation.Util.applySequentially(multiply(factor, sum.get(i)), transformations); if (!TensorUtils.isZero(temp)) { newSumData.add(temp); if (!reduced && isReduced(sum.get(i), factor, temp)) reduced = true; } } if (newSumData.size() == 0) return Complex.ZERO; if (newSumData.size() == 1) return newSumData.get(0); final Tensor[] data = newSumData.toArray(new Tensor[newSumData.size()]); if (reduced) return SumFactory.FACTORY.create(data); return new Sum(data, IndicesFactory.create(newSumData.get(0).getIndices().getFree())); }
/** * @deprecated very unsafe method without checks */ @Deprecated public static Tensor multiplySumElementsOnFactors(Sum sum) { final Tensor[] newSumData = new Tensor[sum.size()]; for (int i = newSumData.length - 1; i >= 0; --i) newSumData[i] = multiply(CC.generateNewSymbol(), sum.get(i)); return new Sum(newSumData, IndicesFactory.create(newSumData[0].getIndices().getFree())); }