/** * Finds a single sensitivity instance by name. * <p> * If the sensitivity is not found, optional empty is returned. * * @param name the curve name to find * @return the matching sensitivity */ public Optional<UnitParameterSensitivity> findSensitivity(MarketDataName<?> name) { return sensitivities.stream() .filter(sens -> sens.getMarketDataName().equals(name)) .findFirst(); }
@Override protected Object propertyGet(Bean bean, String propertyName, boolean quiet) { switch (propertyName.hashCode()) { case 842855857: // marketDataName return ((UnitParameterSensitivity) bean).getMarketDataName(); case -1169106440: // parameterMetadata return ((UnitParameterSensitivity) bean).getParameterMetadata(); case 564403871: // sensitivity return ((UnitParameterSensitivity) bean).getSensitivity(); case 1122130161: // parameterSplit return ((UnitParameterSensitivity) bean).parameterSplit; } return super.propertyGet(bean, propertyName, quiet); }
System.arraycopy(sens.getSensitivity().toArrayUnsafe(), 0, combinedSensitivities, count, sens.getParameterCount()); combinedMeta.addAll(sens.getParameterMetadata()); split.add(ParameterSize.of(sens.getMarketDataName(), sens.getParameterCount())); count += sens.getParameterCount();
public void test_of_metadata() { UnitParameterSensitivity test = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); assertEquals(test.getMarketDataName(), NAME1); assertEquals(test.getParameterCount(), VECTOR1.size()); assertEquals(test.getParameterMetadata(), METADATA1); assertEquals(test.getParameterMetadata(0), METADATA1.get(0)); assertEquals(test.getSensitivity(), VECTOR1); assertEquals(test.getParameterSplit(), Optional.empty()); }
public void test_of_metadataParamSplit() { UnitParameterSensitivity test = UnitParameterSensitivity.of(NAME_COMBINED, METADATA_COMBINED, VECTOR_COMBINED, PARAM_SPLIT); assertEquals(test.getMarketDataName(), NAME_COMBINED); assertEquals(test.getParameterCount(), VECTOR_COMBINED.size()); assertEquals(test.getParameterMetadata(), METADATA_COMBINED); assertEquals(test.getParameterMetadata(0), METADATA_COMBINED.get(0)); assertEquals(test.getSensitivity(), VECTOR_COMBINED); assertEquals(test.getParameterSplit(), Optional.of(PARAM_SPLIT)); }
public void test_combine() { UnitParameterSensitivity base1 = UnitParameterSensitivity.of(NAME1, METADATA1, VECTOR1); UnitParameterSensitivity base2 = UnitParameterSensitivity.of(NAME2, METADATA2, VECTOR2); UnitParameterSensitivity test = UnitParameterSensitivity.combine(NAME_COMBINED, base1, base2); assertEquals(test.getMarketDataName(), NAME_COMBINED); assertEquals(test.getParameterCount(), VECTOR_COMBINED.size()); assertEquals(test.getParameterMetadata(), METADATA_COMBINED); assertEquals(test.getParameterMetadata(0), METADATA_COMBINED.get(0)); assertEquals(test.getSensitivity(), VECTOR_COMBINED); assertEquals(test.getParameterSplit(), Optional.of(PARAM_SPLIT)); }
public void test_values() { ConstantNodalCurve test = ConstantNodalCurve.of(METADATA, XVALUE, YVALUE); assertThat(test.yValue(10.2421)).isEqualTo(YVALUE); assertThat(test.yValueParameterSensitivity(10.2421).getMarketDataName()).isEqualTo(CURVE_NAME); assertThat(test.yValueParameterSensitivity(10.2421).getSensitivity()).isEqualTo(DoubleArray.of(1d)); assertThat(test.firstDerivative(10.2421)).isEqualTo(0d); }
@Override public UnitParameterSensitivity yValueParameterSensitivity(double x) { int i = seasonalityIndex(x); double adjustment = seasonality.get(i); double derivativeFactor = 0d; if (adjustmentType.equals(ShiftType.ABSOLUTE)) { derivativeFactor = 1d; } else if (adjustmentType.equals(ShiftType.SCALED)) { derivativeFactor = adjustment; } else { throw new IllegalArgumentException("ShiftType " + adjustmentType + " is not supported for sensitivities"); } // remove the first point from the underlying sensitivity UnitParameterSensitivity u = underlying.yValueParameterSensitivity(x); UnitParameterSensitivity u2 = UnitParameterSensitivity.of( u.getMarketDataName(), u.getParameterMetadata().subList(1, u.getParameterMetadata().size()), u.getSensitivity().subArray(1)); return u2.multipliedBy(derivativeFactor); }
public void test_createParameterSensitivity_unit() { Surface test = new TestingSurface(2d); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getMarketDataName(), SURFACE_NAME); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterCount(), 1); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META)); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d)); }
public void test_createParameterSensitivity_unit() { Curve test = new TestingCurve(2d); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getMarketDataName(), CURVE_NAME); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterCount(), 1); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getParameterMetadata(), ImmutableList.of(PARAM_META)); assertEquals(test.createParameterSensitivity(DoubleArray.of(2d)).getSensitivity(), DoubleArray.of(2d)); }
public void test_lookup() { InterpolatedNodalCurve test = InterpolatedNodalCurve.of(METADATA, XVALUES, YVALUES, INTERPOLATOR); BoundCurveInterpolator interp = INTERPOLATOR.bind(XVALUES, YVALUES, FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR); assertThat(test.yValue(XVALUES.get(0))).isEqualTo(YVALUES.get(0)); assertThat(test.yValue(XVALUES.get(1))).isEqualTo(YVALUES.get(1)); assertThat(test.yValue(XVALUES.get(2))).isEqualTo(YVALUES.get(2)); assertThat(test.yValue(10d)).isEqualTo(interp.interpolate(10d)); assertThat(test.yValueParameterSensitivity(10d).getMarketDataName()).isEqualTo(CURVE_NAME); assertThat(test.yValueParameterSensitivity(10d).getSensitivity()).isEqualTo(interp.parameterSensitivity(10d)); assertThat(test.firstDerivative(10d)).isEqualTo(interp.firstDerivative(10d)); }