public double priceFromImpliedVolsBackwardPDE(final EquityVarianceSwap swap, final double spot, final YieldAndDiscountCurve discountCurve, final AffineDividends dividends,
final SmileSurfaceDataBundle marketVols) {
ArgumentChecker.notNull(swap, "swap");
ArgumentChecker.notNull(discountCurve, "discount curve");
ArgumentChecker.notNull(marketVols, "market volatilities");
final DupireLocalVolatilityCalculator dupire = new DupireLocalVolatilityCalculator();
final PureImpliedVolatilitySurface pureSurf = getPureImpliedVolFromMarket(spot, discountCurve, dividends, marketVols);
final PureLocalVolatilitySurface plv = dupire.getLocalVolatility(pureSurf);
final double t = swap.getTimeToSettlement();
final double[] ev = VAR_SWAP_BKW_PDE_CALCULATOR.expectedVariance(spot, discountCurve, dividends, t, plv);
//TODO while calculating both with and without div correction is go for testing, don't want it for production
final double res = (swap.correctForDividends() ? ev[0] : ev[1]) / t;
return res;