@Override
 public Double visitVarianceSwap(
     final VarianceSwap derivative, final EquityOptionDataBundle market) {
   Validate.notNull(market);
   Validate.notNull(derivative);
   return PRICER.presentValue(derivative, market);
 }
  /**
   * Calculates the sensitivity of the present value (PV) to a change in the funding rate from
   * valuation to settlement. Also know as PVBP and DV01, though note this return per UNIT change in
   * rate. calcPV01 returns per basis point change in rates.
   *
   * <p>
   *
   * <p>Rates enter the pricing of a VarianceSwap in two places: in the discounting and forward
   * projection.
   *
   * <p>The presentValue has been structured such that the form of the PV = Z(t,T) * FwdPrice(t,T)
   * with Z a zero coupon bond, and t and T the valuation and settlement times respectively. The
   * form of our discounting rates is such that Z(t,T) = exp[- R(t,T) * (T-t)], hence dZ/dR =
   * -(T-t)*Z(t,T) and d(PV)/dR = PV * dZ/dR The forward's dependence on the discounting rate is
   * similar to the zero coupon bonds, but of opposite sign, dF/dR = (T-t)*F(t,T)
   *
   * @param swap the VarianceSwap
   * @param market the VarianceSwapDataBundle
   * @param shift Relative size of shift made in centered-finite difference approximation.
   * @return A Double in the currency, deriv.getCurrency(). Currency amount per unit amount change
   *     in discount rate
   */
  @SuppressWarnings({})
  public Double calcDiscountRateSensitivity(
      final VarianceSwap swap, final VarianceSwapDataBundle market, final double shift) {
    Validate.notNull(market);
    Validate.notNull(swap);
    // Sensitivity from the discounting

    final VarianceSwapStaticReplication pricer = new VarianceSwapStaticReplication();
    final double pv = pricer.presentValue(swap, market);
    final double timeToSettlement = swap.getTimeToSettlement();

    // Sensitivity from forward projection
    final double fwdSens = calcForwardSensitivity(swap, market, shift);
    final double fwd = market.getForwardCurve().getForward(timeToSettlement);

    return timeToSettlement * (fwd * fwdSens - pv);
  }