}
// Inflation
final Set<IndexPrice> indexPrice = multicurve.getPriceIndexes();
for (final IndexPrice index : indexPrice) {
final PriceIndexCurve curve = multicurve.getCurve(index);
final PriceIndexCurve curveIndex = curve;
ArgumentChecker.isTrue(curveIndex.getCurve() instanceof InterpolatedDoublesCurve, "Yield curve should be based on InterpolatedDoublesCurve");
final InterpolatedDoublesCurve curveInt = (InterpolatedDoublesCurve) curveIndex.getCurve();
final int nbNodePoint = curveInt.getXDataAsPrimitive().length;
final double[][] sensitivity = new double[nbCcy][nbNodePoint];
for (int loopnode = 0; loopnode < nbNodePoint; loopnode++) {
final double[] yieldBumped = curveInt.getYDataAsPrimitive().clone();
yieldBumped[loopnode] += _shift;
final PriceIndexCurve dscBumped = new PriceIndexCurve(new InterpolatedDoublesCurve(curveInt.getXDataAsPrimitive(), yieldBumped, curveInt.getInterpolator(), true));
final InflationProviderDiscount marketDscBumped = multicurve.withPriceIndex(index, dscBumped);
final MultipleCurrencyAmount pvBumped = instrument.accept(_valueCalculator, marketDscBumped);
final MultipleCurrencyAmount pvDiff = pvBumped.plus(pvInitMinus);
for (int loopccypv = 0; loopccypv < nbCcy; loopccypv++) {
sensitivity[loopccypv][loopnode] = pvDiff.getAmount(ccyList.get(loopccypv)) / _shift;