@Override public SurfaceCurrencyParameterSensitivity surfaceCurrencyParameterSensitivity( IborCapletFloorletSensitivity point) { ArgChecker.isTrue( point.getIndex().equals(index), "Ibor index of provider must be the same as Ibor index of point sensitivity"); double expiry = relativeTime(point.getExpiry()); double strike = point.getStrike(); // copy to ImmutableMap to lock order (keySet and values used separately but must match) Map<DoublesPair, Double> result = ImmutableMap.copyOf(surface.zValueParameterSensitivity(expiry, strike)); SurfaceCurrencyParameterSensitivity parameterSensi = SurfaceCurrencyParameterSensitivity.of( updateSurfaceMetadata(result.keySet()), point.getCurrency(), DoubleArray.copyOf(Doubles.toArray(result.values()))); return parameterSensi.multipliedBy(point.getSensitivity()); }