MulticurveInputParallelShift implements Perturbation, ImmutableBean { public static MulticurveInputParallelShift relative(double shiftAmount) { return new MulticurveInputParallelShift(ShiftType.RELATIVE, shiftAmount); } private  MulticurveInputParallelShift(
      ShiftType shiftType,
      double shiftAmount); static MulticurveInputParallelShift absolute(double shiftAmount); static MulticurveInputParallelShift relative(double shiftAmount); @Override CurveInputs apply(Object marketData, MatchDetails matchDetails); @Override Class<CurveInputs> getMarketDataType(); @Override Class<? extends MatchDetails> getMatchDetailsType(); @Override PerturbationTarget getTargetType(); static MulticurveInputParallelShift.Meta meta(); static MulticurveInputParallelShift.Builder builder(); @Override MulticurveInputParallelShift.Meta metaBean(); @Override Property<R> property(String propertyName); @Override Set<String> propertyNames(); Builder toBuilder(); @Override boolean equals(Object obj); @Override int hashCode(); @Override String toString();  }
@Test public void relative() { double shiftAmount = 0.1; MulticurveInputParallelShift shift = MulticurveInputParallelShift.relative(shiftAmount); CurveInputs inputs = new CurveInputs(ImmutableSet.copyOf(CurveTestUtils.NODES), dataBundle()); CurveInputs shiftedInputs = shift.apply(inputs, StandardMatchDetails.multicurve("not used")); CurveTestUtils.checkValues(shiftedInputs.getNodeData(), 0.11, 0.22, 0.67, 0.44); }