/** * Gets a single sensitivity instance by name and currency. * * @param name the curve name to find * @param currency the currency to find * @return the matching sensitivity * @throws IllegalArgumentException if the name and currency do not match an entry */ public CrossGammaParameterSensitivity getSensitivity(MarketDataName<?> name, Currency currency) { return findSensitivity(name, currency) .orElseThrow(() -> new IllegalArgumentException(Messages.format( "Unable to find sensitivity: {} for {}", name, currency))); }
/** * Gets a single sensitivity instance by names and currency. * <p> * This returns the sensitivity of the market data ({@code nameFirst}) delta to another market data ({@code nameSecond}). * The result is sensitive to the order of {@code nameFirst} and {@code nameSecond}. * * @param nameFirst the name * @param nameSecond the name * @param currency the currency * @return the matching sensitivity * @throws IllegalArgumentException if the name and currency do not match an entry */ public CrossGammaParameterSensitivity getSensitivity( MarketDataName<?> nameFirst, MarketDataName<?> nameSecond, Currency currency) { CrossGammaParameterSensitivity sensi = findSensitivity(nameFirst, currency) .orElseThrow(() -> new IllegalArgumentException(Messages.format( "Unable to find sensitivity: {} for {}", nameFirst, currency))); return sensi.getSensitivity(nameSecond); }
public void test_findSensitivity() { CrossGammaParameterSensitivities test = CrossGammaParameterSensitivities.of(ENTRY_USD); assertEquals(test.findSensitivity(NAME1, USD), Optional.of(ENTRY_USD)); assertEquals(test.findSensitivity(NAME1, EUR), Optional.empty()); assertEquals(test.findSensitivity(NAME0, USD), Optional.empty()); assertEquals(test.findSensitivity(NAME0, EUR), Optional.empty()); }
public void sensitivity_multi_curve_empty() { CrossGammaParameterSensitivities sensiComputed = CENTRAL.calculateCrossGammaIntraCurve(RatesProviderDataSets.MULTI_CPI_USD, this::sensiModFn); DoubleArray times2 = RatesProviderDataSets.TIMES_2; DoubleArray times3 = RatesProviderDataSets.TIMES_3; assertEquals(sensiComputed.size(), 2); DoubleMatrix s2 = sensiComputed.getSensitivity(RatesProviderDataSets.USD_L3_NAME, USD).getSensitivity(); assertEquals(s2.columnCount(), times2.size()); for (int i = 0; i < times2.size(); i++) { for (int j = 0; j < times2.size(); j++) { double expected = 2d * times2.get(i) * times2.get(j); assertEquals(s2.get(i, j), expected, Math.max(Math.abs(expected), 1d) * EPS); } } DoubleMatrix s3 = sensiComputed.getSensitivity(RatesProviderDataSets.USD_L6_NAME, USD).getSensitivity(); assertEquals(s3.columnCount(), times3.size()); for (int i = 0; i < times3.size(); i++) { for (int j = 0; j < times3.size(); j++) { double expected = 2d * times3.get(i) * times3.get(j); assertEquals(s3.get(i, j), expected, Math.max(Math.abs(expected), 1d) * EPS); } } Optional<CrossGammaParameterSensitivity> oisSensi = sensiComputed.findSensitivity(RatesProviderDataSets.USD_DSC_NAME, USD); assertFalse(oisSensi.isPresent()); Optional<CrossGammaParameterSensitivity> priceIndexSensi = sensiComputed.findSensitivity(RatesProviderDataSets.USD_CPI_NAME, USD); assertFalse(priceIndexSensi.isPresent()); }
sensiComputed.findSensitivity(RatesProviderDataSets.USD_DSC_NAME, USD); assertFalse(oisSensi.isPresent()); Optional<CrossGammaParameterSensitivity> priceIndexSensi = sensiComputed.findSensitivity(RatesProviderDataSets.USD_CPI_NAME, USD); assertFalse(priceIndexSensi.isPresent());