@Override public double getParameter(int parameterIndex) { ArgChecker.isTrue(parameterIndex == 0, "single parameter"); return yValue; }
private static void validate(LocalDate[] dates, double[] values) { ArgChecker.isTrue(dates.length == values.length, "Arrays are of different sizes - dates: {}, values: {}", dates.length, values.length); LocalDate maxDate = LocalDate.MIN; for (LocalDate date : dates) { ArgChecker.isTrue(date.isAfter(maxDate), "Dates must be in ascending order but: {} is not after: {}", date, maxDate); maxDate = date; } }
/** * {@inheritDoc} */ @Override public double getInverseCDF(Double p) { ArgChecker.notNull(p, "p"); ArgChecker.isTrue(p >= 0 && p <= 1, "Probability must lie between 0 and 1 (inclusive)"); return _mu - _b * Math.signum(p - 0.5) * Math.log(1 - 2 * Math.abs(p - 0.5)); }
@ImmutableValidator private void validate() { ArgChecker.isTrue( strikePrice < 2, "Strike price must be in decimal form, such as 0.993 for a 0.7% rate, but was: {}", strikePrice); }
/** * Constructor which can take different methods for x0 and x1. * @param method Choose 2 of {@link PiecewisePolynomialInterpolator} */ public BicubicSplineInterpolator(final PiecewisePolynomialInterpolator[] method) { ArgChecker.notNull(method, "method"); ArgChecker.isTrue(method.length == 2, "two methods should be chosen"); _method = new PiecewisePolynomialInterpolator[2]; for (int i = 0; i < 2; ++i) { _method[i] = method[i]; } }
@Override public Double apply(double[] x) { ArgChecker.notNull(x, "x"); int n = x.length; ArgChecker.isTrue(n >= 2, "Need at least two points to calculate the population variance"); return _variance.apply(x) * (n - 1) / n; }
@Override public Double apply(double[] x) { ArgChecker.notNull(x, "x"); ArgChecker.isTrue(x.length >= 2, "Need at least two points to calculate standard deviation"); return Math.sqrt(VARIANCE.apply(x)); }
@Override public ConstantRecoveryRates withParameter(int parameterIndex, double newValue) { ArgChecker.isTrue(parameterIndex == 0, "Only one parameter for ConstantRecoveryRates"); return new ConstantRecoveryRates(legalEntityId, valuationDate, newValue); }
@ImmutableValidator private void validate() { ArgChecker.isTrue(settlementDateOffset.getDays() >= 0, "The settlement date offset must be non-negative"); ArgChecker.isTrue(exCouponPeriod.getDays() <= 0, "The ex-coupon period is measured from the payment date, thus the days must be non-positive"); ArgChecker.isTrue(rateCalculation.getFirstIndexValue().isPresent(), "Rate calculation must specify first index value"); }
@Override protected double doInterpolate(double xValue) { ArgChecker.isTrue(Math.abs(xValue) > SMALL, "magnitude of xValue must not be small"); double resValue = FUNCTION.evaluate(poly, xValue).get(0); return resValue / xValue; }
@ImmutableValidator private void validate() { ArgChecker.isTrue(interpolator.getXExtrapolatorLeft().equals(FLAT), "x extrapolator left must be flat extrapolator"); ArgChecker.isTrue(interpolator.getXInterpolator().equals(CurveInterpolators.LINEAR) || interpolator.getXInterpolator().equals(CurveInterpolators.STEP_UPPER) || interpolator.getXInterpolator().equals(CurveInterpolators.TIME_SQUARE), "x interpolator must be local interpolator"); }
protected void checkCdsBucket(ResolvedCdsTrade trade, List<ResolvedCdsTrade> bucketCds) { Iterator<StandardId> legalEntities = bucketCds.stream().map(t -> t.getProduct().getLegalEntityId()).collect(Collectors.toSet()).iterator(); ArgChecker.isTrue(legalEntities.next().equals(trade.getProduct().getLegalEntityId()), "legal entity must be common"); ArgChecker.isFalse(legalEntities.hasNext(), "legal entity must be common"); Iterator<Currency> currencies = bucketCds.stream().map(t -> t.getProduct().getCurrency()).collect(Collectors.toSet()).iterator(); ArgChecker.isTrue(currencies.next().equals(trade.getProduct().getCurrency()), "currency must be common"); ArgChecker.isFalse(currencies.hasNext(), "currency must be common"); }
@ImmutableValidator private void validate() { LocalDate lastTradeDate = underlyingFuture.getLastTradeDate(); ArgChecker.inOrderOrEqual(expiry.toLocalDate(), lastTradeDate, "expiry.date", "underlying.lastTradeDate"); ArgChecker.isTrue( strikePrice < 2, "Strike price must be in decimal form, such as 0.993 for a 0.7% rate, but was: {}", strikePrice); }
@Override public ConstantNodalCurve withYValues(DoubleArray yValues) { ArgChecker.isTrue(yValues.size() == 1, "Invalid number of parameters, only one allowed"); return new ConstantNodalCurve(metadata, xValue, yValues.get(0)); }
private void validate(ResolvedSwaption swaption, RatesProvider ratesProvider, HullWhiteOneFactorPiecewiseConstantParametersProvider hwProvider) { ArgChecker.isTrue(hwProvider.getValuationDateTime().toLocalDate().equals(ratesProvider.getValuationDate()), "Hull-White model data and rate data should be for the same date"); ArgChecker.isFalse(swaption.getUnderlying().isCrossCurrency(), "underlying swap should be single currency"); ArgChecker.isTrue(swaption.getSwaptionSettlement().getSettlementType().equals(SettlementType.PHYSICAL), "swaption should be physical settlement"); }
@Override public Double apply(final DoubleArray x) { ArgChecker.isTrue(x.size() == 2); return Math.sin((2 * k + 1) * x.get(0)) * Math.cos((2 * k + 1) * x.get(1)); } };
@Override public DoubleArray evaluate(final Double x, final DoubleArray a) { ArgChecker.isTrue(a.size() == getNumberOfParameters(), "four parameters"); final double temp1 = Math.sin(a.get(1) * x + a.get(2)); final double temp2 = Math.cos(a.get(1) * x + a.get(2)); final double[] res = new double[4]; res[0] = temp1; res[2] = a.get(0) * temp2; res[1] = x * res[2]; res[3] = 1.0; return DoubleArray.copyOf(res); }
@Override public double rate(FxIndexObservation observation, Currency baseCurrency) { ArgChecker.isTrue( index.getCurrencyPair().contains(baseCurrency), "Currency {} invalid for FxIndex {}", baseCurrency, index); LocalDate fixingDate = observation.getFixingDate(); double fxIndexRate = !fixingDate.isAfter(getValuationDate()) ? historicRate(observation) : forwardRate(observation); boolean inverse = baseCurrency.equals(index.getCurrencyPair().getCounter()); return (inverse ? 1d / fxIndexRate : fxIndexRate); }