/** * Gets the metadata of the parameter at the specified index. * <p> * If there is no specific parameter metadata, an empty instance will be returned. * * @param parameterIndex the zero-based index of the parameter to get * @return the metadata of the parameter * @throws IndexOutOfBoundsException if the index is invalid */ public default ParameterMetadata getParameterMetadata(int parameterIndex) { return getParameterMetadata().map(pm -> pm.get(parameterIndex)).orElse(ParameterMetadata.empty()); }
@Override public default ParameterMetadata getParameterMetadata(int parameterIndex) { return getMetadata().getParameterMetadata(parameterIndex); }
@ImmutableConstructor private ConstantNodalCurve( CurveMetadata metadata, double xValue, double yValue) { JodaBeanUtils.notNull(metadata, "metadata"); metadata.getParameterMetadata().ifPresent(params -> { if (params.size() != 1) { throw new IllegalArgumentException("Length of parameter metadata must be 1"); } }); this.metadata = metadata; this.xValue = xValue; this.yValue = yValue; this.parameterMetadata = ImmutableList.of(getParameterMetadata(0)); }
/** * Gets the metadata of the parameter at the specified index. * <p> * If there is no specific parameter metadata, {@link SimpleCurveParameterMetadata} will be created. * * @param parameterIndex the zero-based index of the parameter to get * @return the metadata of the parameter * @throws IndexOutOfBoundsException if the index is invalid */ @Override public default ParameterMetadata getParameterMetadata(int parameterIndex) { return getMetadata().getParameterMetadata().map(pm -> pm.get(parameterIndex)) .orElse(SimpleCurveParameterMetadata.of(getMetadata().getXValueType(), getXValues().get(parameterIndex))); }
private DoubleArray buildNodeTimes(LocalDate valuationDate, CurveMetadata metadata) { if (metadata.getXValueType().equals(ValueType.YEAR_FRACTION)) { return DoubleArray.of(getParameterCount(), i -> { LocalDate nodeDate = ((DatedParameterMetadata) metadata.getParameterMetadata().get().get(i)).getDate(); return getDayCount().get().yearFraction(valuationDate, nodeDate); }); } else if (metadata.getXValueType().equals(ValueType.MONTHS)) { return DoubleArray.of(getParameterCount(), i -> { LocalDate nodeDate = ((DatedParameterMetadata) metadata.getParameterMetadata().get().get(i)).getDate(); return YearMonth.from(valuationDate).until(YearMonth.from(nodeDate), MONTHS); }); } else { throw new IllegalArgumentException("Metadata XValueType should be YearFraction or Months in curve definition"); } }
int index = Arrays.binarySearch(xValues.toArrayUnsafe(), x); if (index >= 0) { CurveMetadata md = metadata.getParameterMetadata() .map(params -> { List<ParameterMetadata> extended = new ArrayList<>(params); DoubleArray yExtended = yValues.subArray(0, insertion).concat(y).concat(yValues.subArray(insertion)); CurveMetadata md = metadata.getParameterMetadata() .map(params -> { List<ParameterMetadata> extended = new ArrayList<>(params);
public void test_values() { ParameterizedFunctionalCurve test = ParameterizedFunctionalCurve.of( METADATA, PARAMETERS, VALUE_FUNCTION, DERIVATIVE_FUNCTION, SENSITIVITY_FUNCTION); double x = 5.2; assertEquals(test.yValue(x), VALUE_FUNCTION.apply(PARAMETERS, x)); assertEquals(test.firstDerivative(x), DERIVATIVE_FUNCTION.apply(PARAMETERS, x)); assertEquals(test.yValueParameterSensitivity(x), UnitParameterSensitivity.of( METADATA.getCurveName(), METADATA.getParameterMetadata().get(), SENSITIVITY_FUNCTION.apply(PARAMETERS, x))); }
public void test_withNode_inMiddle_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(2.5d, 4d, item); List<ParameterMetadata> list = new ArrayList<>(METADATA_ENTRIES.getParameterMetadata().get()); list.add(2, item); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE + 1); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES.withParameterMetadata(list)); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(1d, 2d, 2.5d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(5d, 7d, 4d, 8d)); }
public void test_withNode_replace_withMetadata() { InterpolatedNodalCurve base = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); LabelDateParameterMetadata item = LabelDateParameterMetadata.of(date(2015, 6, 30), TNR_1Y); InterpolatedNodalCurve test = base.withNode(2d, 4d, item); List<ParameterMetadata> list = new ArrayList<>(METADATA_ENTRIES.getParameterMetadata().get()); list.set(1, item); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getMetadata()).isEqualTo(METADATA.withParameterMetadata(list)); assertThat(test.getXValues()).isEqualTo(DoubleArray.of(1d, 2d, 3d)); assertThat(test.getYValues()).isEqualTo(DoubleArray.of(5d, 4d, 8d)); }
public void test_sensitivities() { ParameterizedFunctionalCurve test = ParameterizedFunctionalCurve.of( METADATA, PARAMETERS, VALUE_FUNCTION, DERIVATIVE_FUNCTION, SENSITIVITY_FUNCTION); DoubleArray sensiVal = DoubleArray.of(1d, 2d, 3d); assertEquals(test.createParameterSensitivity(sensiVal), UnitParameterSensitivity.of(METADATA.getCurveName(), METADATA.getParameterMetadata().get(), sensiVal)); assertEquals(test.createParameterSensitivity(USD, sensiVal), CurrencyParameterSensitivity.of(METADATA.getCurveName(), METADATA.getParameterMetadata().get(), USD, sensiVal)); }
throw new IllegalArgumentException("Length of x-values and y-values must match"); metadata.getParameterMetadata().ifPresent(params -> { if (xValues.size() != params.size()) { throw new IllegalArgumentException("Length of x-values and parameter metadata must match when metadata present");
public void test_of_CurveMetadata() { ConstantNodalCurve test = ConstantNodalCurve.of(METADATA_ENTRIES, XVALUE, YVALUE); ConstantNodalCurve testRe = ConstantNodalCurve.of(METADATA_ENTRIES, XVALUE, YVALUE); assertThat(test).isEqualTo(testRe); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getParameter(0)).isEqualTo(YVALUE); assertThrowsIllegalArg(() -> test.getParameter(1)); assertThat(test.getParameterMetadata(0)).isSameAs(METADATA_ENTRIES.getParameterMetadata().get().get(0)); assertThat(test.withParameter(0, 2d)).isEqualTo(ConstantNodalCurve.of(METADATA_ENTRIES, XVALUE, 2d)); assertThrowsIllegalArg(() -> test.withParameter(1, 2d)); assertThat(test.withPerturbation((i, v, m) -> v - 2d)).isEqualTo( ConstantNodalCurve.of(METADATA_ENTRIES, XVALUE, YVALUE_BUMPED)); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES); assertThat(test.getXValues()).isEqualTo(XVALUE_ARRAY); assertThat(test.getYValues()).isEqualTo(YVALUE_ARRAY); }
public void test_of() { ParameterizedFunctionalCurve test = ParameterizedFunctionalCurve.of( METADATA, PARAMETERS, VALUE_FUNCTION, DERIVATIVE_FUNCTION, SENSITIVITY_FUNCTION); assertEquals(test.getValueFunction(), VALUE_FUNCTION); assertEquals(test.getDerivativeFunction(), DERIVATIVE_FUNCTION); assertEquals(test.getSensitivityFunction(), SENSITIVITY_FUNCTION); assertEquals(test.getMetadata(), METADATA); assertEquals(test.getName(), METADATA.getCurveName()); assertEquals(test.getParameter(2), PARAMETERS.get(2)); assertEquals(test.getParameterCount(), PARAMETERS.size()); assertEquals(test.getParameterMetadata(1), METADATA.getParameterMetadata(1)); assertEquals(test.getParameters(), PARAMETERS); }
public void test_of_CurveMetadata() { InterpolatedNodalCurve test = InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES, INTERPOLATOR); assertThat(test.getName()).isEqualTo(CURVE_NAME); assertThat(test.getParameterCount()).isEqualTo(SIZE); assertThat(test.getParameter(0)).isEqualTo(YVALUES.get(0)); assertThat(test.getParameter(1)).isEqualTo(YVALUES.get(1)); assertThat(test.getParameterMetadata(0)).isSameAs(METADATA_ENTRIES.getParameterMetadata().get().get(0)); assertThat(test.getParameterMetadata(1)).isSameAs(METADATA_ENTRIES.getParameterMetadata().get().get(1)); assertThat(test.withParameter(0, 2d)).isEqualTo( InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES.with(0, 2d), INTERPOLATOR)); assertThat(test.withPerturbation((i, v, m) -> v - 2d)).isEqualTo( InterpolatedNodalCurve.of(METADATA_ENTRIES, XVALUES, YVALUES_BUMPED, INTERPOLATOR)); assertThat(test.getExtrapolatorLeft().getName()).isEqualTo(FLAT_EXTRAPOLATOR.getName()); assertThat(test.getInterpolator().getName()).isEqualTo(INTERPOLATOR.getName()); assertThat(test.getExtrapolatorRight().getName()).isEqualTo(FLAT_EXTRAPOLATOR.getName()); assertThat(test.getMetadata()).isEqualTo(METADATA_ENTRIES); assertThat(test.getXValues()).isEqualTo(XVALUES); assertThat(test.getYValues()).isEqualTo(YVALUES); }
assertThat(actualYearFraction).isCloseTo(expectedYearFraction, offset(TOLERANCE)); ParameterMetadata nodeMetadata = nodalCurve.getMetadata().getParameterMetadata().get().get(i); assertEquals(nodeMetadata.getLabel(), labels[i]);
assertThat(actualYearFraction).isCloseTo(expectedYearFraction, offset(TOLERANCE)); ParameterMetadata nodeMetadata = nodalCurve.getMetadata().getParameterMetadata().get().get(i); assertEquals(nodeMetadata.getLabel(), labels[i]);