private double sumCombine(ImmutableRatesProvider provider) { double result = 0.0; // Currency ImmutableMap<Currency, Curve> mapCurrency = provider.getDiscountCurves(); for (Entry<Currency, Curve> entry : mapCurrency.entrySet()) { if (entry.getValue() instanceof CombinedCurve) { InterpolatedNodalCurve baseCurveInt = checkInterpolated(entry.getValue().split().get(0)); InterpolatedNodalCurve spreadCurveInt = checkInterpolated(entry.getValue().split().get(1)); result += 0.25d * sumSingle(baseCurveInt); result += sumSingle(spreadCurveInt); } else { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); result += sumSingle(curveInt); } } // Index ImmutableMap<Index, Curve> mapIndex = provider.getIndexCurves(); for (Entry<Index, Curve> entry : mapIndex.entrySet()) { if (entry.getValue() instanceof CombinedCurve) { InterpolatedNodalCurve baseCurveInt = checkInterpolated(entry.getValue().split().get(0)); InterpolatedNodalCurve spreadCurveInt = checkInterpolated(entry.getValue().split().get(1)); result += 0.25d * sumSingle(baseCurveInt); result += sumSingle(spreadCurveInt); } else { InterpolatedNodalCurve curveInt = checkInterpolated(entry.getValue()); result += entry.getKey().equals(IborIndices.USD_LIBOR_3M) ? 0.25d * sumSingle(curveInt) : sumSingle(curveInt); } } return result; }
curve, currency, c -> immProv.toBuilder().discountCurve(currency, c).build(), sensitivitiesFn); result = result.combinedWith(gammaSingle); } else if (curve.split().size() > 1) { ImmutableList<Curve> curves = curve.split(); int nCurves = curves.size(); for (int i = 0; i < nCurves; ++i) { curve, currency, c -> immProv.toBuilder().indexCurve(index, c).build(), sensitivitiesFn); result = result.combinedWith(gammaSingle); } else if (curve.split().size() > 1) { ImmutableList<Curve> curves = curve.split(); int nCurves = curves.size(); for (int i = 0; i < nCurves; ++i) {
baseDeltaSingle, curve, c -> immProv.toBuilder().discountCurve(currency, c).build(), sensitivitiesFn); resultInner = resultInner.combinedWith(gammaSingle); } else if (curve.split().size() > 1) { ImmutableList<Curve> curves = curve.split(); int nCurves = curves.size(); for (int i = 0; i < nCurves; ++i) { baseDeltaSingle, curve, c -> immProv.toBuilder().indexCurve(index, c).build(), sensitivitiesFn); resultInner = resultInner.combinedWith(gammaSingle); } else if (curve.split().size() > 1) { ImmutableList<Curve> curves = curve.split(); int nCurves = curves.size(); for (int i = 0; i < nCurves; ++i) {