/** * Finds a single sensitivity instance by name and currency. * <p> * If the sensitivity is not found, optional empty is returned. * * @param name the curve name to find * @param currency the currency to find * @return the matching sensitivity */ public Optional<CrossGammaParameterSensitivity> findSensitivity(MarketDataName<?> name, Currency currency) { return sensitivities.stream() .filter(sens -> sens.getMarketDataName().equals(name) && sens.getCurrency().equals(currency)) .findFirst(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 842855857: // marketDataName return ((CrossGammaParameterSensitivity) bean).getMarketDataName(); case -1169106440: // parameterMetadata return ((CrossGammaParameterSensitivity) bean).getParameterMetadata(); case 106006350: // order return ((CrossGammaParameterSensitivity) bean).getOrder(); case 575402001: // currency return ((CrossGammaParameterSensitivity) bean).getCurrency(); case 564403871: // sensitivity return ((CrossGammaParameterSensitivity) bean).getSensitivity(); } return super.propertyGet(bean, propertyName, quiet); }
public void test_of_metadata() { CrossGammaParameterSensitivity test = CrossGammaParameterSensitivity.of(NAME1, METADATA_USD1, USD, MATRIX_USD1); assertEquals(test.getMarketDataName(), NAME1); assertEquals(test.getParameterCount(), 2); assertEquals(test.getParameterMetadata(), METADATA_USD1); assertEquals(test.getParameterMetadata(0), METADATA_USD1.get(0)); assertEquals(test.getCurrency(), USD); assertEquals(test.getSensitivity(), MATRIX_USD1); assertEquals(test.getOrder(), ImmutableList.of(Pair.of(NAME1, METADATA_USD1))); }
public void test_of_eurUsd() { CrossGammaParameterSensitivity test = CrossGammaParameterSensitivity.of( NAME1, METADATA_USD1, ImmutableList.of(Pair.of(NAME1, METADATA_USD1), Pair.of(NAME2, METADATA_EUR1)), USD, MATRIX_USD_EUR); assertEquals(test.getMarketDataName(), NAME1); assertEquals(test.getParameterCount(), 2); assertEquals(test.getParameterMetadata(), METADATA_USD1); assertEquals(test.getParameterMetadata(0), METADATA_USD1.get(0)); assertEquals(test.getCurrency(), USD); assertEquals(test.getSensitivity(), MATRIX_USD_EUR); assertEquals(test.getOrder(), ImmutableList.of(Pair.of(NAME1, METADATA_USD1), Pair.of(NAME2, METADATA_EUR1))); }
/** * Returns the sensitivity to the market data specified by {@code name}. * <p> * This returns a sensitivity instance which stores the sensitivity of the {@code marketDataName} delta to another * market data of {@code name}. * * @param name the name * @return the sensitivity * @throws IllegalArgumentException if the name does not match an entry */ public CrossGammaParameterSensitivity getSensitivity(MarketDataName<?> name) { Pair<Integer, List<? extends ParameterMetadata>> indexAndMetadata = findStartIndexAndMetadata(name); int startIndex = indexAndMetadata.getFirst(); int rowCt = getParameterCount(); int colCt = indexAndMetadata.getSecond().size(); double[][] sensi = new double[rowCt][colCt]; for (int i = 0; i < rowCt; ++i) { System.arraycopy(getSensitivity().rowArray(i), startIndex, sensi[i], 0, colCt); } return CrossGammaParameterSensitivity.of( getMarketDataName(), getParameterMetadata(), name, indexAndMetadata.getSecond(), getCurrency(), DoubleMatrix.ofUnsafe(sensi)); }
/** * Returns the diagonal part of the sensitivity as {@code CurrencyParameterSensitivity}. * * @return the diagonal part */ public CurrencyParameterSensitivity diagonal() { CrossGammaParameterSensitivity blockDiagonal = getSensitivity(getMarketDataName()); int size = getParameterCount(); return CurrencyParameterSensitivity.of( getMarketDataName(), getParameterMetadata(), getCurrency(), DoubleArray.of(size, i -> blockDiagonal.getSensitivity().get(i, i))); }