@Override public double interpolate(double x, double y) { // use each y-interpolator to find the z-value for each unique x DoubleArray zValuesEffective = DoubleArray.of(yInterpolators.length, i -> yInterpolators[i].interpolate(y)); // interpolate unique x-values against derived z-values return xInterpolator.bind(xValuesUnique, zValuesEffective, xExtrapolatorLeft, xExtrapolatorRight).interpolate(x); }
@Test(dataProvider = "name") public void test_extendedEnum(CurveInterpolator convention, String name) { ImmutableMap<String, CurveInterpolator> map = CurveInterpolator.extendedEnum().lookupAll(); assertEquals(map.get(name), convention); }
@Test(dataProvider = "name") public void test_of_lookup(CurveInterpolator convention, String name) { assertEquals(CurveInterpolator.of(name), convention); }
@Test(dataProvider = "name") public void test_name(CurveInterpolator convention, String name) { assertEquals(convention.getName(), name); }
public void test_basics() { assertEquals(SQUARE_LINEAR_INTERPOLATOR.getName(), SquareLinearCurveInterpolator.NAME); assertEquals(SQUARE_LINEAR_INTERPOLATOR.toString(), SquareLinearCurveInterpolator.NAME); }
public void test_interpolation() { BoundCurveInterpolator bci = DQ_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); for (int i = 0; i < X_TEST.length; i++) { assertEquals(bci.interpolate(X_TEST[i]), Y_TEST[i], 1e-8); } }
public void test_of_lookup_notFound() { assertThrowsIllegalArg(() -> CurveInterpolator.of("Rubbish")); }
public void test_basics() { assertEquals(LL_INTERPOLATOR.getName(), LogLinearCurveInterpolator.NAME); assertEquals(LL_INTERPOLATOR.toString(), LogLinearCurveInterpolator.NAME); }
/** * Obtains an instance from the specified unique name. * * @param uniqueName the unique name * @return the index * @throws IllegalArgumentException if the name is not known */ @FromString public static CurveInterpolator of(String uniqueName) { ArgChecker.notNull(uniqueName, "uniqueName"); return extendedEnum().lookup(uniqueName); }
@Override public double volatility(double time, double strike, double forward) { ArgChecker.isTrue(time >= 0, "Positive time"); SmileDeltaParameters smile = smileForExpiry(time); DoubleArray strikes = smile.strike(forward); BoundCurveInterpolator bound = strikeInterpolator.bind( strikes, smile.getVolatility(), strikeExtrapolatorLeft, strikeExtrapolatorRight); return bound.interpolate(strike); }
public void test_of_lookup_null() { assertThrowsIllegalArg(() -> CurveInterpolator.of(null)); }
public void getterTest() { assertEquals(INTERP.getName(), ProductNaturalSplineCurveInterpolator.NAME); assertEquals(INTERP.toString(), ProductNaturalSplineCurveInterpolator.NAME); }
public void test_lastNode() { BoundCurveInterpolator bci = LNDFC_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(5.0), 2.0, TOL); assertEquals(bci.firstDerivative(5.0), bci.firstDerivative(4.99999999), 1e-6); }
private static Map<CurveName, LoadedCurveSettings> parseCurveSettings(CharSource settingsResource) { ImmutableMap.Builder<CurveName, LoadedCurveSettings> builder = ImmutableMap.builder(); CsvFile csv = CsvFile.of(settingsResource, true); for (CsvRow row : csv.rows()) { String curveNameStr = row.getField(SETTINGS_CURVE_NAME); String valueTypeStr = row.getField(SETTINGS_VALUE_TYPE); String dayCountStr = row.getField(SETTINGS_DAY_COUNT); String interpolatorStr = row.getField(SETTINGS_INTERPOLATOR); String leftExtrapolatorStr = row.getField(SETTINGS_LEFT_EXTRAPOLATOR); String rightExtrapolatorStr = row.getField(SETTINGS_RIGHT_EXTRAPOLATOR); if (!VALUE_TYPE_MAP.containsKey(valueTypeStr.toLowerCase(Locale.ENGLISH))) { throw new IllegalArgumentException( Messages.format("Unsupported {} in curve settings: {}", SETTINGS_VALUE_TYPE, valueTypeStr)); } CurveName curveName = CurveName.of(curveNameStr); ValueType valueType = VALUE_TYPE_MAP.get(valueTypeStr.toLowerCase(Locale.ENGLISH)); CurveInterpolator interpolator = CurveInterpolator.of(interpolatorStr); CurveExtrapolator leftExtrap = CurveExtrapolator.of(leftExtrapolatorStr); CurveExtrapolator rightExtrap = CurveExtrapolator.of(rightExtrapolatorStr); // ONE_ONE day count is not used DayCount dayCount = LoaderUtils.parseDayCount(dayCountStr); LoadedCurveSettings settings = LoadedCurveSettings.of( curveName, ValueType.YEAR_FRACTION, valueType, dayCount, interpolator, leftExtrap, rightExtrap); builder.put(curveName, settings); } return builder.build(); }
public void test_basics() { assertEquals(STEP_UPPER_INTERPOLATOR.getName(), StepUpperCurveInterpolator.NAME); assertEquals(STEP_UPPER_INTERPOLATOR.toString(), StepUpperCurveInterpolator.NAME); }
public void test_firstNode() { BoundCurveInterpolator bci = LL_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(0.0), 3.0, TOL); assertEquals(bci.firstDerivative(0.0), bci.firstDerivative(0.00000001), 1e-6); }
static Map<CurveName, LoadedCurveSettings> parseCurveSettings(CharSource settingsResource) { ImmutableMap.Builder<CurveName, LoadedCurveSettings> builder = ImmutableMap.builder(); CsvFile csv = CsvFile.of(settingsResource, true); for (CsvRow row : csv.rows()) { String curveNameStr = row.getField(SETTINGS_CURVE_NAME); String valueTypeStr = row.getField(SETTINGS_VALUE_TYPE); String dayCountStr = row.getField(SETTINGS_DAY_COUNT); String interpolatorStr = row.getField(SETTINGS_INTERPOLATOR); String leftExtrapolatorStr = row.getField(SETTINGS_LEFT_EXTRAPOLATOR); String rightExtrapolatorStr = row.getField(SETTINGS_RIGHT_EXTRAPOLATOR); if (!VALUE_TYPE_MAP.containsKey(valueTypeStr.toLowerCase(Locale.ENGLISH))) { throw new IllegalArgumentException( Messages.format("Unsupported {} in curve settings: {}", SETTINGS_VALUE_TYPE, valueTypeStr)); } CurveName curveName = CurveName.of(curveNameStr); ValueType yValueType = VALUE_TYPE_MAP.get(valueTypeStr.toLowerCase(Locale.ENGLISH)); CurveInterpolator interpolator = CurveInterpolator.of(interpolatorStr); CurveExtrapolator leftExtrap = CurveExtrapolator.of(leftExtrapolatorStr); CurveExtrapolator rightExtrap = CurveExtrapolator.of(rightExtrapolatorStr); boolean isPriceIndex = yValueType.equals(ValueType.PRICE_INDEX); ValueType xValueType = isPriceIndex ? ValueType.MONTHS : ValueType.YEAR_FRACTION; DayCount dayCount = isPriceIndex ? ONE_ONE : LoaderUtils.parseDayCount(dayCountStr); LoadedCurveSettings settings = LoadedCurveSettings.of(curveName, xValueType, yValueType, dayCount, interpolator, leftExtrap, rightExtrap); builder.put(curveName, settings); } return builder.build(); }
public void test_basics() { assertEquals(TIME_SQUARE_INTERPOLATOR.getName(), TimeSquareCurveInterpolator.NAME); assertEquals(TIME_SQUARE_INTERPOLATOR.toString(), TimeSquareCurveInterpolator.NAME); }
public void test_firstNode() { BoundCurveInterpolator bci = LNDFC_INTERPOLATOR.bind(X_DATA, Y_DATA, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertEquals(bci.interpolate(0.0), 3.0, TOL); assertEquals(bci.firstDerivative(0.0), bci.firstDerivative(0.00000001), 1e-6); }
public void getterTest() { assertEquals(INTERP.getName(), ProductNaturalSplineMonotoneCubicInterpolator.NAME); assertEquals(INTERP.toString(), ProductNaturalSplineMonotoneCubicInterpolator.NAME); }